[计算机数值分析]迭代法求根过程的加速
问题描述
对于收敛的迭代过程,只要迭代足够多次,就可以使得结果达到任意精度,但有时迭代过程收敛缓慢,从而使计算量变得很大,因此对迭代过程加速的研究显得尤为重要。
设 х₁ 是根 х﹡的某个近似值,用迭代公式校正一次得:x₁′ = f(х₁),假设f(x)的一阶导数在所考察得范围内改变不大,其估计值为 L,则有 х﹡ -x₁′ ≈ L(x -х₁),由此解出 х﹡ ≈ 1.0 / (1 - L) × x₁′ - L / (1 - L) × х₁。也就是说,如果将迭代值一次的值 x₁′ 与迭代初值 x₁ 进行加权平均,可以期望所得到得解是比 x₁′ 更好得近似根。
总的来说,通过给定估计值L的控制,对一次迭代值跟迭代初值进行加权平均,我们有理由相信加权后的解相比加权前的解可以是更好的近似根。
运行示例
- 此为未对迭代过程加速,找到符合精度要求的近似根,需要迭代9次
- 此为加速迭代过程,估计值L取0.2,迭代4次后找到符合精度要求的根。显然,加速的效果是显著的
源码
//程序实现用迭代法求方程的根
#include<iostream>
#include<cmath>
using namespace std;//用户自定义的迭代函数f(x)
double function(double x)
{double result = pow(x + 1, 1.0 / 3);return result;
}int main(void)
{double x0, x1, x2, accrucy, item, L; //x0为迭代初值,x1=f(x0);accrucy为精度;L为估计值;x2为加权后的近似解int n, k = 1; //n为允许的最大迭代次数cout << "请输入迭代初值:";cin >> x0;cout << "请输入精度:";cin >> accrucy;cout << "请输入您想要的最大迭代次数:";cin >> n;cout << "请输入L:";cin >> L;do {x1 = function(x0);x2 = 1.0 / (1 - L) * x1 - L / (1 - L) * x0; //对迭代值x1与x0进行加权平均得到x2if (abs(x0 - x2) < accrucy) //根的近似解符合要求,输出近似根{ cout << "近似解为:" << x2;}else //继续下一次迭代,直至找到符合精度要求的根或最大迭代次数用完{ if (k > n) //允许迭代n次,当迭代次数大于n时结束迭代{ cout << "迭代次数耗尽,迭代结束!\n未找到符合精度要求的根!!!" << endl;break;}else {//输出本次迭代信息cout << "第" << k << "次迭代!\t迭代函数的值为:" << x2 << "\t此次迭代精度为:" << abs(x2 - x0) << endl;//交换x0与x2,为下一次迭代做好准备item = x0;x0 = x2;x2 = item;k++;}}} while (abs(x0 - x2) >= accrucy); //循环进行条件为找到的根不符合精度要求return 0;
}
[计算机数值分析]迭代法求根过程的加速相关推荐
- 计算机数值分析-非线性方程求根-08
计算机数值分析 方程求根的迭代方法: 不是一次多项式的方程就是非线性方程 多项式超过5次方的不存在求根公式 非线性方程可能有无穷多个解,要强调求解区间,一般用迭代法求数值解. 二分法(对分法): 基本 ...
- [计算机数值分析]埃特金算法加速迭代法求根过程
Spring-_-Bear 的 CSDN 博客导航 由于 前有加速方案 需要提供迭代函数 φ ( x ) φ(x) φ(x) 的导数 φ ′ ( x ) φ'(x) φ′(x) 而不便于实际应用. 若 ...
- matlab加速迭代法方程求根,【源码】迭代法求根的matlab算法
[源码]迭代法求根的matlab算法 [源码]迭代法求根的matlab算法 本篇是在课程学习中自己编程实现的迭代法计算非线性方程或者超越方程近似根的算法,写一下,后边便于复习和期末课程设计引用. % ...
- 牛顿迭代法求根——C语言
牛顿迭代法求根的原理: 设r是 的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 ,称x1为r的一次近似值.过点 做曲线 的切线,并求该切线与x轴交点的横 ...
- oj第十一周训练——牛顿迭代法求根
问题及代码 Description 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b,c,d的值一次为1,2,3,4,由主函数输入.求x在1附近的一个实根.求出根后由主函数输出.结果保 ...
- 2021-01-07 matlab数值分析 非线性方程求根 牛顿法
matlab数值分析 非线性方程求根 牛顿法 %牛顿法求非线性方程的根: % 输入:fun--非线性函数:dfun--非线性函数导数:x0--初始值:tol--精度: % 输出:x--非线性方程数值根 ...
- 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...
2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec 内存限制: 128 MB 提交: 562 解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...
- 【源码】牛顿迭代法求根的matlab实现
牛顿迭代法求根的matlab实现 本篇是在课程学习中自己编程实现的牛顿迭代法计算非线性方程或者超越方程近似根的算法,写一下,后边便于复习和期末课程设计引用. 牛顿迭代法本质上是一种特殊的不动点迭代,只 ...
- 使用牛顿迭代法求根(C)
题目:使用牛顿迭代法求根,方程ax3 + bx2 + cx + d = 0,系数a,b,c,d的值依次是1,2,3,4,由主函数输入,求x在1附近的一个实根.求出主函数输出. #include < ...
最新文章
- 奠定了整个计算机科学的基础是什么,冯 诺依曼对计算机科学发展所作的贡献是什么...
- python简单代码input-python基础 input()函数
- leetcode 10、Regular Expression Matching
- 共克时艰:科技助力湖北地区银行业务线上转型
- xv6解析-- 多处理器操作
- 工作124:报错可以直接查看下面红字寻找对应的报错
- NLP Subword三大算法原理:BPE、WordPiece、ULM
- Qt:Windows编程—Qt实现本地服务管理
- vue请求数据完成后执行_生产库删除数据后怎样执行对应的undo sql来恢复数据?...
- 开箱即用的 Prometheus 告警规则集
- 该如何来开发这个喜欢的功能呢?
- 解决 jQuery 和其他库的冲突
- 《转》通往高级工程师的道路
- css如何设置动画,css3如何设置动画?css设置简单动画的方法
- GSCC呼叫中心系统
- Angular.js(出库列表页)
- 中国超级稻在18个亚非国家试种推广 国稻种芯百团计划行动
- 关于十二平均律及律学发展简史
- DES加密解密Delphi、C#互通
- 网页Loding效果的实现