介绍常微分方程的边值求解

前言:

实际应用中,比如热传导问题,初值时候的热源状态一致,一定时间后温度达到均匀,像这种知道自变量在前后两端时系统状态的问题被称为边值问题。在matlab中采用bvp4cbvp5c函数。

例1、

求解下列边值问题在区间t=[0,4]上的解

(1)首先化为标准形式,令y1(t)=y(t),y2(t)=y1'(t)

 (2)编程

 

函数的m文件

function y = init(t)       
y = [1+t/4;1/4];           %创建初始估计值,由于y1(0) = 1,y1(4) = 2;所以挑选一个满足上述条件的函数
end                        %这里选择的是1+t/4来作为对y1(t)的估计,从而其导数1/4作为对y2(t)的估计

function res = bc(ya,yb)   %编写边界条件代码,边界条件为y1(0)=1,y1(4)=2;0,4分别对应ya,yb边界两端
res = [ya(1)-1 yb(1)-2]    %y(1)对应的都是第一个状态变量,因此是ya(1)-1,yb(1)-2
end

function dy = ode(t,y)     %微分方程函数
dy = [y(2);2*y(2)cos(t)-y(1)*sin(4*t)-cos(3*t)];
end

主程序

T = linspace(0,4,10)             %为bvpinit生成初始化网格准备
solinit = bvpinit(T,@init);      %bvpinit生成的初始化网格
sol = bvp4c(@ode,@bc,solinit)    %调用bvp4c求解,也可用bvp5c
tint = linspace(0,4);      
Stint = deval(sol,tint);         %根据得到的sol利用deval函数求出[0,4]区间内更多其他的解

plot(tint,Stint(1,:),'k-');hold on
plot(tint,Stint(2,:),'k:');
L = legend('{\ity}_1(t)','{\ity}_2(t)');

例2、非线性边值,求解范围t=[0,6];

函数的m文件

function y = init(t)
y = [1+t/6;1/6];
end

function res = bc(ya,yb)
res = [ya(1)-1;yb(1)-2];
end

function dy = ode(t,y)
dy = [y(2);cos(y(2))*sin(y(1))];
end

主程序

T = linspace(0,6,15);
solinit = bvpinit(T,@init);
sol = bvp4c(@ode,@bc,solinit);
tint = linspace(0,6);
Stint = deval(sol,tint);
plot(tint,Stint(1,:),'k-');hold on
plot(tint,Stint(2,:),'k-');
L = legend('{\ity}_1(t)','{\ity}_2(t)');

例3、带未知参数的边值问题求解,求解范围x=[0,pi]

 

该方程的解y1(x)是Mathieu方程的特征函数,其中q=5,λ为未知参数。由于又λ这个未知参数,因此,方程有3个边界条件:y1(0)=1,y2(0)=0,y2(pi)=0

函数的m程序

function y =init(x)
y = [cos(4*x);-4sin(4*x)];
end

function res = bc(ya,yb,lambda,q)
res = [ya(1)-1;ya(2);yb(2)];
end 

function dy =ode(x,y,lambda)
dy = [y(2);-(lambda-2*q*cos(2*x))*y(1)];
end

主程序

X = linspace(0,pi,10);
q = 5;
lambda = 15;             %对lambda的猜测值
solinit = bvpinit(X,@init,lambda);
sol = bvp4c(@(t,y,lambda)ode(t,y,lambda,q),@bc,solinit);
tint = linspace(0,pi);
Stint = deval(sol,tint);

plot(tint,Stint(1,:),'k-');hold on
plot(tint,Stint(2,:),'k-');
L = legend('{\ity}_1(t)','{\ity}_2(t)');

总结:

(1)常微分方程组分为初值问题,延迟微分方程,边值问题。各位应该熟悉这几种方程的形式,以便在以后遇到时能够反应出选用哪个函数进行求解。建议各位对这几种形式的微分方程进行总结。

(2)可能由于某些原因,导致部分同学对这几种函数的背后计算过程不太熟悉,这里的话不建议刨根问底,直接拿去用就行了,很多时候我们非数学专业分析这么多其实是种浪费时间(当然了解是更好的),要知道知识是为人来服务,正是前人做过了这些分析,才可以让我们这么便利直接使用

发布于 2020-03-18 19:11