我有一个简单的2x2矩阵:
A = [-2.0883*10^7 , 1.3975*10^7 ; 1.3975*10^7 , -9.3514*10^6]
通过使用eig(A),我得到了以下特征值:
(-3.0235*10^7, -9.3132*10^-10)
但是,通过使用网络上的其他一些计算器,我得到了以下答案:
(-3.0235*10^7 , 507.32)
我应该在Matlab中做什么来获得第二个结果中的特征值?
结果示例:
谢谢。
答案 0 :(得分:2)
至少作为数学构造的特征值是完全定义明确的(不含顺序)。如果特征值不正确,则意味着结果之一是错误的,或者矩阵条件不佳,特征值求解器并不总是给出正确的(准确的)结果。
在您的情况下,您可能误读了一些内容:
>> A = [-2.0883*10^7 , 1.3975*10^7 ; 1.3975*10^7 , -9.3514*10^6];
>> eigvals = eig(A);
>> eigvals(1)
ans =
-3.0235e+07
>> eigvals(2)
ans =
507.3209
也就是说,第二组特征值是正确的。
关于您的更新:
对于2x2矩阵,可以轻松地在纸上计算特征值。这两个特征值恰好是
e1 = trace(A)/2 + sqrt(trace(A)^2/4 - det(A))
e2 = trace(A)/2 - sqrt(trace(A)^2/4 - det(A))
如果求解二阶特征多项式。为您的确切数字:
>> tr = A(1,1) + A(2,2); % computed by hand to avoid magic
>> d = A(1,1)*A(2,2) - A(1,2)*A(2,1); % same
>> tr/2 + sqrt(tr^2/4 - d)
ans =
507.3209
>> tr/2 - sqrt(tr^2/4 - d)
ans =
-3.0235e+07
但是,更新后的代码表明您输入的内容与示例不完全相同;您的真实输入来自较早的计算,并且上面的A
只是矩阵中浮点数的截断形式。现在,看看特征值中出现的两个术语:
>> format long
>> tr/2
ans =
-15117200
>> sqrt(tr^2/4 - d)
ans =
1.511770732088699e+07
如您所见,一个术语是-15117200(精确),另一个是15117707.32088699(近似;来自平方根)。现在,这些数字的数量巨大,并且几乎相同(符号除外)。这意味着它们的总和将被抵消,并且这种抵消对变量的特定值非常敏感。
换句话说,由于某些基本的对称性,特定的G2{1}
包含这样的值,使得上述两个术语几乎完全抵消了 。相信MATLAB在告诉您什么,您的特征值就可以了。但是,当您将矩阵的截断版本复制到单独的特征值计算中时(就像我在上面所做的那样),由于抵消只是部分的,您会得到错误的结果。
您在注释中给出了矩阵的更具体值:
>> B = [-2.088317534729117e+07, 1.397451196178947e+07 ; 1.397451196178947e+07 , -9.351402807405353e+06];
>> tr = trace(B);
>> d = det(B);
>> tr/2
ans =
-1.511728907734826e+07
>> sqrt(tr^2/4 - d)
ans =
1.511728907734826e+07
神秘感解决了。