给定一个 N x N 的对称矩阵
我知道几种使用 MATLAB 内置函数来解决这个问题的方法: 第一种方法:
C
和一个 N x N 的对角矩阵 I
,找出方程 det(λI-C)=0
的解。换句话说,要找出 C
的(广义)特征值。我知道几种使用 MATLAB 内置函数来解决这个问题的方法: 第一种方法:
function lambdas=eigenValues(C,I)
syms x;
lambdas=sort(roots(double(fliplr(coeffs(det(C-I*x))))));
第二种方法:
[V,D]=eig(C,I);
然而,我需要使用Python。NumPy和SymPy中有类似的函数,但是根据文档(numpy,sympy),它们只接受一个矩阵C作为输入。尽管如此,结果与Matlab产生的结果不同。同时,SymPy生成的符号解决方案也没有帮助。也许我做错了什么?如何找到解决方案?
示例
- MATLAB:
%输入
I =
2 0 0
0 6 0
0 0 5
C =
4 7 0
7 8 -4
0 -4 1
[v,d]=eig(C,I)
%RESULT
v =
-0.3558 -0.3109 -0.5261
0.2778 0.1344 -0.2673
0.2383 -0.3737 0.0598
d =
-0.7327 0 0
0 0.4876 0
0 0 3.7784
- Python 3.5:
%输入
I=np.matrix([[2,0,0],
[0,6,0],
[0,0,5]])
C=np.matrix([[4,7,0],[7,8,-4],[0,-4,1]])
np.linalg.eigh(C)
%RESULT
(array([-3., 1.91723747, 14.08276253]),
matrix(
[[-0.57735027, 0.60061066, -0.55311256],
[ 0.57735027, -0.1787042 , -0.79670037],
[ 0.57735027, 0.77931486, 0.24358781]]))
I
表示对角矩阵而非单位矩阵是非常糟糕的符号表示法。 - Rodrigo de Azevedo