方法1,调用可以计算阶乘的几个函数factorial(阶乘),gamma(伽马函数),或者prod(连乘)。都是一句就能算出这个问题的答案。
sum(factorial(1:20));或者sum(gamma(2:21));第三个要多写一两句。
方法2自己写个算阶乘的子函数然后用for循环调用一下。
方法3,规规矩矩写,这个问题很简单弄个矩阵把1到20的阶乘存起来sum一下
fac=ones(1,20);
for n=2:20
fac(n)=fac(n-1)n;
end
ans=sum(fac);
楼上 @真greatdju 提供的做法
sum(cumprod(sym(1:100)))是可行的,但需要2013b以上的版本(符号运算的cumsum和cumprod函数在该版本引入)。
对于更早的版本,可以使用求符号和的函数symsum来做:
>> symsum(sym('n!'),1,100)ans =
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313
MATLAB如何计算双阶乘然后求和,首先建立双阶乘函数dfac( x),然后用循环语句求和。
function y= dfac( x)
%双阶乘函数 m!!
y=1;
for i=x:-2:1
y=yi;
end
end
循环语句求和格式
for x=1:5
y(x)=dfac( x);
end
sum(y)
a=input('请输入一个数:');
while a<0 || fix(a)~=a
disp('您输入的数不是正整数')
a=input('请重新输入:');
end
a
disp('a!=')
disp(factorial(a))
(运行后:)
请输入一个数:-20
您输入的数不是正整数
请重新输入:-12
您输入的数不是正整数
请重新输入:23
您输入的数不是正整数
请重新输入:-43
您输入的数不是正整数
请重新输入:12
a =
12
a!=
479001600
运用matlab求满足n的阶乘大于10100的n的最小值,该问题可以考虑来解决。
解决方法:
1、软件自带的阶乘函数factorial(),计算n的阶乘
2、确定while循环语句的条件,n!<10100
3、计数累加,n=n+1
4、使用while循环语句,逐步计算n!
计算结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)