如何更改除“vpa”以外的 Matlab 默认数据精度?

How to change Matlab default data precision other than 'vpa'?

提问人:SDADEEC 提问时间:8/15/2022 更新时间:8/15/2022 访问量:104

问:

我想对两个大矩阵 A \ b(例如,1000×1000 和 1000×1)执行矩阵除法。我总是从此操作中收到警告:警告:矩阵接近奇异或缩放不良。结果可能不准确。RCOND = XXX

我认为问题主要是因为 A 和 b 中的某些元素有超过 16 位数字。

我尝试使用“vpa”来提高精度,但是对于转换大型矩阵来说,它非常慢,并且数据类型不再是“double”,这会导致我的算法稍后出现一些问题。

您能否告诉我除了使用 vpa 之外,还有其他方法可以更改 Matlab 默认数据精度吗?

(P.S. 您可能会建议我使用 Levenberg-Marquardt 算法来解决这个问题,但我发现只有非常大的阻尼参数才能消除此警告,这在我的情况下不是很理想)

MATLAB 精确 符号数学

评论

0赞 Luis Mendo 8/15/2022
我不认为有比 / 更多的“原生”选项,与 / 相比,后者确实会减慢计算速度。你可以试试这个外部工具箱,但它也可能会很慢:mathworks.com/matlabcentral/fileexchange/......doublevpasymbolicdouble
1赞 James Tursa 8/16/2022
增加使用的数字数并不能解决您的问题。最根本的问题是,你的方程几乎是依赖的......你有一个病态的问题。您需要先解决该问题。你试图做的等同于试图找到两条非常接近平行线的交点。从数字上讲,你可能会得到一个答案,但答案是不可信的。你需要重新审视你是如何解决问题的,并解决为什么你的方程之间存在依赖关系的问题。
1赞 Hoki 8/16/2022
“缩放不良”矩阵与位数无关。可能导致问题的可能是矩阵中的值过于分离(例如,您的值非常接近于零,而值非常接近 a 可以容纳的最大值)。double

答:

0赞 Andy 8/15/2022 #1

Matlab矩阵中没有“太多数字”这样的东西。它们存储为 8 字节双精度。你对这个问题的假设是错误的。