mrY*_*mrY 7 matlab matrix linear-algebra symbolic-math numerical-stability
我一直在试图计算只有三个不同的项目,组成一个36分36矩阵的Jordan标准型1,1/2和0.矩阵是概率转移矩阵,因此,给定这些条目,矩阵显然是稀疏的.
我一直遇到的问题如下:每当我尝试计算时
[V, J] = jordan(A),
Run Code Online (Sandbox Code Playgroud)
要么
[V, J] = jordan(sym(A)),
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
在MuPAD命令中使用mupadmex 错误时出错:相似度矩阵太大.sym/mupadmexnout出错(第1546行)
out = mupadmex(fcn,args {:});sym/jordan中的错误(第32行)
[Vsym,Jsym] = mupadmexnout('symobj :: jordan',A,'All');
我在MATLAB帮助中读到,Jordan形式的计算对扰动非常敏感.但是,我认为我的计算不是问题,因为矩阵的所有条目都是整数或整数比.
我的问题如下:
1)如何解释收到的错误输出?
关键是Matlab使用符号计算来评估Jordan形式.这就是它要求你提供有理数的原因.当我们考虑数值编程时,36乘36的矩阵非常小,但是(我不确定)这个大小对于符号编程来说可能很大.
2)为什么matlab没有工具箱来评估Jordan格式的数字?
关键是这种评估在数值上是不稳定的.请参阅Wikipedia中的示例.基本上,具有多个特征值(共享相同块)的矩阵的任何扰动都可以使这些特征值在所需Jordan形式的分离块中变得不同.
3)如果错误不可寻址,是否有替代方法(Matlab中的函数)我可以尝试计算Jordan形式?
我认为Matlab没有数值函数来解决这个任务.
我不确切地知道你正在看什么样的应用......话虽如此,一个(非常常见的)选项是评估Schur形式(两个变换都在上三角分解中转换矩阵),这在数值上是稳定的.它使用单一相似变换.Matlab的schur功能实现了这一点.
另请参阅此Math.StackExchange问题:Jordan和Schur分解之间有什么区别?