演習5二分法の二分法ゼロの説明需要関数

そこ関数:\(F(X)= X ^ + 6.375 3 \ X ^ 2 + 3倍\ Xタイムズ- 26である\。)
既知の\(F(1.0)\ LT 0、F(2.0)\ GT 0 \) と式\(F(X)= 0 \) 間隔で\([1.0、2.0] \)だけつのルートを有し、ルートが二分法を使用してください取得します。

入力形式

なし。

出力フォーマット

セクションにおける方程式の出力\([1.0、2.0] \)の根。必要小数点に丸めた後\(3 \)ビット。

サンプル入力

なし。

サンプル出力

利用できません。

トピック分析

2点:この質問は、アルゴリズムに関するものです。
我々は以前、整数の半分を使用し、問題のヘッドは、実数間の二分法を使用して、そしてその半分の整数処理は、詳細が若干異なりますが、オリジナルの目的、私たちはこの道を知っている必要があります二分法思考の件名、次いでこの溶液をこの質問は非常に簡単になります。
タイトルは私達に教えた\(F(1.0)\ LT 0、F(2,0)\ GT 0 \)のように区間において、および私達の画像が連続関数である\(\ [1.0、2.0])を一定の間実現可能な解が存在する\(X_0の\)を満たす\(F(X_0)= 0 \)その後、私たちすることができます半分。
我々は、コマンド開始\(1.0 L = \) そう\(R&LT = 2.0 \) なお、\(Lの\)\(R&LTの\)は実数です)。
我々は、その後に再循環\(R - Lの\のLT 10 ^ { - 5} \) ここで、我々は、サイクルの終了時のようにすることができ、\(Lの\)\(R&LT \)小数点以下3桁の結果を保持している同じA。
その後、我々は、各テイク\(MID =(L + R&LT)/ 2 \)を 2例があります:

  • 。状況1:\(F(MID)\ GT 0 \) この場合記載区間の答\([MID、R] \ ) ためには、我々は\(L = MID \)
  • ケース2:\(F(MID)\ル0 \) 実際には、\(F(ミッド)= 0 \) 私たちは直接ループを終了することができますが、同一の処理とケース1を実行するために、我々は聞かせたときに(\をMID = R&LT \)

このループ処理は、我々は、サイクルの終了時にそれを保証することができる\(Lの\)\(R&LT \)の前に\(4 \)を超えないことにより、小数\(10 ^ {--5} \) その後、時間を選択しないように\を( Lの\)または\(R \)と二つの重要な結果の配列は、私たちの答えです。

次のようにコードは次のとおりです。

#include <bits/stdc++.h>
using namespace std;
double f(double x) {
    return x*x*x + 6.375*x*x + 3.0*x - 26.0;
}
int main() {
    double L = 1.0, R = 2.0;
    while (R - L >= 1e-5) { // 1e-4是科学计数法,表示1乘10的-4次方
        double mid = (L + R) / 2.0;
        if (f(mid) > 0.0) R = mid;
        else L = mid;
    }
    printf("%.3lf\n", R); // 因为R-L<=1e-4,所以这个时候输出L和R都一样
    return 0;
}

おすすめ

転載: www.cnblogs.com/zifeiynoip/p/11450628.html