【发布时间】:2011-05-19 16:07:15
【问题描述】:
从一个模拟问题,我想在 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 的约束,这最终给了我一个对我的问题有效的解决方法。不幸的是,我不知道这样的解决方法是否可以推广。
【问题讨论】:
-
您的矩阵结构有什么特别的地方可能会有所帮助吗?你提到 k = {A1, B1; A2, B2} 其中 A1, A2 是对称的。还要别的吗? A1 和 A2 是否通勤,或者是否有任何子矩阵很容易反转?
-
@Jonathan Dursi:感谢您提出深思熟虑的问题。但我担心,总的来说,我看不出为什么 A1 和 A2 应该通勤,以及为什么任何子矩阵都应该很容易可逆。此外,由于有趣的情况接近 det(M) = 0,因此反演效果不佳。
-
单数矩阵不一定能说明子矩阵的任何有趣之处;如果 B1 和 B2 为零,即使 A1 和 A2 的行为非常好,M 也不会可逆。
-
@Jonathan Dursi:我想,我明白了。由于所有涉及的矩阵都已完全填充,因此没有理由说明反演在计算上应该很容易。
标签: matlab simulation scale precision determinants