PDA

查看完整版本 : MATLAB中巨大矩阵的行列式


poster
2019-12-10, 20:48
从模拟问题出发,我想在MATLAB中以1000x1000的数量级计算复杂的平方矩阵。由于这些值是指贝塞尔函数的值,因此矩阵一点也不稀疏。

由于我对行列式相对于某些参数(在我的情况下为搜索到的本征函数的能量)的变化感兴趣,因此我现在通过首先为研究范围搜索一个重缩放因子然后计算行列式来克服了这个问题,

result(k) = det(pre_factor*Matrix{k}); 现在,这是一个非常尴尬的解决方案,仅适用于最大尺寸为500x500的矩阵。

有人知道该问题的解决方案吗?原则上可以与Mathematica进行交互,但是我对可行性感到怀疑。先感谢您

罗伯特

编辑:我没有找到计算问题的简便解决方案,因为这将需要更改为更高的精度。相反,我用了

ln det M = trace ln M 也就是说,当我针对k推导它时

A = trace(inv(M(k))*dM/dk) 因此,至少我有行列式对数相对于k的变化。从问题的物理背景出发,我可以得出对A的约束,最终给我一个解决问题的变通办法。不幸的是,我不知道这种解决方法是否可以推广。



回答:

如果速度不是一个问题,你可能需要使用det(e^A) = e^(tr A)并采取A部分的比例常数倍的矩阵(使A - I有谱半径小于一)。

编辑:在MatLab中,矩阵的对数( logm )是通过三角化计算的。因此,最好计算矩阵的特征值并将它们相乘(或者最好将其对数相加)。您没有指定矩阵是否对称:如果是对称的,则找到特征值比不对称更容易。



更多&回答... (https://stackoverflow.com/questions/4344476)