MATLAB:涉及大数的计算

标签 matlab stack-overflow

如何在 MATLAB 中执行涉及大数的计算。举个简单的例子,一个任意精度的计算器会显示 ((1/120)^132)*(370!)/(260!) 大约是 1.56,但是 MATLAB 无法执行这样的计算(power (120,-132)*阶乘(370)/阶乘(260) = NaN).

我也试过下面的方法,但是不行:

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)

最佳答案

如果你只想计算一些大数的阶乘,你可以使用 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)! 的这种方法。您必须进行试验才能看到。

关于MATLAB:涉及大数的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337342/

相关文章:

matlab - 该语句不在任何函数内

c - 处理/避免 C 中的堆栈溢出

java - 与异常处理相关的查询

c++ - 从 Mac OS X 上的堆栈溢出中恢复

matlab - 如何删除所有带有 NaN 的行并检索我刚刚删除的行的索引?

c - 将代码从 MATLAB 移植到 C(OpenCV)

matlab - Matlab 中有空设备吗?

arrays - 形成等价相关类的数组

java - 递归函数中堆栈溢出错误的可预测性

java - 这在 Java 中 - 线程 "main"java.lang.StackOverflowError 中的异常