新浪博客

MATLAB求解分段微分方程

2020-05-31 13:20阅读:
这里介绍一下分段微分方程的求解方法,
微分方程为: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)曲线
hold off;
%图例,图例位置自动选择最佳位置
L1 = legend('{\ity}_1(t)','{\ity}_2(t)','Location','best');
set(L1,'fontname','Times New Roman');
xlabel('\itt','fontsize',16);
end
% --------------------------------------------
请不要做伸手党,示例完整代码收费10 RMB




MATLAB求解分段微分方程

我的更多文章

下载客户端阅读体验更佳

APP专享