[[FrontPage]] #contents 2009/11/12からのアクセス回数 &counter; ** グラフの使い方 [#h8082ab7] sageでのグラフの使い方について、説明します。 [[レファレンスマニュアル >http://sagemath.com/doc/reference/sage/plot/plot.html]] を参考にしながら見てください。 ** 基本図形 [#e249f7f6] 計算結果の表示の他に、補足説明などのために基本図形を表示したい場合があります。 以下によく使う基本図形 - 円: circle - 文字列: text - 線: line - 点: point - ポリゴン: poligon を示します。 *** 円 [#w0c359f8] 円は以下のように表示します。 circle((座標), 半径) circleの例を以下に示します。座標は原点(0, 0)、半径は1です。 sage入力: #pre{{ circle((0,0), 1) }} &ref(sage0.png); *** 文字列 [#wb166a68] 次に文字列textです。表示する文字列には、$で囲んでlatexの数式を表示することもできます。残念ながら日本語は文字化けしてしてしまいます。 textは以下の形式で使用します。文字列の中心が指定した座標になるようにプロットされます。 text(文字列, (座標)) textの例を以下に示します。原点近くで日本語文字が化けています。 sage入力: #pre{{ text('test', (1, 1)) + text('$f(x) = x^2 + 1$', (0.5,0.5))+text('テスト', (0,0)) }} &ref(sage0-1.png); *** 線 [#t6e1a619] 線(line)は、指定された座標のリストを線で結びます。 lineの使い方は、簡単です。 line([(開始座標), (終了座標)]) *** 点 [#n646d18a] これまで、説明しないで使ってきた点(point)です。 point((座標), オプション属性(pointsize, rgccolor, facetedがよく使われます)) 以下に例を示します。日本語が使えないため、タイトルをhtml関数で先に表示し、その後に図形を表示します。 show関数で表示領域を指定し、すべての図形が表示されるようにします。 sage入力: #pre{{ html('<center>テスト</center>') c = circle((0.5,0.5), 1) l = line([(0,0), (1, 1)]) pt = point((0.5, 0.5), rgbcolor='white', pointsize=30, faceted=True) (c + l + pt).show(xmin=-1, xmax=2) }} &ref(sage0-2.png); *** ポリゴンの塗りつぶし [#a84f01be] polygon関数を使うとリストで指定した座標の図形を塗りつぶします。 sage入力: #pre{{ polygon([(0,0), (1,1), (0,1)]) }} &ref(sage0-3.png); ** 2次元グラフ [#p3eb43e5] sageでは、簡単に2次元グラフを表示することができます。 2次元グラフには、plot関数を使用します。 plot関数のもっとも単純な呼び出し方法は、 plot(関数, 最小値, 最大値) です。 例として、\(y=cos(x)\) のグラフを−2π から2πまで描画してみます。 sage入力: #pre{{ plot(cos, -2*pi, 2*pi) }} &ref(sage0-4.png); *** グラフの基本 [#u3b8bd4a] もう少しplotの使い方を調べてみましょう。 plotの呼び出しは、以下の形式で覚えると便利です。 plot(関数, [変数名, 最小, 最大], オプション) オプションは、省略可能です。plotのオプションは、plot.optionsで知ることができます。 それ以外にもGraphicsのオプションも使えます。よく使うオプションは、 - 描画範囲指定のxmin, xmax, ymin, ymax - グラフの比率を指定するaspect_ratio - 線の色指定のrgbcolor などです。 sage入力: #pre{{ # plotのオプションを知る plot.options }} &color(blue){ {'fillalpha': 0.5, 'detect_poles': False, 'plot_points': 200, 'thickness': 1, 'adaptive_tolerance': 0.01, 'fillcolor': 'automatic','alpha': 1, 'adaptive_recursion': 5, 'rgbcolor': (0, 0, 1), 'fill':None} }; #pre{{ # Graphicsのオプションを知る Graphics.show? }} &ref(Graphics.show.png); *** 重ね書き [#r49c299f] 重ね書きの例として、直線に○をプロットしてみます。 関数 \(f(x)=\frac{(x2−1)}{(x−1)}\)を-1から3の範囲で表示し、座標(1, 2)に丸をプロットします。 描画範囲は、(0, 0)から(3, 4)とします。 sage入力: #pre{{ # 重ね書きの例 p = plot((x^2 - 1)/(x - 1), x, -1, 3) pt = point((1, 2), rgbcolor='white', pointsize=30, faceted=True) g = p+pt g.show(xmin=0, ymin=0, xmax=3, ymax=4) }} &ref(sage0-5.png); *** plotはlimitを計算する [#tf203f69] グラフをみて、おやっと思われた方もいると思いますが、\(f(x)=\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、\(x=1\)では分母が0になりエラーとなるはずですが、 表示は、\(\lim_{x \to 1}\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、2となります。 sage入力: #pre{{ limit((x^2 - 1)/(x - 1), x=1) }} &color(blue){2}; もう一つ0で不連続な関数\(\frac{x}{sin(x)}\)をグラフにしてみます。 sage入力: #pre{{ plot(sin(x)/x, x, -100, 100) }} &ref(sage0-6.png); *** 場合分けのグラフ [#x00a2907] 以下のような場合分けのグラフを表示する例を示します。 $$ f(x)=\left\{ \begin{array}{l l} x^2, & 0 \le x \le 1 \\ 2 -x , & 1 \lt x \le 2 \\ x^2-3x+2& 2 \lt x \le 3 \\ \end{array} \right. $$ sage入力: #pre{{ p1 = plot(x^2, x, 0, 1) p2 = plot(-x+2, x, 1, 2) p3 = plot(x^2-3*x+2, x, 2, 3) pt1 = point((0, 0), rgbcolor='black', pointsize=30) pt2 = point((3, 2), rgbcolor='black', pointsize=30) (p1+p2+p3+pt1+pt2).show(xmin=0, xmax=3, ymin=0, ymax=2) }} &ref(sage0-7.png); *** パラメトリック方程式の可視化 [#v818b247] 高校で習う運動力学で円運動がありますが、これを時間tをパラメータに表すと $$ x=cos(t), y=sin(t) $$ となります。\(x,y\)を時間\(t\)をパラメータでので、媒介変数表示と呼ぶそうです。 媒介変数表示を行う関数が、parametric_plot関数です。 parametric_plot([座標を示す関数リスト], (パラメータ名, パラメータの最小値, 最大値), オプション] の形式で使います。 例)単位円上の円運動を媒介変数表示で表します。 sage入力: #pre{{ var('t') parametric_plot([cos(t),sin(t)],[t,0,2*pi], aspect_ratio=1) }} &ref(sage0-8.png); *** リストプロット [#l8c202ca] リスト([]で括られた値のリスト)をプロットするlist_plotの例を示します。 list_plot(プロットするリスト) sage入力: #pre{{ list_plot([1, 2, 4, 3, 6]) }} &ref(sage0-9.png); *** 関係式の値をプロット [#jed0f866] これまでのプロットは、プロットする値を明示的に示すものですが、値を示す代わりに関係式で示された値をプロットする関数がimplicit_plotです。 例として、\(x^2+y^2=1\)をプロットしてみます。 sage入力: #pre{{ implicit_plot(x^2 + y^2 == 1, [x, -1, 1], [y, -1, 1], aspect_ratio=1) }} &ref(sage0-10.png); ** 3次元グラフ [#zf100a94] 2次元グラフと同様に3次元のグラフを表示することができます。 表示された図形はマウスで自由に回転することができます。(驚きました) sage入力: #pre{{ x, y = var('x y') plot3d(sin(x*y),(x,-pi,pi),(y,-pi,pi), mesh=True) }} &ref(sage0-11.png); *** 等高線グラフ [#f389f1c8] 前のグラフと同じものを等高線グラフで表示すると以下のようになります。 sage入力: #pre{{ var('x y') contour_plot(sin(x*y), [x, -pi, pi], [y, -pi, pi], aspect_ratio=1) }} &ref(sage0-12.png); *** 3次元の媒介変数表示 [#a63b845d] 3次元の媒介変数表示の例です。 $$ \begin{eqnarray} f_x &=& u v \\ f_y &=& u \\ f_z &=& v^2 \end{eqnarray} $$ を媒介変数表示したのが、以下のグラフです。 sage入力: #pre{{ u, v = var('u v') fx = u*v fy = u fz = v^2 parametric_plot3d([fx, fy, fz], (u, -1, 1), (v, -1, 1), frame=False, color="yellow") }} &ref(sage0-13.png); ** コメント [#v5b24d6e] #vote(おもしろかった[32],そうでもない[1],わかりずらい[2]) #vote(おもしろかった[33],そうでもない[1],わかりずらい[2]) 皆様のご意見、ご希望をお待ちしております。 - 大変参考になりました。一つ質問なのですが、2次元または3次元の媒介変数表示の際に媒介変数u、vではなく、これらの媒介変数で表されるfx,fyなどの関数の上限、下限の設定の仕方があれば教えていただきたいです。 -- [[Geppo]] &new{2012-03-13 (火) 17:10:15}; - 描画領域を指定するには、showの引数でxmin, xmax, ymin, ymax等で描画範囲を指定することができます。 2次元のパラメトリックプロットを例に説明します。-- [[竹本 浩]] &new{2012-03-13 (火) 19:21:48}; #pre{{ var('t') pt = parametric_plot([cos(t),sin(t)],[t,0,2*pi], aspect_ratio=1) pt.show(xmin=-0.5, xmax=0.8) }} &ref(param2d_show.png); #comment_kcaptcha