我解決不了200!用Matlab。當我使用factorial
函數時,我只能得到inf
的答案。我怎樣才能找到這個?如何解決200!在Matlab代碼中?
回答
逼近:
你可以找到使用Stirling's approximation的值。對於大型因子很精確。
的forumla是
ln(n!) = nln(n) - n +O(ln(n))
確切的答案:
使用此功能稱爲fact。它可以計算階乘以上170
Example:
fact(double(200))
Answer: 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
的n
階乘由gamma(n+1)
準確給定,其中gamma
是Euler'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
似乎不接受符號輸入。
僅供參考,'factorial(vpa(200))'適用於更新版本。你應該指出'vpa'產生的結果是一個近似值,取決於'digits'的值。 – horchler 2014-10-19 19:41:51
@horchler好主意。謝謝!編輯 – 2014-10-19 23:57:13
在R2012a,後來,使用Symbolic Math toolbox和sym/factorial:
factorial(sym(200))
返回的200的精確值!
788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
這與由Wolfram Alpha返回的答案匹配。
- 1. 如何解決在MATLAB
- 2. 如何解決代碼
- 3. 如何解決此代碼中的ArrayIndexOutOfBoundsException?
- 4. 如何解決此代碼中的ConcurrentModificationException?
- 5. Matlab代碼理解
- 6. 解釋matlab代碼
- 7. 代碼解釋 - Matlab
- 8. 瞭解MATLAB代碼
- 9. 瞭解Matlab代碼
- 10. 如何解決未知代碼中的錯誤代碼如下
- 11. 解決在ODE45 -Matlab
- 12. 如何解決MATLAB中的行列式?
- 13. PHP:如何解決我的preg_replace代碼
- 14. 如何解決playstore錯誤代碼-481
- 15. 如何解決此代碼的閃屏?
- 16. 如何解決這個代碼?
- 17. 如何解決下面的代碼java.lang.StackOverflowError?
- 18. 如何解決CA1502代碼分析
- 19. 如何解決下面的htaccess代碼
- 20. 我如何解決下面的代碼?
- 21. NSTimer如何解決我的代碼
- 22. 如何解決這個代碼
- 23. WordPress的 - 如何解決if/else代碼
- 24. 如何解決Websocket握手代碼?
- 25. 如何解決這個C代碼?
- 26. 如何解決這個PHP代碼
- 27. 如何在MATLAB中向量化代碼
- 28. 在Python中解決PDE源代碼
- 29. django代碼200 httpresponse
- 30. 如何解決「失敗:WebSocket握手過程中的錯誤:意外的響應代碼:200」在春季websockets?
你需要一個精確的答案或近似值嗎? – wvdz 2014-10-19 18:06:39
其實我想比較斯特林的近似值和實際的結果用matlab來分配我的任務 – Fatih 2014-10-19 19:51:03