Next: , Previous:   [Contents][Index]

72 plotdf


72.1 Introduction to plotdf

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

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

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

       dy
       -- = F(x,y)
       dx

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

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

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

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

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


72.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次元xyに方向場を表示します。

最初の引数は導関数を指定し、式か2つの式のリストでなければいけません。 dydx, dxdt, dydtxyに依存する式です。 dvdu, dudt, dvdtuvに依存する式です。 それら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つの式dydxplotdfに与えられたら、 x変数はtに直接比例することになります。 デフォルト値は0.1です。
  • nstepsは、 積分曲線を計算するのに、独立変数に対して使われる長さtstepのステップ回数を定義します。 デフォルト値は100です。
  • directionは 積分曲線を計算する際に従う独立変数の方向を定義します。 可能な値は、 forward―これは増分tstepで独立変数をnsteps回増やします― backward―これは独立変数を減らします― またはboth―これは nsteps回前進、 nsteps回後進で拡げた積分曲線に導きます― キーワードrightleftを、 forwardbackwardの別称として使うことができます。 デフォルト値はbothです。
  • tinitialは 積分曲線を計算するために使われる変数tの初期値です。 微分方程式が自励なので、 その設定はtの関数として曲線のプロットでだけ現れます。 デフォルト値は0です。
  • versus_tは 独立変数tの2つの関数x, yとしての 積分曲線のプロットを使って二番目のプロットウィンドウを生成するために 使われます。 もしversus_tが0と異なる任意の値を与えられたら、 二番目のプロットウィンドウが表示されます。 二番目のプロットウィンドウは、 メインプロットウィンドウのメニューに似た別のメニューを含みます。 デフォルト値は0です。
  • trajectory_atは 積分曲線の開始点のための座標xinitialyinitialを定義します。 オプションはデフォルトで空です。
  • 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])$
    
    ./figures/plotdf1
  • 方程式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)も表示します。

    ./figures/plotdf2
  • 以下の例は、 2つの方程式dz/dt = vdv/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])$
    
    ./figures/plotdf3
  • 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])$
    
    ./figures/plotdf4
  • 質量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])$
    
    ./figures/plotdf5./figures/plotdf6

Next: , Previous:   [Contents][Index]