http://hi.baidu.com/dreamflyman/item/11e920165596280fd0d66d9f
>> syms k;
>> kfac=sym('k!');
>> subs(kfac,k,10)
ans =
3628800
>> subs('x!',10)
ans =
3628800
其實,以上程序還可以求更大的數的階乘,只不過即使算出來為Inf,似乎沒有什么用處。
http://www.zdh1909.com/html/matlab/15832.html
MATLAB做為一個流行的數學計算工具居然不支持32位以上大數的運算,實在是匪夷所思。或許是我對基於矩陣這個概念了解不深,大數運算是MATLAB的弱項,連同數論中專門的大量計算的不支持,使人們無法放棄MATHEMATICA。MATLAB連一個計算階乘的函數都沒有么?對我來說,這毫無疑問是一種遺憾。
但我竟有幸發現了藏在MATLAB里的一個秘密,利用limit('x+5525...6816 mod 105...459',x,0),輕松的計算了4760位數與2332位數的大數的模(不足一秒!!)這說明了什么呢?同樣的方法,我順利的實現了不少計算,下面來看看這些激動人心的嘗試把!
>>limit('x+isprime(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000267)',x,0)
ans =
true
>> limit('x+2^(2^10)+1',x,0)
ans =
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137217
>> limit('x+2^111 mod 123',x,0)
ans =
80
>> limit('x+66!',x,0)
ans =
544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000
200000的階乘約半分鍾計算完畢,但運算結果的輸出幾乎要了Matlab的命
我算領教了Matlab強大的功能,我原以為Mathematic是不可替代的,現在看來,除了顯示方式與計算方式的不同,Matlab始終是完美的。。。
這些只是初步的嘗試,我的解釋是:據說MATLAB的符號運算是基於MAPLE核心的,可能在繼承符號運算的同時也繼承了這些基本的運算能力。這只是可能的解釋,不過,這么看MATLAB就更加可愛了,如果某一天MATLAB能夠調用MATHEMATICA的函數就更可愛了:)
是否這種方法能夠實現全部的MAPLE的基本運算還有待考證,不過由此也看出了MATLAB的博大,它的開放性!
如果只需要大致的值,取log10,
計算出result=log10(1000!)=log10(1)+log10(2)+...log10(1000)
然后求10^result=10^result的小數部分*10^result的整數部分
用x^1000的1000階導數求的
x=[1:1000];
prod(x)
prod
factorial
gamma(n+1) = n! = prod(1:n)