Merge branch 'master' into bug-4403-remove-polyfill
[maxima.git] / doc / info / ja / dynamics.texi
blobfa42dddaae97c6bf14007f60930cc2ea6ce81daa
1 @menu
2 * Introduction to dynamics::
3 * Functions and Variables for dynamics::
4 @end menu
6 @node Introduction to dynamics, Functions and Variables for dynamics, dynamics, dynamics
7 @section Introduction to dynamics
9 追加パッケージ@code{dynamics}には、
10 離散力学系とフラクタルの様々なグラフィックス表現を生成するためのいくつかの関数と、
11 微分方程式系を数値的に解くための4次Runge-Kutta法の実装が含まれています。
13 このパッケージの関数を使うには、
14 最初に@code{load("dynamics")}でパッケージをロードしなければいけません。
16 @b{Maxima 5.12で導入された変更}
18 Maxima 5.12以来、現在まで、dynamicsパッケージは
19 グラフを処理するのに関数@code{plot2d}を使います。
20 (@code{julia}や@code{mandelbrot}を除いて)
21 グラフィックスを生成するコマンドは@code{plot2d}のいかなるオプションも受け付けます。
22 オプションには、プロットスタイルや色を使ったり、
23 一方の、または両方の軸を対数スケールで表したり、
24 様々なグラフィカルインターフェイス全体に渡って変更を加えるものを含みます。
25 古いオプション@var{domain}, @var{pointsize}, @var{xcenter}, @var{xradius},
26 @var{ycenter}, @var{yradius}, @var{xaxislabel}, @var{yaxislabel}は
27 この新しいバージョンでは受け付けられません。
29 現在,すべてのプログラムは、
30 以前のバージョンのように@var{x}と@var{y}だけでなく、
31 任意の変数名を受け付けます。
32 2つの要求パラメータが2つのプログラムで変えられました:
33 @code{evolution2d}は、現在、
34 2つの独立変数を陽に指定するリストを要求し、
35 @code{orbits}の水平範囲はもはやステップサイズを要求しません;
36 範囲は、変数名と最小値、最大値だけを指定しなければいけません;
37 ステップ数は、現在、オプション@var{nticks}で変えることができます。
40 @opencatbox
41 @category{Dynamical systems}
42 @category{Share packages}
43 @category{Package dynamics}
44 @closecatbox
46 @node Functions and Variables for dynamics,  , Introduction to dynamics, dynamics
47 @section Functions and Variables for dynamics
49 @deffn {関数} chaosgame (@code{[[}@var{x1}, @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{b}, @var{n}, ..., options, ...);
51 いわゆるカオスゲームを実装します:
52 初期点(@var{x0}, @var{y0})がプロットされ、
53 @var{m}個の点@code{[}@var{x1}, @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]}の1つがランダムに選択されます。
54 プロットされる次の点はプロットされた以前の点からランダムに選ばれた点までの線分上で、
55 ランダム点からその線分の長さに@var{b}を掛けた距離にあります。
56 手続きは
57 @var{n}回繰り返されます。
59 @opencatbox
60 @category{Package dynamics}
61 @category{Plotting}
62 @closecatbox
64 @end deffn
66 @deffn {関数} evolution (@var{F}, @var{y0}, @var{n}, ..., options, ...);
68 2次元グラフに、
69 点の水平座標が整数0, 1, 2, ..., @var{n}、
70 垂直座標が再帰関係
71 @ifnottex
72 @example
73         y(n+1) = F(y(n))
74 @end example
75 @end ifnottex
76 @tex
77 $$y_{n+1} = F(y_n)$$
78 @end tex
79 で定義された数列の対応する値@var{y(n)}である
80 @var{n+1}個の点を描きます。
81 ここで、初期値@var{y(0)}は@var{y0}に等しいです。
82 @var{F}は1変数にだけ依存する式でなければいけません。
83 (例の中では、@var{y}に依存していますが、他のいかなる変数を使うことができます),
84 @var{y0}は実数でなければいけなく、@var{n}は正の整数でなければいけません。
86 @opencatbox
87 @category{Package dynamics}
88 @category{Plotting}
89 @closecatbox
91 @end deffn
93 @deffn {関数} evolution2d (@code{[}@var{F}, @var{G}@code{]}, @code{[}@var{u}, @var{v}@code{]}, @code{[}@var{u0}, @var{y0}@code{]}, @var{n}, ..., options, ...);
95 再帰関係を伴う二次元離散力学系によって定義された点列の中の最初の@var{n+1}点を
96 二次元プロットで、
97 表示します。
98 初期値@var{u0}と@var{v0}を持つ
99 @ifnottex
100 @example
101         u(n+1) = F(u(n), v(n))    v(n+1) = G(u(n), v(n))
102 @end example
103 @end ifnottex
104 @tex
105 $$\cases{u_{n+1} = F(u_n, v_n) &\cr v_{n+1} = G(u_n, v_n)}$$
106 @end tex
108 @var{F}と@var{G}は2変数@var{u}と@var{v}のみに依存する式2つでなければいけません。
109 変数はリストの中に明示的に指名されなければいけません。
111 @opencatbox
112 @category{Package dynamics}
113 @category{Plotting}
114 @closecatbox
116 @end deffn
118 @deffn {関数} ifs (@code{[}@var{r1}, ..., @var{rm}@code{]}, @code{[}@var{A1}, ..., @var{Am}@code{]}, @code{[[}@var{x1}, @var{y1}@code{]}, ..., @code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{n}, ..., options, ...);
120 反復関数系法を実装します。
121 この方法は関数@code{chaosgame}で記述した方法に似ていますが、
122 現在点からランダムに選ばれた点にセグメントを縮める代わりに、
123 そのセグメントの2成分はランダムに選ばれた点に対応する2行2列行列@var{Ai}を乗算されます。
125 @var{m}個のアトラクティブな点の1つのランダムな選択を
126 重み@var{r1},...,@var{rm}で定義された非均一な確率分布で作ることができます。
127 それらの重みは累積形で与えられます;
128 例えば、
129 もし確率0.2, 0.5, 0.3を持つ3点があるなら、
130 重み@var{r1}, @var{r2}と@var{r3}は2, 7, 10とできます。
132 @opencatbox
133 @category{Package dynamics}
134 @category{Plotting}
135 @closecatbox
137 @end deffn
139 @deffn {関数} julia (@var{x}, @var{y}, ...@var{options}...)
141 複素数(@var{x} + i @var{y})に関するJulia集合の表現のグラフィックスファイルを生成します。
142 パラメータ@var{x}と@var{y}は実数でなければいけません。
143 ファイルは、XPMグラフィックスフォーマットでカレントディレクトリかユーザーディレクトリに生成されます。
144 プログラムは走らせるのに数秒かかるかもしれません。終了後、生成したファイル名と共にメッセージが印字されます。
146 Julia集合に属さない点には、異なる色が割り当てられます。
147 繰り返し回数に従って、その点から始まり、半径2の収束円から動く数列を取ります。
148 繰り返しの最大回数はオプション@var{levels}で設定されます;
149 その回数の繰り返しの後、もし数列がまだ収束円内なら、
150 点はオプション@var{color}で定義された色で塗られます。
152 Julia集合に属さない点に使われる色すべては、同じ@var{saturation}と@var{value}を持ちますが、
153 @var{hue}と(@var{hue} + @var{huerange})の間に一様に分布する、違った色相角を持ちます。
155 @var{options}はオプションの列です。
156 受け付けられるオプションのリストは以下の節で与えられます。
158 @opencatbox
159 @category{Package dynamics}
160 @category{Plotting}
161 @closecatbox
163 @end deffn
165 @deffn {関数} mandelbrot (@var{options})
167 Mandelbrot集合の表現のグラフィックスファイルを生成します。
168 ファイルは、XPMグラフィックスフォーマットでカレントディレクトリかユーザーディレクトリに生成されます。
169 プログラムは走らせるのに数秒かかるかもしれません。終了後、生成したファイル名と共にメッセージが印字されます。
171 Mandelbrot集合に属さない点には、異なる色が割り当てられます。
172 繰り返し回数に従って、その点から始まり、半径2の収束円から動く数列を取ります。
173 繰り返しの最大回数はオプション@var{levels}で設定されます;
174 その回数の繰り返しの後、もし数列がまだ収束円内なら、
175 点はオプション@var{color}で定義された色で塗られます。
177 Mandelbrot集合に属さない点に使われる色すべては、同じ@var{saturation}と@var{value}を持ちますが、
178 @var{hue}と(@var{hue} + @var{huerange})の間に一様に分布する、違った色相角を持ちます。
180 @var{options}はオプションの列です。
181 受け付けられるオプションのリストは以下の節で与えられます。
183 @opencatbox
184 @category{Package dynamics}
185 @category{Plotting}
186 @closecatbox
188 @end deffn
190 @deffn {関数} orbits (@var{F}, @var{y0}, @var{n1}, @var{n2}, [@var{x}, @var{x0}, @var{xf}, @var{xstep}], ...options...);
192 パラメータ@var{x}を持つ一次元離散力学系の族に関する軌道図を描画します;
193 この種の図は一次元離散系の分岐の研究に使われます。
195 関数@var{F(y)}は、
196 関数@code{evolution}の場合と同様に値@var{y0}で始まる数列を定義しますが、
197 この場合、その関数は、@var{x0}から@var{xf}までの区間内の値を取り、
198 @var{xstep}の増分を持つパラメータ@var{x}にも依存します。
199 パラメータ@var{x}に使われるそれぞれの値は水平軸に示されます。
200 垂直軸は、
201 数列に@var{n1}回の時間発展させた後得られる数列@var{y(n1+1)},..., @var{y(n1+n2+1)}の@var{n2}個の値を示します。
203 @opencatbox
204 @category{Package dynamics}
205 @category{Plotting}
206 @closecatbox
208 @end deffn
210 @deffn {関数} rk (@var{ODE}, @var{var}, @var{initial}, @var{domain})
211 @deffnx {関数} rk ([@var{ODE1},...,@var{ODEm}], [@var{v1},...,@var{vm}], [@var{init1},...,@var{initm}], @var{domain})
213 4次のRunge-Kutta法を使って、最初の形式は一階常微分方程式一つを数値的に解き、二番目の形式はそれらm個の方程式系を解きます。
214 @var{var}は従属変数を表します。
215 @var{ODE}は独立変数と従属変数にだけ依存する式でなければいけません。
216 そして、独立変数に関する従属変数の導関数を定義します。
218 独立変数は@code{domain}で指定されます。
219 それは4つの要素のリストでなければいけません。
220 例えば:
221 @example
222 [t, 0, 10, 0.1]
223 @end example
224 リストの最初の要素は独立変数を特定し、二番目と三番目の要素はその変数の初期値と最終値であり、
225 最後の要素はその区間内で使用されるべき増加分を設定します。
227 もし@var{m}この方程式が解かれようとしているなら、
228 @var{m}個の従属変数@var{v1}, @var{v2}, ..., @var{vm}が存在しなければいけません。
229 それらの変数の初期値は@var{init1}, @var{init2}, ..., @var{initm}となります。
230 以前の場合と同様、@code{domain}で定義されたただ1つの独立変数が残っています。
231 @var{ODE1}, ..., @var{ODEm}は
232 独立変数に関する従属変数それぞれの導関数を定義する式です。
233 それらの式に現れるかもしれない変数は独立変数と任意の従属変数だけです。
234 従属変数と厳密に同じ順序でリストの中に導関数@var{ODE1}, ..., @var{ODEm}を与えることが重要です;
235 例えば、リストの三番目の要素は三番目の従属変数の導関数と解釈されます。
237 プログラムは
238 方程式を独立変数の初期値から最終値まで一定の増加分を使って積分しようとします。
239 もしあるステップで従属変数の1つが大きすぎる絶対値を取ったら、
240 積分はその点で中断されます。
241 結果は、なされた繰り返しの回数と同じ数の要素を持つリストです。
242 結果リストの中のそれぞれの要素は、それ自身@var{m}+1個の要素を持つもう一つのリストです:
243 独立変数の値にその点に対応する従属変数の値が続きます。
245 @opencatbox
246 @category{Package dynamics}
247 @category{Differential equations}
248 @category{Numerical methods}
249 @closecatbox
251 @end deffn
253 @deffn {関数} staircase (@var{F}, @var{y0}, @var{n}, ...options...);
255 再帰関係によって定義された数列に関する階段図形を描画します。
256 @ifnottex
257 @example
258         y(n+1) = F(y(n))
259 @end example
260 @end ifnottex
261 @tex
262 $$y_{n+1} = F(y_n)$$
263 @end tex
265 入力パラメータの解釈と許される値は
266 関数@code{evolution}に関するものと同じです。
267 階段図形は線@var{G(y)} @code{=} @var{y}と共に関数@var{F(y)}のプロットから構成されます。
268 垂直区間は、
269 その線上の点(@var{y0}, @var{y0})から
270 関数@var{F}と交差する点まで描画されます。
271 水平区間はその点から線上の点(@var{y1}, @var{y1})に届くまで描画されます。
272 手続きは点(@var{yn}, @var{yn})に届くまで@var{n}回繰り返されます。
274 @opencatbox
275 @category{Package dynamics}
276 @category{Plotting}
277 @closecatbox
279 @end deffn
281 @b{オプション}
283 それぞれのオプションは複数の項目のリストです。
284 最初の項目はオプション名で、残りはオプションの引数からなります。
286 関数@code{evolution}, @code{evolution2d}, @code{staircase}, @code{orbits}, @code{ifs}, @code{chaosgame}が受け付けるオプションは
287 は@code{plot2d}に関するオプションと同じです。
288 @code{orbits}は、それらのオプションに加えて、
289 垂直方向に表される異なる点の最大数を設定する特別なオプション@var{pixels}を受け付けます。
291 以下のオプションを
292 関数@code{julia}と@code{mandelbrot}は受け付けます:
294 @itemize @bullet
295 @item
296 @dfn{size}は1つか2つの引数を取ります。
297 もし1つだけ引数が与えられたら、
298 生成されるグラフィックスファイルの幅と高さはピクセル単位でその値に等しくなります。
299 もし引数2つが与えられたら、それらは幅と高さを定義します。
300 デフォルト値は、幅と高さ両方に関して400ピクセルです。
301 もし2つの値が等しくないなら、集合は歪んで現れます。
303 @item
304 @dfn{levels}は繰り返しの最大数を定義します。
305 これは集合に属さない点に使われる色の数にも等しいです。
306 デフォルト値は12です;
307 値が大きくなると、処理時間が長くなります。
309 @item
310 @dfn{huerange}は
311 集合に属さない点の色相に使われる色相角の範囲を定義します。
312 デフォルト値は360です。これは色が色相のすべての範囲に広がることを意味します。
313 360より大きな値は、色相範囲の繰り返しを意味し、
314 負の値は、繰り返し回数が増えるにつれ、
315 色相角を減らすように使うことができます。
317 @item
318 @dfn{hue}は、
319 集合に属さない点に使われる最初の色の色相を度単位で設定します。
320 デフォルト値は300度です。これはマゼンダに対応します;
321 他の標準的な色の値は、赤には0、オレンジには45、黄には60、緑には120、シアンには180、
322 青には240です。
323 オプション@var{huerange}も参照してください。
325 @item
326 @dfn{saturation}は集合に属さない点に使われる飽和値を設定します。
327 0と1の間でなければいけません。
328 デフォルト値は、0.46です。
330 @item
331 @dfn{value}は
332 集合に属さない点に使われる色の値を設定します。
333 0と1の間でなければいけません;
334 値が高くなると、色が明るくなります。
335 デフォルト値は、0.96です。
337 @item
338 @dfn{color}には、
339 集合の点を表すのに使われる色の色相、飽和、値を定義する
340 3つのパラメータが続きます。
341 デフォルト値は3つのパラメータすべてが0であり、黒に対応します。
342 許される値の範囲の説明に関して、
343 オプション@var{hue}, @var{saturation}, @var{value}を参照してください。
346 @item
347 @dfn{center}には、2つの実パラメータが続きます。
348 これは、表示される領域の中心点の複素平面上の座標を与えます。
349 デフォルト値は両座標に関して0(原点)です。
351 @item
352 @dfn{radius}は表示される正方形領域内の最大円の半径を設定します。
353 デフォルト値は2です。
355 @item
356 @dfn{filename}は
357 結果のグラフが保存されるファイル名を与えます。
358 拡張子.xpmがその名前に加えられます。
359 もしファイルが既に存在しているなら、
360 関数が生成したファイルで置き換えられます。
361 デフォルト値はJulia集合にはjulia、
362 Mandelbrot集合にはmandelbrotです。
364 @end itemize
366 @b{例}
368 以下の数列のグファフィックス表現と階段図形:
369 2, cos(2), cos(cos(2)),...
371 @example
372 (%i1) load("dynamics")$
374 (%i2) evolution(cos(y), 2, 11);
376 (%i3) staircase(cos(y), 1, 11, [y, 0, 1.2]);
377 @end example
379 @ifnotinfo
380 @image{@value{figuresfolder}/dynamics1,8cm}
381 @image{@value{figuresfolder}/dynamics2,8cm}
382 @end ifnotinfo
384 もしシステムが遅いなら、
385 以下の例のように繰り返し回数を減らさなければいけないでしょう。
386 そして、もしモニタ上のドットが小さすぎるなら、
387 @code{[}@var{style},@code{[}@var{points},0.8@code{]]}のように、
388 違ったスタイルを試したくなるかもしれません。
390 パラメータ@var{a}を持つ二次写像の軌跡図。
391 @ifnottex
392 @example
393         x(n+1) = a + x(n)^2
394 @end example
395 @end ifnottex
396 @tex
397 $$x_{n+1} = a + x_n^2$$
398 @end tex
400 @example
401 (%i4) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]);
402 @end example
404 @ifnotinfo
405 @image{@value{figuresfolder}/dynamics3,8cm}
406 @end ifnotinfo
409 x @code{=} -1.25近くのより低い分岐の回りの領域を拡大するには、以下を使ってください:
410 @example
411 (%i5) orbits(x^2+a, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
412              [nticks, 400], [style,dots]);
413 @end example
415 @ifnotinfo
416 @image{@value{figuresfolder}/dynamics4,8cm}
417 @end ifnotinfo
419 フラクタルに導かれる二次元系の発展:
421 @example
422 (%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
424 (%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
426 (%i8) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]);
427 @end example
429 @ifnotinfo
430 @image{@value{figuresfolder}/dynamics5,8cm}
431 @end ifnotinfo
433 そしてそのフラクタルの小さな領域の拡大:
435 @example
436 (%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
437                   [y,-0.4,-0.2], [style, dots]);
438 @end example
440 @ifnotinfo
441 @image{@value{figuresfolder}/dynamics6,8cm}
442 @end ifnotinfo
444 カオスゲームで得られるSierpinski三角形のプロット:
446 @example
447 (%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
448                  30000, [style, dots]);
449 @end example
451 @ifnotinfo
452 @image{@value{figuresfolder}/dynamics7,8cm}
453 @end ifnotinfo
455 反復函数系で得られるBarnsleyのシダ:
457 @example
458 (%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$
460 (%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$
462 (%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$
464 (%i13) a4: matrix([0,0],[0,0.16])$
466 (%i14) p1: [0,1.6]$
468 (%i15) p2: [0,1.6]$
470 (%i16) p3: [0,0.44]$
472 (%i17) p4: [0,0]$
474 (%i18) w: [85,92,99,100]$
476 (%i19) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]);
477 @end example
479 @ifnotinfo
480 @image{@value{figuresfolder}/dynamics8,8cm}
481 @end ifnotinfo
483 @c FIGURES/DYNAMICS9 NO LONGER EXISTS AND FUNCTION CALL SHOWN
484 @c (MANDELBROT([FILENAME,"DYNAMICS9"]) CAUSES AN ERROR.
485 @c COMMENTING OUT THIS NEXT EXAMPLE.
487 @c Mandelbrot集合の12色のグラフィックス表現を納めた
488 @c @emph{dynamics9.xpm}という名前のファイルを生成するには、
489 @c 以下を使ってください:
490 @c 
491 @c @example
492 @c mandelbrot([filename,"dynamics9"])$
493 @c @end example
494 @c 
495 @c @ifnotinfo
496 @c @image{@value{figuresfolder}/dynamics9,8cm}
497 @c @end ifnotinfo
499 そして数(-0.55 + i 0.6)に関するJulia集合は以下で得られます:
500 @example
501 julia (-0.55, 0.6, [iterations, 36], [x, -0.3, 0.2],
502       [y, 0.3, 0.9], [grid, 400, 400], [color_bar_tics, 0, 6, 36])$
503 @end example
505 @c the graph will be saved in the file 
506 @c グラフはファイル@emph{dynamics10.xpm}に保存されます。
507 x方向に-0.3から0.3まで、y方向に0.3から0.9までの領域を表示します。
508 青から始まり黄で終わる36色が使われます。
510 @ifnotinfo
511 @image{@value{figuresfolder}/plotting4,8cm}
512 @end ifnotinfo
514 微分方程式
516 @ifnottex
517 @example
518           dx/dt = t - x^2
519 @end example
520 @end ifnottex
521 @tex
522 $${{dx}\over{dt}} = t - x^2$$ 
523 @end tex
525 を、初期値x(t=0) = 1で、0から8までのtの区間で0.1の増分で
526 数値的に解くには、以下を使ってください:
528 @example
529 (%i20) results: rk(t-x^2,x,1,[t,0,8,0.1])$
530 @end example
532 結果はリスト@code{results}に保存されます。
536 @ifnottex
537 @example
538         dx/dt = 4-x^2-4*y^2     dy/dt = y^2-x^2+1
539 @end example
540 @end ifnottex
541 @tex
542 $$\cases{{\displaystyle{dx}\over\displaystyle{dt}} = 4-x^2-4y^2 &\cr &\cr {\displaystyle{dy}\over\displaystyle{dt}} = y^2-x^2+1}$$
543 @end tex
545 を、t=0のxとyの初期値がそれぞれ-1.25, 0.75で、0から4までの区間で、
546 数値的に解くには:
548 @example
549 (%i21) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$
550 @end example