2009/11/12からのアクセス回数 14457
sageでのグラフの使い方について、説明します。
レファレンスマニュアル を参考にしながら見てください。
計算結果の表示の他に、補足説明などのために基本図形を表示したい場合があります。 以下によく使う基本図形
を示します。
円は以下のように表示します。 circle((座標), 半径) circleの例を以下に示します。座標は原点(0, 0)、半径は1です。
sage入力:
circle((0,0), 1)
次に文字列textです。表示する文字列には、$で囲んでlatexの数式を表示することもできます。残念ながら日本語は文字化けしてしてしまいます。
textは以下の形式で使用します。文字列の中心が指定した座標になるようにプロットされます。
text(文字列, (座標))
textの例を以下に示します。原点近くで日本語文字が化けています。
sage入力:
text('test', (1, 1)) + text('$f(x) = x^2 + 1$', (0.5,0.5))+text('テスト', (0,0))
線(line)は、指定された座標のリストを線で結びます。 lineの使い方は、簡単です。
line([(開始座標), (終了座標)])
これまで、説明しないで使ってきた点(point)です。
point((座標), オプション属性(pointsize, rgccolor, facetedがよく使われます))
以下に例を示します。日本語が使えないため、タイトルをhtml関数で先に表示し、その後に図形を表示します。 show関数で表示領域を指定し、すべての図形が表示されるようにします。
sage入力:
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)
polygon関数を使うとリストで指定した座標の図形を塗りつぶします。
sage入力:
polygon([(0,0), (1,1), (0,1)])
sageでは、簡単に2次元グラフを表示することができます。
2次元グラフには、plot関数を使用します。 plot関数のもっとも単純な呼び出し方法は、
plot(関数, 最小値, 最大値)
です。
例として、\(y=cos(x)\) のグラフを−2π から2πまで描画してみます。
sage入力:
plot(cos, -2*pi, 2*pi)
もう少しplotの使い方を調べてみましょう。
plotの呼び出しは、以下の形式で覚えると便利です。
plot(関数, [変数名, 最小, 最大], オプション)
オプションは、省略可能です。plotのオプションは、plot.optionsで知ることができます。 それ以外にもGraphicsのオプションも使えます。よく使うオプションは、
などです。
sage入力:
# plotのオプションを知る plot.options
{'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}
# Graphicsのオプションを知る Graphics.show?
重ね書きの例として、直線に○をプロットしてみます。
関数 \(f(x)=\frac{(x2−1)}{(x−1)}\)を-1から3の範囲で表示し、座標(1, 2)に丸をプロットします。
描画範囲は、(0, 0)から(3, 4)とします。
sage入力:
# 重ね書きの例 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)
グラフをみて、おやっと思われた方もいると思いますが、\(f(x)=\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、\(x=1\)では分母が0になりエラーとなるはずですが、 表示は、\(\lim_{x \to 1}\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、2となります。
sage入力:
limit((x^2 - 1)/(x - 1), x=1)
2
もう一つ0で不連続な関数\(\frac{x}{sin(x)}\)をグラフにしてみます。 sage入力:
plot(sin(x)/x, x, -100, 100)
以下のような場合分けのグラフを表示する例を示します。
$$ 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入力:
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)
高校で習う運動力学で円運動がありますが、これを時間tをパラメータに表すと $$ x=cos(t), y=sin(t) $$ となります。\(x,y\)を時間\(t\)をパラメータでので、媒介変数表示と呼ぶそうです。
媒介変数表示を行う関数が、parametric_plot関数です。
parametric_plot([座標を示す関数リスト], (パラメータ名, パラメータの最小値, 最大値), オプション]
の形式で使います。 例)単位円上の円運動を媒介変数表示で表します。
sage入力:
var('t') parametric_plot([cos(t),sin(t)],[t,0,2*pi], aspect_ratio=1)
リスト([]で括られた値のリスト)をプロットするlist_plotの例を示します。
list_plot(プロットするリスト)
sage入力:
list_plot([1, 2, 4, 3, 6])
これまでのプロットは、プロットする値を明示的に示すものですが、値を示す代わりに関係式で示された値をプロットする関数がimplicit_plotです。 例として、\(x^2+y^2=1\)をプロットしてみます。
sage入力:
implicit_plot(x^2 + y^2 == 1, [x, -1, 1], [y, -1, 1], aspect_ratio=1)
2次元グラフと同様に3次元のグラフを表示することができます。 表示された図形はマウスで自由に回転することができます。(驚きました)
sage入力:
x, y = var('x y') plot3d(sin(x*y),(x,-pi,pi),(y,-pi,pi), mesh=True)
前のグラフと同じものを等高線グラフで表示すると以下のようになります。
sage入力:
var('x y') contour_plot(sin(x*y), [x, -pi, pi], [y, -pi, pi], aspect_ratio=1)
3次元の媒介変数表示の例です。
$$ \begin{eqnarray} f_x &=& u v \\ f_y &=& u \\ f_z &=& v^2 \end{eqnarray} $$
を媒介変数表示したのが、以下のグラフです。
sage入力:
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")
皆様のご意見、ご希望をお待ちしております。