如何在MATLAB中执行涉及大数的计算。举一个简单的例子,任意精度计算器会显示((1/120)^ 132)*(370!)/(260!)约为1.56,但MATLAB无法执行这样的计算({{1} } = power(120,-132)*factorial(370)/factorial(260)
)。
我也尝试过以下方法,但不起作用:
NaN
答案 0 :(得分:4)
如果您只想计算某些大数的阶乘,可以使用Java任意精度工具,如下所示:
result = java.math.BigDecimal(1);
for ix = 1:300
result = result.multiply(java.math.BigDecimal(ix));
end
disp(result)
306057512216440636035370461297268629388588804173576999416776741259476533176716867465515291422477573349939147888701726368864263907759003154226842927906974559841225476930271954604008012215776252176854255965356903506788725264321896264299365204576448830388909753943489625436053225980776521270822437639449120128678675368305712293681943649956460498166450227716500185176546469340112226034729724066333258583506870150169794168850353752137554910289126407157154830282284937952636580145235233156936482233436799254594095276820608062232812387383880817049600000000000000000000000000000000000000000000000000000000000000000000000000
在这种情况下,值result
是一个java对象。您可以在此处查看可用的方法:http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html
我仍然不确定我会信任(1e6)!
的这种方法。你必须试验并看看。
答案 1 :(得分:3)
根据您尝试做的事情,您可以在日志空间中评估您感兴趣的表达式:
log_factorial = sum(log(1:300));
答案 2 :(得分:3)
在以数字方式计算之前,您可以使用Stirling's approximation逼近大型因子并简化表达式。
答案 3 :(得分:1)
这将起作用:
vpa('120^-132*370!/260!')
结果是
1.5625098001612564605522837520443