• ベストアンサー

VBSで二次関数

VBScriptを使って二次関数の最大、最小を求めるプログラミングをしたいのですがどうすればよいでしょう?a,b,cとx1,x2(xの範囲)を入力して求める、つまりIF...THEN...ELSE...END IF を使うということです 急いでいるのでよろしくお願いします。

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

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

'分割の幅とか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

zsdzsdz
質問者

お礼

ありがとうございます!! だいたい分かるのですが僕の知識不足で最後の      WScript.Echo "最大値:" & max     WScript.Echo "最小値:" & min のところの意味が分からないんですけどどういう意味でしょう?

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

初等の情報学習の「条件の分岐」を教えるプログラム課題でしょう。 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)

zsdzsdz
質問者

お礼

ありがとうございます!

noname#60992
noname#60992
回答No.2

No1です。 誤: 2ax+b=0 もしくは x = b/2a 正: 2ax+b=0 もしくは x = -b/2a 申し訳ありませんでした。

noname#60992
noname#60992
回答No.1

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を使うということだと思いますけれど、プログラミングが分からないのか、二次関数が分からないのかはっきりしていないので、とりあえず二次関数の説明だけ。

zsdzsdz
質問者

お礼

分かりやすい説明、ありがとうございます!

関連するQ&A

  • エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛

    エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。 よろしくお願いします。 Sub XY軸() Dim Ymin Ymin = InputBox("Y軸の最少?") If IsNumeric(Ymin) Then Range("C2").Value = Ymin Else MsgBox "入力NG!" End If Dim Ymax Ymax = InputBox("Y軸の最大?") If IsNumeric(Ymax) Then Range("C3").Value = Ymax Else MsgBox "入力NG!" End If Dim Y Y = InputBox("目盛間隔?") If IsNumeric(Y) Then Range("C4").Value = Y Else MsgBox "入力NG!" End If Dim xmin xmin = InputBox("X軸の最少?") If IsNumeric(xmin) Then Range("D2").Value = xmin Else MsgBox "入力NG!" End If Dim Xmax Xmax = InputBox("X軸の最大?") If IsNumeric(Xmax) Then Range("D3").Value = Xmax Else MsgBox "入力NG!" End If Dim X X = InputBox("Xの目盛間隔?") If IsNumeric(X) Then Range("D4").Value = X Else MsgBox "入力NG!" End If Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("C2").Value '最小値 .MaximumScale = Range("C3").Value '最大値 .MajorUnit = Range("C4") '目盛間隔 End With With .Axes(xlCategory) .MinimumScale = Range("D2").Value '最小値 .MaximumScale = Range("D3").Value '最大値 .MajorUnit = Range("D4") '目盛間隔 End With End With Next End Sub

  • VBS 教えて!2

    http://oshiete1.goo.ne.jp/qa5372858.html で質問したものです。 「loopにDoがありません」というエラーが発生するのはなぜですか? VBSだとgotoが使えないので、Do~loop命令をつかったのですが、いまいち使いこなせません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do total = Inputbox("動画の再生時間を入力してください","ビットレート自動計算機") music = Inputbox("音声ビットレートを入力してください","ビットレート自動計算機") x = 335544/total - music - 15 IF not(x>0) then Msgbox "入力した情報は不正です" elseIF x>656 then Msgbox "推奨映像ビットレートは656kbpsです。" else Msgbox "推奨映像ビットレートは" & x & "kbpsです。" end IF Msgbox "続けて計算しますか?",vbyesno IF vbyes then loop elseIF vbno then Msgbox"終了します" end IF ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • 数学の関数の問題です!

    絶対値を使って表される関数 f(x)=x/1-x/の質問です。 正の実数aに対し、0≦x≦aにおける関数y=f(x)の最大値1/4であるとき aの値の取り得る範囲は何か? 正の実数bに対し、0≦x≦bにおける関数y=f(x)の最大値がf(b)であるとき bの値の取り得る範囲は 何か? 正の実数cに対し、0≦x≦cにおける関数y=f(x)の最小値がf(c)であるとき cの値は 何か? 全くわかりません。 よろしくお願いしますm(_ _)m

  • fortarn 二分法

    プログラミング全くの初心者です fortarnを用いて二分法でf=x^2-2 の解を求めるプログラミングを作りたいのですがエラーがたくさんでます 学校の先生に聞いたりして途中まではできたのですが、結局よくわかりませんでした いろいろ間違っているところがあると思いますが、特によくわからないのは、f1*f2が0以上になるときどうすればよいか、範囲の再設定をどうすればよいか、です。 以下、途中までのプログラムです。 このプログラムが完成したものを知りたいです。 少し説明も付けてくださると助かります。 program main parameter(errmax=1.0d-10) parameter(nmax=100) real*8 x0,x1,x2 real*8 f0,f1,f2 real*8 err integer n,i *initial range x0:x1 x0=0.0D0 x1=2.0D0 f0=(x0)^2-2 f1=(x1)^2-2 if(f0*f1>0)then endif err=abs(x1-x0) do n-1,nmax x2=(x0+x1)/2 f2=x2^2-2 if(f0*f2<0)then x1=x2*2-x0 else if(f1*f2<0)then x0=x2*2-x1 else if(f2=0) write(*) x2 err=abs(x1-x0) if(err>f0)then stop'Ended with success' end if end do write(*,*)x0,f0 write(*,*)x1,f1 write(*,*)'Error: not converged' end

  • VBSで・・・

    技術者向けって感じではないんですけど、[技術者向] コンピューター カテゴリにしかプログラミングがなかったもんで・・・。 まだまだ初心者のなかの初心者ですが、最近vbsを覚え始めました。 え~っと、 x=inputbox("○○") if x=条件式 then 実行文 else 実行文 if文なのかな? 上の文で、 if x=条件式 thenの 条件式のところの質問です。 そこで、 if x=この部分を教えて下さい。 then 上の形式で、変数xに、もし、○○という文字列を含んでいたら、○○を表示するという文を教えて下さい。 よろしくお願いします。

  • 二分法(FORTRAN)

    大学の情報処理演習で、FORTRANのプログラミングをやっています。 で、二分法の問題なんですが、X^3-X-1の解で、[0.2] にあるものを計算するプログラムを作る課題が出されたのですが、うまくいきません。 そこで、自分の作ったプログラムを添削してください。 program nibunnhou1 c real x1,x2,c,x,f,r f(x)=x**3-x-1 c x1=0.000 x2=2.000 r=f(x1) c write(6,*)'start' c do n=1,100 c=(x1+x2)/2 if(r*f(c).gt.0) then x1=c else x2=c end if c if(f(c).lt.0.0000) go to 1 continue end do c 1 write(6,*)'ans=' write(6,*) c c stop end です。これだと、答えが「1.」とかになってしまいます。 お願いします。

  • main関数以外での結果の表示?

    C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。) それから、このプログラムの条件は 1、main関数は値の入力と関数を呼び出すだけ。 2、関数の引数は入力した2つの値。 3、関数の中で結果を表示。 4、関数の戻り値はなし。 というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。 なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。 #include<stdio.h> int ia(int x); int ib(int y); int main(){  int a,b;  printf("A君のスコア");  scanf("%d",&a);  printf("B君のスコア");  scanf("%d",&b);  }  int ia(int x);  char ix;  if(x>=250){  ix = 'S';  }else if(x>=200 && x<250){  ix = 'A';  }else if(x>=150 && x<200){  ix = 'B';  }else if(x>=100 && x<150){  ix = 'C';  }else if(x>=50 && x<100){  ix = 'D';  else{  ix='F'; } int ib(int y);  char iy;  if(y>=250){  iy = 'S';  }else if(y>=200 && y<250){  iy = 'A';   }else if(y>=150 && y<200){  ix = 'B';  }else if(y>=100 && y<150){  iy = 'C';  }else if(y>=50 && y<100){  iy = 'D';  }else{  iy ='F'; }

  • WSH

    実行時パラメータの扱いについてなんですが、 If WScript.Arguments.Item(0) = "/all" Then end if のようなif文を使用すると、パラメータに入力がないときは、 "Microsoft VBScript 実行時エラー: インデックスが有効範囲にありません。" というエラーがでてきます。 入力があるときは正常に動作します。 そこで、パラメータに入力があるか判断するif文を以下のようにつけたのですが、 If WScript.Arguments.Count = 1 Then     If WScript.Arguments.Item(0) = "/all" Then     end if else end if elseの処理に進んだとしてもエラーになってしまいます。 解決策はあるでしょうか? どなたかご存知の方がいらしましたらよろしくお願いします。

  • 最大公約数と最小公倍数を求めるプログラムの質問

    2つの4ケタまでの自然数を入力して、最大公約数と最小公倍数を算出するプログラムExcelのVisual Basicを用いて作っています。以下のように作ってみたのですが、数値に何を入れても『4ケタまでの自然数を入れてください』になってしまいます。 4ケタの自然数の定義の仕方がおかしいのでしょうか?アドバイスお願いします<m(__)m> Private Sub 計算_Click() Dim x As Integer a = 数値 b = 数値2 c = 1 If (b > a) Then a = 数値2 b = 数値 End If If (Int(a) = a) And (0 < a)And (a <= 9999) And (Int(b) = b) And (0 < b ) And (b<= 9999) Then Do Until c = 0 x = a \ b c = a - x * b a = b b = c Loop P = 数値 q = 数値2 r = P * q / a MsgBox "最大公約数は" & a & "です" MsgBox "最小公倍数は" & r & "です" Else MsgBox "4ケタまでの自然数を入れてください" End If End Sub

  • 二次関数

    A.次の二次関数をy=a(x-p)^2+qの形(標準形)に変形し、頂点の座標とy軸との交点の座標を求めてください。 (1)y=x^2-6x+11 (2)y=x^2+2x-4 (3)y=2x^2+8x+5 (4)y=-x^2+2x+1 B.次の関数の最大値、最小値を求めてください。最大値、最小値がない場合は「なし」と書いてください。最大値、最小値をとるときのxの値も書いてください。 (1)y=x^2-6x+5 (2)y=-x^2-4x+2 C. (1)二次関数y=(x-2)^2-3の頂点の座標とy軸との交点の座標を求めてください。 (2)1≦x≦4における二次関数y=(x-2)^2-3の最大値、最小値を求めてください。 (1)端点のy座標の計算をしてください。 (x=1のとき) (x=4のとき) (2)最大値、最小値を求めてください。 (最大値)〇〇のとき 最大値 (最小値)〇〇のとき 最小値

専門家に質問してみよう