任意の4次関数の極大値、極小値を求めるプログラムを書きたい

回答受付中の質問

任意の4次関数の極大値、極小値を求めるプログラムを書きたい

任意の4次関数y=ax^4+bx^3+cx^2+dx+eの極大値、極小値を求めるプログラムをC言語で書きたいのですが、それを求める公式やアルゴリズム、またはフリーで使えるライブラリってあるでしょうか?

係数a,b,c,d,eは任意の実数をとります。

投稿日時 - 2010-03-07 21:53:14

QNo.5733535

すぐに回答ほしいです

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

回答(4件中 1~4件目)

ANo.4

プログラムに数学を持ち込むのは効率的で論理的ですが、曲線の動きを感覚的にとらえるアプローチがあってもよいのではないかとかねがね思っています。
全く数学無しで極大値、極小値を求めるのもしんどいのでここでは曲線にそって接線を動かしていき、寝たところで極大か極小ということにしてどちらかは目で見て判断するというのが好いと思います。
つまりグラフィックです。
曲線上の2点を結ぶ直線は
y=y1-(x-x1)*(y2-y1)/(x2-x1)
です。x2-x1を小さくして一定値に保ったまま(x1,y1)を動かしていくと上のことが近似的に実現できます。工学的には誤差の範囲を抑えている限り近似値と真値は区別する必要はありません。

投稿日時 - 2010-03-07 22:39:15

お礼

グラフィック表示させることが出来ない環境です。
処理も全自動で行いたいのですが…。

投稿日時 - 2010-03-08 20:27:06

ANo.3

補足要求です。
極値を取るxとそのときのyの値を、どのような形で得たいですか?

例えば、x=√2で極値をとるときに、出力としてそのまま
  『x=sqrt(2)』
という様な形を得たいですか?
それとも近似値で
  『x=1.4142』
という形で良いのでしょうか?

近似値でも良いなら、hを微小値として
  (f(x+h)-f(x))/h
でf'(x)が計算できます。
更に、
  f'(x)*f'(x+h) < 0
を満たすときに、f(x+h/2)が極値になると言えます。
これをコードに起こせば終わりです。

投稿日時 - 2010-03-07 22:10:31

お礼

近似値が求まればOKです。
条件を満たすかどうかを総当りでチェックしていくということでしょうか?

投稿日時 - 2010-03-08 20:21:35

ANo.2

数学を駆使して計算させれば良いのですよ。
微分をすれば、その時の上昇、下降がわかります。
微分値で0は極大値か極小値ですよね、その前後の傾きの代わり方でどちらなのか分かりますよね。
範囲は、ー無限から+無限まで計算させましょう。
初めはXの値を少し大きく取り1~10、それでどこに有るか検討つけたらXの値は0.1位でその範囲を計算させます。
4次式は極大値、極小値は合計2つから3つあります、これは分かりますね。

投稿日時 - 2010-03-07 22:03:54

お礼

範囲を上手に絞りながら総当りってことですかね?
なるべく高速に処理させたいので、ちょっと処理時間が気になるところですが…。
他にいい方法がなければ試してみます。

投稿日時 - 2010-03-08 20:16:08

ANo.1

微分して3次方程式を解けばいいのでは?
ま、この手のやつは例外処理が面倒なんですよね。3次方程式の解の数で場合わけしなきゃいけないけど、まあそれだけでしょう。

投稿日時 - 2010-03-07 22:03:01

お礼

有難うございます。
微分した3次式を、このへんの公式にあてはめて解けばいいのでしょうか?
http://www.akamon-kai.co.jp/yomimono/kai/kai.html

投稿日時 - 2010-03-08 20:12:42

あわせてチェックしたい
  • 極大・極小の問題?! ...
  • 極大 極小 ...
  • 実数 ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら

おすすめリンク