2014-10-19 103 views
2

我解決不了200!用Matlab。當我使用factorial函數時,我只能得到inf的答案。我怎樣才能找到這個?如何解決200!在Matlab代碼中?

+1

你需要一個精確的答案或近似值嗎? – wvdz 2014-10-19 18:06:39

+2

其實我想比較斯特林的近似值和實際的結果用matlab來分配我的任務 – Fatih 2014-10-19 19:51:03

回答

2

逼近:

你可以找到使用Stirling's approximation的值。對於大型因子很精確。

的forumla是

ln(n!) = nln(n) - n +O(ln(n)) 

確切的答案:

使用此功能稱爲fact。它可以計算階乘以上170

Example: 

fact(double(200)) 

Answer: 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000 
+1

看看這個'fact'函數的代碼,它好像只不過是'sym/factorial'。由於代碼似乎是R2012a之前的版本,因此我猜測在明確暴露「sym/factorial」之前,使用稍微尷尬的方法來評估符號因子。 – horchler 2014-10-20 02:33:46

+0

您應該鏈接到實際的公式,而不是關係:http://upload.wikimedia.org/math/5/0/0/500c098e6169dfceb28c1a5a89613ded.png – rayryeng 2014-11-16 16:51:08

3

n階乘由gamma(n+1)準確給定,其中gammaEuler's gamma function。問題是這種情況下的實際結果超過realmax,所以gamma(201)輸出inf。爲了解決這個問題,使用可變精度算術(功能vpa,這是符號工具箱的一部分):

>> gamma(vpa(200)+1) 
ans = 
7.8865786736479050355236321393219*10^374 

此計算與d十進制數字的精確度,其中d由函數digits(設置結果感謝@horchler提醒我)。默認情況下,這是32位數字。爲了增加數量,

>> digits(60); 
>> gamma(vpa(200, 20)+1) 
ans = 
7.88657867364790503552363213932185062295135977687173263294743*10^374 

或者,你可以使用vpa用階乘的定義:

>> prod(vpa(1:200, 50)) 
ans = 
7.8865786736479050355236321393219*10^374 

第三種可能性是直接使用factorial(vpa(200))。但是,這可能不適用於舊的Matlab版本,如R2010b,其中factorial似乎不接受符號輸入。

+1

僅供參考,'factorial(vpa(200))'適用於更新版本。你應該指出'vpa'產生的結果是一個近似值,取決於'digits'的值。 – horchler 2014-10-19 19:41:51

+0

@horchler好主意。謝謝!編輯 – 2014-10-19 23:57:13

4

在R2012a,後來,使用Symbolic Math toolboxsym/factorial

factorial(sym(200)) 

返回的200的精確值!

788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000 

這與由Wolfram Alpha返回的答案匹配。