Matlab求解边值问题方法+例题ppt课件.ppt
经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用1.把待解的问题转化为标准边值问题把待解的问题转化为标准边值问题 2.因为边值问题可以多解,所以需要为期望解指定一个初始因为边值问题可以多解,所以需要为期望解指定一个初始猜测解。该猜测解网(猜测解。该猜测解网(Mesh)包括区间)包括区间a,b内的一组网内的一组网点(点(Mesh points)和网点上的解)和网点上的解S(x)3.根据原微分方程构造残差函数根据原微分方程构造残差函数4.利用原微分方程和边界条件,借助迭代不断产生新的利用原微分方程和边界条件,借助迭代不断产生新的S(x),使残差不断减小,从而获得满足精度要求的解,使残差不断减小,从而获得满足精度要求的解 Matlab求解求解边值问题方法:方法: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上的初始网络,通常是等距排列的(上的初始网络,通常是等距排列的(1M)一维数组。)一维数组。注意:使注意:使x(1)=a,x(end)=b;格点要单调排列。;格点要单调排列。v是对解的初始猜测是对解的初始猜测solinit(可以取别的任意名)是(可以取别的任意名)是“解猜测网(解猜测网(Mesh)”。它是一个结构体,带如下两个域:它是一个结构体,带如下两个域:solinit.x是表示初始网格有序节点的(是表示初始网格有序节点的(1M)一维数组,并且)一维数组,并且solinit.x(1)一定是一定是a,solinit.x(end)一定是一定是b。M不宜取得太大,不宜取得太大,10数量级左右即可。数量级左右即可。solinit.y是表示网点上微分方程解的猜测值的(是表示网点上微分方程解的猜测值的(NM)二维数组。)二维数组。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是一个结构体是一个结构体usol.x是指令是指令bvp4c所采用的网格节点;所采用的网格节点;usol.y是是y(x)在在sol.x网点上的近似解值;网点上的近似解值;usol.yp是是y(x)在在sol.x网点上的近似解值;网点上的近似解值;usol.parameters是微分方程所包含的未知参数的近似解值。是微分方程所包含的未知参数的近似解值。当被解微分方程包含未知参数时,该域存在。当被解微分方程包含未知参数时,该域存在。边值问题求解指令:求解指令:bvp4c()经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用原方程组等价于以下标准形式的原方程组等价于以下标准形式的方程组:方程组:solinit=bvpinit(linspace(0,1,10),1 0);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(Analytical Solution,Numerical Solution)%定义定义ODEfun函数函数function dydx=ODEfun(x,y)dydx=y(2);y(1)+10;%定义定义BCfun函数函数function bc=BCfun(ya,yb)bc=ya(1);yb(1);求解两点边值问题:求解两点边值问题:令:令:边界条件为:边界条件为:边值问题的求解边值问题的求解经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用原方程组等价于以下标准形式的原方程组等价于以下标准形式的方程组:方程组:solinit=bvpinit(linspace(0,1,10),0 1);sol=bvp4c(ODEfun,BCfun,solinit);x=0:0.1:1;y=deval(sol,x);xP=0:0.1:1.0;yP=1 1.0743 1.1695 1.2869 1.4284.1.5965 1.7947 2.0274 2.3004 2.6214 3;plot(xP,yP,o,x,y(1,:),r-)legend(Analytical Solution,Numerical Solution,.location,Northwest)legend boxoff%定义定义ODEfun函数函数function dydx=ODEfun(x,y)dydx=y(2);(1+x2)*y(1)+1;%定义定义BCfun函数函数function bc=BCfun(ya,yb)bc=ya(1)-1;yb(1)-3;求解:求解:令:令:边界条件为:边界条件为:边值问题的求解边值问题的求解经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用c=1;solinit=bvpinit(linspace(0,4,10),1 1);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函数函数function dydx=ODEfun(x,y,c)dydx=y(2);-c*abs(y(1);%定义定义BCfun函数函数function bc=BCfun(ya,yb,c)bc=ya(1);yb(1)+2;求解:求解:令:令:边值问题的求解边值问题的求解经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用solinit=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函数函数function dydx=ODEfun(x,y,lmb)q=15;dydx=y(2);-(lmb-2*q*cos(2*x)*y(1);%定义定义BCfun函数函数function bc=BCfun(ya,yb,lmb)bc=ya(1)-1;ya(2);yb(2);求解:求解:边界条件:边界条件:本例中,微分方程与参数本例中,微分方程与参数的数值有关。一般而言,对于任意的的数值有关。一般而言,对于任意的值,该问题无解,值,该问题无解,但对于特殊的但对于特殊的值(特征值),它存在一个解,这也称为微分方程的特征值问题。值(特征值),它存在一个解,这也称为微分方程的特征值问题。对于此问题,可在对于此问题,可在bvpinit中提供参数的猜测值,然后重复求解中提供参数的猜测值,然后重复求解BVP得到所需的参得到所需的参数,返回参数为数,返回参数为sol.parameters边值问题的求解边值问题的求解经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用infinity=6;solinit=bvpinit(linspace(0,infinity,5),0 0 1);options=bvpset(stats,on);sol=bvp4c(ODEfun,BCfun,solinit,options);eta=sol.x;f=sol.y;fprintf(n);fprintf(Cebeci&Keller report f(0)=0.92768.n)fprintf(Value computed here is f(0)=%7.5f.n,f(3,1)clf resetplot(eta,f(2,:);axis(0 infinity 0 1.4);title.(Falkner-Skan equation,positive wall shear,beta=0.5.)xlabel(eta),ylabel(df/deta),shg%定义定义ODEfun函数函数function dfdeta=ODEfun(eta,f)beta=0.5;dfdeta=f(2);f(3);-f(1)*f(3)-beta*(1-f(2)2);%定义定义BCfun函数函数function res=BCfun(f0,finf)res=f0(1);f0(2);finf(2)-1;求解:求解:边界条件:边界条件:如果取如果取1,计算算结果如何果如何?边值问题的求解边值问题的求解