- ベストアンサー
二分法で関数の最小値を求める
- プログラムを組んだがうまくいかない。原因は?
- 関数f1とf2の最小値が0になる。
- プログラムの形は変更せずにminfx内のみ変更する。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
では、ヒントだけ。 double を返す関数を抜けるとき、最後に実行されるのは、 return (式) でなければなります。 これだけでわからなければ、これを念頭に置いて、再帰で定義されたフィボナッチ数列とか、階乗とかのソースを探して眺めてみると、何かひらめくかもしれません。 あと、No.2 でも指摘されていますが、「最小値を求める」ためののだとすると、ロジック自体も間違っています。 よくある、方程式を解く(関数が0を横切る点を探す)のなら、一定の条件下では両端を見れば良いですが(両端の符号が異なれば、とりあえず少なくとも一個はゼロ点があるのは保証されるので)、最小値を探すのであれば、両端だけを見ても探索はできません。
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
再帰呼び出しのminfxの戻り値を現在は破棄しています これを捨ててしまっては 思い通りの結果にならないでしょう
補足
回答ありがとうございます。再帰呼び出しの仕方がまずいんでしょうか。再帰呼び出し時に値が破棄されているということはそういうことですよね。うーん、minfxではダメなんでしょうか…。しかし再帰ですからこれでいいと思うのですが…。
- himajin100000
- ベストアンサー率54% (1660/3060)
http://ideone.com/dlxJZ まぁ確かに、27行目を修正する必要が有るのはわかる。確かにわかる。 (多分コンパイラにとって文法上そこにあることがわかるのが29行目がはじめなんだろう) #system関数は意図的に削った。あともう一つのエラーは質問者宛に残しておく ==================== ##ただ、正直出題者が何を考えて出したのかがわからない。 ##例えば添付したような画像のグラフだと、最小値がいきなり右側にあることになっちゃうでしょ?(左側の垂直な直線がx = a,左側の垂直な直線がx = b,として点線がその中心とする)
補足
回答ありがとうございます。必要なのはプログラムが通るかどうかなので関数の値はあまり考慮していません。
- Tacosan
- ベストアンサー率23% (3656/15482)
minfx は何を返すの?
お礼
ありがとうございます。ヒントを参考に探してみたいと思います。