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

上传人:牧羊曲112 文档编号:3235797 上传时间:2023-03-12 格式:DOCX 页数:3 大小:37.19KB
返回 下载 相关 举报
二阶非线性常微分方程的打靶法matlab实现.docx_第1页
第1页 / 共3页
二阶非线性常微分方程的打靶法matlab实现.docx_第2页
第2页 / 共3页
二阶非线性常微分方程的打靶法matlab实现.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《二阶非线性常微分方程的打靶法matlab实现.docx》由会员分享,可在线阅读,更多相关《二阶非线性常微分方程的打靶法matlab实现.docx(3页珍藏版)》请在三一办公上搜索。

1、二阶非线性常微分方程的打靶法matlab实现二阶非线性常微分方程的打靶法 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

2、(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 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;

3、 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

4、(:,i)+(h/6)*(L1+2*L2+2*L3+L4); end 4.举例 求二阶非线性方程的边值问题: 在matlab 控制台中输入: f=(x,y,z)(x2+z*x2); 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 的初值一起末值也就是 和 两点做到了较好的逼近, 但是中间部分的逼近不是很理想。我想可能是在编程的过程当中可能算法上有些问题。以后 有机会再改进。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号