以下の近似値を求めるプログラムを実行し
x0=1,xn=2を入力すると
範囲[x0,xn]
x0=1
xn=2
x0 xn
1.000000 2.000000
1.500000 2.000000
1.500000 1.750000
1.500000 1.750000
1.625000 1.750000
1.625000 1.687500
1.625000 1.687500
1.656250 1.687500
1.671875 1.687500
1.671875 1.679688
1.671875 1.679688
1.671875 1.675781
1.671875 1.675781
1.671875 1.673828
1.671875 1.673828
1.672852 1.673828
と出力されますが下記太字のように同じ値が出力されています。
x0 xn
1.000000 2.000000
1.500000 2.000000
1.500000 1.750000
**1.500000 1.750000 **
1.625000 1.750000
1.625000 1.687500
1.625000 1.687500
1.656250 1.687500
1.671875 1.687500
1.671875 1.679688
1.671875 1.679688
1.671875 1.675781
**1.671875 1.675781 **
1.671875 1.673828
**1.671875 1.673828 **
1.672852 1.673828
同じ値が2度以上表示されないようにするにはどう変更すればよいか
ご存じの方ご教示お願い致します。
#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; printf("%.6f %.6f\n",x0,xn); xc=(x0+xn)/2; if( fabs(x0-xn) < 0.001) { 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 23:38 編集