0

この超越方程式を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);

正解です?

ありがとう!

4

2 に答える 2

2

ニュートン法や割線法(実際にはそれほど遅くはないが、はるかに使いやすい)のように、数値法を使用して方程式を解きます。最後の1つは、次のxの式を書き直さないでください。丸め誤差(ルート付近の問題)があまり影響しないように、そのように記述されています。

于 2013-03-25T16:44:35.903 に答える
1

最も簡単な解決策は、与えられた式を解に収束するまで繰り返すことです。これは、タイプの方程式を解くための固定小数点反復法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であることがわかります。

一般的な求根アルゴリズムでは、二分法割線法ニュートン法、ハレー法など、他のアルゴリズムの方が便利な場合があります。

于 2013-03-25T17:58:41.367 に答える