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)
1
A=matrix([[2,1,0,0],[0,2,1,0],[0,0,2,0],[0,0,0,1]])
2
[J, Q] = A.jordan_form(transformation=True)
3
show(J)
4
show(Q)
 
 



 ( Ref. Computing J^k where J is a Jordan block, http://math1.skku.ac.kr/home/pub/1446/ )

QT = Q.transpose()
1
QT = Q.transpose()
2
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]])
3
A1=Q*JK*QT#위의 수식대로 A^5 계산
4
A2=A^5 #sage를 이용한 A^5 계산, 둘이 같다.
5
print A1
6
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]])
5
1
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]])
2
A1=Q*JK*QT#위의 수식대로 A^9 계산
3
A2=A^9 #sage를 이용한 A^9 계산, 둘이 같다.
4
print A1
5
print A2
 
 



var('k')
1
var('k')
2
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]])
3
AK=Q*JK*QT
4
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]])
4
1
B=matrix([[0,-3,1,2],[-2,1,-1,2],[-2,1,-1,2],[-2,-3,1,4]])
2
[J, Q] = B.jordan_form(transformation=True)
3
show(J)
4
show(Q)
 
 



가 orthogonal matrix가 아니므로 을 구하자.

show(Q.inverse())
1
1
show(Q.inverse())
 
 



var('k')
1
var('k')
2
JK=matrix([[2^k,0,0,0],[0,2^k, 0, 0],[0,0,0,0],[0,0,0,0]])
3
BK=Q*JK*Q.inverse()
4
show(BK)
 
 



show(B^2)
3
1
show(B^2)
2
show(B^3)
3
show(B^8)
 
 



 

Program

power_jordan : 임의의 행렬 A와 자연수 k에 대해 A의 jordan form을 이용해 A^k를 구하는 함수.

1
######## (아래 코드는 김신휘군이 http://matrix.skku.ac.kr/2012-mobile/E-CLA/10-1.html 을 참고하여 스스로 짠 코드입니다) 
2
n = 4
3
########
4
 
5
@interact
6
def power_jordan(A=matrix(QQ,n,n)):
7
    try:
8
        [J, Q] = A.jordan_form(transformation=true)
9
        Jbcount = 0               # jordan block들의 개수를 저장
10
        Jbsize = []               # jordan block의 size를 저장
11
        Jbev = []                 # jordan block에 대응하는 eigenvalue를 저장
12
        m_Jbsize = 0              # jordan block의 size를 세어서 저장
13
    
14
        # (1) A의 jordan block들을 구한다.
15
        for i in range (0, n):               # 0, 1, 2, ... n-1 번째 대각선 항과 그 주변에 대해 탐색, 어떤 jordan block들이 있는지 알아냄.
16
            m_Jbsize = m_Jbsize + 1          #
17
            if i == n-1 or J[i][i+1] == 0:   # J[i][i]가 어떤 jordan block의 가장 오른쪽 아래다.
18
                Jbsize.append(m_Jbsize)
19
                Jbev.append(J[i][i])
 
 



Note

는 sage를 이용해서 직접 구할 수 없다.

var('k')
3
1
var('k')
2
A^k
3
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

 
1
1