MT 김신휘 Computing A^k using Jordan Canonical Form
MT Page 334 Problem 9.4.(1)
Compute , for
(Citation : Jin Ho Kwak and Sungpyo Hong, 1997, Linear Algebra 334p)
Sol)
[J, Q] = A.jordan_form(transformation=True)
A=matrix([[2,1,0,0],[0,2,1,0],[0,0,2,0],[0,0,0,1]])
[J, Q] = A.jordan_form(transformation=True)
show(J)
show(Q)
( Ref. Computing J^k where J is a Jordan block, http://math1.skku.ac.kr/home/pub/1446/ )
QT = Q.transpose()
QT = Q.transpose()
JK=matrix([[1,0,0,0],[0,2^5, 5*2^4, 5*4/2*2^3],[0,0,2^5,5*2^4],[0,0,0,2^5]])
A1=Q*JK*QT#위의 수식대로 A^5 계산
A2=A^5 #sage를 이용한 A^5 계산, 둘이 같다.
print A1
print A2
JK=matrix([[1,0,0,0],[0,2^9, 9*2^8, 9*8/2*2^7],[0,0,2^9,9*2^8],[0,0,0,2^9]])
JK=matrix([[1,0,0,0],[0,2^9, 9*2^8, 9*8/2*2^7],[0,0,2^9,9*2^8],[0,0,0,2^9]])
A1=Q*JK*QT#위의 수식대로 A^9 계산
A2=A^9 #sage를 이용한 A^9 계산, 둘이 같다.
print A1
print A2
var('k')
var('k')
JK=matrix([[1,0,0,0],[0,2^k, k*2^(k-1), k*(k-1)/2*2^(k-1)],[0,0,2^k,k*2^(k-1)],[0,0,0,2^k]])
AK=Q*JK*QT
show(AK)
(Citation : Jin Ho Kwak and Sungpyo Hong, 1997, Linear Algebra 333-334p)
MT Page 334 Problem 9.4.(2)
Compute for
(Citation : Jin Ho Kwak and Sungpyo Hong, 1997, Linear Algebra 334p)
Sol)
(1)과 유사하게 풀 수 있다.
B=matrix([[0,-3,1,2],[-2,1,-1,2],[-2,1,-1,2],[-2,-3,1,4]])
B=matrix([[0,-3,1,2],[-2,1,-1,2],[-2,1,-1,2],[-2,-3,1,4]])
[J, Q] = B.jordan_form(transformation=True)
show(J)
show(Q)
가 orthogonal matrix가 아니므로
을 구하자.
show(Q.inverse())
show(Q.inverse())
var('k')
var('k')
JK=matrix([[2^k,0,0,0],[0,2^k, 0, 0],[0,0,0,0],[0,0,0,0]])
BK=Q*JK*Q.inverse()
show(BK)
show(B^2)
show(B^2)
show(B^3)
show(B^8)
Program
power_jordan : 임의의 행렬 A와 자연수 k에 대해 A의 jordan form을 이용해 A^k를 구하는 함수.
######## (아래 코드는 김신휘군이 http://matrix.skku.ac.kr/2012-mobile/E-CLA/10-1.html 을 참고하여 스스로 짠 코드입니다)
n = 4
########
def power_jordan(A=matrix(QQ,n,n)):
try:
[J, Q] = A.jordan_form(transformation=true)
Jbcount = 0 # jordan block들의 개수를 저장
Jbsize = [] # jordan block의 size를 저장
Jbev = [] # jordan block에 대응하는 eigenvalue를 저장
m_Jbsize = 0 # jordan block의 size를 세어서 저장
# (1) A의 jordan block들을 구한다.
for i in range (0, n): # 0, 1, 2, ... n-1 번째 대각선 항과 그 주변에 대해 탐색, 어떤 jordan block들이 있는지 알아냄.
m_Jbsize = m_Jbsize + 1 #
if i == n-1 or J[i][i+1] == 0: # J[i][i]가 어떤 jordan block의 가장 오른쪽 아래다.
Jbsize.append(m_Jbsize)
Jbev.append(J[i][i])
Note
는 sage를 이용해서 직접 구할 수 없다.
var('k')
var('k')
A^k
B^k
Reference
이상구, 10.1 점도표를 이용한 jordan 표준형 구하기 : http://matrix.skku.ac.kr/2012-mobile/E-CLA/10-1.html, 2013.11.25
Jin Ho Kwak and Sungpyo Hong, 1997, Linear Algebra, 333-334p
MT 김신휘 Computing J^k where J is a Jordan block : http://math1.skku.ac.kr/home/pub/1446/
SKKU Matrix Theory Contents