#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值远远接近正确的值。
我真的迷失在这里,真的很感激任何帮助。
感谢。
答案 0 :(得分:0)
这里的问题是你正在将一个double值与零进行比较,这是永远不会满足的,结果永远不会结束循环。
例如
if(.00001 > 0 )// a true value
和
if(.00000000000000000001 > 0 )//is still true.
因此你的while循环变成了永无止境的循环。因此尝试使用下面的内容
while(fabs(diff)> .00001 )