牛顿迭代法
2017-06-25 22:43
190 查看
原来很简单就不多说了,如果有不明白的地方可以百度一下,下面我给一段代码演示一下牛顿迭代方法的用法,例子比较简单。
#include<iostream> #include<cmath> using namespace std; #define f(x) (x*x*(x-1.0)-1.0) //举例函数x^3-x^2-1 #define g(x) (3.0*x*x-2.0*x) //导函数3x^2-2x #define epsilon 0.0000001 //精度 #define MAXREAPT 100 bool RootNewton(double &x) { double xk1,xk0; xk0 = x; //初值 for (int k=0; k<MAXREAPT; k++) { if (g(xk0) == 0.0)//牛顿迭代法缺陷在于:收敛是否与初值x0密切相关 {//如果g(xk0)数值特别小时,有可能发生从一个根跳到另一个根附近的情况 cout<<"迭代过程中导数为0."<<endl; return false; } xk1 = xk0 - f(xk0)/g(xk0);//key step if (fabs(xk1-xk0) < epsilon && fabs(f(xk1)) < epsilon) {//注意迭代结束条件是: |f(xk1)| < ε和|xk1-xk0| < ε同时成立,防止根跳跃 x = xk1; return true; } else { xk0 = xk1; } } //迭代失败 cout<<"迭代次数超过预期."<<endl; return false; } int main() { double x; cout<<"牛顿迭代法求方程根,请输入初始迭代x0值:"<<endl; cin>>x; if(RootNewton(x)) { cout<<"该值附近的根为:"<<x<<endl; } else { cout<<"迭代失败!"<<endl; } system("pause"); return 0; }
相关文章推荐
- 牛顿迭代法 二分法
- 牛顿迭代法、双点割线法及改进的双点割线法的比较
- 用牛顿迭代法求方程2X*X*X-4X*X+3*X-6=0在X=1.5 附近的根!
- 牛顿迭代法
- 【算法】牛顿迭代法
- 【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
- 牛顿迭代法
- 牛顿迭代法
- 牛顿迭代法(Newton's Method)
- 利用牛顿迭代法求平方根
- 牛顿迭代法求方程的根
- 牛顿迭代法
- 迭代法解方程:牛顿迭代法、Jacobi迭代法
- 用牛顿迭代法求1附近的根
- 梯度下降法、坐标下降法、牛顿迭代法
- 第十一周练习--牛顿迭代法
- 牛顿迭代法
- 牛顿迭代法(Newton's Method)
- UVA 10428 - The Roots(牛顿迭代法)
- 最优化方法:牛顿迭代法和拟牛顿迭代法