特征多项式的根和特征值不相同
The roots of the characteristic polynomial and the eigenvalues are not the same
这是矩阵B
B = [1 2 0 ; 2 4 6 ; 0 6 5]
eig(B)
的结果是:
{-2.2240, 1.5109, 10.7131}
而B
被this link的特征多项式为
syms x
polyB = charpoly(B,x)
x^3 - 10*x^2 - 11*x + 36
但是solve(polyB)
的答案是
133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) + ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3) + 10/3
(3^(1/2)*(133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3))*i)/2 - 133/(18*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3)/2 + 10/3
10/3 - 133/(18*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3)/2 - (3^(1/2)*(133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3))*i)/2
我不知道它是什么,但我希望它是 B
的特征值。有什么问题?
我不明白你为什么添加 x
和符号数学,它们不是你任务所必需的。
B = [1 2 0 ; 2 4 6 ; 0 6 5]
cp=charpoly(B)
eig2=roots(cp)
returns:
eig2 =
10.7131
-2.2240
1.5109
但是,如果出于某种原因你坚持使用符号(你不应该用于数字任务),你可以这样做
double(solve(polyB))
ans =
10.7131 + 0.0000i
-2.2240 - 0.0000i
1.5109 - 0.0000i
(注意虚部为零)
由于我这台机器没有MATLAB,所以我会用SymPy代替:
>>> from sympy import *
>>> B = Matrix([[1, 2, 0],
[2, 4, 6],
[0, 6, 5]])
计算特征多项式及其根:
>>> s = Symbol('s')
>>> p = (s*eye(3) - B).det()
>>> p
s**3 - 10*s**2 - 11*s + 36
>>> roots = solve(p,s)
计算三个根的floating-point近似值:
>>> [ r.evalf() for r in roots ]
[1.51092975992931 - 0.e-22*I, -2.22404024437578 + 0.e-22*I, 10.7131104844465 - 0.e-20*I]
因为B
是对称的,它的特征值一定是实数。请注意,根的 floating-point 近似值的虚部确实等于零。
在 LaTeX 中打印,根的精确值为:
请注意,有些词根比其他词根 "longer",即它们需要更多的符号。但是,它们 完全 。使用floating-point算术,所有根具有相同的"size",但它们是近似值。
这是矩阵B
B = [1 2 0 ; 2 4 6 ; 0 6 5]
eig(B)
的结果是:
{-2.2240, 1.5109, 10.7131}
而B
被this link的特征多项式为
syms x
polyB = charpoly(B,x)
x^3 - 10*x^2 - 11*x + 36
但是solve(polyB)
的答案是
133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) + ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3) + 10/3
(3^(1/2)*(133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3))*i)/2 - 133/(18*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3)/2 + 10/3
10/3 - 133/(18*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3)/2 - (3^(1/2)*(133/(9*(3^(1/2)*5492^(1/2)*(i/3) + 1009/27)^(1/3)) - ((3^(1/2)*5492^(1/2)*i)/3 + 1009/27)^(1/3))*i)/2
我不知道它是什么,但我希望它是 B
的特征值。有什么问题?
我不明白你为什么添加 x
和符号数学,它们不是你任务所必需的。
B = [1 2 0 ; 2 4 6 ; 0 6 5]
cp=charpoly(B)
eig2=roots(cp)
returns:
eig2 =
10.7131
-2.2240
1.5109
但是,如果出于某种原因你坚持使用符号(你不应该用于数字任务),你可以这样做
double(solve(polyB))
ans =
10.7131 + 0.0000i
-2.2240 - 0.0000i
1.5109 - 0.0000i
(注意虚部为零)
由于我这台机器没有MATLAB,所以我会用SymPy代替:
>>> from sympy import *
>>> B = Matrix([[1, 2, 0],
[2, 4, 6],
[0, 6, 5]])
计算特征多项式及其根:
>>> s = Symbol('s')
>>> p = (s*eye(3) - B).det()
>>> p
s**3 - 10*s**2 - 11*s + 36
>>> roots = solve(p,s)
计算三个根的floating-point近似值:
>>> [ r.evalf() for r in roots ]
[1.51092975992931 - 0.e-22*I, -2.22404024437578 + 0.e-22*I, 10.7131104844465 - 0.e-20*I]
因为B
是对称的,它的特征值一定是实数。请注意,根的 floating-point 近似值的虚部确实等于零。
在 LaTeX 中打印,根的精确值为:
请注意,有些词根比其他词根 "longer",即它们需要更多的符号。但是,它们 完全 。使用floating-point算术,所有根具有相同的"size",但它们是近似值。