[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

# 49. drawdf

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 49.1 Introduction to drawdf

関数 `drawdf`は一階常微分方程式 (ODE)や二連立自律一階 ODE系の方向場を描画します。

これは追加パッケージなので、利用するには、最初に `load(drawdf)`でロードしなければいけません。 Drawdfは `draw`パッケージ上に構築されています。これは Gnuplot 4.2を要求します。

単一の ODEの方向場をプロットするには、 ODEを以下の形式で書かなければいけません:

           dy
           -- = F(x,y)
           dx

そして関数 Fを `drawdf`の引数に与えなければいけません。 もし独立変数と従属変数が、上の式のように xと yでないなら、 drawdfコマンドへの引数として与えられるリストの中に明示的にそれら 2つの変数を指名しなければいけません。 (例を見てください。)

2つの自律 ODEの組の方向場をプロットするには、それらを以下の形式で書かなければいけません。

           dx             dy
           -- = G(x,y)    -- = F(x,y)
           dt             dt

そして`drawdf`の引数は　2つの関数Gと Fをその順に持つリストでなければいけません; すなわち、リストの最初の式は水平軸上に表された変数の時間導関数であり、 二番目の式は垂直軸上に表された変数の時間導関数です。 それら 2つの変数は xと yである必要はありませんが、 もしそうでないなら、 drawdfに与えられる二番目の引数は 2つの変数を、最初のものが水平軸上のものを、その後が垂直軸上のものを 指定する別のリストでなければいけません。

もしただ 1つの ODEが与えられるなら、 `drawdf`は暗に `x=t`,`G(x,y)=1`と認め、 非自律方程式を2つの自律方程式系に変換します。

·

Categories: Differential equations ·Plotting ·Share packages ·Package drawdf ·Package draw

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 49.2 Functions and Variables for drawdf

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 49.2.1 Functions

関数: drawdf (dydx, ...options and objects...)
関数: drawdf (dvdu, `[`u,v`]`, ...options and objects...)
関数: drawdf (dvdu, `[`u,umin,umax`]`, `[`v,vmin,vmax`]`, ...options and objects...)
関数: drawdf (`[`dxdt,dydt`]`, ...options and objects...)
関数: drawdf (`[`dudt,dvdt`]`, `[`u,v`]`, ...options and objects...)
関数: drawdf (`[`dudt,dvdt`]`, `[`u,umin,umax`]`, `[`v,vmin,vmax`]`, ...options and objects...)

  関数 `drawdf`は、 オプションの解曲線や `draw`パッケージを使う他のグラフィックスと一緒に 2D方向場を描きます。

  最初の引数は導関数を指定し、式か 2つの式のリストでなければいけません。 dydx, dxdt, dydtは xと yに依存する式です。 dvdu, dudt, dvdtは uと vに依存する式です。

  もし独立変数と従属変数が xと yでないなら、 それらの名前を、導関数に続いてすぐに、 2つの名前のリスト `[`u,v`]`のとしてか、形式 `[`u,umin,umax`]`と `[`v,vmin,vmax`]`の 2つのリストとしてのいずれかのように,指定しなければいけません。

  残りの引数はグラフィックオプションかグラフィックオブジェクト, 任意の深さで入れ子になったグラフィックオプションやオブジェクトを含むリストです。 `drawdf`がサポートするグラフィックオプションとオブジェクトの集合は `draw`パッケージの `draw2d`と `gr2d`がサポートするもの上位集合です。

  引数は順次解釈されます: グラフィックオプションは続くグラフィックオブジェクトすべてに影響します。 更に、グラフィックオブジェクトは指定された順にキャンバス上に描かれ、 先に描かれたグラフィックスを見えなくするかもしれません。 いくつかのグラフィックオプションはシーンのグローバルな外観に影響します。

  `drawdf`がサポートする追加のグラフィックオブジェクトは以下を含みます: `solns_at`, `points_at`, `saddles_at`, `soln_at`, `point_at`, `saddle_at`.

  `drawdf`がサポートする追加のグラフィックオプションは以下を含みます: `field_degree`, `soln_arrows`, `field_arrows`, `field_grid`, `field_color`, `show_field`, `tstep`, `nsteps`, `duration`, `direction`, `field_tstep`, `field_nsteps`, `field_duration`.

  `draw`パッケージから受け継がれた、共通に使われるグラフィックオブジェクトは 以下を含みます: `explicit`, `implicit`, `parametric`, `polygon`, `points`, `vector`, `label`, `draw2d`と `gr2d`がサポートする他のすべてのもの。

  `draw`パッケージから受け継がれた、共通に使われるグラフィックオプションは 以下を含みます:
  `points_joined`, `color`, `point_type`, `point_size`, `line_width`, `line_type`, `key`, `title`, `xlabel`, `ylabel`, `user_preamble`, `terminal`, `dimensions`, `file_name`, `draw2d`と `gr2d`がサポートする他のすべてのもの。

  `draw2d`も参照してください。

  wxMaximaや Imaximaのユーザーは `wxdrawdf`を代わりに使うかもしれません。 それは、グラフィックスが `wxdraw`を使うノートブック内で描かれることを除いて、 `drawdf`と同一です。

  この関数を利用するには、最初に `load(drawdf)`と書いてください。

  例:

      (%i1) load(drawdf)$
      (%i2) drawdf(exp(-x)+y)$        /* default vars: x,y */
      (%i3) drawdf(exp(-t)+y, [t,y])$ /* default range: [-10,10] */
      (%i4) drawdf([y,-9*sin(x)-y/5], [x,1,5], [y,-2,2])$

  下位互換のために、 `drawdf`は plotdfがサポートしたパラメータのほとんどを受け付けます。

      (%i5) drawdf(2*cos(t)-1+y, [t,y], [t,-5,10], [y,-4,9],
                   [trajectory_at,0,0])$

  `soln_at`と `solns_at`は、少し強化された 4次の Runge Kutta数値積分器を使って、指定された点を通る解曲線を描きます。

      (%i6) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
                   solns_at([0,0.1],[0,-0.1]),
                   color=blue, soln_at(0,0))$

  `field_degree=2`とすると、それぞれのグリッド点での 1次と 2次の導関数に基づいて、場を二次のスプラインで構成します。 `field_grid=[`COLS,ROWS`]`はグリッドの列と行の数を指定します。

      (%i7) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
                   field_degree=2, field_grid=[20,15],
                   solns_at([0,0.1],[0,-0.1]),
                   color=blue, soln_at(0,0))$

  `soln_arrows=true`は解曲線に矢印を加え、 (デフォルトでは)方向場からそれらを削除します。 また、解曲線を強調するようにデフォルトの色を変えます。

      (%i8) drawdf(2*cos(t)-1+y, [t,-5,10], [y,-4,9],
                   soln_arrows=true,
                   solns_at([0,0.1],[0,-0.1],[0,0]))$

  `duration=40`は数値積分の時間間隔を指定します(デフォルトは 10))。 もし解がプロット領域から遠くに移動し過ぎたり、 導関数が複素数や無限大になったりしても、積分は自動的に停止します。 ここでも `field_degree=2`を指定して二次スプラインをプロットします。 以下の方程式は捕食者-被食者系をモデル化します。

      (%i9) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
                   field_degree=2, duration=40,
                   soln_arrows=true, point_at(1/2,1/2),
                   solns_at([0.1,0.2], [0.2,0.1], [1,0.8], [0.8,1],
                            [0.1,0.1], [0.6,0.05], [0.05,0.4],
                            [1,0.01], [0.01,0.75]))$

  `field_degree='solns`とすると、場は、 4次の Runge Kuttaで計算された多くの小さな解曲線で構成され、この場合、より良い結果をもたらします。

      (%i10) drawdf([x*(1-x-y), y*(3/4-y-x/2)], [x,0,1.1], [y,0,1],
                    field_degree='solns, duration=40,
                    soln_arrows=true, point_at(1/2,1/2),
                    solns_at([0.1,0.2], [0.2,0.1], [1,0.8],
                             [0.8,1], [0.1,0.1], [0.6,0.05],
                             [0.05,0.4], [1,0.01], [0.01,0.75]))$

  `saddles_at`は自動的にそれぞれの鞍部で方程式を線形化しようとし、 セパラトリクスを含む、それぞれの固有ベクトルに対応した数値解をプロットしようとします。 `tstep=0.05`は数値積分器の最大時間ステップを指定します(デフォルトは 0.1)。 xと yのステップを小さく保つために、小さ目の時間ステップが時々使われます。 以下の方程式は減衰振り子をモデル化します。

      (%i11) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
                    soln_arrows=true, point_size=0.5,
                    points_at([0,0], [2*%pi,0], [-2*%pi,0]),
                    field_degree='solns,
                    saddles_at([%pi,0], [-%pi,0]))$

  `show_field=false`は場を完全に抑制します。

      (%i12) drawdf([y,-9*sin(x)-y/5], tstep=0.05,
                    show_field=false, soln_arrows=true,
                    point_size=0.5,
                    points_at([0,0], [2*%pi,0], [-2*%pi,0]),
                    saddles_at([3*%pi,0], [-3*%pi,0],
                               [%pi,0], [-%pi,0]))$

  `drawdf`は認識しないパラメータすべてを `draw2d`や `gr2d`に渡します。 なので、 `draw`パッケージのフルパワーを `drawdf`と組み合わせられます。

      (%i13) drawdf(x^2+y^2, [x,-2,2], [y,-2,2], field_color=gray,
                    key="soln 1", color=black, soln_at(0,0),
                    key="soln 2", color=red, soln_at(0,1),
                    key="isocline", color=green, line_width=2,
                    nticks=100, parametric(cos(t),sin(t),t,0,2*%pi))$

  `drawdf`はグラフィクオプションやオブジェクトの入れ子のリストを受け付けます。 なので、 makelistやグラフィックスを生成する他の関数コールの便利な使用が可能です。

      (%i14) colors : ['red,'blue,'purple,'orange,'green]$
      (%i15) drawdf([x-x*y/2, (x*y - 3*y)/4],
                    [x,2.5,3.5], [y,1.5,2.5],
                    field_color = gray,
                    makelist([ key   = concat("soln",k),
                               color = colors[k],
                               soln_at(3, 2 + k/20) ],
                             k,1,5))$

  ·

  Categories: Package drawdf

[ << ] | [ >> ] |  |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

この文書は市川 雄二によって2012年12月月12日にtexi2html 1.82を用いて生成されました。