如何在MATLAB中执行涉及大数量的计算。举一个简单的例子,一个任意的精度计算器会显示((1/120)^ 132)*(370!)/(260!)大约是1.56,但是MATLAB不能执行这样的计算(power(120,-132)*factorial(370)/factorial(260)
= NaN
) 。MATLAB:涉及大数字的计算
我也曾尝试以下,这不工作:
syms a b c d;
a=120; b=-132; c=370; d=260;
f=sym('power(a,b)*gamma(c+1)/gamma(d+1)')
double(f); % produces error that instructs use of `vpa`
vpa(f) % produces (gamma(c + 1.0)*power(a, b))/gamma(d + 1.0)
甚至达到500的递归限制很可能是坏的程序/算法设计的指示。为什么你的代码首先需要这么深的递归? – Kavka 2012-02-18 04:03:46
我正在计算涉及非常大的因子和幂的数量,并且无法访问符号数学工具箱。数量结果在一个数量级的单位内,但输入表达式的条款要大得多。因此,我使用递归来评估更小步长的阶乘和幂(我想我可以增加每个递归级别的步数,从而相应地减少所需的递归深度)。我也可以使用循环来评估数量,但我发现递归是一个更优雅的解决方案。 – user001 2012-02-18 04:11:42
因式和幂可以很容易地计算而无需递归。如果你正在计算大的因式分解,注意双值的Matlab变量不会精确到无法存储它们。 – Kavka 2012-02-18 04:19:59