1.把待解的问题转化为标准边值问题2.因为边值问题可以多解,所以需要为期望解指定一个初始猜测解。该猜测解网(Mesh)包括区间[a,b]内的一组网点(Meshpoints)和网点上的解S(x)3.根据原微分方程构造残差函数4.利用原微分方程和边界条件,借助迭代不断产生新的S(x),使残差不断减小,从而获得满足精度要求的解(,)((),())0yfxygyayb()()(,())rxSxfxSxMatlab求解边值问题方法:bvp4c函数solinit=bvpinit(x,v,parameters)生成bvp4c调用指令所必须的“解猜测网”sol=bvp4c(odefun,bcfun,solinit,options,p1,p2,…)给出微分方程边值问题的近似解sxint=deval(sol,xint)计算微分方程积分区间内任何一点的解值Matlab求解边值问题的基本指令solinit=bvpinit(x,v,parameters)x指定边界区间[a,b]上的初始网络,通常是等距排列的(1×M)一维数组。注意:使x(1)=a,x(end)=b;格点要单调排列。v是对解的初始猜测solinit(可以取别的任意名)是“解猜测网(Mesh)”。它是一个结构体,带如下两个域:solinit.x是表示初始网格有序节点的(1×M)一维数组,并且solinit.x(1)一定是a,solinit.x(end)一定是b。M不宜取得太大,10数量级左右即可。solinit.y是表示网点上微分方程解的猜测值的(N×M)二维数组。solinit.y(:,i)表示节点solinit.x(i)处的解的猜测值。初始解生成函数:bvpinit()sol=bvp4c(odefun,bcfun,solinit,options,p1,p2,…)输入参数:odefun是计算导数的m函数文件。该函数的基本形式为:dydx=odefun(x,y,parameters,p1,p2,…),在此,自变量x是标量,y,dydx是列向量。bcfun是计算边界条件下残数的m函数文件。其基本形式为:res=bcfun(ya,yb,parameters,p1,p2,…),文件输入宗量ya,yb是边界条件列向量,分别代表y在a和b处的值。res是边界条件满足时的残数列向量。注意:例如odefun函数的输入宗量中包含若干“未知”和“已知”参数,那么不管在边界条件计算中是否用到,它们都应作为bcfun的输入宗量。输入宗量options是用来改变bvp4c算法的控制参数的。在最基本用法中,它可以缺省,此时一般可以获得比较满意的边值问题解。如需更改可采用bvpset函数,使用方法同odeset函数。输入宗量p1,p2等表示希望向被解微分方程传递的已知参数。如果无须向微分方程传递参数,它们可以缺省。边值问题求解指令:bvp4c()输出参数:输出变量sol是一个结构体sol.x是指令bvp4c所采用的网格节点;sol.y是y(x)在sol.x网点上的近似解值;sol.yp是y'(x)在sol.x网点上的近似解值;sol.parameters是微分方程所包含的未知参数的近似解值。当被解微分方程包含未知参数时,该域存在。边值问题求解指令:bvp4c()原方程组等价于以下标准形式的方程组:solinit=bvpinit(linspace(0,1,10),[10]);sol=bvp4c(@ODEfun,@BCfun,solinit);x=[0:0.05:0.5];y=deval(sol,x);xP=[0:0.1:0.5];yP=[0-0.41286057-0.729740656...-0.95385538-1.08743325-1.13181116];plot(xP,yP,'o',x,y(1,:),'r-')legend('AnalyticalSolution','NumericalSolution')%定义ODEfun函数functiondydx=ODEfun(x,y)dydx=[y(2);y(1)+10];%定义BCfun函数functionbc=BCfun(ya,yb)bc=[ya(1);yb(1)];10(0)(1)0yyyy求解两点边值问题:121,yyyy令:122110yyyy11(0)0,(1)0yy边界条件为:边值问题的求解原方程组等价于以下标准形式的方程组:solinit=bvpinit(linspace(0,1,10),[01]);sol=bvp4c(@ODEfun,@BCfun,solinit);x=[0:0.1:1];y=deval(sol,x);xP=[0:0.1:1.0];yP=[11.07431.16951.28691.4284...1.59651.79472.02742.30042.62143];plot(xP,yP,'o',x,y(1,:),'r-')legend('AnalyticalSolution','NumericalSolution',...'location','Northwest')legendboxoff%定义ODEfun函数functiondydx=ODEfun(x,y)dydx=[y(2);(1+x^2)*y(1)+1];%定义BCfun函数functionbc=BCfun(ya,yb)bc=[ya(1)-1;yb(1)-3];求解:121,yyyy令:边界条件为:2(1)1(0)1,(1)3yxyyy12221(1)1yyyxy03)1(01)0(11yy边值问题的求解c=1;solinit=bvpinit(linspace(0,4,10),[11]);sol=bvp4c(@ODEfun,@BCfun,solinit,[],c);x=[0:0.1:4];y=deval(sol,x);plot(x,y(1,:),'b-',sol.x,sol.y(1,:),'ro')legend('解曲线','初始网格点解')%定义ODEfun函数functiondydx=ODEfun(x,y,c)dydx=[y(2);-c*abs(y(1))];%定义BCfun函数functionbc=BCfun(ya,yb,c)bc=[ya(1);yb(1)+2];求解:121,zzzz令:0zcz2)4(,0)0(zz边值问题的求解1csolinit=bvpinit(linspace(0,pi,10),[1;1],lmb);opts=bvpset('Stats','on');sol=bvp4c(@ODEfun,@BCfun,solinit,opts);lambda=sol.parametersx=[0:pi/60:pi];y=deval(sol,x);plot(x,y(1,:),'b-',sol.x,sol.y(1,:),'ro')legend('解曲线','初始网格点解')%定义ODEfun函数functiondydx=ODEfun(x,y,lmb)q=15;dydx=[y(2);-(lmb-2*q*cos(2*x))*y(1)];%定义BCfun函数functionbc=BCfun(ya,yb,lmb)bc=[ya(1)-1;ya(2);yb(2)];求解:边界条件:本例中,微分方程与参数λ的数值有关。一般而言,对于任意的λ值,该问题无解,但对于特殊的λ值(特征值),它存在一个解,这也称为微分方程的特征值问题。对于此问题,可在bvpinit中提供参数的猜测值,然后重复求解BVP得到所需的参数,返回参数为sol.parameters(2cos2)0zqxz15q0)(,0)0(,1)0(zzz边值问题的求解infinity=6;solinit=bvpinit(linspace(0,infinity,5),[001]);options=bvpset('stats','on');sol=bvp4c(@ODEfun,@BCfun,solinit,options);eta=sol.x;f=sol.y;fprintf('\n');fprintf('Cebeci&Kellerreportf''''(0)=0.92768.\n')fprintf('Valuecomputedhereisf''''(0)=%7.5f.\n',f(3,1))clfresetplot(eta,f(2,:));axis([0infinity01.4]);title...('Falkner-Skanequation,positivewallshear,\beta=0.5.')xlabel('\eta'),ylabel('df/d\eta'),shg%定义ODEfun函数functiondfdeta=ODEfun(eta,f)beta=0.5;dfdeta=[f(2);f(3);-f(1)*f(3)-beta*(1-f(2)^2)];%定义BCfun函数functionres=BCfun(f0,finf)res=[f0(1);f0(2);finf(2)-1];求解:边界条件:2(1())0ffff(0)0,(0)0,()1,fff如果取1,计算结果如何?边值问题的求解0.5