[计算机数值分析]埃特金算法加速迭代法求根过程
Spring-_-Bear 的 CSDN 博客导航
由于 前有加速方案 需要提供迭代函数 φ ( x ) φ(x) φ(x) 的导数 φ ′ ( x ) φ'(x) φ′(x) 而不便于实际应用。
若将迭代值 x ‾ k + 1 \overline{x}_{k+1} xk+1 = φ ( x k ) \varphi(x_{k}) φ(xk) 再迭代一次,得
x ~ k + 1 = φ ( x ‾ k + 1 ) \widetilde{x}_{k+1}=\varphi{(\overline{x}_{k+1})} x k+1=φ(xk+1)
由于
x ∗ − x ~ k + 1 ≈ L ( x ∗ − x ‾ k + 1 ) x^{*}-\widetilde{x}_{k+1}\approx L(x^{*}-\overline{x}_{k+1}) x∗−x k+1≈L(x∗−xk+1)
将其与
x ∗ − x ‾ k + 1 ≈ L ( x ∗ − x k ) x^{*} - \overline{x}_{k+1} \approx L(x^{*}-x_{k}) x∗−xk+1≈L(x∗−xk)
联立,消去未知的 L,有
x ∗ − x ‾ k + 1 x ∗ − x ~ k + 1 ≈ x ∗ − x k x ∗ − x ‾ k + 1 \frac{x^{*}-\overline{x}_{k+1}}{x^{*}-\widetilde{x}_{k+1}}\approx\frac{x^{*}-x_{k}}{x^{*}-\overline{x}_{k+1}} x∗−x k+1x∗−xk+1≈x∗−xk+1x∗−xk
由此得
x ∗ ≈ x ~ k + 1 − ( x ~ k + 1 − x ‾ k + 1 ) 2 x ~ k + 1 − 2 x ‾ k + 1 + x k x^{*}\approx\widetilde{x}_{k+1}-\frac{(\widetilde{x}_{k+1}-\overline{x}_{k+1})^{2}}{\widetilde{x}_{k+1}-2\overline{x}_{k+1}+x_{k}} x∗≈x k+1−x k+1−2xk+1+xk(x k+1−xk+1)2
若以上式右端得出得结果作为新的改进值,则这样构造出得加速公式不再含有关于导数的信息,但它需要使用两次迭代值进行加工。其具体计算公式如下:
- 迭代 x ‾ k + 1 \overline{x}_{k+1} xk+1 = φ ( x k ) \varphi(x_{k}) φ(xk)
- 迭代 x ~ k + 1 = φ ( x ‾ k + 1 ) \widetilde{x}_{k+1}=\varphi{(\overline{x}_{k+1})} x k+1=φ(xk+1)
- 改进 x k + 1 = x ~ k + 1 − ( x ~ k + 1 − x ‾ k + 1 ) 2 x ~ k + 1 − 2 x ‾ k + 1 + x k x_{k+1}=\widetilde{x}_{k+1}-\frac{(\widetilde{x}_{k+1}-\overline{x}_{k+1})^{2}}{\widetilde{x}_{k+1}-2\overline{x}_{k+1}+x_{k}} xk+1=x k+1−x k+1−2xk+1+xk(x k+1−xk+1)2
上述方法称为埃特金(Aitken)加速方法。
使用埃特金加速算法解前例 求方程 x 3 − x − 1 = 0 x^{3} -x-1=0 x3−x−1=0 的唯一正根,如下图所示,埃特金算法的加速效果是显著的。
运行示例:
- 未使用加速算法,需要迭代 9 次
- 使用普通加速算法,需要迭代 4 次
- 使用埃特金加速算法,仅需迭代 2 次
程序源码:
#include <iostream>
#include <cmath>using namespace std;/*** f(x) = (x+1)^{1/3)*/
double f(double x)
{return pow(x + 1, 1.0 / 3);
}int main(void)
{double x0;cout << "请输入迭代初值:";cin >> x0;double accrucy;cout << "请输入精度:";cin >> accrucy;int n;cout << "请输入您想要的最大迭代次数:";cin >> n;double x3;int count = 0;do{double x1 = f(x0);double x2 = f(x1);// x3 为利用埃特金加速公式处理后的近似解x3 = x2 - pow(x2 - x1, 2) / (x2 - 2 * x1 + x0);if (abs(x0 - x3) < accrucy){cout << "近似解为:" << x3 << endl;break;}// 继续下一次迭代,直至找到符合精度要求的根或最大迭代次数用完cout << "第 " << ++count << " 次迭代!\t迭代函数的值为:" << x3 << "\t此次迭代精度为:" << abs(x3 - x0) << endl;double item = x0;x0 = x3;x3 = item;if (count > n){cout << "迭代次数耗尽,迭代结束!未找到符合精度要求的根!!!" << endl;break;}} while (abs(x0 - x3) >= accrucy);return 0;
}
[计算机数值分析]埃特金算法加速迭代法求根过程相关推荐
- 数值分析-埃特金算法
目录 一.前言 二.什么是埃特金算法 三.埃特金算法的原理 四.埃特金算法的步骤 1.确定插值点和半方差函数模型 2.计算插值点与已知点之间的距离和半方差函数值 3.确定权重 4.进行插值计算 5.评 ...
- [计算机数值分析]迭代法求根过程的加速
问题描述 对于收敛的迭代过程,只要迭代足够多次,就可以使得结果达到任意精度,但有时迭代过程收敛缓慢,从而使计算量变得很大,因此对迭代过程加速的研究显得尤为重要. 设 х₁ 是根 х﹡的某个近似值,用迭 ...
- matlab加速迭代法方程求根,【源码】迭代法求根的matlab算法
[源码]迭代法求根的matlab算法 [源码]迭代法求根的matlab算法 本篇是在课程学习中自己编程实现的迭代法计算非线性方程或者超越方程近似根的算法,写一下,后边便于复习和期末课程设计引用. % ...
- 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...
2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec 内存限制: 128 MB 提交: 562 解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...
- oj第十一周训练——牛顿迭代法求根
问题及代码 Description 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b,c,d的值一次为1,2,3,4,由主函数输入.求x在1附近的一个实根.求出根后由主函数输出.结果保 ...
- 牛顿迭代法求根——C语言
牛顿迭代法求根的原理: 设r是 的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 ,称x1为r的一次近似值.过点 做曲线 的切线,并求该切线与x轴交点的横 ...
- 【源码】牛顿迭代法求根的matlab实现
牛顿迭代法求根的matlab实现 本篇是在课程学习中自己编程实现的牛顿迭代法计算非线性方程或者超越方程近似根的算法,写一下,后边便于复习和期末课程设计引用. 牛顿迭代法本质上是一种特殊的不动点迭代,只 ...
- 使用牛顿迭代法求根(C)
题目:使用牛顿迭代法求根,方程ax3 + bx2 + cx + d = 0,系数a,b,c,d的值依次是1,2,3,4,由主函数输入,求x在1附近的一个实根.求出主函数输出. #include < ...
- 每日一题--20200428--用牛顿迭代法求根,c语言实现
用牛顿迭代法求根.方程为ax^3 +bx^2+cx+d=0,系数a.b.c.d由主函数输入,求x在1附近的一个实根.求出根后,由主函数输出. #include <stdio.h>#incl ...
最新文章
- ECharts 饼图绘制教程
- java方法体逻辑不会写怎么办,想自己写框架?不会写Java注解可不行
- opencv 解析yuv_OpenCV Mat格式存储YUV图像
- linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档
- VTK:PolyData之SmoothPolyDataFilter
- centos 6.3 x86_64安装32位JDK的问题
- java反向注入_java 控制反转和依赖注入的理解
- 上海大学计算机网络实验报告3,上海大学计算机组成原理实验报告(全)
- php+redis实现消息队列
- android文章 - 收藏集 - 掘金
- 【心电信号】基于matlab GUI自适应滤波+平滑滤波+小波滤波心电信号处理【含Matlab源码 1809期】
- vfp 打开服务器文件,VFP下客户机访问任意映射服务器的方法
- elasticsearch与kibana踩过的坑
- 药物组合疗法的机器学习方法(综述类)
- SpringBoot:EasyExcel动态字段(不创建对象)多sheet、多文件|压缩包格式导出
- h5页面的写法_一步一步教你如何开发h5页面
- 【python】画玫瑰花喽!!!
- 域名解析暂时失败(二)
- SAP FI-CO总账科目简析
- tomcat 日志禁用