この超越方程式をCで解く必要があります。
x = 2.0-0.5sen(x)
私はこれを試しました:
double x, newx, delta;
x = 2.0 - 0.5;
newx = sin(x);
delta = fabs(newx * x);
printf("%f", delta);
正解です?
ありがとう!
最も簡単な解決策は、与えられた式を解に収束するまで繰り返すことです。これは、タイプの方程式を解くための固定小数点反復法x = f(x)
です。
#define TOLERANCE 1e-8
#define MAX_ITER 50
double solve_equation() {
double x = 1.0; /* 1.0 is our initial guess */
double x_old;
int i = 0; /* iteration counter */
do {
x_old = x;
x = 2 - 0.5*sin(x); /* magic! */
i++;
} while (fabs(x-x_old)/x > TOLERANCE && i < MAX_ITER);
return x;
}
この特定のケースでは、メソッドは高速に収束し、反復回数の上限は不要です。答えは1.50121007326であることがわかります。
一般的な求根アルゴリズムでは、二分法、割線法、ニュートン法、ハレー法など、他のアルゴリズムの方が便利な場合があります。