这段代码错哪了,为什么加abs侯结果不一样


这段代码哪里错了,为什么加abs侯结果不一样?
下面是用牛顿迭代法解方程xxx-2x-5=0的程序代码这段代码哪里错了,为什么加abs侯结果不一样?
main()
{
  float   f(float   x);
  float   df(float   x);
  float   x1,x;
  int   n;
  x1=3;x=2;n=0;
  while(x1-x> 0.000001)           /*     改为abs(x1-x)后结果不一样     /
    {
      x1=x-f(x)/df(x);
      x=x1;
      n++;
      printf( "%f\n ",x1);
    }
  printf( "%f\n ",x1);
  printf( "%d\n ",n);
  system( "pause ");
}

float   f(float   x)
{
  float   f;
  f=x
xx-2x-5;
  return   f;
}

float   df(float   x)
{
  float   df;
  df=3xx-2;
  return   df;
}

c语言 基本概念 程序开发

天心skyル 11 years, 4 months ago


因为你一个循环下来,x肯定等于x1了,那么就跳出循环了。你应该这么改:

while(abs(x1-x)> 0.000001)
{
x=x1; //先保存x1的值
x1=x-f(x)/df(x);

n++;
printf( "%f\n ",x1);
}
x=x1; //获得更准确的值

sakaras answered 11 years, 4 months ago

Your Answer