『ラプラス変換による微分方程式の解法』

常微分方程式に対するラプラス変換による解法を Maple 内で行う方法を紹介します。数式処理システムを利用すれば、ラプラス変換による常微分方程式の解法の学習も演算も容易に行うことができます。
なお、ラプラス変換自身の詳細については、適宜参考書などをご覧ください。

>    restart;

 ラプラス変換による微分方程式解法

次のような(連立)常微分方程式の解法を考えてみます。

>    dsys := diff(x(t),`$`(t,2)) = -5*x(t)+2*y(t), diff(y(t),`$`(t,2)) = 2*x(t)-2*y(t)

dsys := diff(x(t),`$`(t,2)) = -5*x(t)+2*y(t), diff(y(t),`$`(t,2)) = 2*x(t)-2*y(t)

>    init := x(0) = 0, D(x)(0) = 1, y(0) = 1, D(y)(0) = 0

init := x(0) = 0, D(x)(0) = 1, y(0) = 1, D(y)(0) = 0

Maple でラプラス変換を行うには、あらかじめ inttrans パッケージを読み込んでおく必要があります。

>    with(inttrans);

[addtable, fourier, fouriercos, fouriersin, hankel, hilbert, invfourier, invhilbert, invlaplace, invmellin, laplace, mellin, savetable]

このパッケージには他に各種のフーリエ変換などの関数も含められています。

さて、まずは与えられた微分方程式系 dsys をラプラス変換してみましょう。map 関数を用いて、各方程式に対してラプラス変換を適用しています。

>    laplace_dsys := map(expr->laplace(expr, t, s), {dsys});

laplace_dsys := {s^2*laplace(x(t),t,s)-D(x)(0)-s*x(0) = -5*laplace(x(t),t,s)+2*laplace(y(t),t,s), s^2*laplace(y(t),t,s)-D(y)(0)-s*y(0) = 2*laplace(x(t),t,s)-2*laplace(y(t),t,s)}
laplace_dsys := {s^2*laplace(x(t),t,s)-D(x)(0)-s*x(0) = -5*laplace(x(t),t,s)+2*laplace(y(t),t,s), s^2*laplace(y(t),t,s)-D(y)(0)-s*y(0) = 2*laplace(x(t),t,s)-2*laplace(y(t),t,s)}

変換された系に対して、さらに初期条件を与えます。

>    new_dsys := eval(laplace_dsys, {init});

new_dsys := {s^2*laplace(x(t),t,s)-1 = -5*laplace(x(t),t,s)+2*laplace(y(t),t,s), s^2*laplace(y(t),t,s)-s = 2*laplace(x(t),t,s)-2*laplace(y(t),t,s)}

変換された最終的な系 new_dsys において、各 laplace(x(t), t, s) および laplace(y(t), t, s) に関して方程式を記号的に解いてみます。

>    sol := solve( new_dsys, {laplace(x(t), t, s), laplace(y(t), t, s)});

sol := {laplace(x(t),t,s) = (2*s+2+s^2)/(6+s^4+7*s^2), laplace(y(t),t,s) = (s^3+5*s+2)/(6+s^4+7*s^2)}

各変換式に対して、s および t に関する有理式表現が得られました。最後に、これを逆ラプラス変換して元の関数に戻してみます。

>    dsol1 := map(expr->invlaplace(expr, s, t), sol);

dsol1 := {x(t) = -2/5*cos(6^(1/2)*t)+2/15*6^(1/2)*sin(6^(1/2)*t)+2/5*cos(t)+1/5*sin(t), y(t) = 4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*sin(6^(1/2)*t)}

これで微分方程式の解関数が得られました。

>   

 組込み関数による解法

前節では手動でラプラス変換を行って微分方程式の解法を試みましたが、実は Maple の微分方程式用の関数である dsolve には、ラプラス変換を用いて解関数を求めるための明示的なオプションが用意されています。

>    dsys;

diff(x(t),`$`(t,2)) = -5*x(t)+2*y(t), diff(y(t),`$`(t,2)) = 2*x(t)-2*y(t)

>    init;

x(0) = 0, D(x)(0) = 1, y(0) = 1, D(y)(0) = 0

これら同じ系に対して、ラプラス変換を用いて解を求めるためには、dsolve 関数の method オプションを指定します。

>    dsol2 := dsolve( {dsys, init}, {x(t), y(t)}, method=laplace);

dsol2 := {x(t) = -2/5*cos(6^(1/2)*t)+2/15*6^(1/2)*sin(6^(1/2)*t)+2/5*cos(t)+1/5*sin(t), y(t) = 4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*sin(6^(1/2)*t)}

得られた解が、手動で行ったときのものと同じことは明らかです。

>    map(rhs, dsol1)=map(rhs, dsol2);

{4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*sin(6^(1/2)*t), -2/5*cos(6^(1/2)*t)+2/15*6^(1/2)*sin(6^(1/2)*t)+2/5*cos(t)+1/5*sin(t)} = {4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*si...
{4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*sin(6^(1/2)*t), -2/5*cos(6^(1/2)*t)+2/15*6^(1/2)*sin(6^(1/2)*t)+2/5*cos(t)+1/5*sin(t)} = {4/5*cos(t)+2/5*sin(t)+1/5*cos(6^(1/2)*t)-1/15*6^(1/2)*si...

>    evalb(%);

true

閉じる