这里介绍一下分段微分方程的求解方法,
微分方程为:y''+2*t*y'+y=f(t) ,其中f(t)为分段函数:
t<1, f(t)=t;
1<=t<2, f(t)=2*t;
2<=t<5, f(t)=4;
5<=t, f(t)=0.
初值y(0)=0,y'(0)=0,积分区间[0,6],步长0.1
这类问题主要是对分段函数的处理,同时考虑到分段函数有一定的跳跃性,需要注意可能存在的刚性问题。
示例代码如下:
%% ----------------------
完整代码请加文末企鹅号
function fenduan_ode
% 微分方程为:y''+2*t*y'+y=f(t)
% t<1,f(t)=t;1<=t<2,f(t)=2*t;2<=t<5,f(t)=4;5<=t, f(t)=0.
% 初值y(0)=0,y'(0)=0,积分区间[0,6],步长0.1
% 由于f(t)有一定的跳跃性,可能存在一定的刚性问题,故而调用ode23tb求解
% 读者也可以尝试采用其他函数如ode45求解
%
********************
dy=[y(2);
-2*t*y(2)-y(1)+f(t)]; % 转化为微分方程组标准形式
% ****************
tspan = (0:0.1:6); %变量求解区间
y0 = [0,0]; %初值
************************************** % 调用函数求解
plot(sol.x,sol.y(1,:),'k-','linewidth',2); %画出函数y1(t)曲线
hold on;
plot(sol.x,sol.y(2,:),'k-.','linewidth',2);%画出函数y2(t)曲线
微分方程为:y''+2*t*y'+y=f(t) ,其中f(t)为分段函数:
t<1, f(t)=t;
1<=t<2, f(t)=2*t;
2<=t<5, f(t)=4;
5<=t, f(t)=0.
初值y(0)=0,y'(0)=0,积分区间[0,6],步长0.1
这类问题主要是对分段函数的处理,同时考虑到分段函数有一定的跳跃性,需要注意可能存在的刚性问题。
示例代码如下:
%% ----------------------
完整代码请加文末企鹅号
function fenduan_ode
% 微分方程为:y''+2*t*y'+y=f(t)
% t<1,f(t)=t;1<=t<2,f(t)=2*t;2<=t<5,f(t)=4;5<=t, f(t)=0.
% 初值y(0)=0,y'(0)=0,积分区间[0,6],步长0.1
% 由于f(t)有一定的跳跃性,可能存在一定的刚性问题,故而调用ode23tb求解
% 读者也可以尝试采用其他函数如ode45求解
%
% ****************
tspan = (0:0.1:6); %变量求解区间
y0 = [0,0]; %初值
************************************** % 调用函数求解
plot(sol.x,sol.y(1,:),'k-','linewidth',2); %画出函数y1(t)曲线
hold on;
plot(sol.x,sol.y(2,:),'k-.','linewidth',2);%画出函数y2(t)曲线
