马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
在使用ode45()遇到一个问题,希望得到各位高手的指教。
问题来自一篇论文中给出的一组非线性方程,为了仿真该非线性方程组,而使用ode45(),其方程如下:
不好意思!我原先是用WORD编辑这个问题的,可这里不让直接加图片,只好用附件的方式
方程在‘论文中给出的数学方程’的附件里。 现在不考虑外部输入时,∑hj [gj ]+与∑hj [gj ]-都不予考虑。[x1]+表示max(x1,0),[x2]+类推。
论文作者给出的一些参数条件是
参数条件在‘论文中参数的值’的附件里
论文作者给出Yout的仿真结果如下:
论文作者的仿真结果在‘论文中作者的仿真结果’的附件里
可是我在仿真的过程中却遇到了问题,我先说说我是怎么做的,我尽可能的说的详细些,希各位高手不要见笑。
一 为了编制,非线性方程的function()函数。
我做了一下符号的变换,令x(1)=x1,x(2)=v1,x(3)=x2,x(4)=v2。给据论文中给的参数得到下面的方程: (1) X(1)’=2-2*x(1)-4*x(2)-4*max(x(3),0) (2) X(2)’=max(x(1),0)-x(2) (3) X(3)’=2-2*x(3)-4*x(4)-4*max(x(1),0) (4) X(4)’=max(x(3),0)-x(4) (5) Yout=max(x(1),0)-max(x(3),0) 下面是我自己编制的matlab的.m文件。文件名为MatsuokaOscillator.m function y=MatsuokaOscillator(t,x) y=[2-2*x(1)-4*x(2)-4*max(0,x(3));max(0,x(1))-x(2);2-2*x(3)-4*x(4)-4*max(0,x(1));max(0,x(3))-x(4)]; 二 运用ode45()进行非线性方程的求解,下面是程序: clear clc options=odeset; options.Reltol=1e-6; t_final=70; %仿真的最长时间
y0=[-1;1;-1;1]; %各个状态的初始条件 tic,[t,y]=ode45('MatsuokaOscillator',[0,t_final],y0);toc Sout=max(0,y(:,1))-max(0,y(:,3)); plot(t,Sout,'r'); 三 可是不知道问题出在哪里?仿真的结果非常不理想,希望曾经从事过类似工作的过来人不吝赐教,在下在这里感激不尽了。下面我的错误结果: 我的结果在附件 ‘我自己的错误仿真结果’ 中 |