2 * Introduction to plotdf::
3 * Functions and Variables for plotdf::
6 @node Introduction to plotdf, Functions and Variables for plotdf, plotdf, plotdf
7 @section Introduction to plotdf
10 1次常微分方程式(ODE)や2つの自励1次ODE系の
11 (勾配場とも呼ばれる)方向場のプロットを生成します。
14 コンソールや他のMaximaインターフェースから使うことができますが、
15 結果のファイルはXmaximaに送られ、プロットされます。
16 plotdfを使ってみる前にXmaximaをインストールしたことを確認してください。
18 単一のODEの方向場をプロットするには、ODEを以下の形式で書かなければいけません:
27 $${{dy}¥over{dx}} = F(x,y)$$
30 そして関数@var{F}を@code{plotdf}の引数に与えなければいけません。
31 もし独立変数と従属変数が、上の式のように@var{x}と@var{y}でないなら、
32 plotdfコマンドへの引数として与えられるリストの中に明示的に
33 それら2つの変数を指名しなければいけません。
36 2つの自励ODEの組の方向場をプロットするには、
37 それらを以下の形式で書かなければいけません。
41 -- = G(x,y) -- = F(x,y)
46 $${{dx}¥over{dt}} = G(x,y) ¥qquad {{dy}¥over{dt}} = F(x,y)$$
49 そして@code{plotdf}の引数は2つの関数@var{G}と@var{F}を
51 すなわち、リストの最初の式は水平軸上に表された変数の時間導関数であり、
52 二番目の式は垂直軸上に表された変数の時間導関数です。
53 それら2つの変数は@var{x}と@var{y}である必要はありませんが、
56 2つの変数を、最初のものが水平軸上のものを、その後垂直軸上のものを指定する別のリストでなければいけません。
60 暗に@code{x=t},@code{G(x,y)=1}と認め、
61 非自励方程式を2つの自励方程式系に変換します。
64 @category{Differential equations} @category{Share packages} @category{Package plotdf}
67 @node Functions and Variables for plotdf, , Introduction to plotdf, plotdf
68 @section Functions and Variables for plotdf
70 @deffn {関数} plotdf (@var{dydx}, ...options...)
71 @deffnx {関数} plotdf (@var{dvdu}, @code{[}@var{u},@var{v}@code{]}, ...options...)
72 @deffnx {関数} plotdf (@code{[}@var{dxdt},@var{dydt}@code{]}, ...options...)
73 @deffnx {関数} plotdf (@code{[}@var{dudt},@var{dvdt}@code{]}, @code{[}@var{u},@var{v}@code{]}, ...options...)
75 2次元@var{x}と@var{y}に方向場を表示します。
77 最初の引数は導関数を指定し、式か2つの式のリストでなければいけません。
78 @var{dydx}, @var{dxdt}, @var{dydt}は@var{x}と@var{y}に依存する式です。
79 @var{dvdu}, @var{dudt}, @var{dvdt}は@var{u}と@var{v}に依存する式です。
81 @code{parameters}オプションで与えられる数値を持つか(オプション構文法は以下に与えられます)、
82 @var{sliders}オプションで指定される許される値の範囲の
83 パラメータ一式にも、式は依存するかもしれません。
85 コマンド内やメニューで選択して、いくつかの他のオプションを与えることができます。
86 プロット上でクリックしたり、オプション@code{trajectory_at}を使って、
88 @code{direction}オプションを使って、積分の方向を制御できます。
89 オプションは、@emph{forward}, @emph{backward}, @emph{both}のいずれかの値を取り得ます。
90 @code{nsteps}で積分ステップの数を与えることができ、
91 @code{tstep}オプションでそれらの間の時間間隔を設定できます。
92 積分にはAdams Moulton法が使われます;
93 4次の適応Runge-Kutta法に切り替えることも可能です。
98 プロットウィンドウのメニューには以下のオプションがあります:
99 @emph{Zoom}, はマウスの振る舞いを変えて、プロット領域上で左ボタンをクリックすることで
101 ある点近くをクリックする毎に、クリックした点を中心にしてプロットが拡大されます。
102 @key{Shift}キーを押しながらクリックすると、
104 ある点をクリックした時、軌跡の計算を再開するには、
105 メニューから@emph{Integrate}を選択してください。
107 メニューの中のオプション@emph{Config}を使って,
108 使用中のODE(s)や様々な他の設定を変えることができます。
109 構成の変更がされた後、新しい設定を稼働するには、
110 メニューオプション@emph{Replot}を選択しなければいけません。
112 @emph{Config}ダイアログメニューの場@emph{Trajectory at}に入れて、
114 既に示されているものに加えて、新しい積分曲線が表示されます。
115 @emph{Replot}が選択された時は、
116 入れられた最後の積分曲線だけが表示されます。
118 右マウスボタンを押しながらカーソルを動かすと、
120 ステップ数や@var{t}の初期値、x, yの中心や範囲のような追加パラメータは、
123 プロットのコピーは、メニューオプション@emph{Save}を使って、
124 ポストスクリプトファイルとして保存できます。
128 @code{plotdf}コマンドはいくつかのコマンドを含むかもしれません。
129 それぞれのコマンドは複数の項目のリストです。
131 残りはオプションに割り当てられる値から成ります。
133 @code{plotdf}が認識するオプションは以下の通りです:
137 @dfn{tstep}は、独立変数@var{t}に関する増分の長さを定義します。
139 もしただ1つの式@var{dydx}が@code{plotdf}に与えられたら、
140 @var{x}変数は@var{t}に直接比例することになります。
145 積分曲線を計算するのに、独立変数に対して使われる長さ@code{tstep}のステップ回数を定義します。
150 積分曲線を計算する際に従う独立変数の方向を定義します。
152 @code{forward}―これは増分@code{tstep}で独立変数を@code{nsteps}回増やします―
153 @code{backward}―これは独立変数を減らします―
155 @code{nsteps}回前進、 @code{nsteps}回後進で拡げた積分曲線に導きます―
156 キーワード@code{right}と@code{left}を、
157 @code{forward}と@code{backward}の別称として使うことができます。
158 デフォルト値は@code{both}です。
162 積分曲線を計算するために使われる変数@var{t}の初期値です。
164 その設定は@var{t}の関数として曲線のプロットでだけ現れます。
169 独立変数@var{t}の2つの関数@var{x}, @var{y}としての
170 積分曲線のプロットを使って二番目のプロットウィンドウを生成するために
172 もし@code{versus_t}が0と異なる任意の値を与えられたら、
173 二番目のプロットウィンドウが表示されます。
175 メインプロットウィンドウのメニューに似た別のメニューを含みます。
180 積分曲線の開始点のための座標@var{xinitial}と@var{yinitial}を定義します。
185 微分方程式の定義の中で使われるパラメータとその数値のリストを定義します。
187 コンマで分離された組@code{name=value}の列を持つ文字列で与えなければいけません。
191 スライダーボタンを使って対話的に変更されるパラメータと
192 それらのパラメータの変動範囲のリストです。
194 コンマで分離された要素@code{name=min:max}の列を持つ文字列で与えなければいけません。
198 方向場の上にセミコロンで分離された表示される@var{x}の関数の列を持つ文字列を定義します。
199 これらの関数はMaximaではなくTclでパースされます。
202 @dfn{x}には2つの数が続かなければいけません。
203 2つの数は水平軸上で表示される最小値と最大値を設定します。
204 もし水平軸上の変数が@var{x}でないなら、
205 このオプションは水平軸上の変数名を持たなければいけません。
206 デフォルトの水平範囲は-10から10です。
209 @dfn{y}には2つの数が続かなければいけません。
210 2つの数は垂直軸上で表示される最小値と最大値を設定します。
211 もし垂直軸上の変数が@var{y}でないなら、
212 このオプションは垂直軸上の変数名を持たなければいけません。
213 デフォルトの垂直範囲は-10から10です。
220 微分方程式@math{y' = exp(-x) + y}の方向場と@math{(2, -0.1)}を通過する解を表示するために:
222 @c plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$
225 (%i1) plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$
229 @image{figures/plotdf1,8cm}
233 方程式@math{diff(y,x) = x - y^2}の方向場と
234 初期条件@math{y(-1) = 3}の解を得るために、
237 @c plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
238 @c [trajectory_at,-1,3], [direction,forward],
239 @c [y,-5,5], [x,-4,16])$
243 (%i1) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
244 [trajectory_at,-1,3], [direction,forward],
245 [y,-5,5], [x,-4,16])$
249 グラフは関数@math{y = sqrt(x)}も表示します。
252 @image{figures/plotdf2,8cm}
257 2つの方程式@math{dz/dt = v}と@math{dv/dt = -k*z/m}で定義される調和振動子の方向場と、
258 @math{(z,v) = (6,0)}を通る積分曲線を、
259 (@math{k}は2に固定で)@math{m}の値を対話的に変えられるスライダーと一緒に、
262 @c plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"],
263 @c [sliders,"m=1:5"], [trajectory_at,6,0])$
267 (%i1) plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"],
268 [sliders,"m=1:5"], [trajectory_at,6,0])$
273 @image{figures/plotdf3,8cm}
277 Duffing方程式@math{m*x''+c*x'+k*x+b*x^3 = 0}の方向場をプロットするために、
278 変数@math{y=x'}を導入し、以下のように使います:
280 @c plotdf([y,-(k*x + c*y + b*x^3)/m],
281 @c [parameters,"k=-1,m=1.0,c=0,b=1"],
282 @c [sliders,"k=-2:2,m=-1:1"],[tstep,0.1])$
286 (%i1) plotdf([y,-(k*x + c*y + b*x^3)/m],
287 [parameters,"k=-1,m=1.0,c=0,b=1"],
288 [sliders,"k=-2:2,m=-1:1"],[tstep,0.1])$
293 @image{figures/plotdf4,8cm}
297 質量@math{m}の値を変更するのに使うことができるスライダーと一緒に
298 与えられた初期条件の解と減衰振り子の方向場と
299 時間の関数として2つの状態変数のプロットを一緒に:
302 @c plotdf([w,-g*sin(a)/l - b*w/m/l], [a,w],
303 @c [parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
304 @c [trajectory_at,1.05,-9],[tstep,0.01],
305 @c [a,-10,2], [w,-14,14], [direction,forward],
306 @c [nsteps,300], [sliders,"m=0.1:1"], [versus_t,1])$
310 (%i1) plotdf([w,-g*sin(a)/l - b*w/m/l], [a,w],
311 [parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
312 [trajectory_at,1.05,-9],[tstep,0.01],
313 [a,-10,2], [w,-14,14], [direction,forward],
314 [nsteps,300], [sliders,"m=0.1:1"], [versus_t,1])$
319 @image{figures/plotdf5,8cm}@image{figures/plotdf6,8cm}
325 @category{Package plotdf} @category{Plotting} @category{Numerical methods}