• ベストアンサー

対数表示のグラフを書くには

Visual Basic 2008を使用する初心者です。グラフ表示のやりかたで教えてください。 例えばy=1/(a+x) aは定数、xが変数のような関数を表示させたいとします。 これのx軸をlogにして表示させたいとき、どのように記述すればよいでしょうか?

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

  • ベストアンサー
回答No.3

対数軸はY軸ではなくX軸でしたね。 なので, Dim logY As Double logY = Math.Log(y, 10) は Dim logX As Double logX = Math.Log(x, 10) と読み替えてください。 で,グラフですが,今回の場合だと,y = f(x)の形式ですから, xを変化させながら(logX, y)をDrawLineで結んでいけばよいことになります。 画面は方眼紙だと思って,まずは方眼紙に自分でグラフを書くことを考えてください。 ただし,DrawLineを使う場合はフリーハンドではなく,定規で線を結ぶことになります。 さて,方眼紙には最初から座標が振ってあります。 この座標は印刷されていて,変更できない物と考えてください。 ここに自分でグラフを書くなら,その座標と書きたい座標の対応を考えますよね。 それと同じ事を,コードで書くことになります。 で,言葉で説明しようと思っていたのですが,チェック用にコードを書いたので手抜きして載せてしまいます。 Const a As Double ' a Dim width As Integer ' Control.ClientSize.WidthやImage.Width等から得られる描画領域の幅 Dim height As Integer ' Control.ClientSize.HeightやImage.Height等から得られる描画領域の高さ Dim g As Graphics ' 出力先のGraphicsオブジェクト Dim previousLogX As Double = Math.Log(1, 10.0) ' 一つ前の点のLog Xの値 Dim previousY As Double = 1 / (1 + a) ' 一つ前の点のYの値 Dim scaleX As Double = 2 ' スケーリング用。Log Xの最大値 Dim scaleY As Double = previousY ' スケーリング用。Yの最大値 For x As Integer = 2 To 100 ' 1は計算済み  Dim logX As Double = Math.Log(x, 10)  Dim y As Double = 1 / (x + a) ' 座標を計算する  Dim prevPosX As Integer = CType(Math.Floor(width * previousLogX / scaleX), Integer)  Dim prevPosY As Integer = height - CType(Math.Floor(height * previousY / scaleY), Integer) ' Y軸は座標が逆  Dim posX As Integer = CType(Math.Floor(width * logX / scaleX), Integer)  Dim posY As Integer = height - CType(Math.Floor(height * y / scaleY), Integer)  g.DrawLine(Pens.Blue, prevPosX, prevPosY, posX, posY) ' 前の値を覚えておく  previousLogX = logX  previousY = y Next あくまでチェック用のテストコードなので無駄も多いですし, Graphicsの変換行列を使えば計算は不要かもしれませんが……。

kimbauer
質問者

お礼

Yune-Kichiさま これです!私が欲していたものは!非常に助かりました。このたびは誠にありがとうございました。

その他の回答 (2)

回答No.2

Logの算出方法がわからない,ということでしょうか。 そうであれば,System.MathクラスのLogメソッドを使います。 Const a As Double = *** Dim x As Double Dim y As Double Dim logY As Double y = 1 / (a + x) logY = Math.Log(y, 10) あとは,左上を原点として右下方向に値が増加する座標系であると言うことに注意して,線を引いていけばよいです。 # Y軸が通常と向きが逆になっています。

参考URL:
http://msdn.microsoft.com/ja-jp/library/hd50b6h5.aspx
kimbauer
質問者

補足

Yune-Kichiさま コメントありがとうございます。イメージできました。 がしかし、logYとgrph.DrawLine関数をどう結びつけると線を引けるのかも理解しておりませんでした。 grph.DrawLine(Pens.Blue, x1, y1, x2, y2) 申し訳ありませんが、もう少しだけお付き合いください。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

算数も、コンピューターも良く知らないのであてずっぽうですが、 10^(1/(a+x))のグラフを書けばよいのでは?

関連するQ&A

  • 対数関数 グラフ

    関数y=log(3)xのグラフを描けと言われた場合、Xに1を代入した場合x軸の方に1でy軸に0ですよね?2を代入した場合ってx軸に2でY軸方向にいくつ進むのでしょうか?

  • 対数とグラフの問題教えて下さい

    f(x)=log2( 2X )    底2 g(x)=log2( X-a )   底2,a:実定数 の時、g(x)はf(x)をX軸方向に「 (第一問) 」だけ平行移動し、Y軸方向に「 (第二問) 」だけ平行移動したモノである。 とありまして、答えが、第一問=a,第二問=-1 になっていたのですが、Y軸方向に動きますか? 解答が間違っている可能性は低いと思いますので、 正答を教えて頂けますでしょうか。

  • 対数関数のグラフの描き方

    ※logのあとの[]は、底を表しています! たとえば、y=log[2]x だったら、y=2のx乗(指数関数)の逆関数をとると考えて、 まずは、指数関数のグラフを書き、y=xに対象なぐらふを 書いているのです。 値をとるのも難しそうですし。 なにかよい方法ありますでしょうか? この方法でやると、  y=log[2](1-x) y=log[1/2](-x) y=log[2]4x などを描こうとすると詰まってしまうのですが。 むしろ描き方が分かりませんってかんじです。 お願いします!!

  • 対数関数を平行移動すると・・・

    関数y=log[2]x・・・(1)のグラフをx軸の負の方向に2,y軸の正の方向に1だけ平行移動すると関数y=log[2](2x+4)になると思うのですが、このグラフは真数条件を満たしていると言えるのでしょうか?このグラフのyが-1のときxは-7/4になるのですが、これは(1)のx>0の真数条件を満たしていないですよね?そもそも、平行移動なんてしても良いのですか?グラフが下に行くとy軸を越えて負になってしまいますよね。すみません、ちょっと混乱してきました。だれかすっきりさせてください。お願いします。

  • y=34e^-0.16x を片対数グラフ化するという課題で、

    y=34e^-0.16x を片対数グラフ化するという課題で、 ln(x)=log(x)/log(e) =2.303・log(x) より、 log(y)=b・log(ex)+log(a) =(b/2.303)x+log(a) a=34,b=-0.16 より、 log(y)=-0.0695x+1.531 としたのですが、うまくいきませんでした。 どなたかご教授お願いします。 (ちなみにy軸が対数軸で目盛は1,10,100,1000,10000まであります)

  • 対数関数

    対数関数f(x)=log(3)2x,g(x)=log(3)(2x+a)について考える。ただし、a>0とする。 関数y=g(x)のグラフは、y=f(x)のグラフをx軸方向に(アイ)/ウだけ平行移動したものである。 次に、h(x)=log(9)(bx)とする。 G(x)=g(x)-h(x)とするとき、G(1/2)=G(9/2)=0となるのは、 a=エ,b=オカのときである。 この問いの解き方を教えてください。

  • 対数関数のグラフについて

    関数y=log[1/2](x) のグラフについてです。 (底が1/2ということです) このグラフは写真のようになるのでしょうか(青色のグラフ) 私はxの値が0より大きいときのグラフのみ正しいと思うのですがどうなのでしょうか? またx=0のときyの値は何なのでしょうか? 回答よろしくお願いします。

  • 対数関数のグラフについて

    logの所で分からない事があります。 logに関しては授業としては一応習い終わったのですが 習ってる時からグラフの部分があまり分かっていませんでした。 1次関数のグラフはなんとかできますが その頃からグラフが特別苦手です。 中学レベルの数学もできない箇所があるのに、logのグラフをやる時点で無理があるのは重々分かっていますが、それでもやらなくてはならず 中学箇所の補強をしている時間もありません。 y=loga xのところで 問題は 「y=2log2 2(x-1)のグラフを書きなさい」です。 私は下記のように答えました。 「2y=2 (2~y)~2=2~2 2~2~y=4(x-1) 2~2~y=4x-4 4x-4=4y」 記号の使い方があっているか分かりませんが 前半部分の読み 2のy乗=2 (2のy乗)2乗=2の2乗 2の2y乗=4(x-1) です。 解き終わって、グラフを書いたら直線になったので その時点で間違っている事は分かったのですが、それ以外の考えが思いつきませんでした。 この問題は授業で答え合わせも終わっているのですが ペースが速いため、自分の理解が追いつかず、 一応正答をノートに書いただけになっています。 答えは 2{log2 2+log2(x-1)} =2+2log2(x-1)です。 私の答えが正答とは違うので間違っているのは分かりますし 考え方も全く違うように見えますから、根本的に考え方が間違っているのだとも分かります。 ただ、それで納得ができません。 私が上記のような考え方をしたのは その直前にやったところで loga Mp=ploga Mが成り立つことを示しなさいで log a Mp ↓ a~r=M ↓ (a~r)=Mp ↓ a~r~p=Mp というのがあったので、 こういう考えに到りました。 結局、こういう間違った考えに到ってしまうレベルの頭という事なのですが その私にでも分かるように、私の間違いを指摘していただきたいです。 この考えと、グラフの解き方の考えが違うという意味だけで無く もっと詳しく間違いを指摘していただきたいです。 納得できずモヤモヤしています。

  • 指数関数・対数関数のグラフについて

    はじめまして。 y=a^xなどのグラフの形は存じているのですが、 y=a^(x+3) や y=a^(3-x) などといった、グラフはどのような形になるのでしょうか? また、y=a^xとy=log a x がy=xのグラフで対照なように、 y=a^(x+3) のグラフは y=log a (x+3)とy=xのグラフで対照な形になるのでしょうか? よろしくお願いします。

  • logのグラフ

    自然対数のグラフといったら logxの場合、 x→∞ならy→∞ x→+0ならy→-∞となりy軸が漸近線となりますよね logx^2の時は 0<x のとき logxのグラフよりy軸に引き寄せられている感じだけど、 x→∞ならy→∞ x→±0ならy→-∞となり、y軸を漸近線とした、同じタイプのグラフですよね? 違いは0<xとx<0の部分はy軸に関して対称なグラフになり、x>0にもグラフが描けるという点ですよね。 けどlog(x+1)になるとx=0のときにlog1となり e^0=1なので x=0のときy=0となり 漸近線だったはずのy軸にもグラフが描けるように変化してしまうんでしょうか・・・? というと、漸近線というのが存在しないようなグラフになり、まったく別物ですよね・・・? ここで少し混乱してしまいました。 xというのは変数だから、xもx+1も基本的に変わりないと思っていました。 というのは・・・ y=x+1とy=x y=(x+1)^2とy=x^2 などといったものは基本的に形は同じグラフですよね。 けど対数のグラフは logx とlog(x+1)でまったく別物になってしまうんでしょうか・・・? なぜグラフのことが問題なのかというと、数IIIの範囲で回転体の体積を求めるときにグラフが外側にあるか内側かの判断のために必要だったからです・・・。 ☆入試で回転体が出たとき、仮に、グラフの概形が自分が書いたのであっているか微妙なとき、答案に書くべきでしょうか?答えがあえば書く必要はないでしょうか? (どこからどこまでの区間においてどちらのグラフが外側内側と明記すれば)

専門家に質問してみよう