- ベストアンサー
VBSで二次関数
VBScriptを使って二次関数の最大、最小を求めるプログラミングをしたいのですがどうすればよいでしょう?a,b,cとx1,x2(xの範囲)を入力して求める、つまりIF...THEN...ELSE...END IF を使うということです 急いでいるのでよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
'分割の幅とかforの終了条件とかで必ずしも数学的に正しい答えは求まらないので注意 '--------------------------------------------------------------- dim a, b, c, x1, x2 dim x, y, max, min, dx a=InputBox("係数aを入力","ax^2", 1) b=InputBox("係数bを入力","bx", 0) c=InputBox("係数cを入力","c", 1) x1=InputBox("範囲の始まりx1を入力","x1", 0) x2=InputBox("範囲の終わりx2を入力","x2", 1) min=x1*(x1*a+b)+c max=min dx=abs(x2-x1)/1000 '区間を1000分割する for x=x1 to x2 step dx y=x*(x*a+b)+c if y>max then max=y if y<min then min=y next WScript.Echo "最大値:" & max WScript.Echo "最小値:" & min
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
初等の情報学習の「条件の分岐」を教えるプログラム課題でしょう。 2次の計数が、その正負によって、最小値、最大値が http://www.kwansei.ac.jp/hs/z90010/sugaku1/2jimaxmin/2jimami.htmにあるように ,2次関数 y=ax2+bx+c があるとき,そのグラフの頂点の座標を (p,q) とすると, a>0 のとき,x=p で最小値 q をとり,最大値はない a<0 のとき,x=p で最大値 q をとり,最小値はない を場合分けするときにIF...THEN...ELSE... を使うのでしょう。 あとは中学数学公式に値を代入するだけ。 値指定のInputBoxと表示のEcho以外は 四則演算(+-*/,2上はx*xで代用)で計算できる。 根を求めるのでないからSQR関数も必要ない。 ーb/(2*a) のとき最大(小)値はc-b*b/(2*a*2*a)
お礼
ありがとうございます!
No1です。 誤: 2ax+b=0 もしくは x = b/2a 正: 2ax+b=0 もしくは x = -b/2a 申し訳ありませんでした。
VBScriptを使用したことはありませんので、考え方だけ。 元の関数が ax^2+bx+c for x1 <= x <= x2 であれば微分は 2ax+bですので、最大もしくは最小のどちらかが 2ax+b=0 もしくは x = b/2a のところにあります。 あとはそのxがx1とx2の間にあるかどうかを判定して 間にない(x<x1 or x>x2)のであれば両端の値の判定を行って、大きいほうが最大値で小さいほうが最小値になります。 もしもxがx1とx2の間にあるのならば(x1<=x and x<=x2)、x1,x,x2 の値のどれかが最大値でどれかが最小値です。 この辺のロジックを作るのにIF...THEN...ELSE...END IFを使うということだと思いますけれど、プログラミングが分からないのか、二次関数が分からないのかはっきりしていないので、とりあえず二次関数の説明だけ。
お礼
分かりやすい説明、ありがとうございます!
お礼
ありがとうございます!! だいたい分かるのですが僕の知識不足で最後の WScript.Echo "最大値:" & max WScript.Echo "最小値:" & min のところの意味が分からないんですけどどういう意味でしょう?