二分法+牛顿下山法

来源:互联网 发布:nginx luajit 安装 编辑:程序博客网 时间:2024/05/01 03:31

最近写了牛顿下山法,就是针对x^3-x-1=0这个函数F(x)=0求根的问题。牛顿下山法的迭代使造出一个迭代函数G(x)=x-(x^3-x-1)/(3*x^2-1),不断迭代过程中,要注意下山条件| F(xk+1) | < | F(xk) |成立。同时根据牛顿迭代公式,设定系数k有xk+1=xk+1-k*F(xk)/F'(xk),在迭代过程中为满足下山条件,而不断去寻找相应的k值使成立。在进行相关的迭代前,我们采用二分法使逼近根值,再作相关的牛顿迭代。通过F'(x)=3*x^2-1,进行相关的分析,我们可以大概得出F(x)的图像如下。

显然,可知我们的二分法该如何进行设置了~下为相应伪代码

const double H =1;//二分法逼近步长const double LIMIT = 0.1;//二分法限定范围const int N = 5;//系数最多计算次数double F(double x)//原函数{return x*x*x-x-1;}double G(double x)//迭代函数{return x-F(x)/(3*x*x-1);}double Dichotomic(double x)//二分法逼近{double a,b,fx;//b为上界,a为下界fx=F(x);if(fx>0){a=x-H;while(F(a)>0)a-=H;//寻求F(a)<0b=x;}else {b=x+H;while(F(b)<0)b-=H;//寻求F(b)>0a=x;}do{x=(a+b)/2;fx=F(x);if(fx*F(a)>0)a=x;else b=x;}while( (b-a)>LIMIT );return x;}void Newton(double x0){//参数设定     ……     //二分逼近     ……//迭代循环         {         ……             //判断是否满足下山条件               {             //探测系数值,用二分法,每次减为半步长            ……         }         }}

        

原创粉丝点击