数式処理実習 [第7回] 関数のグラフの描画 1 2次元グラフィックス

May 28, 2015
[p.1/6]
数式処理実習 [第 7 回] 関数のグラフの描画
数式を理解するためには,図を描くことが有効です.というわけで,今日はグラフィックスです.
今週も Linux を使います.まずはいつも通り,端末を起動して,作業用のディレクトリ ˜/su-shiki に移動しましょう.
端末
← ˜/su-shiki に移動
← su-shiki ディレクトリにいることを確認
kawakubo > cd⊔ ~/su-shiki
kawakubo > pwd
次に Maxima を起動しましょう.
端末
kawakubo > maxima
で,端末内に Maxima が立ち上がります.次のような画面が立ち上がったら,準備完了です.
端末・maxima
% maxima
Maxima 5.20.1 http://maxima.sourceforge.net
using Lisp SBCL 1.0.38
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1)
1
2 次元グラフィックス
まずは,y = f (x) という形の関数から描いてみましょう.二次元のグラフィックスを書くコマンドは plot2d で,書式
は
plot2d(関数式,[変数名, 開始値, 終了値], 必要なオプション各種);
です.
例えば,y = x2 のグラフを x ∈ [−2, 2] (すなわち,−2 ≤ x ≤ 2) の範囲で描いてみます.
maxima
(%i1) plot2d(x^2,[x,-2,2]);
4
3.5
3
x^2
2.5
2
1.5
1
0.5
0
-2
-1.5
-1
-0.5
0
x
0.5
1
1.5
2
これだと原点が真ん中に来ていないので,少し気持ち悪いですね.そこで,y の描画範囲もこちら側で指定してみま
しょう.x ∈ [−1, 1], y ∈ [−1, 1] の範囲でグラフを描画するには,次のようにします.
数式処理実習 [第 7 回] 関数のグラフの描画
May 28, 2015
[p.2/6]
maxima
(%i2) plot2d(x^2,[x,-1,1],[y,-1,1]);
1
x^2
0.5
0
-0.5
-1
-1
-0.5
0
x
0.5
1
さらに,この plot2d というコマンドは,複数のグラフを重ねて同時に描くことが可能です.これを行うには,1つの
関数の代わりに,複数個の関数を [ ] で括ったリストを入れます.(なお,関数が複数個ではなく,一つだけの時は [ ] を
付けてはいけません!) 例えば,y = cos x の x = 0 でのテイラー展開を考えましょう.
x2
x4
x6
x8
+
−
+
+ ···
2
24 720 40320
テイラー多項式 (近似式) の次数を 2,4,6,8 と少しずつ大きくしたものを,全て重ねて描いてみます.
maxima
cos x = 1 −
←なお,ここでは見易くするために改行しています.
別に改行しなくても構いません.
(%i3) plot2d(
[
cos(x),
1-x^2/2,
1-x^2/2+x^4/24,
1-x^2/2+x^4/24-x^6/720,
1-x^2/2+x^4/24-x^6/720+x^8/40320
],
[x,-2*%pi,2*%pi],[y,-4,4]);
4
cos(x)
1-x^2/2
x^4/24-x^2/2+1
-x^6/720+x^4/24-x^2/2+1
x^8/40320-x^6/720+x^4/24-x^2/2+1
3
2
y
1
0
-1
-2
-3
-4
-6
-4
-2
0
x
2
4
6
数式処理実習 [第 7 回] 関数のグラフの描画
May 28, 2015
[p.3/6]
青い点線が cos x です.テイラー多項式の次数が上がるに従って,cos x とフィットしていく様子がわかります.
plot2d は,難しい連立方程式が解を持っているかどうかの判断にも使えます.例えば,次の連立方程式に解があるか
どうかを判定したいとします.
{
y = ex
y = 3 − x2
この 2 式のグラフを描いてみましょう.
maxima
(%i4) plot2d([exp(x),3-x^2],[x,-2,2],[y,-1,4]);
4
%e^x
3-x^2
3
y
2
1
0
-1
-2
-1.5
-1
-0.5
0
x
0.5
1
1.5
2
2 つの式のグラフが 2 点で交わっていることから,上の連立方程式は 2 つの実数解を持つことがわかります.
2
パラメータ表示
平面内において,曲線 C 上の点 P(x, y) の座標 x, y が1つの変数 t の関数 f (t), g(t) によって
x = f (t),
y = g(t)
と表される状況を考えましょう.このような表し方を曲線 C のパラメータ表示 (媒介変数表示) といい,t のことをパラ
メータ (媒介変数) といいましたね.パラメータ表示された曲線も,上と同じ plot2d を用いて描きますが,書式が少し
異なってきます.書式は,
maxima
plot2d([parametric,x 成分の関数,y 成分の関数],[媒介変数名, 開始値, 終了値], 必要なオプション各種);
となります.
例えば,x = cos t, y = sin t を t ∈ [0, 2π] の範囲で描いてみます.
maxima
(%i5) plot2d([parametric,cos(t),sin(t)],[t,0,2*%pi]);
数式処理実習 [第 7 回] 関数のグラフの描画
May 28, 2015
[p.4/6]
1
0.8
0.6
0.4
sin(t)
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
-1
3
-0.8
-0.6
-0.4
-0.2
0
cos(t)
0.2
0.4
0.6
0.8
1
3 次元グラフィックス
Maxima は 3 次元空間内の曲面も描くことができます.2 変数関数 z = f (x, y) のグラフを描いてみましょう.xy 平面
上の点 (x, y) を一つ決めると,xyz 空間内に点 (x, y, f (x, y)) が決まります.(x, y) を動かすと点 (x, y, f (x, y)) は空間内
を動きますが,これによって曲面ができあがります.この曲面のことを,関数 z = f (x, y) のグラフといいましたね.
例えば,関数 z = x3 − 3xy 2 のグラフを x ∈ [−1, 1],y ∈ [−1, 1] の範囲で描いてみます.
maxima
(%i6) plot3d(x^3-3*x*y^2,[x,-1,1],[y,-1,1]);
x^3-3*x*y^2
2
1.5
1
0.5
0
-0.5
-1
1
-1.5
0.5
-2-1
0
-0.5
y
0
x
-0.5
0.5
1 -1
描かれたグラフは,マウスでグリグリ回して視点を変えることができます.やってみましょう.
数式処理実習 [第 7 回] 関数のグラフの描画
May 28, 2015
[p.5/6]
plot3d を用いて2変数関数のグラフを描く原理は次の通りです.まず,x の範囲 [−1, 1],及び y の範囲 [−1, 1] をそれ
ぞれ 30 の小区間に等分することにより,点 (x, y) の動く領域 [−1, 1] × [−1, 1] を合計 30 × 30 = 900 個の小領域に分割し
ます.そして,それぞれの分点の座標を z = f (x, y) に代入して得られる点達を四辺形で埋めていくのです.ですから,
場合によっては表示が荒くなってしまうことがあります.
表示を滑らかにするには,grid というオプションを用いて分割数を増やします.例えば,50 × 50 = 2500 個に分割す
るには,[grid,50,50] のように指定します.
maxima
(%i8) plot3d(x^3-3*x*y^2,[x,-1,1],[y,-1,1],[grid,50,50]);
x^3-3*x*y^2
2
1.5
1
0.5
0
-0.5
-1
1
-1.5
0.5
-2-1
0
-0.5
y
0
x
-0.5
0.5
1 -1
先程と比べると,曲面がより滑らかになりましたね.
4
ファイルの保存
描かれた図をファイルに保存するには,次のようにします.
maxima
(%i9) plot2d(x^2,[x,-1,1],
←ここではスペースの都合で改行していますが,実際にはこの改行は不要です.
[gnuplot_term,"postscript eps color"],[gnuplot_out_file,"kadai_07.eps"]
);
どんなファイル形式で保存するかを [gnuplot_term, "postscript eps color"] で指定しています.今回は,LATEX
に貼りたいので,eps 形式を指定し,カラーにしました.
もしも白黒の eps ファイルにしたい場合には,[gnuplot_term, "postscript eps mono"] とします.
また,[gnuplot_out_file, "kadai_07.eps"] でファイル名を指定しています.ホームディレクトリ ˜/ に kadai_07.eps
という名前で保存されます.出来上がったファイル kadai_07.eps をダブルクリックして,中身を確認しましょう.
なお,このファイル kadai_07.eps は作業用ディレクトリ ˜/su-shiki に移動させておきましょう.その方が LATEX の
書類に貼り込む時に便利です.
なお,kadai_07 の部分は各自好きな名前に変更しても構いません.なお,複数の図を作る時には,もちろん全部違う
名前にしないといけません.
数式処理実習 [第 7 回] 関数のグラフの描画
May 28, 2015
[p.6/6]
レポート課題
5
• 講義のページ http://www.cis.fukuoka-u.ac.jp/˜kawakubo/ の今日の所の sm140000 07.pdf の設問に答えよ.
• sm140000 07.tex (sm140000 07.pdf の原稿ファイル) をダウンロードし,˜/su-shiki ディレクトリに保存せよ.
• ファイル名「sm140000 07.tex」の「sm140000」の部分は各自の学籍番号に変更すること.また,Emacs でファイ
ルの中身を編集し,上段の氏名欄に自分の学籍番号と氏名を書くこと.
• Maxima を用いて問題を解け.解答は,原稿ファイルを編集して LATEX で作成せよ.
• PDF ファイルを作成し,印刷したものを提出すること.締切は 6 月 4 日.
• 疑問点等があれば,書いて下さい.
復習:PDF ファイルを作成するために使うもの.Maxima 用の端末とは別に,もう一つ端末を起動します.
LATEX タイプセットなど
[kawakubo@pe5-(~)-112] cd⊔ ~/su-shiki
[kawakubo@pe5-(~/su-shiki)-113] emacs⊔ &
[kawakubo@pe5-(~/su-shiki)-114] platex⊔ sm140000_07.tex
[kawakubo@pe5-(~/su-shiki)-115] dvipdfmx⊔ sm140000_07.dvi
← ˜/su-shiki に移動
← emacs をバックグラウンドで起動
← sm140000 07.tex を platex でタイプセット
← sm140000 07.dvi から sm140000 07.pdf を作成