声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1522|回复: 8

[综合讨论] 用ode45解带级数求和的微分方程的问题

[复制链接]
发表于 2008-3-10 13:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求解这样的带级数求和的微分方程,
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这个求和函数来表示,运行[t,x]=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 编辑 ]
121111.JPG
回复
分享到:

使用道具 举报

发表于 2008-3-10 15:35 | 显示全部楼层

回复 楼主 的帖子

输入参数应该是数值型的,你的可能是符号型的
 楼主| 发表于 2008-3-10 18:12 | 显示全部楼层
请问楼上朋友这样的问题该用什么方法解决呢?
发表于 2008-3-10 18:15 | 显示全部楼层
错误原因不能理解吧?实在不行用金山词霸都能翻译出来,解决办法请搜索版面如何把符号变量转换为数值型变量
 楼主| 发表于 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
请问这又该如何解决?谢谢
 楼主| 发表于 2008-3-11 22:54 | 显示全部楼层
单独算其中的求和即使从-10000到10000也能正确得到结果,就是速度慢了点
但用龙哥库塔法的时候即使是从-200求和到200算了好久之后就会出现楼上所报的错误
感觉是溢出了
请问大家能有什么好的办法解决吗
发表于 2008-3-12 22:15 | 显示全部楼层

回复 7楼 的帖子

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

评分

1

查看全部评分

 楼主| 发表于 2008-3-13 21:44 | 显示全部楼层
谢谢楼上朋友,自己编了个求和的函数取代symsum,果然没问题了,而且快了很多

评分

1

查看全部评分

发表于 2008-3-16 14:55 | 显示全部楼层

回复 8楼 的帖子

楼上的,你编求和函数symsum用了循环语句吗?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 15:06 , Processed in 0.133253 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表