计算符号矩阵特征方程的根

时间:2017-04-17 08:03:20

标签: matlab symbolic-math

我有3个数据矩阵A,B,C(全3x3),我使用下面的代码来计算D(p)的根X = 0

syms p
D = A + B*p + C*(p^2)
solP = double(solve(det(D)))

由此,我获得了solP的6个值。但是当我尝试将它替换回符号矩阵D时,如下所示,我得到det(D)的非零值

for i = 1:6
  p = solP(i)
  det(double(subs(D))  % Should be zero always as we are substituting roots
end

请帮助我理解这种行为。

编辑:: 示例:

A =

   1.0e+11 *

    4.8976    7.0936    6.7970
    4.4559    7.5469    6.5510
    6.4631    2.7603    1.6261

B =

   1.0e+11 *

    3.9223    7.0605    0.4617
    6.5548    0.3183    0.9713
    1.7119    2.7692    8.2346

C =

   1.0e+11 *

    6.9483    0.3445    7.6552
    3.1710    4.3874    7.9520
    9.5022    3.8156    1.8687

solP =

    0.1061 + 0.0000i
    1.5311 + 0.0000i
   -0.3432 + 0.9356i
   -0.3432 - 0.9356i
    0.4228 - 0.5465i
    0.4228 + 0.5465i

det(D) =

   2.2143e+19
  -5.4911e+20
  -8.6415e+19 + 4.5024e+19i
  -8.6415e+19 - 4.5024e+19i
  -1.4547e+19 + 9.1135e+19i
  -1.4547e+19 - 9.1135e+19i

1 个答案:

答案 0 :(得分:1)

问题与relative accuracy of floating point values有关,通常为1e-16

输入矩阵的顺序为1e+11 - 1e+12,解决方案的顺序为1e+0,因此D的元素也是1e+11的顺序1}} - 1e+12。要计算determinant of a 3x3 matrix,应该使用三个矩阵元素的乘积并加/减它们。因此,每个字词的大小为1e+33 - 1e+36。如果您减去这样的值以获得行列式,则预期的准确度大约为1e+17 - 1e+20。实际上,这与您获得的值相对应。鉴于相对准确性,您无法进一步达到零。

请注意,如果您缩放输入矩阵,即将其除以1e+11,解决方案确实相同,但决定因素可能更符合您的预期。