对比一下numpy与matlab求解的特征值与特征向量
特征值 λ1=λ2=1 λ3=2
特征值 λ1=-1 λ2=λ3=2
如何求解特征向量
1.这里列举第一个中λ=1时对应的特征向量。
(A-λ*E)*x = 0
得(A-E)*x = 0
对A-E进行 行变换 得
[[-2,1,0],[1,0,1],[0,0,0]]
-2*x1+x2 = 0
x1+x3=0
有3-2=1个自由变量,令x1为自由变量
x = [x1 x2 x3]T = [x1 2*x1 -x1]T = x1*[1 2 -1]T
2.这里列举第二个中λ=2时对应的特征向量。
(A-2E)*x = 0
[[-4,1,1],[0,0,0],[0,0,0]]
-4*x1+x2+x3 = 0
有3-1=2个自由变量,令x2 x3为自由变量
x = [x1 x2 x3]T = [(x2+x3)/4,x2,x3]T = x2*[1/4 1 0]T + x3*[1/4 0 1]T
或者是 令x1 x3为自由变量
x = [x1 x2 x3]T = [x1,4x1-x3,x3]T = x1*[1 4 0]T + x3*[0 -1 1]T
numpy
import numpy as np
A1 = np.array([[-1,1,0],[-4,3,0],[1,0,2]])
eig_val1,eig_vec1 = np.linalg.eig(A1)
print(eig_val1,'\n',eig_vec1)
A2 = np.array([[-2,1,1],[0,2,0],[-4,1,3]])
eig_val2,eig_vec2 = np.linalg.eig(A2)
print(eig_val2,'\n',eig_vec2)
输出:
[2. 1. 1.]
[[ 0. 0.40824829 0.40824829]
[ 0. 0.81649658 0.81649658]
[ 1. -0.40824829 -0.40824829]]
[-1. 2. 2.]
[[-0.70710678 -0.24253563 0.30151134]
[ 0. 0. 0.90453403]
[-0.70710678 -0.9701425 0.30151134]]
matlab
A1 = [-1,1,0;-4,3,0;1,0,2];
A2 = [-2,1,1;0,2,0;-4,1,3];
[eig_val1, eig_vec1] = eig(A1);
[eig_val2, eig_vec2] = eig(A2);
输出:
0 0.4082 0.4082
0 0.8165 0.8165
1.0000 -0.4082 -0.4082
2 0 0
0 1 0
0 0 1
-0.7071 -0.2425 0.3015
0 0 0.9045
-0.7071 -0.9701 0.3015
-1 0 0
0 2 0
0 0 2
对比两者计算结果一样,只不过matlab的特征值是用一个对角矩阵表示