回 帖 发 新 帖 刷新版面

主题:请问MATLAB中,大于170!不能输出怎么办?

请问MATLAB中,大于170!不能输出怎么办?
我定义了一个C(m,n)的函数
--------------------------
function c=test(m,n)
x=1;
y=1;
z=1;
for i=1:m
  x=x*i;
end
for j=1:n
    y=y*j;
end
for k=1:(m-n)
    z=z*k;
end
c=x/(y*z);
------------------------
可是输入a=test(245,0)结果却是
a=Nan
即不可测量。。。。
这个问题如何解决?

回复列表 (共4个回复)

沙发


当m=171时,他的阶乘超出10的308次方了,这样只有改算法了。

板凳

怎么改?
LS帮忙改下啊

3 楼


怎么改?
LS帮忙改下啊
就是在一个246×246的矩阵输入
-----------------------------------------
C(0,0)  C(1,1) C(2,2)..........C(245,245)
C(1,0)  C(2,1) C(3,2)..................0
C(2,0)  C(3,1) C(4,2)...................
C(3,0)  C(4,1)..........................
C(4,0)..................................
........................................
C(244,0)
C(245,0) ..............................0
-----------------------------------------
其中C(M,N)=M!/[N!*(M-N)!]

4 楼

function c=test(m,n)
if(n>ceil(m/2))
    n=m-n;
end
c=1;
k=m-n;
if(n>k)
    mm=(n+1):m;
    nn=1:k;
else
    mm=(k+1):m;
    nn=1:n;
end
for in=1:length(nn);
    c=c*mm(in)/nn(in);
end
for im=(in+1):length(m);
    c=c*mm(im);
end
  

自己证明过的,呵呵!其实你不用说,我第一次就看出你是要干嘛的了。
本算法主要是尽量减少所要乘的个数,采取一乘一除。

我来回复

您尚未登录,请登录后再回复。点此登录或注册