二分法を使用して 2 つの関数のルートを比較するために、この C コードを作成しました。最初の関数 (g(x)) は正しく実行されますが、2 番目の関数 (h(x)) は画面に「#1QO」を出力します。コードで何が間違っていたのかわかりません。
説明していただけますか?どんな種類の助けでも大歓迎です。ありがとう!
#include <stdio.h>
#include <math.h>
typedef double (*DFD) (double);
double g (double x)
{
double y;
y = pow (x,3) - pow (x,2)-1;
return y;
}
double h (double x)
{
double k;
k = 1.0 + (1.0/x) + (1.0 /pow (x,2));
return k;
}
double bisection (DFD f, double x0, double x1,double tol)
{
int i;
double middle;
for (i=1;i<=50;) {
middle = (x0+x1)/2.0;
if (fabs (middle - x0) <tol) return middle;
if (f(middle)* f(x0) <0.0) x1 = middle;
else x0 = middle;
}
}
int main () {
double root_gx, root_hx = 0.0;
root_gx = bisection (g,0,2,0.0005);
printf ("Root found using g(x) = %.3lf\n",root_gx);
root_hx = bisection (h,1,2,0.0005);
printf ("Root found using h(x) = %.3lf\n",root_hx);
printf ("Difference between the two roots = %.3lf\n", (fabs (root_gx- root_hx)));
return 0;
}
編集:二分でi = 1を初期化し、に変更bisection (h,0,2,0.0005)
するbisection (h,1,2,0.0005)
と動作します皆さんありがとう!