简单迭代法求解方程举例
2017-03-14 16:05
190 查看
迭代法是方程及方程组求解的重要方法。关于其原理可另行查询。这里附上一篇简单的迭代法小程序。
用于解方程:x+e^x=0,求解精度0.00001.
编程思考:用一元方程的基本迭代法求根,所构造的迭代函数必须是收敛的,也就是说经过一系列的迭代后,计算结果应该趋近于一个定值。若经过许多次迭代后仍然不收敛,就可能是发散的,为防止无限制地循环下去,可以设定最多循环次数,例如循环50次仍不收敛就不再迭代,终止程序。下面附上自己修改过的程序(愿指正):
用于解方程:x+e^x=0,求解精度0.00001.
#include<stdio.h> #include<math.h> #define fnx(x) -exp(x) void main() { float x0,x1; x0=0; x1=fnx(x0); while(fabs(x1-x0)>0.00001) { x0=x1; x1=fnx(x1); } printf("x=%f\n",x1); }
编程思考:用一元方程的基本迭代法求根,所构造的迭代函数必须是收敛的,也就是说经过一系列的迭代后,计算结果应该趋近于一个定值。若经过许多次迭代后仍然不收敛,就可能是发散的,为防止无限制地循环下去,可以设定最多循环次数,例如循环50次仍不收敛就不再迭代,终止程序。下面附上自己修改过的程序(愿指正):
#include<stdio.h> #include<math.h> #define fnx(x) -exp(x) void main() { float x0,x1,x2,x3; unsigned int count=0,number=0; //count 用于统计连续收敛值的个数,number用于限制不收敛情况下最多的迭代次数。 x0=0; x1=fnx(x0); x2=fabs(x1-x0); while(x2>0.00001) { number++; x3=x2; x0=x1; x1=fnx(x1); x2=fabs(x1-x0); if(x3>=x2) count++; else count=0; if(number>=50 && count==0) { printf("不收敛,exit!!\n"); break; } } if(count!=0) { printf("x=%f\n",x1); } }
相关文章推荐
- 利用matlab的PDE工具箱求解Neumann边界的Poisson方程之2
- 牛顿迭代法在求解三次方程上的应用
- LA3485二分+求解积分方程+辛普森算法计算积分
- 求解ax + by = c 这类方程
- 埃特金加速迭代求解方程
- UVa11300 - Spreading the Wealth(方程求解+中位数)
- 求解方程根的近似解:弦截法
- 一元两次方程求解
- C语言进阶-第6讲:递归法问题求解(易列写递归方程)
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- 利用Matlab求解Laplace方程
- 使用matlab求解二维浅水方程的数值解(一)—浅水波
- 使用matlab求解二维浅水方程的数值解(二)—波浪的折射
- 求解方程
- 求解三次方程
- l1范数最小化求解系数方程_正交匹配追踪法(orthogonal matching pursuit)
- [VB.NET源码]36_求解方程
- Python简单求解高阶方程的数值解
- ACM一类方程问题的求解[最短路建模] bzoj2118
- [物理学与PDEs]第1章习题14 求解 rot 方程