二分法を使いx^3-3x^2+7x-8=0の近似解を求める以下のプログラムを用い
x0=1,xn=2で入力すると出力が
範囲[x0,xn]
x0=1
xn=2
x0 xn
1.000000 2.000000
1.500000 1.750000
1.625000 1.687500
1.671875 1.679688
1.671875 1.675781
1.671875 1.673828
f(x)=0の解は: x=1.67
となりましたが、これをx0 xn の区分けを
範囲[x0,xn]
x0=1
xn=2
x0 xn
1.000000 2.000000
1.500000 2.000000
1.500000 1.750000
**1.625000 1.750000 **
1.625000 1.687500
**1.656250 1.687500 **
1.671875 1.687500
1.671875 1.679688
1.671875 1.675781
1.671875 1.673828
**1.672852 1.673828 **
f(x)=0の解は: x=1.67
とx0 xnの区分けを上記の太字も加わるような出力表に変更するにはどのようなプログラム変更が必要なのか、ご存じの方ご教示お願い致します。
include<stdio.h> #include<math.h> #include<stdlib.h> //exit関数のために必要 #define IMAX 1000 //計算回数 #define EPS 1.0e-5 //収束条件 double f(double x); int main(void){ double x0,xn,xc; int i; printf("範囲[x0,xn]\nx0="); scanf("%lf",&x0); printf("xn="); scanf("%lf",&xn); printf(" x0 xn\n"); printf("%.6f %.6f\n",x0,xn); xc=(x0+xn)/2; if(f(x0)*f(xn)<0.0){ //範囲の中に解があれば計算開始 for(i=0;i<IMAX;i++){ if( f(x0)*f(xc)<0.0 ){ //範囲を縮める方向の判定 xn=xc; printf("%.6f %.6f\n",x0,xn); }else x0=xc; xc=(x0+xn)/2; if( fabs(x0-xc) < 0.001) { printf("f(x)=0の解は: x=%.2f\n",xc); exit(1); } }printf("解が収束しませんでした\n"); }printf("[x0,xn]には解が存在しません\n"); return 0; } double f(double x){ return x*x*x-3*x*x+7*x-8;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 14:51
2020/07/24 14:51
2020/07/24 14:55 編集
2020/07/24 15:28 編集
2020/07/24 15:41 編集