[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fft
パッケージは高速Fourier変換の(数式計算ではなく)数値計算に関する関数を含みます。
Categories: Fourier transform · Numerical methods · Share packages · Package fft
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
形式 r %e^(%i t)
の複素値を形式 a + b %i
に変換します。
ここで、rは大きさで tは位相です。
rと tは、同じサイズの1次元配列です。
配列のサイズは2のべき乗である必要はありません。
関数から戻ると、入力配列の元の値は実部 a
と虚部 b
に置き換えられます。
出力は以下のように計算されます。
a = r cos(t) b = r sin(t) |
polartorect
は recttopolar
の逆関数です。
load(fft)
はこの関数をロードします。
fft
も参照してください。
Categories: Package fft · Complex variables
形式 a + b %i
の複素値を形式 r %e^(%i t)
に変換します。
ここで、aは実部で bは虚部です。
aと bは同じサイズの1次元配列です。
配列のサイズは2のべき乗である必要はありません。
関数から戻ると、入力配列の元の値は大きさ r
と偏角 t
に置き換えられます。
出力は以下のように計算されます。
r = sqrt(a^2 + b^2) t = atan2(b, a) |
計算された偏角は -%pi
から %pi
の範囲の中にあります。
recttopolar
は polartorect
の逆関数です。
load(fft)
はこの関数をロードします。
fft
も参照してください。
Categories: Package fft · Complex variables
複素逆高速Fourier変換を計算します。
yは変換されるデータを含むリストもしくは配列です。
要素の数は2のべき乗でなければいけません。
要素は、数リテラル(整数、有理数、浮動小数点、多倍長浮動小数点)、シンボル定数、
もしくは、 a
と b
が数リテラルもしくはシンボル定数である式
a + b*%i
でなければいけません。
inverse_fft
は yと同じタイプの新しいオブジェクトを返します。
yは変更されません。
結果はいつも浮動小数点か a
と b
が浮動小数点であるところの式
a + b*%i
として計算されます。
もし多倍長浮動小数点精度が必要なら、
inverse_fft
の完全互換品として代わりに関数
bf_inverse_fft
を使うことができます。
これは遅くなりますが、多倍長浮動小数点をサポートします。
逆離散Fourier変換は以下のように定義されます。
x
を逆変換の出力とします。
j
が0から n - 1
まで変わる中、
x[j] = sum(y[k] exp(-2 %i %pi j k / n), k, 0, n - 1) |
様々な符号、正規化変換があり得るので、 変換のこの定義は他の数学ソフトウエアが使うものと違うかもしれません。
load(fft)
はこの関数をロードします。
fft
(正変換), recttopolar
, polartorect
も参照してください。
例:
実数データ。
(%i1) load (fft) $ (%i2) fpprintprec : 4 $ (%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $ (%i4) L1 : inverse_fft (L); (%o4) [0.0, 14.49 %i - .8284, 0.0, 2.485 %i + 4.828, 0.0, 4.828 - 2.485 %i, 0.0, - 14.49 %i - .8284] (%i5) L2 : fft (L1); (%o5) [1.0, 2.0 - 2.168L-19 %i, 3.0 - 7.525L-20 %i, 4.0 - 4.256L-19 %i, - 1.0, 2.168L-19 %i - 2.0, 7.525L-20 %i - 3.0, 4.256L-19 %i - 4.0] (%i6) lmax (abs (L2 - L)); (%o6) 3.545L-16 |
複素数データ。
(%i1) load (fft) $ (%i2) fpprintprec : 4 $ (%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $ (%i4) L1 : inverse_fft (L); (%o4) [4.0, 2.711L-19 %i + 4.0, 2.0 %i - 2.0, - 2.828 %i - 2.828, 0.0, 5.421L-20 %i + 4.0, - 2.0 %i - 2.0, 2.828 %i + 2.828] (%i5) L2 : fft (L1); (%o5) [4.066E-20 %i + 1.0, 1.0 %i + 1.0, 1.0 - 1.0 %i, 1.55L-19 %i - 1.0, - 4.066E-20 %i - 1.0, 1.0 - 1.0 %i, 1.0 %i + 1.0, 1.0 - 7.368L-20 %i] (%i6) lmax (abs (L2 - L)); (%o6) 6.841L-17 |
Categories: Package fft
複素高速 Fourier変換を計算します。
xは変換されるデータを含むリストもしくは配列です。
要素の数は2のべき乗でなければいけません。
要素は、数リテラル(整数、有理数、浮動小数点、多倍長浮動小数点)、シンボル定数、
もしくは a
と b
が数リテラルもしくはシンボル定数である式
a + b*%i
でなければいけません。
fft
は xと同じタイプの新しいオブジェクトを返します。
xは変更されません。
結果はいつも浮動小数点か、 a
と b
が浮動小数点であるところの式
a + b*%i
として計算されます。
もし多倍長浮動小数点精度が必要なら、
fft
の完全互換品として代わりに関数
bf_fft
を使うことができます。
これは遅くなりますが、多倍長浮動小数点をサポートします。
また、もし入力が(虚数部を持たない)実数値だけで構成されているとわかっている場合、
real_fft
を使うことができます。これは潜在的には速くなります。
離散Fourier変換は以下のように定義されます。
y
を変換の出力とします。
k
が0から n - 1
まで変わる中、
y[k] = (1/n) sum(x[j] exp(+2 %i %pi j k / n), j, 0, n - 1) |
様々な符号、正規化変換があり得るので、 変換のこの定義は他の数学ソフトウエアが使うものと違うかもしれません。
データ xが実数の時、
実係数 a
と b
は以下のように計算することができます。
x[j] = sum(a[k]*cos(2*%pi*j*k/n)+b[k]*sin(2*%pi*j*k/n), k, 0, n/2) |
ここで、
a[0] = realpart (y[0]) b[0] = 0 |
そして k
が1からn/2 - 1まで変わる中、
a[k] = realpart (y[k] + y[n - k]) b[k] = imagpart (y[n - k] - y[k]) |
そして、
a[n/2] = realpart (y[n/2]) b[n/2] = 0 |
load(fft)
はこの関数をロードします。
inverse_fft
(逆変換), recttopolar
,
polartorect
も参照してください。
実数値入力のFFTに関しては real_fft
を、
多倍長浮動小数点の演算に関しては bf_real_fft
を参照してください。
例:
実数データ。
(%i1) load (fft) $ (%i2) fpprintprec : 4 $ (%i3) L : [1, 2, 3, 4, -1, -2, -3, -4] $ (%i4) L1 : fft (L); (%o4) [0.0, - 1.811 %i - .1036, 0.0, .6036 - .3107 %i, 0.0, .3107 %i + .6036, 0.0, 1.811 %i - .1036] (%i5) L2 : inverse_fft (L1); (%o5) [1.0, 2.168L-19 %i + 2.0, 7.525L-20 %i + 3.0, 4.256L-19 %i + 4.0, - 1.0, - 2.168L-19 %i - 2.0, - 7.525L-20 %i - 3.0, - 4.256L-19 %i - 4.0] (%i6) lmax (abs (L2 - L)); (%o6) 3.545L-16 |
複素数データ。
(%i1) load (fft) $ (%i2) fpprintprec : 4 $ (%i3) L : [1, 1 + %i, 1 - %i, -1, -1, 1 - %i, 1 + %i, 1] $ (%i4) L1 : fft (L); (%o4) [0.5, .3536 %i + .3536, - 0.25 %i - 0.25, 0.5 - 6.776L-21 %i, 0.0, - .3536 %i - .3536, 0.25 %i - 0.25, 0.5 - 3.388L-20 %i] (%i5) L2 : inverse_fft (L1); (%o5) [1.0 - 4.066E-20 %i, 1.0 %i + 1.0, 1.0 - 1.0 %i, - 1.008L-19 %i - 1.0, 4.066E-20 %i - 1.0, 1.0 - 1.0 %i, 1.0 %i + 1.0, 1.947L-20 %i + 1.0] (%i6) lmax (abs (L2 - L)); (%o6) 6.83L-17 |
サインとコサイン係数の計算。
(%i1) load (fft) $ (%i2) fpprintprec : 4 $ (%i3) L : [1, 2, 3, 4, 5, 6, 7, 8] $ (%i4) n : length (L) $ (%i5) x : make_array (any, n) $ (%i6) fillarray (x, L) $ (%i7) y : fft (x) $ (%i8) a : make_array (any, n/2 + 1) $ (%i9) b : make_array (any, n/2 + 1) $ (%i10) a[0] : realpart (y[0]) $ (%i11) b[0] : 0 $ (%i12) for k : 1 thru n/2 - 1 do (a[k] : realpart (y[k] + y[n - k]), b[k] : imagpart (y[n - k] - y[k])); (%o12) done (%i13) a[n/2] : y[n/2] $ (%i14) b[n/2] : 0 $ (%i15) listarray (a); (%o15) [4.5, - 1.0, - 1.0, - 1.0, - 0.5] (%i16) listarray (b); (%o16) [0, - 2.414, - 1.0, - .4142, 0] (%i17) f(j) := sum (a[k]*cos(2*%pi*j*k/n) + b[k]*sin(2*%pi*j*k/n), k, 0, n/2) $ (%i18) makelist (float (f (j)), j, 0, n - 1); (%o18) [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] |
Categories: Package fft
実数値列 xの高速 Fourier変換を計算します。
これは、先頭の N/2+1
個の結果だけを返すことを除いて、
fft(x)
を実行することと等価です。
ここで N
は xの長さです。
N
は2のべきでなければいけません。
xが実数値だけを含むことをチェックしません。
実数列の Fourier変換の対称性は複雑さを減らします。
特に real_fft
の出力の最初と最後は純粋に実数です。
より大きな数列では real_fft
は fft
より速く計算できるかもしれません。
出力長が短いので、通常の inverse_fft
を直接使えません。
逆をへいさんするには inverse_real_fft
を使ってください。
yのFourier逆変換を計算します。
yの長さは N/2+1
でなければいけません。
ここで N
は2のべきです。
入力 x(原文まま)は real_fft
の出力と一致すると期待されます。
入力が正しい形式か(最初と最後の要素が純粋に実数であること)を確認するようなチェックはしません。
Categories: Package fft
複素高速 Fourier逆変換を計算します。
これは inverse_fft
の多倍長浮動小数点版で、
入力を多倍長浮動小数点に変換して、多倍長浮動小数点の結果を返します。
複素高速 Fourier順変換を計算します。
これは fft
の多倍長浮動小数点版で、
入力を多倍長浮動小数点に変換して、多倍長浮動小数点の結果を返します。
多倍長浮動小数点の結果を返す実数値入力の高速 Fourier順変換を計算します。
これは real_fft
の多倍長浮動小数点版です。
Categories: Package fft
実数値の多倍長浮動小数点の出力で高速Fourier逆変換を計算します。
これは inverse_real_fft
の多倍長浮動小数点版です。
Categories: Package fft
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Horner規則に従って、もし指定されないなら xを主変数として使い、
exprの再配列された表現を返します。
x
は exprの標準有理式形の主変数が使われる場合には省略できます。
もし expr
が数値的に評価されるものなら、
horner
は時々、安定性が改善されます。
また、もし Maximaが Fortranで走らせるプログラムを生成するのに使われるなら、
役に立ちます。
stringout
も参照してください。
(%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155; 2 (%o1) 1.e-155 x - 5.5 x + 5.2e+155 (%i2) expr2: horner (%, x), keepfloat: true; (%o2) 1.0 ((1.e-155 x - 5.5) x + 5.2e+155) (%i3) ev (expr, x=1e155); Maxima encountered a Lisp error: arithmetic error FLOATING-POINT-OVERFLOW signalled Automatically continuing. To enable the Lisp debugger set *debugger-hook* to nil. (%i4) ev (expr2, x=1e155); (%o4) 7.00000000000001e+154 |
Categories: Numerical methods
式 exprもしくは関数 fの根を閉区間
[a, b]上で見つけます。
式 exprは等式でも問題ありません。
その場合、 find_root
は
lhs(expr) - rhs(expr)
の根を探します。
Maximaが exprもしくは fを [a, b]上で評価できて
exprもしくは fは連続という仮定の下、
find_root
が根を見つけるか、あるいはもし複数の根があるなら根の1つを見つけることが保証されます。
find_root
は始め、2分木探索を適用します。
もし対象の関数が十分滑らかなら find_root
は代わりに線形内挿を適用します。
f_find_root
は find_root
の多倍長浮動小数点版です。
関数は多倍長浮動小数点数値を使って計算され、多倍長浮動小数点の結果が返されます。
他の点では bf_find_root
は find_root
と同一であり、以下の記述は
bf_find_root
に同様に適用されます。
find_root
の精度は abserr
と relerr
に支配されます。
それらは fine_root
へのオプションのキーワード引数です。
これらのキーワード引数は形式 key=val
を取ります。
キーワード引数は
abserr
根での関数値の望まれる絶対エラー。デフォルトは find_root_abs
です。
relerr
根の望まれる相対エラー。デフォルトは find_root_rel
です。
懸案の関数が abserr
以下の何かに評価されるか、
近似値 x_0, x_1の差が
relerr * max(abs(x_0), abs(x_1))
以下になるなら
find_root
は停止します。
find_root_abs
と find_root_rel
のデフォルト値はともに零です。
find_root
は探索区間の端で対象の関数が異なる符号を持つことを期待します。
関数の両方の終端での評価値が同じ符号を持つ時、
find_root
の振る舞いは find_root_error
に支配されます。
find_root_error
が true
の時、
find_root
はエラーメッセージを出力します。
そうでないなら find_root
は find_root_error
の値を返します。
find_root_error
のデフォルト値は true
です。
もし fが探索アルゴリズムの中のどのステップでも数以外の何かに評価されるなら、
find_root
は部分的に評価された find_root
式を返します。
aと bの順序は無視されます; 根が探索される区間は [min(a, b), max(a, b)]です。
例:
(%i1) f(x) := sin(x) - x/2; x (%o1) f(x) := sin(x) - - 2 (%i2) find_root (sin(x) - x/2, x, 0.1, %pi); (%o2) 1.895494267033981 (%i3) find_root (sin(x) = x/2, x, 0.1, %pi); (%o3) 1.895494267033981 (%i4) find_root (f(x), x, 0.1, %pi); (%o4) 1.895494267033981 (%i5) find_root (f, 0.1, %pi); (%o5) 1.895494267033981 (%i6) find_root (exp(x) = y, x, 0, 100); x (%o6) find_root(%e = y, x, 0.0, 100.0) (%i7) find_root (exp(x) = y, x, 0, 100), y = 10; (%o7) 2.302585092994046 (%i8) log (10.0); (%o8) 2.302585092994046 (%i9) fpprec:32; (%o9) 32 (%i10) bf_find_root (exp(x) = y, x, 0, 100), y = 10; (%o10) 2.3025850929940456840179914546844b0 (%i11) log(10b0); (%o11) 2.3025850929940456840179914546844b0 |
Categories: Algebraic equations · Numerical methods
exprを xの1変数関数と考えて、
Newton法による expr = 0
の近似解を返します。
探索は x = x_0
で始まり、
(xの現在値で評価された exprを使った)
abs(expr) < eps
が成り立つまで続きます。
終了テスト abs(expr) < eps
が
true
か false
に評価される限り、
newton
は未定義変数が exprの中に現れることを許します。
このように exprは数に評価される必要はありません。
load(newton1)
はこの関数をロードします。
realroots
, allroots
, find_root
,
mnewton
も参照してください。
例:
(%i1) load (newton1); (%o1) /maxima/share/numeric/newton1.mac (%i2) newton (cos (u), u, 1, 1/100); (%o2) 1.570675277161251 (%i3) ev (cos (u), u = %); (%o3) 1.2104963335033529e-4 (%i4) assume (a > 0); (%o4) [a > 0] (%i5) newton (x^2 - a^2, x, a/2, a^2/100); (%o5) 1.00030487804878 a (%i6) ev (x^2 - a^2, x = %); 2 (%o6) 6.098490481853958e-4 a |
Categories: Algebraic equations · Numerical methods
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このセクションで関数が解く常微分方程式(ODE)は以下の形でなければいけません。
dy -- = F(x,y) dx |
つまり一階ODEです。 n階の高階微分方程式は n個の一階微分方程式系で書かなくてはいけません。 例えば、二階ODEは以下の2つの方程式系で書かれなくてはいけません。
dx dy -- = G(x,y,t) -- = F(x,y,t) dt dt |
関数の一番目の引数はODEの右辺の式のリストです。 それらの式が導関数を表す変数は二番目のリストに与えます。 上の例の場合、それらの変数はxと yです。 上の例では tに該当する独立変数は別のオプションの中に与えます。 もし与えられた式がその独立変数に依存しないなら系は自律的と呼ばれます。
Categories: Differential equations · Numerical methods · Plotting
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
関数plotdf
は、 一階常微分方程式(ODE)や2つの自律 一階
ODE系の方向場(勾配場とも呼ばれる)のプロットを生成します。
たとえコンソールのMaximaセッションから走らせても、plotdfは Xmaximaを必要とします。 XmaximaのTkスクリプトがプロットを生成するためです。 Xmaximaがインストールされていないなら、plotdfは動きません。
dydx, dxdt, dydtは xと yに依存する式です。
dvdu, dudt, dvdtは uと vに依存する式です。
それら 2つの変数に加えて、
parameters
オプションで与えられる数値を持つか
(オプション構文法は以下に与えられます)、
slidersオプションで指定される許される値の範囲のパラメータ一式にも、
式は依存するかもしれません。
コマンド内やメニューで選択して、いくつかの他のオプションを与えることができます。
プロット上でクリックしたり、オプション
trajectory_at
を使って積分曲線を得ることができます。
direction
オプションを使って積分の方向を制御できます。
オプションは、 forward, backward,
bothのいずれかの値を取り得ます。
積分ステップの数はnsteps
で与えます。
それぞれの積分ステップで時間増分は、プロットウィンドウのサイズより十分小さい置き換えを生成するように自動的に調整されます。
使われる数値法は可変時間ステップの4次の適応 Runge-Kutta法です。
プロットウィンドウメニュー:
プロットウィンドウのメニューバーは以下の7つのアイコンを持ちます:
X。プロットウィンドウを閉じるのに使えます。
レンチとドライバ。使用中のODEと様々な設定を表示する欄を持つ設定メニューを開きます。 欄 Trajectory atに座標の組を入力して enterキーを押すと、既に表示されたものに加えて新しい積分曲線を表示します。
円に続く2つの矢印。設定メニューで定義された新しい設定で方向場を再プロットし、以前にプロットされた最後の積分曲線だけを再プロットします。
矢印付きハードディスクドライブ。アイコンをクリックした時現れるボックス欄で指定したファイルにプロットのコピーをポストスクリプト形式で保存するのに使います。
プラス記号付き拡大鏡。プロットをズームします。
マイナス記号付き拡大鏡。プロットをズームアウトします。 マウスの右ボタンを押したままマウスを動かすことでプロットを置き換えることができます。
プロットアイコン。最後にプロットされた積分曲線の2つの変数の時間プロットを含む別のウィンドウを開きます。
プロットオプション:
オプションを plotdf
自身に与えることもできます。
それぞれは複数の要素のリストです。
それぞれのオプションの最初の要素はオプション名で、残りはオプションに割り当てられる値です。
plotdf
が認識するオプションは以下の通りです:
tstep
のステップ回数を定義します。
デフォルト値は 100です。
forward
―これは増分 tstep
で独立変数を nsteps
回増やします―
backward
―これは独立変数を減らします―
または both
―これは
nsteps
回前進、 nsteps
回後進で拡げた積分曲線に導きます―
キーワード right
と left
を、
forward
と backward
の別称として使うことができます。
デフォルト値は both
です。
versus_t
が 0と異なる任意の値を与えられたら、
二番目のプロットウィンドウが表示されます。
二番目のプロットウィンドウはメインプロットウィンドウのメニューに似た別のメニューを含みます。
デフォルト値は 0です。
name=value
の列を持つ文字列で与えなければいけません。
name=min:max
の列を持つ文字列で与えなければいけません。
例:
(%i1) plotdf(exp(-x)+y,[trajectory_at,2,-0.1])$ |
(%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)も表示します。
(%i1) plotdf([v,-k*z/m], [z,v], [parameters,"m=2,k=2"], [sliders,"m=1:5"], [trajectory_at,6,0])$ |
(%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])$ |
(%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: Differential equations · Plotting · Numerical methods
expの等電位曲線をプロットします。 expは二変数に依存する式です。 曲線は直交切線を定義する微分方程式を与えられた式の勾配から得られる自律系の解に積分することで得られます。 プロットは勾配系の積分曲線(オプションfieldlines)を見せることもできます。
このプログラムも、たとえコンソールのMaximaセッションから走らせても、 Xmaximaを必要とします。 XmaximaのTkスクリプトがプロットを生成するためです。 デフォルトでは、ユーザーがある点をクリックする(か設定メニューかtrajectory_atオプションで座標を与える)まで、プロット領域は空です。
plotdfがほとんどのオプションはploteqでも使うことができ、 プロットインターフェースはplotdfで記述したものと同じです。
例:
(%i1) V: 900/((x+1)^2+y^2)^(1/2)-900/((x-1)^2+y^2)^(1/2)$ (%i2) ploteq(V,[x,-2,2],[y,-2,2],[fieldlines,"blue"])$ |
ある点をクリックすると、その点(赤)と直交切線(青)を通る等電位曲線をプロットします。
Categories: Differential equations · Plotting · Numerical methods
4次の Runge-Kutta法を使って、 最初の形式は一階常微分方程式一つを数値的に解き、二番目の形式はそれら m個の方程式系を解きます。 varは従属変数を表します。 ODEは独立変数と従属変数にだけ依存する式でなければいけません。 そして、独立変数に関する従属変数の導関数を定義します。
独立変数は domain
で指定されます。
それは 4つの要素のリストでなければいけません。
例えば:
[t, 0, 10, 0.1] |
リストの最初の要素は独立変数を特定し、二番目と三番目の要素はその変数の初期値と最終値であり、 最後の要素はその区間内で使用されるべき増加分を設定します。
もし mこの方程式が解かれようとしているなら、
m個の従属変数 v1, v2, ..., vmが存在しなければいけません。
それらの変数の初期値は init1, init2, ..., initmとなります。
以前の場合と同様、 domain
で定義されたただ 1つの独立変数が残っています。
ODE1, ..., ODEmは独立変数に関する従属変数それぞれの導関数を定義する式です。
それらの式に現れるかもしれない変数は独立変数と任意の従属変数だけです。
従属変数と厳密に同じ順序でリストの中に導関数
ODE1, ..., ODEmを与えることが重要です;
例えば、リストの三番目の要素は三番目の従属変数の導関数と解釈されます。
プログラムは 方程式を独立変数の初期値から最終値まで一定の増加分を使って積分しようとします。 もしあるステップで従属変数の1つが大きすぎる絶対値を取ったら、積分はその点で中断されます。 結果は、なされた繰り返しの回数と同じ数の要素を持つリストです。 結果リストの中のそれぞれの要素は、それ自身 m+1個の要素を持つもう一つのリストです: 独立変数の値にその点に対応する従属変数の値が続きます。
以下の微分方程式を数値的に解く。
dx/dt = t - x^2 |
初期値は x(t=0) = 1で、tの区間は0から8まで、tの増分は0.1。 コマンドは:
(%i1) results: rk(t-x^2,x,1,[t,0,8,0.1])$ (%i2) plot2d ([discrete, results])$ |
結果はリスト results
に保存され、プロットは、水平軸に t、垂直軸に xで得られた解を表示します。
以下の系を数値的に解く。
dx/dt = 4-x^2-4*y^2 dy/dt = y^2-x^2+1 |
tは0から4の間、t=0でxが-1.25、yが0.75という条件:
(%i1) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$ (%i2) plot2d ([discrete,makelist([p[1],p[3]],p,sol)], [xlabel,"t"],[ylabel,"y"])$ |
プロットは tの関数として変数 yを表示します。
Categories: Differential equations · Numerical methods
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.