二阶非线性常微分方程的打靶法matlab实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二阶非线性常微分方程的打靶法

1.问题:

试用打靶法求二阶非线性常微分方程亮点边值的数值解:

要求用Matlab 编程计算,请给出一些例子,验证你的算法与程序的正确性。

2.打靶法分析:

非线性打靶法:

非线性打靶法的基本原理是将两点边值问题(1)转化为下面形式的初值问题令z = y ′,将上述二阶方程降为一阶方程组

3.Matlab 源代码:

创建M 文件:

function ys=dbf(f,a,b,alfa,beta,h,eps)

ff=@(x,y)[y(2),f(y(1),y(2),x)];

xvalue=a:h:b;%x取值范围

n=length(xvalue)

s0=a-0.01;%选取适当的s的初值

x0=[alfa,s0];%迭代初值

flag=0;%用于判断精度

y0=rk4(ff,a,x0,h,a,b);

if abs(y0(1,n)-beta)<=eps

flag=1;

y1=y0;

else

s1=s0+1;

x0=[alfa,s1];

y1=rk4(ff,a,x0,h,a,b);

if abs(y1(1,n)-beta)<=eps

flag=1;

end

end

if flag~=1

while abs(y1(1,n)-beta)>eps

s2=s1-(y1(1,n)-beta)*(s1-s0)/(y1(1,n)-y0(1,n)); x0=[alfa,s2];

y2=rk4(ff,a,x0,h,a,b);

s0=s1;

s1=s2;

y0=y1;

y1=y2;

end

end

xvalue=a:h:b;

yvalue=y1(1,:);

ys=[xvalue',yvalue'];

function x=rk4(f,t0,x0,h,a,b)%rung-kuta法求每个点的近似值(参考大作业一)t=a:h:b;%迭代区间

m=length(t);%区间长度

t(1)=t0;

x(:,1)=x0;%迭代初值

for i=1:m-1

L1=f(t(i),x(:,i));

L2=f(t(i)+h/2,x(:,i)'+(h/2)*L1);

L3=f(t(i)+h/2,x(:,i)'+(h/2)*L2);

L4=f(t(i)+h,x(:,i)'+h*L3);

x(:,i+1)=x(:,i)'+(h/6)*(L1+2*L2+2*L3+L4);

end

4.举例

求二阶非线性方程的边值问题:

在matlab 控制台中输入:

f=@(x,y,z)(x^2+z*x^2);

x0l=0;

x0u=2*exp(-1);

alfa=0;

beta=2;

h=0.01

dbf(f,x0l,x0u,y0l,y0u,h,1e-6);

>> y=ans(:,2);

x=ans(:,1);

>> plot(x,y,'-r')

>>

结果:

再输入:

>> m=0:0.01:2;

>> n=m.*exp(-1/2*m);

>> plot(n,m)

>> plot(x,y,'-r',n,m,'-b')

5.结论:

根据得到的图像,可以看到在x 的初值一起末值也就是α和β两点做到了较好的逼近,但是中间部分的逼近不是很理想。我想可能是在编程的过程当中可能算法上有些问题。以后有机会再改进。

相关文档
最新文档