Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-08-08, 06:34   #1
yuxuanqk
初级会员
 
注册日期: 2008-07-16
年龄: 43
帖子: 10
声望力: 17
yuxuanqk 正向着好的方向发展
默认 [求助]关于解微分方程参数传递

一般来说,要求解微分方程,首先定义一个方程,然后调用ode(例如ode45)就可以了。例如,我要求解Duffing方程,首先定义微分方程:
function du=duffin(t,x)
f=1;
alpha=1;
beta=10;
gama=100;
omiga=3.5;
epsilon=0.1;
du=[ x(2);...
epsilon-alpha*x(2)+beta*x(1)-gama*x(1)*x(1)*x(1)+f*cos(x(3));...
omiga];
然后调用
[t,x]=ode45('duffin',[0,10],[0.1,0.1,2])
就可以得到不同时刻t对应的x的解。
现在我的问题是:在Duffing方程定义中,我需要epsilon是一个变量,而不是常量,那么应该如何传递参数epsilon呢?也就是说,我在另一段程序中调用ode45解方程,而epsilon的值是在这段程序中动态给出的,如果传递这个epsilon的值呢?

谢谢解答啊~
yuxuanqk 当前离线   回复时引用此帖
旧 2008-08-08, 08:52   #2
zhanhuichong
普通会员
 
注册日期: 2008-04-04
年龄: 38
帖子: 46
声望力: 20
zhanhuichong 是一个将要出名的人zhanhuichong 是一个将要出名的人
默认 回复: 求助各位:关于解微分方程参数传递

solver(odefun,tspan,y0,options,p1,p2。。。。)
p1 p2就是可以参递给odefun的参数
zhanhuichong 当前离线   回复时引用此帖
旧 2008-08-12, 03:46   #3
yuxuanqk
初级会员
 
注册日期: 2008-07-16
年龄: 43
帖子: 10
声望力: 17
yuxuanqk 正向着好的方向发展
默认 回复: 求助各位:关于解微分方程参数传递

感谢版主啊~
我还是不知道怎么用:ft: ,是不是传递参数epsilon给duffin方程,我先这样定义duffin方程:
function du=duffin(t,x,epsilon)
...
解方程的时候使用[t,x]=ode45('duffin',tspan,init,Options,0.1)?
但是不行啊,是不是问题出在用odeset设置options上,但从帮助手册没看出什么啊
:cry:
yuxuanqk 当前离线   回复时引用此帖
旧 2008-08-12, 23:59   #4
fanxing39
高级会员
 
注册日期: 2007-12-02
年龄: 44
帖子: 303
声望力: 31
fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星
默认 回复: 求助各位:关于解微分方程参数传递

回复1楼问题:
function du=duffin(t,x)
变成 function du=duffin(t,x,epsilon)
然后把“epsilon=0.1;”去掉,就可以了
fanxing39 当前离线   回复时引用此帖
旧 2008-08-13, 00:41   #5
yuxuanqk
初级会员
 
注册日期: 2008-07-16
年龄: 43
帖子: 10
声望力: 17
yuxuanqk 正向着好的方向发展
默认 回复: 求助各位:关于解微分方程参数传递

引用:
作者: fanxing39 查看帖子
回复1楼问题:
function du=duffin(t,x)
变成 function du=duffin(t,x,epsilon)
然后把“epsilon=0.1;”去掉,就可以了
这样好像不行啊
调用solver的时候怎么做?
我用 [t,x]=ode45('duffin',[0,10],[0.1,0.1,2],options,0.1)
给出错误提示
??? Error using ==> duffin
Too many input arguments.

Error in ==> D:\MATLAB6p5\toolbox\matlab\funfun\private\odearguments.m
On line 104 ==> f0 = feval(ode,t0,y0,args{:});

Error in ==> D:\MATLAB6p5\toolbox\matlab\funfun\ode45.m
On line 155 ==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, args, ...

其中,duffin的定义如你所说:ft:
yuxuanqk 当前离线   回复时引用此帖
旧 2008-08-20, 20:28   #6
pslpsl
普通会员
 
注册日期: 2008-08-17
年龄: 36
帖子: 70
声望力: 20
pslpsl 是一个将要出名的人pslpsl 是一个将要出名的人
默认 回复: 求助各位:关于解微分方程参数传递

[t,x]=ode45('duffin',[0,10],[0.1,0.1,2],[options,0.1])

这样可以不?
pslpsl 当前离线   回复时引用此帖
回复

主题工具
显示模式

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

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



所有时间均为北京时间。现在的时间是 22:29


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