正文

牛顿下山法  求非线性方程的根2006-03-29 21:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bakers/11604.html

分享到:

目标:       用牛顿下山法,求非线性方程x*x*x-x-1=0,的根。   要求:        输入,初值,误差限,最大迭代次数,最大下山次数;        输出,近似根以及下山因子; 时间:          3.39日晚   代码(C++实现): //牛顿下山法 //非线性方程求根   #include"iostream"#include"stdlib.h"#include"math.h"#include"conio.h"using namespace std; double function(double x){       return x*x*x-x-1;       } double function_dao(double x){       return 3*x*x-1;       }void error_output(int p){     switch(p)     {              case 1:cout<<"超出下山次数,请另选择初值!"<<endl;              case 2:cout<<"超出迭代次数,失败!";              }               }              int main(){    double x,e,l=1,x1;  int m,n,k=1,j;  cout<<"请输入初值: ";  cin>>x;  cout<<"输入精度: ";  cin>>e;  cout<<"输入最大迭代次数 : ";  cin>>m;  cout<<"输入最大下山次数:  ";  cin>>n;    loop:       j=1;        if(function(x)==0){                           cout<<"该初值就是方程的根!";                           cout<<endl;                           return 1;                           }       x1=x-l*function(x)/function_dao(x);       for(l=1,j=1;j<=n&&k==1;j++)        {           x1=x-l*function(x)/function_dao(x);           if(fabs(function(x1))>fabs(function(x))){                                                           l=l/2;                                                           cout<<"x0 "<<x<<"  x1 "<<x1<<endl;                                                           }         else break;           }        for(l=1,j=1;j<=n&&k!=1;j++)        {           x1=x-l*function(x)/function_dao(x);           if(fabs(function(x1))>fabs(function(x))){                                                           l=l/2;                                                           cout<<"x0 "<<x<<"  x1 "<<x1<<endl;                                                           }            else break;           }        if(j>n)error_output(1);        if(fabs(x1-x)<e)cout<<"求得方程的根:"<<x1<<endl;        else{             if(k==m)error_output(2);             else {                  k=k+1;                  x=x1;                  goto loop;                  }                  }  getch();  return 1;   }以上程序在DEV C++中调试通过,由于时间仓触,未对程序进行优化。但算法核心无误,基本达到要求;

阅读(10612) | 评论(15)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册