在MATLAB中找到矩阵函数的特征方程的根

时间:2017-03-24 10:01:28

标签: matlab

我有一个矩阵,它是某个参数A = A(x)的函数。我想找到这个矩阵变成奇异的点x。示例(虽然我有一个大矩阵):

syms x
A=[x sin(x); cos(x^2) 2.5];

到目前为止,我一直在象征性地计算矩阵的行列式,然后使用fzero或newtzero来找到该特征方程的根。即。

detA = det(A);
fzero(matlabFunction(detA),startingGuess)

然后我发现了这个:How to find out if a matrix is singular?,主张在任何情况下都不使用行列式。

实际上,符号行列式计算速度非常慢。但是我尝试使用rank(A)而不是链接中建议的那样,它似乎不适用于符号矩阵。

有没有办法在链接中实现建议,以找到象征性给出的矩阵特征方程的根?

2 个答案:

答案 0 :(得分:1)

可能的方法如下:当且仅当均匀线性(相对于向量A)系统y具有非平凡解时{方形矩阵A*y = 0是单数的{ {1}}(相当于y <> 0det(A) = 0等等。所以或多或少的标准,正如我从过去回忆的那样,计算这些点x的技术是解决非线性系统< / p>

rank(A) = 0

通过这种方式,您可以计算点A(x)*y = 0 (1) ||y|| = 1 (2) 和向量x*,使y*为单数,A(x*)是与{{1}的零特征值对应的特征向量}}

如果我没记错的话,你也可以解决一些更容易的系统

y*

其中A(x*)是“几乎”任何非零随机向量(将其标准化为1以避免数值问题)。

事实上,关于这个主题有一个巨大的参考书目 - 你可以寻找马鞍节点分岔计算(如果A(x)*y = 0 (1) <y,c> = 1 (2a) 是矢量场的雅可比行列式),或者是“距离不稳定”

答案 1 :(得分:0)

discussion with Ander Biguri看来,决定因素实际上是解决这个问题的一种非常好的方法。问题似乎是以稳定的方式解决最终的方程,这将是一个不同的问题。