我解决不了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. 如何解决代码
- 2. 代码解释 - Matlab
- 3. Matlab代码理解
- 4. 解决在ODE45 -Matlab
- 5. 如何解决MATLAB中的行列式?
- 6. 如何解决此代码的闪屏?
- 7. 如何解决这个PHP代码
- 8. 如何解决Websocket握手代码?
- 9. PHP:如何解决我的preg_replace代码
- 10. 如何解决这个代码
- 11. 如何解决这个C代码?
- 12. 如何解决下面的代码java.lang.StackOverflowError?
- 13. 如何解决下面的htaccess代码
- 14. django代码200 httpresponse
- 15. 在Python中解决PDE源代码
- 16. 我在代码中的错误,我不知道如何解决
- 17. 如何解决Webpack在生产中损坏我的代码?
- 18. 如何在java代码中解决这个java.lang.ExceptionInInitializerError?
- 19. 如何在下面的PostgreSQL查询中解决代码重复?
- 20. 如何解决getJSON方法在我的代码中的错误?
- 21. 需要编写Matlab代码来解决下面的等式
- 22. 如何使用MATLAB解决此问题
- 23. 疑难解答MATLAB迭代代码
- 24. MATLAB解决阵列
- 25. 代码:消息不解决
- 26. VBA代码重复解决
- 27. Python-手工解决代码?
- 28. 的HttpResponse代码不是200
- 29. tmhOAuth错误代码200
- 30. 如何在Matlab中解决内存不足错误?
你需要一个精确的答案或近似值吗? – wvdz 2014-10-19 18:06:39
其实我想比较斯特林的近似值和实际的结果用matlab来分配我的任务 – Fatih 2014-10-19 19:51:03