主题:请问MATLAB中,大于170!不能输出怎么办?
tzuhall
[专家分:0] 发布于 2008-05-16 22:48:00
请问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个回复)
沙发
yafei75 [专家分:120] 发布于 2008-05-17 01:33:00
当m=171时,他的阶乘超出10的308次方了,这样只有改算法了。
板凳
tzuhall [专家分:0] 发布于 2008-05-17 03:04:00
怎么改?
LS帮忙改下啊
3 楼
tzuhall [专家分:0] 发布于 2008-05-17 04:17:00
怎么改?
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 楼
yafei75 [专家分:120] 发布于 2008-05-18 23:14:00
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
自己证明过的,呵呵!其实你不用说,我第一次就看出你是要干嘛的了。
本算法主要是尽量减少所要乘的个数,采取一乘一除。
我来回复