2
に機能の
#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;
}
を転機ファーストを検索しますこれは無関係なコードの初期の部分に関連しています。私はあなたのように私の「Y」変数を無視することができますC.</p> <p>で線形探索法を使用して、関数の最初の転換点を見つけようとしていますC
私はwhileループを使ってxをdy/dxに入れようとしています(私はその派生物が正しいことを確認しました)、そして| dy/dx | > 0(別名は転換点ではないが)、dy/dxがゼロに達するまでxが少しずつ増加する。それは、この時点でxの値を表示することを意味します。
しかし、私がこのコードを実行すると、私はすべて終わりのないループになります。
代わりにwhile(diff>0)
を使用すると、xの値が正しい値に近くなりません。
私は本当にここで失われており、本当に助けに感謝します。
ありがとうございました。
'fabs(diff) 'は正確にゼロに等しいとは考えられません。たぶんあなたはそれをいくつかの非常に小さな数字と比較するべきでしょう。 – frslm
'while(fabs(diff)> 0)'は(fabs(diff)> eps)whileに変更されます。 'eps'はエラーの許容誤差に応じて小さな数値として定義されます。おそらく '1.0e-4'のように。 – MFisherKDX
'while(fabs(diff)> 0)'は1つのことを言いますが、whileループの隣にはあなたのコメントがあります。 –