用MATLAB方法进行变参量微分方程处理
1 变参数微分方程数值求解
例子2 求
function dydt=fun(t,y,u,v)
r=u+2;s=v-2;
dydt=[r+y(2); s*y(1)-2*s*y(2)];
u=[1;5;15;20;25];
v=[6;12;18;24;30];
tspan=0:1:4;
y0=[0 2];
yy=y0;
for i=1:length(tspan)-1
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i));
y0=y(end,: );
yy=[yy;y0];
end
plot(tspan,yy,'-o')
2.1 匿名函数法
f=@(t,y,u,v) [u+2+y(2); (v-2)*y(1)-2*(v-2)*y(2)]
u=[1;5;15;20;25];
v=[6;12;18;24;30];
tspan=0:1:4;
y0=[0 2];
yy=y0;
for i=1:length(tspan)-1
[t,y]=ode45(f,[tspan(i),tspan(i+1)],y0,[],u(i),v(i));
y0=y(end,: );
yy=[yy;y0];
end
plot(tspan,yy,'-o')
2.2 修改加上时间tt(显示所有计算值)
clear
u=[1;5;15;20;25];
v=[6;12;18;24;30];
tspan=0:1:4;
y0=[0 2];
tt =[];yy=[];
for i=1:length(tspan)-1
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i));
y0=y(end,: );
tt=[tt;t];
yy=[yy;y];
end
plot(tt,yy);%所有的计算数值。