質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2603閲覧

3次方程式の二分法の近似計算

KeiD

総合スコア26

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/24 14:35

編集2020/07/24 14:48

二分法を使い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;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C

1 if( f(x0)*f(xc)<0.0 ){ //範囲を縮める方向の判定 2 xn=xc; 3 printf("%.6f %.6f\n",x0,xn); 4 5 }else x0=xc;

else 側でprintfしてないからじゃない?

投稿2020/07/24 14:46

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiD

2020/07/24 14:51

あいがとうございます!
KeiD

2020/07/24 14:51

ありがとうございます。
episteme

2020/07/24 14:55 編集

コードの非対称性に気付かんかった? どこでプリントしてるかを追っかければ10秒で気付くっしょ。
iiyudana

2020/07/24 15:28 編集

補足ですが、 if (fabs(x0 - xc) < 0.001) { のとこxc -> xnにすれば最後の行もでるようになる
KeiD

2020/07/24 15:41 編集

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問