我解决不了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