dポイントプレゼントキャンペーン実施中!

学校で出されたCプログラムの課題で、1問だけどうしても出来ない問題があるんです。
「方程式 f(x) = x2 - 2 = 0 を 2 分法を用いて解くプログラムを作成せよ。ここで、方程式 f(x) = x2 - 2 は関数として定義せよ。上位の方から 4 桁目まで正しい値が出たらループを止めるようにする。」
というものなのですが、この「2分法」というやり方もよく分かりません。
プログラムの作成方法と併せて教えて頂けると幸いです。

A 回答 (2件)

こんな感じでしょうか?



#include <stdio.h>

/* 関数 f(x) */
double f(double x) {
 return x*x-2.0;
}

/* 二分法 初期値 x1<x2 と 誤差限界 eps を入力 */
double bisec(double x1, double x2, double eps) {
 double x;
 while (x2 - x1 >= eps) {
  x = (x1+x2)/2.0; /* 中点計算 */
  if (f(x1)*f(x) > 0.0) { /* 同符号か判定 */
   x1 = x;
  } else {
   x2 = x;
  }
 }
 return (x1+x2)/2.0;
}

int main(void) {
 double eps=0.00001;
 printf("%lf %lf\n",bisec(-2,0,eps), bisec(0,2,eps));

 return 0;
}
    • good
    • 4
この回答へのお礼

実行できました!!!!!本当にありがとうがざいます。
JaritenCatさんには何度も助けて頂いていますね。本当に感謝しています。
感謝の意を込めて良回答にさせて頂きます。ありがとうございました。

お礼日時:2005/01/28 23:42

2分法というのは、ぶっちゃけて言えば、


関数のマイナスになる値とプラスになる値の間のどこかに0になる部分があるということで、その範囲を2分割して狭めていく方法です。(多分^^;)
例えば、
f(1)=-1で
f(2)=2ですから
1と2の間のどこかに、0になるようなXが存在します。
そこで、仮に、(1+2)/2の値
f(1.5)を求めてみると
0.25になります。これは正ですので
f(1)=-1で
f(1.5)=0.25
となって1と1.5の間にあります。
次に(1+1.5)/2の値を求めてみると
f(1.25)=-0.4375
となって今度は負になりましたので、
1.25と1.5の間にあることになります。
まあ、そんな感じで求めます。

参考URL:http://okweb.jp/kotaeru.php3?qid=1143518
    • good
    • 2
この回答へのお礼

早速のご回答ありがとうございました。
何だかプログラムにするのは難しそうですね…
頑張ってみます!!!!!ありがとうございました!!!

お礼日時:2005/01/28 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!