• ベストアンサー

方程式を2分法を用いて解くプログラム

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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; }

candlize
質問者

お礼

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

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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
candlize
質問者

お礼

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

関連するQ&A