24小时热门版块排行榜    

查看: 1054  |  回复: 3

herozhu

木虫 (正式写手)

[求助] 用symsum计算发散级数和无法转换为数值型

如题,需要计算一个发散级数的有限项和,级数喂,n取值范围为[1,1e18]。采用symsum计算。当n取值范围较小时,计算结果直接可用double转换为数值型带入后续计算,但当n取值范围很大时,此时的计算结果无法转换为数值型。
>> syms n x
>> ff=n^2*exp(-10*(1-1/n^2))

ff =

n^2*exp(10/n^2 - 10)

>> symsum(ff,n,1,1e18)

ans =

sum(n^2*exp(10/n^2 - 10), n == 1..1000000000000000000)

用double(ans),出现错误提示:
Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression
into a double array.
If the input expression contains a symbolic variable, use the VPA
function instead.

Error in sym/double (line 827)
        Xstr = mupadmex('symobj::double', S.s, 0);


尝试用vpa转换,
>> vpa(ans)

ans =

numeric::sum(n^2*exp(10.0/n^2 - 10.0), n == 1..1000000000000000000)
得到的结果尝试进行后续数值计算,比如ans/1e5:

>> ans/1e5

ans =

numeric::sum(n^2*exp(10.0/n^2 - 10.0), n == 1..1000000000000000000)/100000


想求教是否有方法将发散级数大区间的求和结果用数值型表示?并且能够保留合适精度,带入后续计算过程?
不胜感谢!
回复此楼

» 猜你喜欢

最怕的即是让爱自己的人失望
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hytao2012

铁杆木虫 (正式写手)

木头虫子

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
herozhu(nono2009代发): 金币+10 2015-09-09 06:04:44
貌似循环次数太多,建议分开算,分开也够多的。下面是我的想法
clear; clc;

uplim=1e6;
lowlim=1;

cycltime=uplim/1e5;
syms n
result=0;
for i=1:cycltime
    temp1=symsum(n^2*exp(10/n^2)/exp(10),n,(i-1)*1e5+1,i*1e5);
    temp2=vpa(temp1);
    result=result+temp2;
end
disp(result)
2楼2014-08-25 11:33:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

herozhu

木虫 (正式写手)

引用回帖:
2楼: Originally posted by hytao2012 at 2014-08-25 11:33:47
貌似循环次数太多,建议分开算,分开也够多的。下面是我的想法
clear; clc;

uplim=1e6;
lowlim=1;

cycltime=uplim/1e5;
syms n
result=0;
for i=1:cycltime
    temp1=symsum(n^2*exp(10/n^2)/exp(10), ...

多谢回复!

思路挺好的,大于1e5时vpa即不显示数值,单用兄台的方法可以循环计算出1e7对应的数值。正如你所述,循环太多也是个问题,1e7即耗时132s,我的1e18量级不知道得算到啥时去啊。

萨哈方程中的这个partition function肯定得有办法求的啊,再想想再想想
最怕的即是让爱自己的人失望
3楼2014-08-25 14:44:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hytao2012

铁杆木虫 (正式写手)

木头虫子

引用回帖:
3楼: Originally posted by herozhu at 2014-08-25 14:44:04
多谢回复!

思路挺好的,大于1e5时vpa即不显示数值,单用兄台的方法可以循环计算出1e7对应的数值。正如你所述,循环太多也是个问题,1e7即耗时132s,我的1e18量级不知道得算到啥时去啊。

萨哈方程中的这个pa ...

嗯,不知道为什么循环过多或大于1e5就不行,是Matlab内存设置问题之类的吗?还是vpa函数自身限制,可以通过修改vpa这个函数解决吗?
也可以试试用其他办法解出来。
实在不行,把循环也分成若干次。。。就是略麻烦
4楼2014-08-25 15:56:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 herozhu 的主题更新
信息提示
请填处理意见