Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-06-26, 11:53   #1
宇文J
初级会员
 
注册日期: 2008-04-27
年龄: 42
帖子: 9
声望力: 0
宇文J 正向着好的方向发展
默认 [求助]runge-kutta法可以解变系数微分方程吗

各位高手:
小弟请教一下,变系数微分方程可以用runge-kutta法解吗。
[dx/dt]=[A(t)]*[x]+[B(t)];
一般的常微分方程A(t)和B(t)是常系数,不变的。
如果A(t)和B(t)是随时间变化的呢。
小弟用runge-kutta法解了,但是觉得不对。
请高手指教!感激之情难于言表!谢谢!
宇文J 当前离线   回复时引用此帖
旧 2008-06-26, 14:57   #2
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

可以,
LZ的ODE方程归根到底还是Dy=f(t,y)的形式,正常编写ODEFUN就可以了。
请参考ode45(...)的帮助
watcher 当前离线   回复时引用此帖
旧 2008-06-26, 20:53   #3
宇文J
初级会员
 
注册日期: 2008-04-27
年龄: 42
帖子: 9
声望力: 0
宇文J 正向着好的方向发展
默认

但是,不同时刻的f(t,y)是不同的啊。书上讲的runge-kutta是解常系数的,f(t,y)始终是一样的。所以就不知道我这种f(t,y)随时间变化而改变的或者说系数改变的可以用runge解吗?程序我也调通了,但是跑出来的结果和我想象的有一定的差距。所以想请教各位高手是不是有问题。
宇文J 当前离线   回复时引用此帖
旧 2008-06-26, 22:25   #4
fanxing39
高级会员
 
注册日期: 2007-12-02
年龄: 44
帖子: 303
声望力: 31
fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星
默认

把你的程序 贴上来,我们拜读下如何?
fanxing39 当前离线   回复时引用此帖
旧 2008-06-26, 22:55   #5
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

引用:
作者: 宇文J 查看帖子
但是,不同时刻的f(t,y)是不同的啊。书上讲的runge-kutta是解常系数的,f(t,y)始终是一样的。所以就不知道我这种f(t,y)随时间变化而改变的或者说系数改变的可以用runge解吗?程序我也调通了,但是跑出来的结果和我想象的有一定的差距。所以想请教各位高手是不是有问题。
请注意这里f(t,y)的表达,t作为参量是显含的,我们知道,任何ODE方程都默认状态量y是微分变量t的函数,所以对于常系数ODE,方程的一般表达只需要f(y)即可。既然matlab在帮助中使用f(t,y),将t作为显含参数允许调用,就没有理由怀疑其求解时变系数ODE问题的能力。

最后,像LS说的,把你的程序贴出来看看吧。
watcher 当前离线   回复时引用此帖
旧 2008-06-29, 18:57   #6
宇文J
初级会员
 
注册日期: 2008-04-27
年龄: 42
帖子: 9
声望力: 0
宇文J 正向着好的方向发展
默认

由于程序较长,较复杂我把程序简化了一下。

只需在命令框里输入:[tout,yout]=ode45('Evalue',[0.0002:0.0004:0.1202],[0,0,0,0])
Evalue.m的文件如下:

function [Ikdot]=Evalue(tk,Ik)%%%传递过来的两个参数
R=[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1];
U=[110e3*sin(100*pi*tk+pi/2);110e3*sin(100*pi*tk+pi/2);0;0];%%%%定义一正弦电压
[Ikdot]=U-R*Ik;%%%%算法中的一个计算函数。

U就是我所说的表系数,Ik就是未知数y。Ikdot就是dy/dt。
我反复验证后发现一个问题,由于系数里面存在tk(随时间变化的系数)。使得在解的时候Ik可以不用,把Ik去掉使得[Ikdot]=U.运行出来的结果和[Ikdot]=U-R*Ik是一样的。
宇文J 当前离线   回复时引用此帖
旧 2008-06-30, 00:48   #7
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认

引用:
作者: 宇文J 查看帖子
由于程序较长,较复杂我把程序简化了一下。

只需在命令框里输入:[tout,yout]=ode45('Evalue',[0.0002:0.0004:0.1202],[0,0,0,0])
Evalue.m的文件如下:

function [Ikdot]=Evalue(tk,Ik)%%%传递过...
LS的代码很容易引起误导,呵呵,首先这些代码的编写和调用是正确的
LS说的“使得在解的时候Ik可以不用,把Ik去掉使得[Ikdot]=U.运行出来的结果和[Ikdot]=U-R*Ik是一样的。”这句话是不正确的,不信的话,LS可以把两次的结果相减再绘图看看,有个位数的偏差,这对于matlab来说可不是误差哦。

至于R*Ik对结果影响过小的原因,是由于系统参数不合理,在这个问题中R矩阵太小了,把R换成以下矩阵试试,差别是很明显的。
[10000,0,0,0;0,10000,0,0;0,0,1,0;0,0,0,1];
watcher 当前离线   回复时引用此帖
旧 2008-07-01, 09:20   #8
宇文J
初级会员
 
注册日期: 2008-04-27
年龄: 42
帖子: 9
声望力: 0
宇文J 正向着好的方向发展
默认

谢谢!谢谢!谢谢!
宇文J 当前离线   回复时引用此帖
旧 2013-05-16, 22:12   #9
nlajd
初级会员
 
注册日期: 2013-05-16
帖子: 2
声望力: 0
nlajd 正向着好的方向发展
默认 回复: [求助]runge-kutta法可以解变系数微分方程吗

引用:
作者: watcher 查看帖子
可以,
LZ的ODE方程归根到底还是Dy=f(t,y)的形式,正常编写ODEFUN就可以了。
请参考ode45(...)的帮助
时间有点久了,不过我还是想问下,我去查ode45的帮助,为什么在大标题下面会有一段话明确说他们(ode23、ode45....)是解常系数微分方程的呢?“Solve initial value problems for ordinary differential equations”
nlajd 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
请教二个简单问题 abcus MATLAB论坛 2 2008-06-24 22:52
[求助]求救一个看似简单的问题! tanrenzhe603 MATLAB论坛 2 2008-06-23 18:20
[求助]请求高手帮忙 bash2008 MATLAB论坛 0 2008-05-25 20:47
[求助] 06104112 MATLAB论坛 1 2008-04-19 16:39


所有时间均为北京时间。现在的时间是 02:48


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.