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