二阶非线性常微分方程的打靶法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环第四步
∆ ∆
用牛顿迭代算出新的初值 s0=s0-constant/u1(n,1);
之后把所有的步奏放进一个while循环,跳出的条件即是constant小 于给定的误差
数值实验
∆
微分方程
∆ ∆
得到图像 可以看出精度还是蛮高的
∆
分别用Bvp4c 函数和打靶法解微分方程:
Байду номын сангаас
与matlab自带函数的比较
二阶非线性常微分方程的 打靶法
计算思路
主要分为以下五步: 给定容许误差ε,迭代初始值γ1,对k=1,2,... 做: (1)用四阶Runge-Kutta 方法求解初值问,得出u1 之 后 取 其 在 γ k 的 值 , 从 而 得 到 F(γk)=u1(b,γk)-β
(2)若|F(γk)|<ε,则u1 即为所求,跳出循环。
否则: (3)用四阶Runge-Kutta 方法求解初值问题
由此得到F'(γk)=v1(b,γk)
(4)用牛顿迭代计算γk+1,即
(5)置k+1→k,转(1)直到误差在范围内。 综上,实现了打靶法对非线性方程的拟合。
∆ ∆ ∆
接下来是每一步的代码: 程序开头各变量的设置 function ys=ndbf(f,g,a,b,alfa,beta,n,eps,s0)
∆
∆ ∆
%f 为二阶导数,y''=f(x,y,y'),g 为f 对y 求偏导后的
%(a,b)为自变量迭代区间 %alfa,beta 为给定的边值条件
∆
∆ ∆
%eps 题目规定的精度
%n 为迭代次数 %选取适当的s0 的初值
循环第一步
∆ ∆ ∆ ∆ ∆
x0=[alfa,s0]; %选取合适的迭代初值 y0=RK4(f,a,b,h,x0); %龙格库塔算出u1(γk) constant=y0(n,1)-beta;
∆
这里的y0(n,1)即是u1(γk,b),constant即为F(γk)
循环第二步
∆ ∆ ∆
检验误差以跳出 if abs(constant)<eps%检验精度是否合题意 break;
循环第三步
∆ ∆ ∆ ∆
得到F函数的导数 u0=[0,1]; u1=NRK4(g,a,b,h,u0,y0); 通过偏导数求得的F’。
∆
得到结论:图像上的拟合度差不多,但是具体做数值误差之后Bvp4c 函数的精确度比较高。Bvp4c大概为1.0e-10,打靶法只有1.0e-4
再改变迭代方法进行比较
∆ ∆ ∆
用二分法迭代γk 此时不用再求F的导数,所以也不用输入偏导数g 同样解上面的微分方程:
∆
∆
图像的拟合度也比较高。
数值误差方面和牛顿迭代在同一
数量级,所以相差不大。
算法总结
∆ ∆ ∆
牛顿打靶法精度比较高 但是对于初值的选取要求很高,需要在精确值附近 而且在开头需要手动输入偏导数
∆ 谢谢观赏,祝大家期末满绩!