C++は二分法を実現して方程式の近似解を求めます。


二分法は方程式の近似根を解く方法である。関数について f(x)f(x)は二分法で求めます。 f(x)f(x) 近似解の場合は、まず反復区間を設定します。 [-20,20])、区間両端引数 x の値に対応する f(x) 値は異号です。あとで両端を計算します。 x の中点位置 x。 対応する f(x) ,その後、私たちの反復区間を更新して、対応する反復区間の両端を確保します。 x の値に対応する f(x) 値はまだ異号です。
このプロセスを繰り返すと、私たちはいつかの中間点の値になります。 x。 対応する f(x')たとえば:

上記の反復プロセスの第1回の反復区間は[a 1,b 1]で、中点b 2を取って、第2回の反復区間は[a 1,b 2]で、中点a 2を取って、第3回の反復区間は[a 2,b 2]で、a 3を取って、そして第4回の反復区間は[a 3,b 2]で、赤色の中点を取ります。 c,発見されました。 f(c) の値が小さいですϵ,出力c 近似解として。
ここでは、私たちはpx+q=0のような形でそれを実現します。 の一元一次方程式の解を求めます。
ここでは、あなたが完了したプログラムに正の整数が2つ入力されます。 p 和 q(評価機が与えた0<OpO≦1000 しかも0入力フォーマット
評価の機会は繰り返しあなたのプログラムを実行します。プログラムが実行されるたびに、空欄で区切られた一連の正しい整数を含む行に入力します。 p 和 qです。データ入力の方程式px+q=0と考えられます。 全部正解して、[−20,20]に解きます。 の区間内です。
出力フォーマット
出力は1行で、1つの数字が含まれています。方程式のpx+q=0 の近似解を示します。四捨五入で小数点以下を残してください。 4 ビット数
サンプル入力1
55 9
サンプル出力1
-0.636
サンプル入力2
-22 4
サンプル出力2
0.818 
コード:

#include <cstdio>
#include <cmath>
#define EPSILON 1e-7
 
double bisection(int p, int q, double (*func)(int, int, double));
double f(int p, int q, double x);
int main() {
    int p;
    int q;
    scanf("%d %d", &p, &q);
    printf("%.4lf
", bisection(p, q, f)); return 0; } double bisection(int p, int q, double (*func)(int, int, double)) { double x1 = -20; double x2 = 20; double x = 0; while(fabs((*func)(p,q,x))>EPSILON) { x = (x1+x2)/2.0; double fx1 = (*func)(p,q,x1); double fx = (*func)(p,q,x); if(fx*fx1>0) {x1 = x;} else {x2 = x;} } return x; } double f(int p, int q, double x) { return p * x + q; }
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。