MATLAB 如何让输出结果为数值而不是字母

我计算symsapsuxp=factorial(20);forx=20:2a=x+1u=factorial(x-1)s=u/(a+p);end;vpa(s,50)结果却是... 我计算
syms a p s u x
p=factorial(20);
for x = 20:2
a=x+1
u=factorial(x-1)
s=u/(a+p);
end;
vpa(s,50)
结果却是
s=
s

我想输出一个具体的数值,怎么办
展开
 我来答
tianxiawulang
2013-10-17 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2612万
展开全部

存在问题:

1、楼上回答有问题,数值运算无法实现高精度算法(vpa);另一方面,循环体里面对s赋值,和s是否定义成符号变量没有关系,第一行代码完全可以省略。

2、for循环的范围x = 20:2根本就是空的,循环体不可能执行。猜测你是不是想要x=0:-1:2?

3、事实上,p=actorial(20)本身已经超出浮点数的精度,按照现在的写法,后面再怎么算也不可能保证精度了。应该用p=maple('20!'),后面的一个阶乘也应该改。

 

参考代码:

syms a p s u x
p=maple('20!');
for x = 20:-1:2
    a=x+1;
    u=maple([int2str(x-1) '!']);
    s=u/(sym(a)+p);(a+p);
end;
vpa(s,50)

计算结果:

ans = 
.41103176233121648534095773290829713106809404879378e-18

如果用原来的代码计算(仅修改x=20:-1:2),结果是:

ans = 
.41103176233121648440650172397766137533562614150282e-18

虽然都输出了50位小数,但真正的有效数字是不一样的,后面一种不准确。

更多追问追答
追问
谢谢,不过我需要的循环范围是200至2或2000至2,请问怎么改呢?谢谢!

结果应该差不多是:.293166287411……

哦,而且题目有问题,应该在 s=u/(a+p) 后还有一行p=s
追答

把20改成200就是了。另外,原来的代码适合于Maple内核的MATLAB(2008a或之前),改用sym适应性更好一些(在MuPad内核的2012b测试没问题):

p=sym('20!');
for x = 200:-1:2
    a=x+1;
    u=sym([int2str(x-1) '!']);
    s=u/(sym(a)+p);
    p=s;
end;
vpa(s,50)

 

还有,不知道你修改循环范围是否同时修改最前面的p=factorial(20)?

改或者不改,分别得到的结果是:

对于20!:

ans = 
.29390546725462483805798756478052731717855039195997

对于200!:

ans = 
.29215034060291125268807446054787796775350936096005

 

和你说的结果都有差别,再看看是哪里出问题了?

 

顺便说一句,用factorial计算阶乘肯定是不可取的:一是不能保证精度(不过对于20!而言还可以,其有效数字只有15位,还在double的精度范围之内),另一方面,factorial能计算的最大阶乘是170!,一旦计算factorial(171)就超出浮点数的最大表示范围,得到Inf了。

MyAppleKnows
2013-10-17 · TA获得超过695个赞
知道小有建树答主
回答量:448
采纳率:0%
帮助的人:417万
展开全部
你定义的是符号变量,当然输出字母。
把第一行去了,进行数值运算就行了。
追问
去了第一行显示:??? Undefined function or variable 's'.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bishuirutian
2013-10-18
知道答主
回答量:23
采纳率:0%
帮助的人:15.4万
展开全部
改成:
syms a p s u x
p=factorial(20);
for x =1:2
a=x+1
u=factorial(x-1)
s=u/(a+p);
end;
vpa(s,50)
你的“x”需要取恰当的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-18
展开全部
vpa(eval(s),50)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式