使用 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
谜团解开了。
我有一个简单的 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
谜团解开了。