MATLAB中巨大矩阵的决定因素

Rob*_*ter 5 simulation precision matlab scale determinants

从模拟问题来看,我想在MATLAB中计算大约1000x1000的复方形矩阵.由于这些值是贝塞尔函数的值,因此矩阵根本不稀疏.

由于我感兴趣的是关于某些参数(在我的情况下搜索到的本征函数的能量)的行列式的变化,我通过首先搜索所研究范围的重新缩放因子然后计算决定因素来克服该问题,

result(k) = det(pre_factor*Matrix{k});
Run Code Online (Sandbox Code Playgroud)

现在这是一个非常尴尬的解决方案,仅适用于最大500x500的矩阵尺寸.

有人知道这个问题的一个很好的解决方案吗?与Mathematica的接口可能原则上有效,但我对可行性有疑问.先感谢您

罗伯特

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

ln det M = trace ln M
Run Code Online (Sandbox Code Playgroud)

也就是说,当我相对于k得出它时

A = trace(inv(M(k))*dM/dk)
Run Code Online (Sandbox Code Playgroud)

所以我至少改变了关于k的行列式的对数.从问题的物理背景我可以得出A的约束,这最终给了我一个对我的问题有效的解决方法.不幸的是,我不知道这样的解决方法是否可以推广.

小智 5

您应该意识到,当您将矩阵乘以常数k时,您可以将矩阵的行列式缩放k ^ n,其中n是矩阵的维数.因此,对于n = 1000和k = 2,您可以将行列式缩放

>> 2^1000
ans =
     1.07150860718627e+301
Run Code Online (Sandbox Code Playgroud)

这当然是一个巨大的数字,所以你可能会认为它会失败,因为在双精度中,MATLAB只会表示与realmax一样大的浮点数.

>> realmax
ans =
     1.79769313486232e+308
Run Code Online (Sandbox Code Playgroud)

没有必要完成重新计算这个决定因素的所有工作,而不是计算像这样的巨大矩阵的决定因素,无论如何都是一个非常好的问题.


Ale*_* C. 4

如果速度不是问题,您可能需要使用det(e^A) = e^(tr A)并取A一些缩放常数乘以矩阵(以便A - I光谱半径小于一)。

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