使用 eig 的特征值

Eigenvalues using eig

我有一个简单的 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 中做什么才能获得第二个结果中的特征值?

结果示例:

谢谢。

至少作为数学构造的特征值是完全定义明确且明确的(除了它们的顺序)。如果特征值不正确,这要么意味着其中一个结果是错误的,要么矩阵条件不佳,以至于特征值求解器并不总是给出正确(准确)的结果。

你的情况一定是你看错了什么:

>> 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

谜团解开了。