plots[odeplot] - dsolve の出力の 2-D または 3-D プロット
使い方
odeplot(dsn, vars, range, options)
パラメータ
dsn - dsolve( ... , numeric) の出力
vars - (オプションのリスト) プロットの軸および関数
range - (オプション) a..b 型のパラメータ指定
options - (オプション) プロットのオプションを指定する式; ?plot[options] および ?plot3d[options] 参照
|
説明
|
|
•
|
odeplot 関数は、dsolve[numeric] により求められ出力された (2-D または 3-D) 解曲線を、プロットまたはアニメーション表示します。
|
•
|
座標の順序は、vars により与えられます。座標が与えられない場合は、独立変数の関数に対する最初の従属変数 (すなわち、解の最初の2つの座標) のプロットが選ばれたものと仮定します。
|
|
意味深いことに、座標の指定では、より柔軟な対応が可能です。
|
|
座標は、独立変数の関数、または dsolve[numeric] の解の一部である任意の従属変数と導関数値とすることが可能です。例えば、y(x) の 2 階の方程式の問題について、[y(x),y(x)^2+diff(y(x),x)^2] とすることにより、y(x) と y(x)^2+diff(y(x),x)^2 を対比するプロットを指定することができます。
|
|
階層化されたリスト形式を指定することで、複数の曲線をプロットすることが可能です。例えば、 [[x,y(x)],[x,diff(y(x),x)]] は、同じプロット上に x の関数として従属変数およびその導関数を表示します。
|
|
曲線特有のオプションは、プロット変数の後ろにつける希望の変数リストにそのオプションを含めることで、各曲線ごと (複数の曲線を持つプロットごと) に指定が可能です。使用可能なオプションは、color, linestyle, style, symbol, symbolsize, および thickness です(これらについては、plot[options] および plot3d[options] に記述されています)。例えば、上述の階層化されたリストによって記述されたプロットは、引数 [[x,y(x),color=blue,style=POINT],[x,diff(y(x),x),color=red,thickness=2]] により、青い点線の y(x) と、太さ 2 の赤い線の diff(y(x),x) として表示されます。
|
•
|
range 引数は、プロットを作成する際の従属変数の範囲を定めます。range は実数に評価されなくてはなりません。これが与えられていない場合は、以下のように範囲が決められます:
|
|
問題が境界値問題 (BVP) ならば、プロットは全ての解領域に対して生成されます。
|
|
問題が初期値問題 (IVP) で、ある範囲において作成されたもの (rkf45 および rosenbrock の場合のみ) であるならば、その範囲がプロットに使用されます。
|
|
問題が IVP であり、_Env_smart_dsolve_numeric が true に設定され、先の呼び出しが手続きに対して行われているならば、プロットは、初期点から先の呼び出しにおいて使用された点まで作成されます。
|
|
最後に、上述の条件に当てはまらない場合には、範囲 x0-10..x0+10 でプロットが作成されます。ここで、x0 は IVP の初期点です。
|
•
|
デフォルトの数値 IVP 解法 rkf45 と rosenbrock が dsn を得るために range 引数と共に使用された場合には、プロットを生成する際に使用される点の数を制御するための、追加のオプションが利用可能です。refine=v オプションは、 odeplot に対して、プロット用に保存される点の数を v 倍使用するように伝えます。ここで v は、非負の整数、あるいは非負の整数分の1でなくてはなりません。
|
|
例えば、refine=1 という指定は、保存された解の全ての点を使用するよう、odeplot に伝えます。一方、refine=2 は 2 倍の計算点を、refine=1/3 は 1/3 の計算点を要求します。
|
|
注意: より急激に解が変化する領域 (つまり、数値解法により多くのステップが必要とされる領域) において、より多くの点をプロットするためにこのオプションを dsolve[numeric] の range 解と共に使用することは、適切なプロットを生成します。以下にある、Van der Pol の例を参照して下さい。
|
|
注意: このオプションは、numpoints オプションと共に使用することはできません。
|
•
|
指定がなければ、プロットのラベルは、vars 引数 (あるいは vars の指定がない場合は dsolve[numeric] の解から) 得られます。これらはテキストとして表示されることから、y(x) の x についての導関数は y' として表示されます。また関数 y(x) は、y と表示されます。 D(y)(x) のように、演算子表記を用いて vars に指定された変数の左側は、変更されません。
|
|
2-D プロットについて、軸のラベルの文字の長さが 10 文字を越える場合には、プロットの説明文の代わりにラベルが配置されます。
|
|
空の文字列をラベルに指定することで、ラベルを表示しないことも可能です(例: labels=["",""] )。
|
•
|
frames=n オプションが与えられると、そのプロットに関する独立変数の最低値から最高値までの範囲で、odeplot は解のアニメーションを生成します。アニメーションの最後のフレームは、frames オプションなしで作成されるプロットと同じです。注意:アニメーション用に odeplot が点を選択しなくてはならないため、refine オプションをアニメーションで使用することはできません。
|
•
|
残りの引数は、option = value の形の等式でなくてはなりません。これらのオプションは、plot (2-D 解曲線の場合)、または plot3d (3-D 解曲線の場合) にあるオプションと同じです。詳細については、 plot[options] または plot3d[options] を参照して下さい。
|
•
|
odeplot を呼び出した結果は、プロットデバイスにより表示可能な PLOT または PLOT3D データ構造になっています。ユーザは、この値を変数に割り当て、ファイルに保存しておくことにより、これを読み込んで再表示させることができます。 詳細については、plot[structure] を参照して下さい。
|
|
|
例
|
|
Warning, the name changecoords has been redefined
| |
範囲を指定した dsolve[numeric] 解。odeplot はその範囲をデフォルトして用います。
>
|
p:= dsolve({D(y)(x) = y(x), y(0)=1}, type=numeric, range=-5..2):
|
refinement を用いた例
dsolve[numeric] の行列出力
>
|
p:= dsolve({D(y)(x) = y(x), y(0)=1}, numeric,
output=array([-1,-0.8,-0.6,-0.4,-0.2,0])):
|
解のアニメーション表示
>
|
p:= dsolve({D(y)(x) = y(x), y(0)=1}, y(x),type=numeric):
|
>
|
odeplot(p,[x,y(x)],-1..1,frames=20);
|
ラベルの削除
>
|
p := dsolve({ diff(y(x),x) = sin(x*y(x)),y(0)=2},y(x),type=numeric):
|
>
|
odeplot(p,[x,y(x)],0..6,labels=["",""]);
|
>
|
sys := diff(y(x),x)=z(x),diff(z(x),x)=y(x):
fcns := {y(x), z(x)}:
p:= dsolve({sys,y(0)=0,z(0)=1},fcns,type=numeric,method=classical):
|
numpoints の指定
>
|
odeplot(p, [x,y(x)], -4..4, numpoints=25);
|
x に対する y(x), z(x) の複数曲線表示
>
|
odeplot(p, [[x,y(x)],[x,z(x)]],-4..4);
|
z(x) に対する y(x) の相平面プロット
>
|
odeplot(p, [y(x),z(x)],-4..4);
|
相平面プロットの表示部分の制限
>
|
odeplot(p, [y(x),z(x)],-4..4, view=[-3..3,0..3]);
|
3次元解曲線
>
|
odeplot(p, [x,y(x),z(x)],-4..4, color=orange);
|
異なるオプションを持つ複数の曲線
>
|
odeplot(p, [[x,y(x),color=orange, style=POINT],
[x,z(x),color=blue, thickness=2]],-4..4);
|
上と同じオプションを持つアニメーション表示
>
|
odeplot(p, [[x,y(x),color=orange, style=POINT],
[x,z(x),color=blue, thickness=2]],-4..4,
frames=20);
|
Van der Pol equation の例: 'range' を用いた解を使用し、オプション 'refine' を用いたプロットを行うことで、それらなしのプロットより特に高品位なプロットを得られる例:
>
|
ode := diff(x(t),t,t)+1000*(x(t)^2-1)*diff(x(t),t)+x(t)=0:
ics := x(0)=2, D(x)(0)=0:
sol := dsolve({ode,ics},x(t),numeric,stiff=true,range=0..3000):
odeplot(sol,[x(t),diff(x(t),t)],0..3000,refine=1);
|
|
|
参照
|
|
DEtools[DEplot], dsolve,numeric,BVP, dsolve,numeric,IVP, PDEtools[PDEplot], plot, plot[options], plot3d, plot3d[option], plot3d[structure]
|
|