第12週


Mathematica を使う2


先週 Mathematica は「数値視覚化ソフトウェア」であるともいいました。 今週は Mathematica のその辺の機能を見るために色々なプロットコマンドを 試してみましょう。 まずは簡単なプロットから始めましょう。

*簡単なプロット

次は2次元プロットのし方をみてみましょう。

*2次元プロット

次は3次元プロットです。

*3次元プロット

今日は Mathematica の色々なプロットの機能についてみてみましょた。 更に詳しいことについては Mathematica の解説書を図書館で借りるなり (80冊程度広島大学の図書館にはあるようです)購入するなりして読む ことをお勧めします。

それでは今週の課題です。

+今週の課題

これで今週の授業は終わりです。 お疲れさまでした。


ホームに戻る
スケジュールに戻る

簡単なプロット

とにかく Mathematica を立ち上げましょう。

    % mkdir week12
    % cd week12
    % mathematica &

簡単なプロットコマンドの例として ParametricPlot をみてみましょう。 先週使った Plot コマンドでは1変数の関数があった時に変数と関数の値を 横軸と縦軸にプロットすることができました。 このように縦軸の値が簡単に1個の関数で書ける場合はいいのですが 横軸と縦軸を別々の関数で書いた方が簡単な場合もあります。 例えば下のような例です。

    x = sin(ωt)
    y = cos(ωt)

この場合には横軸(x)も縦軸(y)も変数 t の関数となっています。 このような場合には ParametricPlot を使ってやると簡単にプロットする ことができます。 ParametricPlot の書式と例は以下のようになっています。

    ParametricPlot[ { 横軸の関数, 縦軸の関数 }, 変数とその変化範囲 ]
    ParametricPlot[ { Sin[t], Cos[t] }, {t,0,2Pi} ]

上の例で ParametricPlot を試してみたいのですがそのままでは余り面白味が ないので Do コマンドも使って以下のようにして下さい。

    Do[
        ParametricPlot[
            { Sin[t], Cos[t+phi] }, 
            {t,0,2Pi},
            AspectRatio -> 1
        ],
        {phi,0,2Pi,Pi/20}
    ]

ParametricPlot コマンドには AspectRatio のオプションを付けました。 このオプションを付けるとプロットの縦横比を与えることができます。 Do コマンドは変数 phi を変えながらプロットを繰り返します。 プロットできた絵をアニメーションとして楽しんで下さい。

上の例でできたプロットは一般的にリサージュ図形と呼ばれます。 上の例では横軸と縦軸の振動(サイン関数)の振動数が同じですが (角速度という意味ではどちらも1です)一般的には振動数が 違っても構いません。 次の例を試してみましょう。

    Do[
        ParametricPlot[
            { Sin[t], Cos[3t+phi] }, 
            {t,0,2Pi},
            AspectRatio -> 1
        ],
        {phi,0,2Pi,Pi/20}
    ]

少し複雑なプロットができましたね。 これもやはりアニメーションとして楽しめます。 振動数の比は必ずしも整数とする必要はありません。 以下の例をやってみて下さい。

    ParametricPlot[
        { Sin[t], Cos[1.02t] },
        {t,0,20Pi},
        AspectRatio -> 1
    ]

今回は t の変化範囲の上限が20πとなっているので注意して下さい。 奇麗なプロットができたでしょうか。

次は別なプロットのコマンドを使ってみましょう。 今までのプロットの例では関数が与えられたときにプロットできました。 しかし一般的には横軸と縦軸の値が数値で与えられている場合もあります。 そのような場合には ListPlot コマンドが使えます。 ListPlot コマンドの書式と例を下に示します。

    ListPlot[ { {x1,y1}, {x2,y2}, ... {xn,yn} ]
    ListPlot[ { {1,2}, {2,4}, {4,1} ]

上の例を試してみましょう。 表示を奇麗にするためにいくつかオプションを付けましょう。

    ListPlot[
        { {1,2}, {2,4}, {4,1} },
        PlotStyle -> PointSize[0.04],
        PlotRange -> { {0,5}, {0,5} }
    ]

指定した場所に点を打つことができましたか。 点を打つ代わりに線で結ぶこともできます。

    ListPlot[
        { {1,2}, {2,4}, {4,1} },
        PlotJoined -> True,
        PlotRange -> { {0,5}, {0,5} }
    ]

上の例ではプロットする点を全てリストアップしなければなりませんが 面倒ですね。 プロットする点をリストアップするのを手伝ってくれるコマンド Table が あります。 例として f(z)=1/(1+i(z-1/z)) という複素関数があってその実数部分と 虚数部分をプロットするときにそのリストアップを Table コマンドで やってみましょう。 Table コマンド部分だけをまずやってみましょう。

    f[z_] := 1 / ( 1 + I(z-1/z) )
    Table[
        { Re[f[w]], Im[f[w]] },
        {w,0.1,5.0,0.05}
    ]

この例ではまず関数 f(z) を定義しています。 このように皆さんが関数を自由に定義できます。 次に Table コマンドの中では {Re[f[w]],Im[f[w]]} という数値のペアを 必要なだけ作っています。 変数 w は 0.1 から 5.0 まで 0.05 きざみで変化させています。 Re[ ] と Im[ ] はそれぞれ数値の実数部分と虚数部分を求めるコマンドです。 上の例でもわかるように Table コマンドの書式は

    Table[ 作りたいもの , 変数と変数の範囲及びステップサイズ ]

です。 後はこれを ListPlot を使ってプロットします。

    f[z_] := 1 / ( 1 + I(z-1/z) )
    ListPlot[
        Table[
            { Re[f[w]], Im[f[w]] },
            {w,0.1,5.0,0.05}
        ],
        AspectRatio -> 1,
        PlotStyle -> PointSize[0.04]
    ]

この例の ListPlot コマンドの中は1つ前の例のプロットする点が Table コマンドで置き換わっただけですね。 参考までに言うと、この例でできるプロットは物理的には抵抗とコイルと コンデンサーを直列につないだ回路に正弦波を入れた時の共振特性などと 同等です(R=L=C=1 とすれば上の式のようになります)。

ここでやった計算をさっき作った week12 というディレクトリーの simpleplot.ma というファイルにセーブしておきましょう。

今週の最初に戻る

2次元プロット

2次元プロットの例を見るために新しいウィンドウを開きましょう (File メニューで New を選ぶのでしたね)。 まずは DensityPlot というコマンドを使ってみましょう。 DensityPlot はその名の通り2次元関数の値を density(濃さ)で表示 します。 下の例を試してみましょう。

    DensityPlot[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1}
    ]

この例では x^2-y^2 という2次元の関数をプロットします。 プロットする範囲は x と y それぞれについて指定できます。 ですから DensityPlot の書式は

    DensityPlot[ プロットする関数 , 横軸の範囲 , 縦軸の範囲 ]

です。 上の例では絵が荒いのとグリッドライン(縦横に入っている直線)が 邪魔ですね。 下のようにすると少し奇麗になります。

    DensityPlot[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1},
        PlotPoints -> 50,
        Mesh -> False
    ]

PlotPoints を大きくすればいくらでも細かいプロットができますが 計算時間が長くかかります。 Mesh は True にするとグリッドラインを描き False にすると描きません。 もちろんカラー表示もできます。

    DensityPlot[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1},
        PlotPoints -> 50,
        Mesh -> False,
        ColorFunction -> (Hue[#/2]&)
    ]

次はもう一つ別な2次元プロットをしてみましょう。 今度使うコマンドは ContourPlot で等高線を描くコマンドです。 以下の例をやってみて下さい。

    ContourPlot[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1}
    ]

関数は先ほどの例と同じですね。 またコマンドの書式もほぼ同じなのでオプションの意味もわかると思います。 今度の例では色の塗り分けが少し邪魔ですから取ってみましょう。

    ContourPlot[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1},
        ContourShading -> False
    ]

すっきりした等高線になりましたね。

ここでやった例を 2dplot.ma というファイルにセーブしたら次へいきましょう。

今週の最初に戻る

3次元プロット

3次元プロットをするコマンドは Plot3D です。 新しいウィンドウを開いて2次元のときと同じ関数を3次元プロット してみましょう。

    Plot3D[
        x^2 - y^2,
        {x,-1,1},
        {y,-1,1}
    ]

簡単ですね。 ではもう一つ例を見てみましょう。

    Plot3D[
        Sin[x+y],
        {x,-2Pi,2Pi},
        {y,-2Pi,2Pi}
    ]

余り解像度が良くありませんね。 それとグリッドラインが少し邪魔です。 下の例を試して下さい。

    Plot3D[
        Sin[x+y],
        {x,-2Pi,2Pi},
        {y,-2Pi,2Pi},
        PlotPoints -> 30,
        Mesh -> False
    ]

上の例は sin(x+y) を sin(x+y-t) とすれば先週やった進行波の アニメーションのときの関数と似てきます。 3次元のアニメーションを以下の例のように作ってみましょう。

    Do[
        Plot3D[
            Sin[x+y-t],
            {x,-2Pi,2Pi},
            {y,-2Pi,2Pi},
            PlotPoints -> 30,
            Mesh -> False
        ],
        {t,0,2Pi,Pi/10}
    ]

波が進んで行く様子を3次元的に見れましたか。 Plot3D コマンドには3次元プロットを見る視点を変えるオプション ViewPoint もあります。 横から見たプロットの例2個と真上から見たプロットの例1個を試して みましょう。

    Plot3D[
        Sin[x+y-t],
        {x,-2Pi,2Pi},
        {y,-2Pi,2Pi},
        PlotPoints -> 30,
        Mesh -> False,
        ViewPont -> {1,1,0}
    ]
    Plot3D[
        Sin[x+y-t],
        {x,-2Pi,2Pi},
        {y,-2Pi,2Pi},
        PlotPoints -> 30,
        Mesh -> False,
        ViewPont -> {1,-1,0}
    ]
    Plot3D[
        Sin[x+y-t],
        {x,-2Pi,2Pi},
        {y,-2Pi,2Pi},
        PlotPoints -> 30,
        Mesh -> False,
        ViewPont -> {0,0,3}
    ]

当然 ViewPoint を変えたアニメーションも作れますね。 以下の例を試してみて下さい。

    Do[
        Plot3D[
            Sin[x+y],
            {x,-2Pi,2Pi},
            {y,-2Pi,2Pi},
            PlotPoints -> 30,
            ViewPoint -> {2Cos[phi],2Sin[phi],1},
            SphericalRegion -> True,
            Axes -> None
        ],
        {phi,0,Pi,Pi/20}
    ]

上の例ではアニメーションが奇麗に見えるように SphericalRegion と Axes のオプションを使いました。

ここでやった例を 3dplot.ma にセーブしておきましょう。

今週の最初に戻る

今週の課題

今週は Mathematica のプロットコマンドの機能を色々見てみました。 最初の課題は ParametricPlot を使ったプロットを描いてみてください。 できたプロットは今日作った week12 のディレクトリーに mysimpleplot.ma というファイルにセーブして、メイルにて知らせてもらえば教官が見に行きます。 良い関数が思い付かない人は減衰振動 x=exp(-0.1t)sin(t) y=exp(-0.1t)cos(t) を描いてみてはどうでしょうか。

2番目の課題としては DensityPlot を用いたプロットを何か考えて 作ってください。 できたプロットは my2dplot.ma に保存してメイルで知らせて下さい。 良い関数が思い付かない人は sin(xy), xsin(y), sin(y)/x, x/sin(y), 1/xsin(y) などを試してはどうでしょうか。 余裕があれば同じ関数を ContourPlot でもプロットしてみて下さい。

最後の課題としては Plot3D を使ったプロットを作ってください。 結果は my3dplot.ma にセーブしてメイルにて知らせてください。 良い関数が思い付かない人は (x^2-y^2)^2 を描いてみてはどうでしょうか。

これで今週の課題は終了です。

今週の最初に戻る