我有一个矩阵,它是某个参数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)而不是链接中建议的那样,它似乎不适用于符号矩阵。
有没有办法在链接中实现建议,以找到象征性给出的矩阵特征方程的根?
答案 0 :(得分:1)
可能的方法如下:当且仅当均匀线性(相对于向量A
)系统y
具有非平凡解时{方形矩阵A*y = 0
是单数的{ {1}}(相当于y <> 0
和det(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看来,决定因素实际上是解决这个问题的一种非常好的方法。问题似乎是以稳定的方式解决最终的方程,这将是一个不同的问题。