gpt4 book ai didi

matlab - MATLAB 中巨大矩阵的行列式

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:03 26 4
gpt4 key购买 nike

从一个模拟问题,我想在 MATLAB 中计算 1000x1000 数量级的复杂方阵。由于这些值是指贝塞尔函数的值,因此矩阵一点也不稀疏。

由于我对某些参数的行列式变化感兴趣(在我的例子中是搜索到的特征函数的能量),我现在通过首先搜索研究范围的重新缩放因子然后计算来解决这个问题决定因素,

result(k) = det(pre_factor*Matrix{k});

现在这是一个非常笨拙的解决方案,并且仅适用于最大尺寸为 500x500 的矩阵。

有人知道解决这个问题的好方法吗?与 Mathematica 的接口(interface)原则上可能可行,但我对可行性表示怀疑。提前谢谢你

罗伯特

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

ln det M = trace ln M

也就是说,当我根据 k 推导它时

A = trace(inv(M(k))*dM/dk)

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

最佳答案

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

>> 2^1000
ans =
1.07150860718627e+301

这当然是一个巨大的数字,因此您可能认为它会失败,因为在 double 中,MATLAB 将只表示与 realmax 一样大的 float 。

>> realmax
ans =
1.79769313486232e+308

没有必要重新计算行列式的所有工作,而不是计算像这样的巨大矩阵的行列式无论如何都是一个非常适定的问题。

关于matlab - MATLAB 中巨大矩阵的行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com