第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/24 13:24:06 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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

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') >> 结果:

二阶非线性常微分方程的打靶法matlab实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c701bv41wb08iiwn479eb_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top