○wxmaximaを起動すると,初めは入力行も何もないので,とりあえず「何かキーを押します:例えばEnterキーを押す」と入力行が現れます. ○wxmaximaでは,入力行の末尾でShift+Enterを押します. ○wxMaximaで1階または2階の常微分方程式の一般解を求めるには,
(1) ode2( )関数を使う方法
があります.この頁では(1)のode2( )関数を使う方法を扱います.…ordinary differential equation of 1st and 2nd order (2) ラプラス変換を使ってdesolve( )関数で解く方法
1階微分方程式では積分定数は%cで表され,
○wxmaximaで,2階微分方程式では積分定数は%k1 , %k2で表されます.
1階微分方程式で初期条件に対応する特殊解を求めるにはic1( )関数が, …initial value problems for 1st order differential equations 2階微分方程式で初期条件に対応する特殊解を求めるにはic2( )関数が …initial value problems for 2nd order differential equations 使えます. ※微分方程式の厳密解は求め方が知られていない場合や,解けても特殊関数の複雑な組合せとなる場合があります. wxmaximaのヘルプ情報(英文)によれば, 1階常微分方程式については,
線形,変数分離形,同次形,完全微分形,ベルヌーイ形などが試され,解けなければfalseが返される
とされています.2階常微分方程式については,
定数係数,定数係数に変換できる同次線形,オイラーの微分方程式,定数変化法によって解けるもの,2つの1階微分方程式に分けられるものなどが試されます.解けなければfalseが返される
級数を用いた解については,このような制限はあまりないがこの頁では扱いません.
≪頭の片隅に!≫
厳密解・・・有限回の代数的変形や積分操作によって得られる解・・・は,コンピュータでも求められない場合がある.(変数変換のアイデア次第で解ける問題は,人の方が強い場合がある) 解き方の分かっている問題に当てめる場合や,理論上無限回(実際上は巨大な回数)の操作を用いる級数解や数値解を求める場合コンピュータの方が強い. |
■定数係数2階常微分方程式
≪例1≫ …[定数係数]特性方程式が異なる2つの実数解をもつ場合
【出力される結果】【微分方程式】 (1)のとき (2)のとき,のとき 【wxMaximaでの入力】 siki1 : ode2( 'diff(y,x,2)-3*'diff(y,x)+2*y=2*x+3 , y , x); (1)ic2(siki1 , x=0 , y=1 , diff(y,x)=3); (2)bc2(siki1 , x=0 , y=1 , x=1 , y=2); …(*) (1) (2)
【補足説明】
○関数ode2( )の引数は ode2( 微分方程式 , 従属変数 , 独立変数); の順に指定します.
メニューから対話型メニューで行うには,「方程式」→「微分方程式を解く」と進んで,上記の引数3個を書き込みます.
○その場合において,注意すべきこととして導関数を表す記号diff(y , x)にはシングルクォートを付けて'diff(y , x)と書きます.(単にdiff(y , x)と書くと,この文脈の中では文字yを文字xで(偏)微分した0に変わります.ここでは,この式自体を生かしたいので,名詞化処理処理としてシングルクォートを付けるようです.)次のように,xの関数であることを明示して使う場合には,シングルクォートを付けても付けなくても同じ結果が得られます. ode2( diff(f(x), x , 2) ... diff(f(x) , x) ... ); ○微分方程式の部分で等号を省略して単に式を指定した場合は,=0が省略されたものとみなされます.(右辺=0) ○diff( )の第3引数の1を省略すれば,第1次導関数を表しますが,第2次導関数を表す場合はdiff(y , x , 2 )のように第3引数を2にします. ○2階微分方程式の一般解は2個の積分定数を含みますが,Maximaの出力においてこれらは%k1, %k2で表されます. ○2階微分方程式の一般解(*)に対して,条件を追加して関数を確定するには,次の方法があります.
(1) 【初期条件を指定する方法】
x=aのときy=pとなりy’=qとなるという形で指定する.すなわちf(a)とf ’(a)を指定する方法
(2) 【境界条件を指定する方法】
x=aのときy=pとなり,x=bのときy=qとなるという形で指定する.すなわちf(a)とf(b)を指定する方法
○Maximaにおいて上記の(1)の初期条件を満たす特殊解を求めるには, ic2( 一般解 , x=a , y=p , diff(y,x)=q); の形で指定します.(この関数ic2( )の命名についてHELP情報に明示されている訳ではないが,initial conditions 2と考えれば覚えやすい) このように,先に一般解を求めてから,続いてある初期条件を満たす特殊解を求めるには,一般解の式に名前を付けておいて後でそれを引用するとよいので,上記の一般解を求めるコマンドを siki1 : ode2('diff(y,x,2)-3*'diff(y,x)+2*y=2*x+3 , y , x); などとしておいてから ic2( siki1 , x=0 , y=1 , diff(y,x)=3); とすればよいことになります.
このとき
Maximaでは単に%と書けば直前の出力式を表すことになっているので,一般解を求めた直後に初期条件を加える場合には,式にな名前がなくてもsiki1には名詞化処理(シングルクォート)はしない. 第2,3,4引数は各々単なる値ではなく,x=... , y= ... , diff(y,x)= ...のように(どの変数)=(値が幾ら)であると書かなければならない. 第4引数は単にdiff(y,x)= ...と書けばよく,名詞化処理'diff(y,x)= ...はあってもなくてもよい. ic2( % , x=0 , y=1 , diff(y,x)=3); でできます.
メニューから対話型メニューで行うには,「方程式」→「特殊解を求める(2階微分方程式)」と進んで,上記の引数4個を書き込みます.
○Maximaにおいて上記の(2)の境界条件を満たす特殊解を求めるには, bc2( 一般解 , x=a , y=p , x=b , y=q); の形で指定します.(この関数bc2( )の命名についてHELP情報に明示されている訳ではないが,boundary conditions 2と考えれば覚えやすい)
メニューから対話型メニューで行うには,「方程式」→「境界条件から特殊解を求める」と進んで,上記の引数5個を書き込みます.
【補足説明2】・・・筆算で確かめるには
○微分方程式 …(*1) の一般解は,同次方程式 …(*2) の一般解と非同次方程式 …(*3) の1つの特殊解の和で表すことができます. (*2)は解がの形をしているものを探すとすると より ここでだから特性方程式が異なる2つの実数解をもつとき,各々 となりますが,(*2)の一般解は となります. もとの問題では,の解はだからの一般解は となります. (*3)の1つの特殊解は,与えられた関数から連想すればよく,がn次式の場合はn-2次,はn-1次,はn次なので,がn次式と想定して係数を比較すると求められることが多い. もとの問題では,なので,1つの特殊解を と予想して,を求めてみると により より 1つの特殊解は 結局,もとの方程式(*1)の一般解は となります. |
≪例2≫ …[定数係数]特性方程式が実数の重解をもつ場合
【出力される結果】【微分方程式】 【wxMaximaでの入力】 ode2( 'diff(y,x,2)-4*'diff(y,x)+4*y=sin(2*x) , y , x);
【補足説明】・・・筆算で確かめるには
特性方程式が重解をもつ. このような場合には,とを用いて,同次方程式の一般解 が得られます. 1つの特殊解は,右辺の形から連想して(微分するとが入れ替わるので,両方とも準備する) とおいて係数比較するとよい. だから より したがって,1つの特殊解は 結局,もとの方程式の一般解は になります |
≪例3≫ …[定数係数]特性方程式が虚数解をもつ場合
【出力される結果】【微分方程式】 【wxMaximaでの入力】 ode2( 'diff(y,x,2)-2*'diff(y,x)+2*y=%e^x , y , x);
【補足説明】・・・筆算で確かめるには
特性方程式が虚数解をもつ. このような場合には,とを用いて,同次方程式の一般解 が得られます. 複素関数まで習っている場合はこのままでも平気ですが,もとが実変数の微分方程式なのに複素関数で答えるのは気味が悪いと思うときは,オイラーの公式 を用いて,実数の関数に直すことができます. だから ここで新たに を2つの独立な解とすれば が同次方程式の一般解になります. 1つの特殊解は,右辺の形から連想して とおいて係数比較するとよい. だから より は任意の数とおく 1つの特殊解は 結局,もとの方程式の一般解は になります |