一个脉冲动力系统的仿真结果超奇怪,请帮我看看问题在哪!
总共是四个函数,分别保存在同一个MATLAB 目录下,然后 运行 shiyan20160708sol 这个函数就会出现我的仿真结果,
function [x,t]=lgktjshiyan20160708(t0,tn,x0,h)
t=t0:h:tn;
n=length(t);
[m,q]=size(x0);
x1=zeros(m,n);
x1(1:m,1)=x0;
for i=1:n-1
K1=shiyan20160708(t(i),x1(:,i));
K2=shiyan20160708(t(i)+h/2,x1(:,i)+h/2*K1);
K3=shiyan20160708(t(i)+h/2,x1(:,i)+h/2*K2);
K4=shiyan20160708(t(i)+h,x1(:,i)+h*K3);
x1(:,i+1)=x1(:,i)+h/6*(K1+2*K2+2*K3+K4);
end
x=x1;
第一段这是
function d=shiyan20160708(t,x)
v1=1.2;
v2=1.5;
v3=1;
A=[-v1 0 0;v1 -v2 0;0 v2 -v3];
d=A*x(1:3)+[phi(x(1));0;0];
end
第二段
function d=phi(u)
if u>=12
d=u;
elseif u<12 && u>=8
d=1.2*u;
else d=1.4*u;
end
end
第三段
1919 2016/7/8 14:11:13
function shiyan20160708sol
v1=1.2;
v2=1.5;
v3=1;
M=2;
j=10;
initial=zeros(3,j);
initial(:,1)=[13 8 6]';
[x t]=lgktjshiyan20160708(0, M,initial(:,1),0.001);
l=length(t);
%x(1,l)=1.5*x(1,l);
x(2,l)=1.2*x(2,l);
x(3,l)=0.6*x(3,l);
initial(:,2)=x(:,l);
TT=t;
XX=x(1:3,;
for k=2:j
[x t]=lgktjshiyan20160708((k-1)*M, k*M,initial(:,k),0.001);
l=length(t);
%x(1,l)=1.5*x(1,l);
x(2,l)=1.2*x(2,l);
x(3,l)=0.6*x(3,l);
initial(:,k+1)=x(:,l);
TT=[TT t];
XX=[XX x(1:3,];
end
plot(TT,XX)
可以观察到,x(1)的曲线过一小段时间后变成恒值,这就是奇怪之处。因为 x(1) 的导数不可能是个恒定不变的,更不可能为0,所以x(1)不应该是直线,而应该是曲线才对
所以,请高手帮我看看到底问题出在哪了?
返回小木虫查看更多
京公网安备 11010802022153号
xxie
啥意思呀
,
自己顶起来!