7주차 강의

17 days 전, mindo 작성

# 고유값과 고유벡터 구하기 # A의 특성다항식 구하기 A = matrix(QQ, 2, 2, [1, -3, -3, 1]) print A.charpoly() # A의 특성방정식 # A의 고유값은? print solve(x^2-2*x -8==0, x) # 명령어로 고유값 계산하기 print A.eigenvalues() 
       
x^2 - 2*x - 8
[
x == -2,
x == 4
]
[4, -2]
x^2 - 2*x - 8
[
x == -2,
x == 4
]
[4, -2]
# lambda=-2일 때 고유벡터 계산하기위해 특성방정식 풀기 (-2*identity_matrix(2)-A).echelon_form() # 동차이므로 계수행렬만 
       
[ 1 -1]
[ 0  0]
[ 1 -1]
[ 0  0]
# lambda=4일 때 고유벡터 계산하기 위해 특성방정식 풀기 (4*identity_matrix(2)-A).echelon_form() # 동차이므로 계수행렬만 
       
[1 1]
[0 0]
[1 1]
[0 0]
# 명령어로 고유벡터 바로 계산하기 A.eigenvectors_right() 
       
[(4, [
(1, -1)
], 1), (-2, [
(1, 1)
], 1)]
[(4, [
(1, -1)
], 1), (-2, [
(1, 1)
], 1)]
# 3차 정사각행렬의 고유값, 고유벡터 구하기 A = matrix(QQ, 3, 3, [1,2,2,1,2,-1,3,-3,0]) print A.charpoly() 
       
x^3 - 3*x^2 - 9*x + 27
x^3 - 3*x^2 - 9*x + 27
# 고유값 구하기 solve(x^3 - 3*x^2 - 9*x + 27, x) 
       
[x == -3, x == 3]
[x == -3, x == 3]
# 명령어로 고유값 계산하기 A.eigenvalues() # A의 고유값 
       
[-3, 3, 3]
[-3, 3, 3]
# lambda=-3일 때 고유벡터 계산 (-3*identity_matrix(3)-A).echelon_form() 
       
[   1    0  2/3]
[   0    1 -1/3]
[   0    0    0]
[   1    0  2/3]
[   0    1 -1/3]
[   0    0    0]
# lambda=3일 때 고유벡터 계산 (3*identity_matrix(3)-A).echelon_form() 
       
[ 1 -1 -1]
[ 0  0  0]
[ 0  0  0]
[ 1 -1 -1]
[ 0  0  0]
[ 0  0  0]
A=matrix([[1,2,2],[1,2,-1],[3,-3,0]]) print A.eigenvalues() # A의 고유값 print A.eigenvectors_right() # A의 고유벡터 (고윳값, [고유벡터], 중복도) 
       
[-3, 3, 3]
[(-3, [
(1, -1/2, -3/2)
], 1), (3, [
(1, 0, 1),
(0, 1, -1)
], 2)]
[-3, 3, 3]
[(-3, [
(1, -1/2, -3/2)
], 1), (3, [
(1, 0, 1),
(0, 1, -1)
], 2)]
# 예제 5 대칭행렬 A 가 직교대각화가능함을 보이고, A를 직교대각화하는 직교행렬 P와 대각선행렬 D를 구하라 A = matrix([[4,2,2,0],[2,4,2,0],[2,2,4,0],[0,0,0,4]]) # 행렬 입력 A.eigenvectors_right() 
       
[(8, [
(1, 1, 1, 0)
], 1), (4, [
(0, 0, 0, 1)
], 1), (2, [
(1, 0, -1, 0),
(0, 1, -1, 0)
], 2)]
[(8, [
(1, 1, 1, 0)
], 1), (4, [
(0, 0, 0, 1)
], 1), (2, [
(1, 0, -1, 0),
(0, 1, -1, 0)
], 2)]
x1=vector([1,1,1,0]) x2=vector([0,0,0,1]) x3=vector([1,0,-1,0]) x4=vector([0,1,-1,0]) B = matrix([x3,x4]) # x3, x4를 행벡터로 하는 행렬 생성 [G, mu] = B.gram_schmidt() # 행에 대해 직교기저를 찾아준다. B == mu*G print Gy 
       
[   1    0   -1    0]
[-1/2    1 -1/2    0]
[   1    0   -1    0]
[-1/2    1 -1/2    0]
y3 = vector([1,0,-1,0]) y4 = vector([-1/2, 1, -1/2, 0]) C = column_matrix([x1, x2, y3, y4]) P = column_matrix([C.column(i) / C.column(i).norm() for i in range(0, 4)]) print 'P=' print P print print P.transpose()*A*P # 직교 닮음인 대각행렬 
       
P=
[   1/3*sqrt(3)              0    1/2*sqrt(2) -1/3*sqrt(3/2)]
[   1/3*sqrt(3)              0              0  2/3*sqrt(3/2)]
[   1/3*sqrt(3)              0   -1/2*sqrt(2) -1/3*sqrt(3/2)]
[             0              1              0              0]

[8 0 0 0]
[0 4 0 0]
[0 0 2 0]
[0 0 0 2]
P=
[   1/3*sqrt(3)              0    1/2*sqrt(2) -1/3*sqrt(3/2)]
[   1/3*sqrt(3)              0              0  2/3*sqrt(3/2)]
[   1/3*sqrt(3)              0   -1/2*sqrt(2) -1/3*sqrt(3/2)]
[             0              1              0              0]

[8 0 0 0]
[0 4 0 0]
[0 0 2 0]
[0 0 0 2]