在C中找到函数的第一个转折点

时间:2017-10-30 20:13:49

标签: c eclipse while-loop calculus

 #include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define PI 3.14159265

int main()
{
    setvbuf(stdout,NULL,_IONBF,0);
    setvbuf(stderr,NULL,_IONBF,0);
    double x, y;        
    double a=0.4+(6019.0/25000.0);          
    double diff;
    double diff2;

    x=0;          //Starting Value of x=0
    diff=a;     //Setting diff to start with value of 'a'. Because at x=0, f'(x)=a


    while(fabs(diff)>0)     //Starts a while loop, which runs until diff<=0
    {
        diff=(a*pow(x, a-1)-((1/a)*pow(x, (1/a)-1)+a)) * cos(pow(x, a) - pow(x, 1/a) + (a*x));      //f'(x)
        x+=0.0001;      

    }

printf(" The First Maximum Turning Point is at x=%g\n",x);      //prints the x coordinate of the TP

return 0;
}

我试图使用C中的线性搜索方法找到函数的第一个转折点。

您可以忽略我的'y'变量,因为这与代码的前一部分无关。

我正在尝试使用while循环将x放入dy / dx(我已经验证了导数是正确的),而| dy / dx | &GT; 0(也就是说它不是转折点),x每次略微增加,直到dy / dx达到零。然后打算在此时打印x的值。

然而,当我运行此代码时,我得到的只是一个永无止境的循环。

如果我使用while(diff>0)代替,我得到的x值远远接近正确的值。

我真的迷失在这里,真的很感激任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

这里的问题是你正在将一个double值与零进行比较,这是永远不会满足的,结果永远不会结束循环。

例如

  if(.00001 > 0 )// a true value

  if(.00000000000000000001 > 0 )//is still true.

因此你的while循环变成了永无止境的循环。因此尝试使用下面的内容

   while(fabs(diff)> .00001 )