xicheng_wu 发表于 2007-6-14 22:04

请教:这段ode函数怎么样改正?

function DX=dx(t,X)
A=9.5;
B=11;
a(1)=3;
a(2)=4;
a(3)=2;

DX(1)=A*(X(2)-1+a(1)*(-2*X(1)+X(4)+X(7));
DX(2)=X(1)-X(2)+X(3)+a(2)*(-2*X(2)+X(5)+X(8);
DX(3)=-BX(2)+a(3)*(-2*X(3)+X(6)+X(9));
DX(4)=A*(X(5)-G(X(4))+a(1)*(X(1)-2*X(4)+X(7));
DX(5)=X(4)-X(5)+X(6)+a(2)*(X(2)-2*X(5)+X(8);
DX(6)=-BX(5)+a(3)*(X(3)-2*X(6)+X(9));
DX(7)=A*(X(2)-G(X(7))+a(1)*(-X(1)+X(4)-2*X(7));
DX(8)=X(7)-X(8)+X(9)+a(2)*(X(2)+X(5)-2*X(8));
DX(9)=-BX(8)+a(3)*(X(3)+X(6)+-2*X(9));

t0=0;
tfinal=100;
X0=;
= ode23('dx',,X0);
plot(t,X(1));

wh1125 发表于 2007-6-14 22:23

原帖由 xicheng_wu 于 2007-6-14 22:04 发表 http://www.chinavib.com/forum/images/common/back.gif
function DX=dx(t,X)
A=9.5;
B=11;
a(1)=3;
a(2)=4;
a(3)=2;

DX(1)=A*(X(2)-1+a(1)*(-2*X(1)+X(4)+X(7));
DX(2)=X(1)-X(2)+X(3)+a(2)*(-2*X(2)+X(5)+X(8);
DX(3)=-BX(2)+a(3)*(-2*X(3)+X(6)+X(9));
...
X0=;
= ode23('dx',,X0);
...


中间不知道是些什么,那个初始状态向量x0好像应该是写成列向量吧?
我也不知道是不是,呵呵,前两天刚学会用ode这样的函数解非线性方程:loveliness:

[ 本帖最后由 wh1125 于 2007-6-14 22:24 编辑 ]

无水1324 发表于 2007-6-15 08:45

function DX=dx(t,X)
A=9.5;
B=11;
a(1)=3;
a(2)=4;
a(3)=2;

DX(1)=A*(X(2)-1+a(1)*(-2*X(1)+X(4)+X(7));
DX(2)=X(1)-X(2)+X(3)+a(2)*(-2*X(2)+X(5)+X(8);
DX(3)=-BX(2)+a(3)*(-2*X(3)+X(6)+X(9));
DX(4)=A*(X(5)-G(X(4))+a(1)*(X(1)-2*X(4)+X(7));
DX(5)=X(4)-X(5)+X(6)+a(2)*(X(2)-2*X(5)+X(8);
DX(6)=-BX(5)+a(3)*(X(3)-2*X(6)+X(9));
DX(7)=A*(X(2)-G(X(7))+a(1)*(-X(1)+X(4)-2*X(7));
DX(8)=X(7)-X(8)+X(9)+a(2)*(X(2)+X(5)-2*X(8));
DX(9)=-BX(8)+a(3)*(X(3)+X(6)+-2*X(9));
% 以上单独保存为m函数的形式。

这里面错误很多,9 行10 行,11行都差一个括号,我不知道你的表达式是什么样子的,你检查一下在试一下把
后面的我没有再试!

咕噜噜 发表于 2007-6-15 09:52

function dx=fun(t,x)
A=9.5;
B=11;
a(1)=3;
a(2)=4;
a(3)=2;
G=6;
dx=zeros(9,1);
dx(1)=A*(x(2)-1+a(1)*(-2*x(1)+x(4)+x(7)));
dx(2)=x(1)-x(2)+x(3)+a(2)*(-2*x(2)+x(5)+x(8));
dx(3)=-B*x(2)+a(3)*(-2*x(3)+x(6)+x(9));
dx(4)=A*(x(5)-G*(x(4))+a(1)*(x(1)-2*x(4)+x(7)));
dx(5)=x(4)-x(5)+x(6)+a(2)*(x(2)-2*x(5)+x(8));
dx(6)=-B*x(5)+a(3)*(x(3)-2*x(6)+x(9));
dx(7)=A*(x(2)-G*(x(7))+a(1)*(-x(1)+x(4)-2*x(7)));
dx(8)=x(7)-x(8)+x(9)+a(2)*(x(2)+x(5)-2*x(8));
dx(9)=-B*x(8)+a(3)*(x(3)+x(6)+2*x(9));


=ode45(@fun,,);
plot(t,x(:,1))

咕噜噜 发表于 2007-6-15 09:55

不过你写的表达式有好几行少括号,我自己按照matlab对应关系添加的括号,程序没问题了,你自己改动一下表达式
记得m函数文件最好不要和主程序在一个文件里面,因为感觉你是新手
这部分
t,x]=ode45(@fun,,);
plot(t,x(:,1))
在命令窗口写出,时间上你给的0-100太大了,我给的0-1,G没有给定义,我自己给的,同时请注意习惯地的乘法在编程序的时候一定要写*号

[ 本帖最后由 无水1324 于 2007-6-15 10:45 编辑 ]

xicheng_wu 发表于 2007-6-15 12:43

原帖由 咕噜噜 于 2007-6-15 09:55 发表 http://www.chinavib.com/forum/images/common/back.gif
不过你写的表达式有好几行少括号,我自己按照matlab对应关系添加的括号,程序没问题了,你自己改动一下表达式
记得m函数文件最好不要和主程序在一个文件里面,因为感觉你是新手
这部分
t,x]=ode45(@fun,
我的G(x)是个函数,怎么调用啊
G(x)=sin(x)+1

咕噜噜 发表于 2007-6-15 15:04

见另外一个你的帖子,无水的回答
就是m函数中再次调用m函数
页: [1]
查看完整版本: 请教:这段ode函数怎么样改正?