声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1945|回复: 6

[近似分析] 请教:这段ode函数怎么样改正?

[复制链接]
发表于 2007-6-14 22:04 | 显示全部楼层 |阅读模式

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

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

x
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=[0,0,0,0,0,0,0,0,0];
[t,X] = ode23('dx',[t0,tfinal],X0);
plot(t,X(1));
回复
分享到:

使用道具 举报

发表于 2007-6-14 22:23 | 显示全部楼层
原帖由 xicheng_wu 于 2007-6-14 22:04 发表
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=[0,0,0,0,0,0,0,0,0];
[t,X] = ode23('dx',[t0,tfinal],X0);
...


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

[ 本帖最后由 wh1125 于 2007-6-14 22:24 编辑 ]
发表于 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));


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

评分

1

查看全部评分

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

[ 本帖最后由 无水1324 于 2007-6-15 10:45 编辑 ]
 楼主| 发表于 2007-6-15 12:43 | 显示全部楼层
原帖由 咕噜噜 于 2007-6-15 09:55 发表
不过你写的表达式有好几行少括号,我自己按照matlab对应关系添加的括号,程序没问题了,你自己改动一下表达式
记得m函数文件最好不要和主程序在一个文件里面,因为感觉你是新手
这部分
t,x]=ode45(@fun,[0,1 ...

我的G(x)是个函数,怎么调用啊
G(x)=sin(x)+1
发表于 2007-6-15 15:04 | 显示全部楼层
见另外一个你的帖子,无水的回答
就是m函数中再次调用m函数
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-27 11:59 , Processed in 0.094087 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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