2014-10-19 94 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返回的答案匹配。