用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 编辑 ]
回复 楼主 的帖子
输入参数应该是数值型的,你的可能是符号型的 请问楼上朋友这样的问题该用什么方法解决呢? 原帖由 morrissey22 于 2008-3-10 18:12 发表 http://www.chinavib.com/forum/images/common/back.gif请问楼上朋友这样的问题该用什么方法解决呢? 错误原因不能理解吧?实在不行用金山词霸都能翻译出来,解决办法请搜索版面如何把符号变量转换为数值型变量 这个问题用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
请问这又该如何解决?谢谢 单独算其中的求和即使从-10000到10000也能正确得到结果,就是速度慢了点
但用龙哥库塔法的时候即使是从-200求和到200算了好久之后就会出现楼上所报的错误
感觉是溢出了
请问大家能有什么好的办法解决吗
回复 7楼 的帖子
可以考虑级数求和编辑成另外一个独立的函数,输入量就是t,n,然后m函数中直接调用,可能是最笨的方法了哈 谢谢楼上朋友,自己编了个求和的函数取代symsum,果然没问题了,而且快了很多回复 8楼 的帖子
楼上的,你编求和函数symsum用了循环语句吗?
页:
[1]