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

# 71. plotdf

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

## 71.1 Introduction to plotdf

関数`plotdf`は、 1次常微分方程式(ODE)や2つの自励1次ODE系の (勾配場とも呼ばれる)方向場のプロットを生成します。

PlotdfはXmaximaを要求します。 コンソールや他のMaximaインターフェースから使うことができますが、 結果のファイルはXmaximaに送られ、プロットされます。 plotdfを使ってみる前にXmaximaをインストールしたことを確認してください。

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

           dy
           -- = F(x,y)
           dx

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

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

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

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

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

·

Categories: Differential equations ·Share packages ·Package plotdf

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

## 71.2 Functions and Variables for plotdf

関数: plotdf (dydx, ...options...)
関数: plotdf (dvdu, `[`u,v`]`, ...options...)
関数: plotdf (`[`dxdt,dydt`]`, ...options...)
関数: plotdf (`[`dudt,dvdt`]`, `[`u,v`]`, ...options...)

  2次元xとyに方向場を表示します。

  最初の引数は導関数を指定し、式か2つの式のリストでなければいけません。 dydx, dxdt, dydtはxとyに依存する式です。 dvdu, dudt, dvdtはuとvに依存する式です。 それら2つの変数に加えて、 `parameters`オプションで与えられる数値を持つか(オプション構文法は以下に与えられます)、 slidersオプションで指定される許される値の範囲の パラメータ一式にも、式は依存するかもしれません。

  コマンド内やメニューで選択して、いくつかの他のオプションを与えることができます。 プロット上でクリックしたり、オプション`trajectory_at`を使って、 積分曲線を得ることができます。 `direction`オプションを使って、積分の方向を制御できます。 オプションは、forward, backward, bothのいずれかの値を取り得ます。 `nsteps`で積分ステップの数を与えることができ、 `tstep`オプションでそれらの間の時間間隔を設定できます。 積分にはAdams Moulton法が使われます; 4次の適応Runge-Kutta法に切り替えることも可能です。

  プロットウィンドウメニュー:

  プロットウィンドウのメニューには以下のオプションがあります: Zoom, はマウスの振る舞いを変えて、プロット領域上で左ボタンをクリックすることで ズームインできるようになります。 ある点近くをクリックする毎に、クリックした点を中心にしてプロットが拡大されます。 <Shift>キーを押しながらクリックすると、 以前の倍率にズームアウトします。 ある点をクリックした時、軌跡の計算を再開するには、 メニューからIntegrateを選択してください。

  メニューの中のオプションConfigを使って， 使用中のODE(s)や様々な他の設定を変えることができます。 構成の変更がされた後、新しい設定を稼働するには、 メニューオプションReplotを選択しなければいけません。 もし、座標の組を Configダイアログメニューの場Trajectory atに入れて、 <enter>キーを押したら、 既に示されているものに加えて、新しい積分曲線が表示されます。 Replotが選択された時は、 入れられた最後の積分曲線だけが表示されます。

  右マウスボタンを押しながらカーソルを動かすと、 プロットを横や上下にドラッグできます。 ステップ数やtの初期値、x, yの中心や範囲のような追加パラメータは、 Configメニューで設定できます。

  プロットのコピーは、メニューオプションSaveを使って、 ポストスクリプトファイルとして保存できます。

  プロットオプション:

  `plotdf`コマンドはいくつかのコマンドを含むかもしれません。 それぞれのコマンドは複数の項目のリストです。 最初の項目はオプション名で、 残りはオプションに割り当てられる値から成ります。

  `plotdf`が認識するオプションは以下の通りです:

  - tstepは、独立変数tに関する増分の長さを定義します。 積分曲線を計算するのに使われます。 もしただ1つの式dydxが`plotdf`に与えられたら、 x変数はtに直接比例することになります。 デフォルト値は0.1です。
  - nstepsは、 積分曲線を計算するのに、独立変数に対して使われる長さ`tstep`のステップ回数を定義します。 デフォルト値は100です。
  - directionは 積分曲線を計算する際に従う独立変数の方向を定義します。 可能な値は、 `forward`―これは増分`tstep`で独立変数を`nsteps`回増やします― `backward`―これは独立変数を減らします― または`both`―これは `nsteps`回前進、 `nsteps`回後進で拡げた積分曲線に導きます― キーワード`right`と`left`を、 `forward`と`backward`の別称として使うことができます。 デフォルト値は`both`です。
  - tinitialは 積分曲線を計算するために使われる変数tの初期値です。 微分方程式が自励なので、 その設定はtの関数として曲線のプロットでだけ現れます。 デフォルト値は0です。
  - versus_tは 独立変数tの2つの関数x, yとしての 積分曲線のプロットを使って二番目のプロットウィンドウを生成するために 使われます。 もし`versus_t`が0と異なる任意の値を与えられたら、 二番目のプロットウィンドウが表示されます。 二番目のプロットウィンドウは、 メインプロットウィンドウのメニューに似た別のメニューを含みます。 デフォルト値は0です。
  - trajectory_atは 積分曲線の開始点のための座標xinitialとyinitialを定義します。 オプションはデフォルトで空です。
  - parametersは 微分方程式の定義の中で使われるパラメータとその数値のリストを定義します。 パラメータの名前と値は、 コンマで分離された組`name=value`の列を持つ文字列で与えなければいけません。
  - slidersは スライダーボタンを使って対話的に変更されるパラメータと それらのパラメータの変動範囲のリストです。 パラメータの名前と範囲は、 コンマで分離された要素`name=min:max`の列を持つ文字列で与えなければいけません。
  - xfunは 方向場の上にセミコロンで分離された表示されるxの関数の列を持つ文字列を定義します。 これらの関数はMaximaではなくTclでパースされます。
  - xには2つの数が続かなければいけません。 2つの数は水平軸上で表示される最小値と最大値を設定します。 もし水平軸上の変数がxでないなら、 このオプションは水平軸上の変数名を持たなければいけません。 デフォルトの水平範囲は-10から10です。
  - yには2つの数が続かなければいけません。 2つの数は垂直軸上で表示される最小値と最大値を設定します。 もし垂直軸上の変数がyでないなら、 このオプションは垂直軸上の変数名を持たなければいけません。 デフォルトの垂直範囲は-10から10です。

  例:

  - 微分方程式y’ = exp(-x) + yの方向場と(2, -0.1)を通過する解を表示するために:

        (%i1) plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$

  - 方程式diff(y,x) = x - y^2の方向場と 初期条件y(-1) = 3の解を得るために、 以下のコマンドをつかうことができます:

        (%i1) plotdf(x-y^2,[xfun,"sqrt(x);-sqrt(x)"],
                 [trajectory_at,-1,3], [direction,forward],
                 [y,-5,5], [x,-4,16])$

    グラフは関数y = sqrt(x)も表示します。

  - 以下の例は、 2つの方程式dz/dt = vとdv/dt = -k*z/mで定義される調和振動子の方向場と、 (z,v) = (6,0)を通る積分曲線を、 (kは2に固定で)mの値を対話的に変えられるスライダーと一緒に、 表示します。

        (%i1) plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"],
                   [sliders,"m=1:5"], [trajectory_at,6,0])$

  - Duffing方程式m*x”+c*x’+k*x+b*x^3 = 0の方向場をプロットするために、 変数y=x’を導入し、以下のように使います:

        (%i1) plotdf([y,-(k*x + c*y + b*x^3)/m],
                     [parameters,"k=-1,m=1.0,c=0,b=1"],
                     [sliders,"k=-2:2,m=-1:1"],[tstep,0.1])$

  - 質量mの値を変更するのに使うことができるスライダーと一緒に 与えられた初期条件の解と減衰振り子の方向場と 時間の関数として2つの状態変数のプロットを一緒に:

        (%i1) plotdf([w,-g*sin(a)/l - b*w/m/l], [a,w],
                [parameters,"g=9.8,l=0.5,m=0.3,b=0.05"],
                [trajectory_at,1.05,-9],[tstep,0.01],
                [a,-10,2], [w,-14,14], [direction,forward],
                [nsteps,300], [sliders,"m=0.1:1"], [versus_t,1])$

  ·

  Categories: Package plotdf ·Plotting ·Numerical methods

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

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