如何在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