| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| 50.1 Introduction to dynamics | ||
| 50.2 Functions and Variables for dynamics |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
追加パッケージ dynamicsには、
離散力学系とフラクタルの様々なグラフィックス表現を生成するためのいくつかの関数と、
微分方程式系を数値的に解くための 4次 Runge-Kutta法の実装が含まれています。
このパッケージの関数を使うには、最初に
load("dynamics")でパッケージをロードしなければいけません。
Maxima 5.12で導入された変更
Maxima 5.12以来現在まで dynamicsパッケージは
グラフを処理するのに関数 plot2dを使います。
(juliaや mandelbrotを除いて)
グラフィックスを生成するコマンドは plot2dのいかなるオプションも受け付けます。
オプションには、プロットスタイルや色を使ったり、
一方の、または両方の軸を対数スケールで表したり、
様々なグラフィカルインターフェイス全体に渡って変更を加えるものを含みます。
古いオプション domain, pointsize, xcenter, xradius,
ycenter, yradius, xaxislabel, yaxislabelは
この新しいバージョンでは受け付けられません。
現在,すべてのプログラムは、以前のバージョンのように xと yだけでなく、
任意の変数名を受け付けます。
2つの要求パラメータが2つのプログラムで変えられました:
evolution2dは、現在、2つの独立変数を陽に指定するリストを要求し、
orbitsの水平範囲はもはやステップサイズを要求しません;
範囲は、変数名と最小値、最大値だけを指定しなければいけません;
ステップ数は、現在、オプション nticksで変えることができます。
Categories: Dynamical systems ·Share packages ·Package dynamics
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[[x1, y1]...[xm, ym]], [x0, y0], b, n, ..., options, ...);いわゆるカオスゲームを実装します:
初期点 (x0, y0)がプロットされ、
m個の点 [x1, y1]...[xm,
ym]の1つがランダムに選択されます。
プロットされる次の点はプロットされた以前の点からランダムに選ばれた点までの線分上で、
ランダム点からその線分の長さに bを掛けた距離にあります。
手続きは n回繰り返されます。
Categories: Package dynamics ·Plotting
2次元グラフに、点の水平座標が整数 0, 1, 2, ..., n、 垂直座標が再帰関係
y(n+1) = F(y(n)) |
で定義された数列の対応する値 y(n)である n+1個の点を描きます。 ここで、初期値 y(0)は y0に等しいです。 Fは1変数にだけ依存する式でなければいけません。 (例の中では yに依存していますが、他のいかなる変数を使うことができます), y0は実数でなければいけなく、 nは正の整数でなければいけません。
Categories: Package dynamics ·Plotting
[F, G], [u, v], [u0, y0], n, ..., options, ...);再帰関係を伴う二次元離散力学系によって定義された点列の中の最初の n+1点を二次元プロットで表示します。 初期値 u0と v0を持つ
u(n+1) = F(u(n), v(n)) v(n+1) = G(u(n), v(n)) |
Fと Gは 2変数 uと vのみに依存する式 2つでなければいけません。 変数はリストの中に明示的に指名されなければいけません。
Categories: Package dynamics ·Plotting
[r1, ..., rm], [A1, ..., Am], [[x1, y1], ..., [xm, ym]], [x0, y0], n, ..., options, ...);反復関数系法を実装します。
この方法は関数 chaosgameで記述した方法に似ていますが、
現在点からランダムに選ばれた点にセグメントを縮める代わりに、
そのセグメントの2成分はランダムに選ばれた点に対応する 2行 2列行列 Aiを乗算されます。
m個のアトラクティブな点の1つのランダムな選択を重み r1,...,rmで定義された非均一な確率分布で作ることができます。 それらの重みは累積形で与えられます; 例えばもし確率0.2, 0.5, 0.3を持つ3点があるなら、 重み r1, r2と r3は 2, 7, 10とできます。
Categories: Package dynamics ·Plotting
複素数 (x + i y)に関する Julia集合の表現のグラフィックスファイルを生成します。 パラメータ xと yは実数でなければいけません。 ファイルは、 XPMグラフィックスフォーマットでカレントディレクトリかユーザーディレクトリに生成されます。 プログラムは走らせるのに数秒かかるかもしれません。 終了後、生成したファイル名と共にメッセージが印字されます。
Julia集合に属さない点には異なる色が割り当てられます。 繰り返し回数に従って、その点から始まり、半径2の収束円から動く数列を取ります。 繰り返しの最大回数はオプション levelsで設定されます; その回数の繰り返しの後、もし数列がまだ収束円内なら、 点はオプション colorで定義された色で塗られます。
Julia集合に属さない点に使われる色すべては、同じ saturationと valueを持ちますが、 hueと (hue + huerange)の間に一様に分布する、違った色相角を持ちます。
optionsはオプションの列です。 受け付けられるオプションのリストは以下の節で与えられます。
Categories: Package dynamics ·Plotting
Mandelbrot集合の表現のグラフィックスファイルを生成します。 ファイルは、 XPMグラフィックスフォーマットでカレントディレクトリかユーザーディレクトリに生成されます。 プログラムは走らせるのに数秒かかるかもしれません。 終了後、生成したファイル名と共にメッセージが印字されます。
Mandelbrot集合に属さない点には、異なる色が割り当てられます。 繰り返し回数に従って、その点から始まり、半径 2の収束円から動く数列を取ります。 繰り返しの最大回数はオプション levelsで設定されます; その回数の繰り返しの後、もし数列がまだ収束円内なら、点はオプション colorで定義された色で塗られます。
Mandelbrot集合に属さない点に使われる色すべては、同じ saturationと valueを持ちますが、hueと (hue + huerange)の間に一様に分布する、違った色相角を持ちます。
optionsはオプションの列です。 受け付けられるオプションのリストは以下の節で与えられます。
Categories: Package dynamics ·Plotting
パラメータ xを持つ一次元離散力学系の族に関する軌道図を描画します; この種の図は一次元離散系の分岐の研究に使われます。
関数 F(y)は、
関数 evolutionの場合と同様に値 y0で始まる数列を定義しますが、
この場合、その関数は x0から xfまでの区間内の値を取り、
xstepの増分を持つパラメータ xにも依存します。
パラメータ xに使われるそれぞれの値は水平軸に示されます。
垂直軸は、数列に n1回の時間発展させた後得られる数列
y(n1+1),..., y(n1+n2+1)の n2個の値を示します。
Categories: Package dynamics ·Plotting
4次の Runge-Kutta法を使って、 最初の形式は一階常微分方程式一つを数値的に解き、二番目の形式はそれら m個の方程式系を解きます。 varは従属変数を表します。 ODEは独立変数と従属変数にだけ依存する式でなければいけません。 そして、独立変数に関する従属変数の導関数を定義します。
独立変数は domainで指定されます。
それは 4つの要素のリストでなければいけません。
例えば:
[t, 0, 10, 0.1] |
リストの最初の要素は独立変数を特定し、二番目と三番目の要素はその変数の初期値と最終値であり、 最後の要素はその区間内で使用されるべき増加分を設定します。
もし mこの方程式が解かれようとしているなら、
m個の従属変数 v1, v2, ..., vmが存在しなければいけません。
それらの変数の初期値は init1, init2, ..., initmとなります。
以前の場合と同様、 domainで定義されたただ 1つの独立変数が残っています。
ODE1, ..., ODEmは独立変数に関する従属変数それぞれの導関数を定義する式です。
それらの式に現れるかもしれない変数は独立変数と任意の従属変数だけです。
従属変数と厳密に同じ順序でリストの中に導関数
ODE1, ..., ODEmを与えることが重要です;
例えば、リストの三番目の要素は三番目の従属変数の導関数と解釈されます。
プログラムは 方程式を独立変数の初期値から最終値まで一定の増加分を使って積分しようとします。 もしあるステップで従属変数の1つが大きすぎる絶対値を取ったら、積分はその点で中断されます。 結果は、なされた繰り返しの回数と同じ数の要素を持つリストです。 結果リストの中のそれぞれの要素は、それ自身 m+1個の要素を持つもう一つのリストです: 独立変数の値にその点に対応する従属変数の値が続きます。
Categories: Package dynamics ·Differential equations ·Numerical methods
再帰関係によって定義された数列に関する階段図形を描画します。
y(n+1) = F(y(n)) |
入力パラメータの解釈と許される値は
関数 evolutionに関するものと同じです。
階段図形は線 G(y) = yと共に関数
F(y)のプロットから構成されます。
垂直区間は、その線上の点 (y0, y0)から関数
Fと交差する点まで描画されます。
水平区間はその点から線上の点 (y1, y1)に届くまで描画されます。
手続きは点 (yn, yn)に届くまで n回繰り返されます。
Categories: Package dynamics ·Plotting
オプション
それぞれのオプションは複数の項目のリストです。 最初の項目はオプション名で、残りはオプションの引数からなります。
関数 evolution, evolution2d, staircase, orbits,
ifs, chaosgameが受け付けるオプションは
plot2dに関するオプションと同じです。
orbitsは、それらのオプションに加えて、
垂直方向に表される異なる点の最大数を設定する特別なオプション pixelsを受け付けます。
以下のオプションを関数 juliaと mandelbrotは受け付けます:
例
以下の数列のグファフィックス表現と階段図形: 2, cos(2), cos(cos(2)),...
(%i1) load("dynamics")$
(%i2) evolution(cos(y), 2, 11);
(%i3) staircase(cos(y), 1, 11, [y, 0, 1.2]);
|
もしシステムが遅いなら、以下の例のように繰り返し回数を減らさなければいけないでしょう。
そして、もしモニタ上のドットが小さすぎるなら、
[style,[points,0.8]]のように、
違ったスタイルを試したくなるかもしれません。
パラメータ aを持つ二次写像の軌跡図。
x(n+1) = a + x(n)^2 |
(%i4) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]); |
x = -1.25近くのより低い分岐の回りの領域を拡大するには、以下を使ってください:
(%i5) orbits(x^2+a, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
[nticks, 400], [style,dots]);
|
フラクタルに導かれる二次元系の発展:
(%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$ (%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$ (%i8) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]); |
そしてそのフラクタルの小さな領域の拡大:
(%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
[y,-0.4,-0.2], [style, dots]);
|
カオスゲームで得られる Sierpinski三角形のプロット:
(%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
30000, [style, dots]);
|
反復函数系で得られる Barnsleyのシダ:
(%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$ (%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$ (%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$ (%i13) a4: matrix([0,0],[0,0.16])$ (%i14) p1: [0,1.6]$ (%i15) p2: [0,1.6]$ (%i16) p3: [0,0.44]$ (%i17) p4: [0,0]$ (%i18) w: [85,92,99,100]$ (%i19) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]); |
Mandelbrot集合の 12色のグラフィックス表現を納めた dynamics9.xpmという名前のファイルを生成するには以下を使ってください:
mandelbrot([filename,"dynamics9"])$ |
そして数 (-0.55 + i 0.6)に関する Julia集合は以下で得られます:
julia(-0.55, 0.6, [levels, 36], [center, 0, 0.6], [radius, 0.3],
[hue, 240], [huerange, -180], [filename, "dynamics10"])$
|
グラフはファイル dynamics10.xpmに保存されます。 x方向に -0.3から 0.3まで、 y方向に 0.3から 0.9までの領域を表示します。 青から始まり黄で終わる 36色が使われます。
微分方程式
dx/dt = t - x^2 |
を、初期値 x(t=0) = 1で、0から 8までの tの区間で 0.1の増分で数値的に解くには、以下を使ってください:
(%i20) results: rk(t-x^2,x,1,[t,0,8,0.1])$ |
結果はリスト resultsに保存されます。
系
dx/dt = 4-x^2-4*y^2 dy/dt = y^2-x^2+1 |
を、 t=0の xと yの初期値がそれぞれ -1.25, 0.75で、 0から 4までの区間で、数値的に解くには:
(%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])$ |
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は市川 雄二によって2012年1月月5日にtexi2html 1.82を用いて生成されました。