7--牛顿下山法

作者在 2008-05-10 21:19:42 发布以下内容

#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "stdlib.h"

#define Et 1e-3  /* 下山因子下界 */
#define E1 1e-3  /* 根的误差限 */
#define E2 1e-3   /* 残量精度 */

double f(double x) { return x*x*x - x - 1;}   /* f(x)的表达式 */
double f1(double x) { return 3*x*x - 1;}  /* f(x)的导数 */

void main()
{
    int b;
   
    double f(double);
    double f1(double);
   
    void errormess(int);   /* 根据计算结果,输出判断情况 */
   
    double x0;
   
    int Newton(double(*)(double),double(*)(double),double &x0);
   
    x0 = 0.6;
   
    b = Newton(f,f1,x0);
   
    if( b = 1 )   printf("\n\nThe root of is x=%f\n\n",x0);
     
    else errormess(b);
}

int Newton( double(*f)(double), double(*f1)(double), double &x0 )
{
 int k = 0;
    double t = 1.0;
    double xk;
 printf("k\t\t   t\t\t   xk\t\t  f(xk)\n");
 printf("--------------------------------------------------------------------------------");
    printf("%d\t\t\t\t%f\t%f\t\t\t",k,x0,f(x0));
   
    xk = x0 - t*(  f(x0)/f1(x0) );

 k = k+1;

    printf("%d\t\t\%f\t%f\t%f", k , t , xk , f(xk) );
  
 while(  ( fabs( f(xk) ) > fabs( f(x0) ) ) && ( fabs( f(xk) ) > E2 )   )
 {
    
  printf("  不满足下山条件");

  if( t >= Et )  t = t/2 ;

        xk = x0 - t*(  f(x0) / f1(x0) );

        printf("\t%d\t\t%f\t%f\t%f",k,t,xk,f(xk));
  

 }
 printf("   下山成功");


 if(  (fabs( f(xk) ) < fabs( f(x0) ))  && ( fabs( f(xk) ) > E2 )   )
 {
     t = 1.0 ; 
        do
  {
   k++;
            x0 = xk;

            xk = x0 - t*(  f(x0) / f1(x0) );

            printf("\t\t%d\t\t%f\t%f\t%f",k,t,xk,f(xk));
            printf("    下山成功");

  }while( fabs( xk - x0 ) >  E1 );
 }
   
    x0 = xk ;
   
    return  1;
}

void errormess(int b)
{
    char *mess;
    switch(b)
    {
        case
            -1:mess =  "f(x)的导数为0!";break;
        case
            -2:mess = "下山因子已越界,下山处理失败";break;
        default:
            mess = "其他类型错误!";
    }
    printf("the method has failed ! because %s",mess);
}

   


 

大小: 2.08 KB
版本: V1.0
出品: 本站原创
来源: 本地
语言: 简体中文
授权: 免费
默认分类 | 阅读 883 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档