MATLAB 精度

问题描述 投票:0回答:3

如何在 MATLAB 中实现四倍精度(128 位算术),同时求解矩阵 eigenvalue 问题?

我正在尝试解决不可压缩平面 Couette flow 的线性稳定性分析问题,并且 MATLAB 的默认 64 位精度不足以满足更高的 Reynolds number 值(大约 4000)。

matlab floating-point precision
3个回答
12
投票

您可以使用 MATLAB 中的符号数学工具箱执行变精度算术。如果您使用 34 作为

vpa 函数的有效位数
,您应该获得与 
四倍精度浮点数
几乎相同的精度。

如果您无法访问符号数学工具箱,我会查看来自 Ben BarrowesMathWorks File Exchange 上提交的 “Multiple Precision Toolbox for MATLAB”


8
投票

我在 MATLAB 中有一个通用的精度浮点算术工具箱,不需要符号工具箱。它现在可以在文件交换中使用。举个例子,200 位精度...

>> X = hpf('1.2',200)
X =
    1.2

>> X^723 - 2
ans =
    1770275636625441478440184064843963160282702377364043536065.674784028
335311702907341138106304578079399191891193908698215227428501441099262538
4031886249461115861966367898404170725299823585166135087107488           

如果您希望在使用 HPF 数字时以 200 位精度进行所有算术运算,则只需将其指定为默认值即可。

>> DefaultNumberOfDigits 200
>> hpf('pi')
ans =
    3.141592653589793238462643383279502884197169399375105820974944592307
816406286208998628034825342117067982148086513282306647093844609550582231
7253594081284811174502841027019385211055596446229489549303819           

HPF 在设计上并不是真正的可变精度工具,因为它以固定位数工作。它在处理数万位数字时相当有效。因此,要获得 100 位 exp(pi),大约需要 1/4 秒。

>> timeit(@() exp(hpf('pi',100)))
ans =
   0.2643

还有三角函数。这里有 1000 位 sin(pi)。当然应该为零。

>> tic,sin(hpf('pi',1000)),toc
ans =
    0
Elapsed time is 0.201679 seconds.

2
投票

MATLAB 多精度计算工具箱 具有快速四倍精度模式。

特别是,它能够比 Symbolic Math Toolbox(使用相同的四倍精度)快 x70-x100 倍地计算 100 x 100 矩阵的特征值和向量。

请参阅 MATLAB 中的快速四倍精度计算 页面以了解比较和详细信息。

除了建议的替代方案 - Symbolic Math Toolbox 和 Ben Barrowes 的库都有很大的局限性,请参阅我的答案here

© www.soinside.com 2019 - 2024. All rights reserved.