2 * Introduction to drawdf::
3 * Functions and Variables for drawdf::
6 @node Introduction to drawdf, Functions and Variables for drawdf, drawdf, drawdf
7 @section Introduction to drawdf
11 二連立自律一階ODE系の方向場を描画します。
13 これは追加パッケージなので、利用するには、最初に
14 @code{load("drawdf")}でロードしなければいけません。
15 Drawdfは@code{draw}パッケージ上に構築されています。これはGnuplot 4.2を要求します。
17 単一のODEの方向場をプロットするには、ODEを以下の形式で書かなければいけません:
26 $${{dy}\over{dx}} = F(x,y)$$
29 そして関数@var{F}を@code{drawdf}の引数に与えなければいけません。
30 もし独立変数と従属変数が、上の式のように@var{x}と@var{y}でないなら、
31 drawdfコマンドへの引数として与えられるリストの中に明示的に
32 それら2つの変数を指名しなければいけません。
35 2つの自励ODEの組の方向場をプロットするには、
36 それらを以下の形式で書かなければいけません。
40 -- = G(x,y) -- = F(x,y)
45 $${{dx}\over{dt}} = G(x,y) \qquad {{dy}\over{dt}} = F(x,y)$$
48 そして@code{drawdf}の引数は2つの関数@var{G}と@var{F}を
50 すなわち、リストの最初の式は水平軸上に表された変数の時間導関数であり、
51 二番目の式は垂直軸上に表された変数の時間導関数です。
52 それら2つの変数は@var{x}と@var{y}である必要はありませんが、
55 2つの変数を、最初のものが水平軸上のものを、その後垂直軸上のものを指定する別のリストでなければいけません。
59 暗に@code{x=t},@code{G(x,y)=1}と認め、
60 非自励方程式を2つの自励方程式系に変換します。
63 @category{Differential equations}
65 @category{Share packages}
66 @category{Package drawdf}
67 @category{Package draw}
71 @node Functions and Variables for drawdf, , Introduction to drawdf, drawdf
72 @section Functions and Variables for drawdf
76 @deffn {関数} drawdf (@var{dydx}, ...options and objects...)
77 @deffnx {関数} drawdf (@var{dvdu}, @code{[}@var{u},@var{v}@code{]}, ...options and objects...)
78 @deffnx {関数} drawdf (@var{dvdu}, @code{[}@var{u},@var{umin},@var{umax}@code{]}, @code{[}@var{v},@var{vmin},@var{vmax}@code{]}, ...options and objects...)
79 @deffnx {関数} drawdf (@code{[}@var{dxdt},@var{dydt}@code{]}, ...options and objects...)
80 @deffnx {関数} drawdf (@code{[}@var{dudt},@var{dvdt}@code{]}, @code{[}@var{u},@var{v}@code{]}, ...options and objects...)
81 @deffnx {関数} drawdf (@code{[}@var{dudt},@var{dvdt}@code{]}, @code{[}@var{u},@var{umin},@var{umax}@code{]}, @code{[}@var{v},@var{vmin},@var{vmax}@code{]}, ...options and objects...)
84 オプションの解曲線や@code{draw}パッケージを使う他のグラフィックスと一緒に、
87 最初の引数は導関数を指定し、式か2つの式のリストでなければいけません。
88 @var{dydx}, @var{dxdt}, @var{dydt}は@var{x}と@var{y}に依存する式です。
89 @var{dvdu}, @var{dudt}, @var{dvdt}は@var{u}と@var{v}に依存する式です。
91 もし独立変数と従属変数が@var{x}と@var{y}でないなら、
93 2つの名前のリスト@code{[}@var{u},@var{v}@code{]}のとしてか、
94 形式@code{[}@var{u},@var{umin},@var{umax}@code{]}と
95 @code{[}@var{v},@var{vmin},@var{vmax}@code{]}の2つのリストとしてのいずれか
98 残りの引数は@i{グラフィックオプション}か@i{グラフィックオブジェクト},
99 任意の深さで入れ子になったグラフィックオプションやオブジェクトを含むリストです。
100 @code{drawdf}がサポートするグラフィックオプションとオブジェクトの集合は
101 @code{draw}パッケージの@code{draw2d}と@code{gr2d}がサポートするもの上位集合です。
104 @i{グラフィックオプション}は続く@i{グラフィックオブジェクト}すべてに影響します。
105 更に、@i{グラフィックオブジェクト}は指定された順にキャンバス上に描かれ、
106 先に描かれたグラフィックスを見えなくするかもしれません。
107 いくつかの@i{グラフィックオプション}はシーンのグローバルな外観に影響します。
109 @code{drawdf}がサポートする追加の@i{グラフィックオブジェクト}は以下を含みます:
110 @code{solns_at}, @code{points_at}, @code{saddles_at}, @code{soln_at},
111 @code{point_at}, @code{saddle_at}.
113 @code{drawdf}がサポートする追加の@i{グラフィックオプション}は以下を含みます:
114 @code{field_degree}, @code{soln_arrows}, @code{field_arrows},
115 @code{field_grid}, @code{field_color}, @code{show_field},
116 @code{tstep}, @code{nsteps}, @code{duration}, @code{direction},
117 @code{field_tstep}, @code{field_nsteps}, @code{field_duration}.
119 @code{draw}パッケージから受け継がれた、共通に使われる@i{グラフィックオブジェクト}は
120 以下を含みます: @code{explicit}, @code{implicit}, @code{parametric},
121 @code{polygon}, @code{points}, @code{vector}, @code{label},
122 @code{draw2d}と@code{gr2d}がサポートする他のすべてのもの。
124 @code{draw}パッケージから受け継がれた、共通に使われる@i{グラフィックオプション}は
126 @code{points_joined}, @code{color},
127 @code{point_type}, @code{point_size}, @code{line_width},
128 @code{line_type}, @code{key}, @code{title}, @code{xlabel},
129 @code{ylabel}, @code{user_preamble}, @code{terminal},
130 @code{dimensions}, @code{file_name},
131 @code{draw2d}と@code{gr2d}がサポートする他のすべてのもの。
133 @code{draw2d}も参照してください。
135 wxMaximaやImaximaのユーザーは@code{wxdrawdf}を代わりに使うかもしれません。
137 グラフィックスが@code{wxdraw}を使うノートブック内で描かれることを除いて、
140 この関数を利用するには、最初に@code{load("drawdf")}を書いてください。
145 (%i1) load("drawdf")$
146 (%i2) drawdf(exp(-x)+y)$ /* default vars: x,y */
147 (%i3) drawdf(exp(-t)+y, [t,y])$ /* default range: [-10,10] */
148 (%i4) drawdf([y,-9*sin(x)-y/5], [x,1,5], [y,-2,2])$
151 下位互換のために、@code{drawdf}はplotdfがサポートしたパラメータのほとんどを
155 (%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
156 [trajectory_at,0,0])$
159 @code{soln_at}と@code{solns_at}は、
160 少し強化された4次のRunge Kutta数値積分器を使って、
164 (%i6) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
165 solns_at([0,0.1],[0,-0.1]),
166 color=blue, soln_at(0,0))$
169 @code{field_degree=2}とすると、
170 それぞれのグリッド点での1次と2次の導関数に基づいて、
172 @code{field_grid=[}@var{COLS},@var{ROWS}@code{]}は
176 (%i7) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
177 field_degree=2, field_grid=[20,15],
178 solns_at([0,0.1],[0,-0.1]),
179 color=blue, soln_at(0,0))$
182 @code{soln_arrows=true}は
184 (デフォルトでは)方向場からそれらを削除します。
185 また、解曲線を強調するようにデフォルトの色を変えます。
188 (%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
190 solns_at([0,0.1],[0,-0.1],[0,0]))$
193 @code{duration=40}は数値積分の時間間隔を指定します(デフォルトは10))。
194 もし解がプロット領域から遠くに移動し過ぎたり、
195 導関数が複素数や無限大になったりしても、積分は自動的に停止します。
196 ここでも、 @code{field_degree=2}を指定して二次スプラインをプロットします。
197 以下の方程式は捕食者-被食者系をモデル化します。
200 (%i9) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
201 field_degree=2, duration=40,
202 soln_arrows=true, point_at(1/2,1/2),
203 solns_at([0.1,0.2], [0.2,0.1], [1,0.8], [0.8,1],
204 [0.1,0.1], [0.6,0.05], [0.05,0.4],
205 [1,0.01], [0.01,0.75]))$
208 @code{field_degree='solns}とすると、
209 場は、4次のRunge Kuttaで計算された多くの小さな解曲線で構成され、
213 (%i10) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
214 field_degree='solns, duration=40,
215 soln_arrows=true, point_at(1/2,1/2),
216 solns_at([0.1,0.2], [0.2,0.1], [1,0.8],
217 [0.8,1], [0.1,0.1], [0.6,0.05],
218 [0.05,0.4], [1,0.01], [0.01,0.75]))$
222 自動的にそれぞれの鞍部で方程式を線形化しようとし、
223 セパラトリクスを含む、それぞれの固有ベクトルに対応した数値解をプロットしようとします。
225 数値積分器の最大時間ステップを指定します(デフォルトは0.1)。
226 xとyのステップを小さく保つために、小さ目の時間ステップが時々使われます。
227 以下の方程式は減衰振り子をモデル化します。
230 (%i11) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
231 soln_arrows=true, point_size=0.5,
232 points_at([0,0], [2*%pi,0], [-2*%pi,0]),
234 saddles_at([%pi,0], [-%pi,0]))$
237 @code{show_field=false}は場を完全に抑制します。
240 (%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
241 show_field=false, soln_arrows=true,
243 points_at([0,0], [2*%pi,0], [-2*%pi,0]),
244 saddles_at([3*%pi,0], [-3*%pi,0],
248 @code{drawdf}は、認識しないパラメータすべてを@code{draw2d}や@code{gr2d}に渡します。
249 なので、@code{draw}パッケージのフルパワーを@code{drawdf}と組み合わせられます。
252 (%i13) drawdf(x^2+y^2, [x,-2,2], [y,-2,2], field_color=gray,
253 key="soln 1", color=black, soln_at(0,0),
254 key="soln 2", color=red, soln_at(0,1),
255 key="isocline", color=green, line_width=2,
256 nticks=100, parametric(cos(t),sin(t),t,0,2*%pi))$
259 @code{drawdf}はグラフィクオプションやオブジェクトの入れ子のリストを受け付けます。
260 なので、makelistやグラフィックスを生成する他の関数コールの便利な使用が可能です。
263 (%i14) colors : ['red,'blue,'purple,'orange,'green]$
264 (%i15) drawdf([x-x*y/2, (x*y - 3*y)/4],
265 [x,2.5,3.5], [y,1.5,2.5],
267 makelist([ key = concat("soln",k),
269 soln_at(3, 2 + k/20) ],
274 @category{Package drawdf}