morrissey22 发表于 2008-3-10 13:53

用ode45解带级数求和的微分方程的问题

求解这样的带级数求和的微分方程,
function xdot = qpm(t,x)
syms n;
xdot=[i*5*symsum(1/(n^2+1),n,-10,10)*conj(x(1))*x(2)*exp(-i*50*t);
    i*5*symsum(1/(n^2+1),n,-10,10)*x(1)^2*exp(i*50*t)];
先把上面的方程保存为函数,其中的级数求和用symsum这个求和函数来表示,运行=ode45('qpm',[0,1,x0);plot(t,x),
结果出现
??? Error using ===> odearguments
Inputs to odearguments must be floats, namely single or double.
Error in ==> funfun\private\odearguments at 135
dataType = superiorfloat(t0,y0,f0);
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
这样的出错信息,请问该如何解决?非常感谢!!!

[ 本帖最后由 eight 于 2008-3-10 16:56 编辑 ]

sigma665 发表于 2008-3-10 15:35

回复 楼主 的帖子

输入参数应该是数值型的,你的可能是符号型的

morrissey22 发表于 2008-3-10 18:12

请问楼上朋友这样的问题该用什么方法解决呢?

eight 发表于 2008-3-10 18:15

原帖由 morrissey22 于 2008-3-10 18:12 发表 http://www.chinavib.com/forum/images/common/back.gif
请问楼上朋友这样的问题该用什么方法解决呢? 错误原因不能理解吧?实在不行用金山词霸都能翻译出来,解决办法请搜索版面如何把符号变量转换为数值型变量

morrissey22 发表于 2008-3-11 10:38

这个问题用subs()貌似解决了
xdot=[i*5*subs(symsum(1/(n^2+1),n,-1000,1000))*conj(x(1))*x(2)*exp(-i*50*t);
    i*5*subs(symsum(1/(n^2+1),n,-1000,1000))*x(1)^2*exp(i*50*t)];

可是现在新的问题又出现了,因为方程中的级数求和是个从负无穷到正无穷的级数求和,当求和从-100 到100还能计算,为提高精确度,当改为从-1000到1000时,出现
??? Error using ==> sym.maple
Error, (in evalf/exp) integer too large in context
请问这又该如何解决?谢谢

morrissey22 发表于 2008-3-11 22:54

单独算其中的求和即使从-10000到10000也能正确得到结果,就是速度慢了点
但用龙哥库塔法的时候即使是从-200求和到200算了好久之后就会出现楼上所报的错误
感觉是溢出了
请问大家能有什么好的办法解决吗

无水1324 发表于 2008-3-12 22:15

回复 7楼 的帖子

可以考虑级数求和编辑成另外一个独立的函数,输入量就是t,n,然后m函数中直接调用,可能是最笨的方法了哈

morrissey22 发表于 2008-3-13 21:44

谢谢楼上朋友,自己编了个求和的函数取代symsum,果然没问题了,而且快了很多

aiguo 发表于 2008-3-16 14:55

回复 8楼 的帖子

楼上的,你编求和函数symsum用了循环语句吗?
页: [1]
查看完整版本: 用ode45解带级数求和的微分方程的问题