Examples cleanup
[maxima.git] / doc / info / ja / plotdf.texi
blob289403772da91f653d5529bfa2116b622f4d2dd9
1 @menu
2 * Introduction to plotdf::
3 * Functions and Variables for plotdf::
4 @end menu
6 @node Introduction to plotdf, Functions and Variables for plotdf, plotdf, plotdf
7 @section Introduction to plotdf
9 関数@code{plotdf}は、
10 1次常微分方程式(ODE)や2つの自励1次ODE系の
11 (勾配場とも呼ばれる)方向場のプロットを生成します。
13 PlotdfはXmaximaを要求します。
14 コンソールや他のMaximaインターフェースから使うことができますが、
15 結果のファイルはXmaximaに送られ、プロットされます。
16 plotdfを使ってみる前にXmaximaをインストールしたことを確認してください。
18 単一のODEの方向場をプロットするには、ODEを以下の形式で書かなければいけません:
19 @ifnottex
20 @example
21        dy
22        -- = F(x,y)
23        dx
24 @end example
25 @end ifnottex
26 @tex
27 $${{dy}¥over{dx}} = F(x,y)$$
28 @end tex
30 そして関数@var{F}を@code{plotdf}の引数に与えなければいけません。
31 もし独立変数と従属変数が、上の式のように@var{x}と@var{y}でないなら、
32 plotdfコマンドへの引数として与えられるリストの中に明示的に
33 それら2つの変数を指名しなければいけません。
34 (例を見てください。)
36 2つの自励ODEの組の方向場をプロットするには、
37 それらを以下の形式で書かなければいけません。
38 @ifnottex
39 @example
40        dx             dy
41        -- = G(x,y)    -- = F(x,y) 
42        dt             dt
43 @end example
44 @end ifnottex
45 @tex
46 $${{dx}¥over{dt}} = G(x,y) ¥qquad {{dy}¥over{dt}} = F(x,y)$$
47 @end tex
49 そして@code{plotdf}の引数は2つの関数@var{G}と@var{F}を
50 その順に持つリストでなければいけません;
51 すなわち、リストの最初の式は水平軸上に表された変数の時間導関数であり、
52 二番目の式は垂直軸上に表された変数の時間導関数です。
53 それら2つの変数は@var{x}と@var{y}である必要はありませんが、
54 もしそうでないなら、
55 plotdfに与えられる二番目の引数は
56 2つの変数を、最初のものが水平軸上のものを、その後垂直軸上のものを指定する別のリストでなければいけません。
58 もしただ1つのODEが与えられるなら、
59 @code{plotdf}は、
60 暗に@code{x=t},@code{G(x,y)=1}と認め、
61 非自励方程式を2つの自励方程式系に変換します。
63 @opencatbox
64 @category{Differential equations} @category{Share packages} @category{Package plotdf}
65 @closecatbox
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}に依存する式です。
80 それら2つの変数に加えて、
81 @code{parameters}オプションで与えられる数値を持つか(オプション構文法は以下に与えられます)、
82 @var{sliders}オプションで指定される許される値の範囲の
83 パラメータ一式にも、式は依存するかもしれません。
85 コマンド内やメニューで選択して、いくつかの他のオプションを与えることができます。
86 プロット上でクリックしたり、オプション@code{trajectory_at}を使って、
87 積分曲線を得ることができます。
88 @code{direction}オプションを使って、積分の方向を制御できます。
89 オプションは、@emph{forward}, @emph{backward}, @emph{both}のいずれかの値を取り得ます。
90 @code{nsteps}で積分ステップの数を与えることができ、
91 @code{tstep}オプションでそれらの間の時間間隔を設定できます。
92 積分にはAdams Moulton法が使われます;
93 4次の適応Runge-Kutta法に切り替えることも可能です。
96 @b{プロットウィンドウメニュー:}
98 プロットウィンドウのメニューには以下のオプションがあります:
99 @emph{Zoom}, はマウスの振る舞いを変えて、プロット領域上で左ボタンをクリックすることで
100 ズームインできるようになります。
101 ある点近くをクリックする毎に、クリックした点を中心にしてプロットが拡大されます。
102 @key{Shift}キーを押しながらクリックすると、
103 以前の倍率にズームアウトします。
104 ある点をクリックした時、軌跡の計算を再開するには、
105 メニューから@emph{Integrate}を選択してください。
107 メニューの中のオプション@emph{Config}を使って,
108 使用中のODE(s)や様々な他の設定を変えることができます。
109 構成の変更がされた後、新しい設定を稼働するには、
110 メニューオプション@emph{Replot}を選択しなければいけません。
111 もし、座標の組を
112 @emph{Config}ダイアログメニューの場@emph{Trajectory at}に入れて、
113 @key{enter}キーを押したら、
114 既に示されているものに加えて、新しい積分曲線が表示されます。
115 @emph{Replot}が選択された時は、
116 入れられた最後の積分曲線だけが表示されます。
118 右マウスボタンを押しながらカーソルを動かすと、
119 プロットを横や上下にドラッグできます。
120 ステップ数や@var{t}の初期値、x, yの中心や範囲のような追加パラメータは、
121 Configメニューで設定できます。
123 プロットのコピーは、メニューオプション@emph{Save}を使って、
124 ポストスクリプトファイルとして保存できます。
126 @b{プロットオプション:}
128 @code{plotdf}コマンドはいくつかのコマンドを含むかもしれません。
129 それぞれのコマンドは複数の項目のリストです。
130 最初の項目はオプション名で、
131 残りはオプションに割り当てられる値から成ります。
133 @code{plotdf}が認識するオプションは以下の通りです:
135 @itemize @bullet
136 @item
137 @dfn{tstep}は、独立変数@var{t}に関する増分の長さを定義します。
138 積分曲線を計算するのに使われます。
139 もしただ1つの式@var{dydx}が@code{plotdf}に与えられたら、
140 @var{x}変数は@var{t}に直接比例することになります。
141 デフォルト値は0.1です。
143 @item
144 @dfn{nsteps}は、
145 積分曲線を計算するのに、独立変数に対して使われる長さ@code{tstep}のステップ回数を定義します。
146 デフォルト値は100です。
148 @item
149 @dfn{direction}は
150 積分曲線を計算する際に従う独立変数の方向を定義します。
151 可能な値は、
152 @code{forward}―これは増分@code{tstep}で独立変数を@code{nsteps}回増やします―
153 @code{backward}―これは独立変数を減らします―
154 または@code{both}―これは
155 @code{nsteps}回前進、 @code{nsteps}回後進で拡げた積分曲線に導きます―
156 キーワード@code{right}と@code{left}を、
157 @code{forward}と@code{backward}の別称として使うことができます。
158 デフォルト値は@code{both}です。
160 @item
161 @dfn{tinitial}は
162 積分曲線を計算するために使われる変数@var{t}の初期値です。
163 微分方程式が自励なので、
164 その設定は@var{t}の関数として曲線のプロットでだけ現れます。
165 デフォルト値は0です。
167 @item
168 @dfn{versus_t}は
169 独立変数@var{t}の2つの関数@var{x}, @var{y}としての
170 積分曲線のプロットを使って二番目のプロットウィンドウを生成するために
171 使われます。
172 もし@code{versus_t}が0と異なる任意の値を与えられたら、
173 二番目のプロットウィンドウが表示されます。
174 二番目のプロットウィンドウは、
175 メインプロットウィンドウのメニューに似た別のメニューを含みます。
176 デフォルト値は0です。
178 @item
179 @dfn{trajectory_at}は
180 積分曲線の開始点のための座標@var{xinitial}と@var{yinitial}を定義します。
181 オプションはデフォルトで空です。
183 @item
184 @dfn{parameters}は
185 微分方程式の定義の中で使われるパラメータとその数値のリストを定義します。
186 パラメータの名前と値は、
187 コンマで分離された組@code{name=value}の列を持つ文字列で与えなければいけません。
189 @item
190 @dfn{sliders}は
191 スライダーボタンを使って対話的に変更されるパラメータと
192 それらのパラメータの変動範囲のリストです。
193 パラメータの名前と範囲は、
194 コンマで分離された要素@code{name=min:max}の列を持つ文字列で与えなければいけません。
196 @item
197 @dfn{xfun}は
198 方向場の上にセミコロンで分離された表示される@var{x}の関数の列を持つ文字列を定義します。
199 これらの関数はMaximaではなくTclでパースされます。
201 @item
202 @dfn{x}には2つの数が続かなければいけません。
203 2つの数は水平軸上で表示される最小値と最大値を設定します。
204 もし水平軸上の変数が@var{x}でないなら、
205 このオプションは水平軸上の変数名を持たなければいけません。
206 デフォルトの水平範囲は-10から10です。
208 @item
209 @dfn{y}には2つの数が続かなければいけません。
210 2つの数は垂直軸上で表示される最小値と最大値を設定します。
211 もし垂直軸上の変数が@var{y}でないなら、
212 このオプションは垂直軸上の変数名を持たなければいけません。
213 デフォルトの垂直範囲は-10から10です。
214 @end itemize
216 @strong{例:}
218 @itemize @bullet
219 @item
220 微分方程式@math{y' = exp(-x) + y}の方向場と@math{(2, -0.1)}を通過する解を表示するために:
221 @c ===beg===
222 @c plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$
223 @c ===end===
224 @example
225 (%i1) plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$
226 @end example
228 @ifnotinfo
229 @image{figures/plotdf1,8cm}
230 @end ifnotinfo
232 @item
233 方程式@math{diff(y,x) = x - y^2}の方向場と
234 初期条件@math{y(-1) = 3}の解を得るために、
235 以下のコマンドをつかうことができます:
236 @c ===beg===
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])$
240 @c ===end===
241 @example
242 @group
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])$
246 @end group
247 @end example
249 グラフは関数@math{y = sqrt(x)}も表示します。
251 @ifnotinfo
252 @image{figures/plotdf2,8cm}
253 @end ifnotinfo
255 @item
256 以下の例は、
257 2つの方程式@math{dz/dt = v}と@math{dv/dt = -k*z/m}で定義される調和振動子の方向場と、
258 @math{(z,v) = (6,0)}を通る積分曲線を、
259 (@math{k}は2に固定で)@math{m}の値を対話的に変えられるスライダーと一緒に、
260 表示します。
261 @c ===beg===
262 @c plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"],
263 @c            [sliders,"m=1:5"], [trajectory_at,6,0])$
264 @c ===end===
265 @example
266 @group
267 (%i1) plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"],
268            [sliders,"m=1:5"], [trajectory_at,6,0])$
269 @end group
270 @end example
272 @ifnotinfo
273 @image{figures/plotdf3,8cm}
274 @end ifnotinfo
276 @item
277 Duffing方程式@math{m*x''+c*x'+k*x+b*x^3 = 0}の方向場をプロットするために、
278 変数@math{y=x'}を導入し、以下のように使います:
279 @c ===beg===
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])$
283 @c ===end===
284 @example
285 @group
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])$
289 @end group
290 @end example
292 @ifnotinfo
293 @image{figures/plotdf4,8cm}
294 @end ifnotinfo
296 @item
297 質量@math{m}の値を変更するのに使うことができるスライダーと一緒に
298 与えられた初期条件の解と減衰振り子の方向場と
299 時間の関数として2つの状態変数のプロットを一緒に:
301 @c ===beg===
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])$
307 @c ===end===
308 @example
309 @group
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])$
315 @end group
316 @end example
318 @ifnotinfo
319 @image{figures/plotdf5,8cm}@image{figures/plotdf6,8cm}
320 @end ifnotinfo
322 @end itemize
324 @opencatbox
325 @category{Package plotdf} @category{Plotting} @category{Numerical methods}
326 @closecatbox
328 @end deffn