1階線形は積微分と部分積分で
このワークシートはMath by Codeの一部です。
今回も、方程式のタイプに応じた解法となる、基本的な視点をふやそう。
微分方程式で式が単純なのは、もちろん微分が1階(1回)だけで、式も線形のものだ。
だから、1階線形のタイプについて、さらに視点をふやしてみよう。
yのn階微分をy(n)と書き、Akがxの関数、ΣAk*y(k)=0のとき、線形同次。
Akが定数なら、特に、定数線形同次というね。
線形だとしても、さらに、=0ではなく、=B(x)のとき、それぞれ非同次という。
微分方程式y'=-y+e^2xは1階線形
1.1階線形
<定数変化法>
定数変化法は同次方程式の一般解の定数を変数として変化させて、非同次方程式の解を求める方法。
たとえば、dy/dx-y=xはdy/dx=x+yとなり、y/xの式ではないので、同次ではないね。
そこでx=0としておきあとで復活させる。
・dy/dx=y。1/y dy=1 dxで変数分離すると、∫1/y dy=∫1 dxによって、log|y|=x+c
Cを定数とする一般解はy=Cex
・このCをxの関数として、c(x)とおき、もとの式に代入しよう。y=c(x)exとおく。
このyを最初の式に入れると、dy/dx-y=(c(x))'ex+c(x)(ex)'-c(x)(ex)=(c(x))'ex=x。
最後の等式を変形して、dc(x)/dx=x/ex=x・e-x 。c(x)=∫e-x x dxとなる。
部分積分する。∫Gf = FG- ∫fGとして、
f,G=e-x,xとするとF,g=-e-x,1 から、Fg=-e-xとなり積分はe-xだから、c(x)=x・(-e-x)-e-x+D。
つまり非同次の一般解はy=(x・(-e-x)-e-x+D)ex y=-x-1+Dex
<1階線形微分方程式>
上と同様にしてdy/dx+p(x)y=q(x)についても、
いったんq(x)=0として、∫1/ydy=-∫p(x)dx=r(x)とおくと、(r(x))'=-p(x)となる。
log|y|=r(x)+C、Cを定数とする一般解がy=Cer(x) 。C=c(x)として、y=c(x)er(x)
積の微分(FG)'= fG+Fgから、
dy/dx+p(x)y=(c'(x)er(x)+c(x)(er(x) )')+p(x)c(x)er(x)=q(x) r(x)'=-p(x)によって相殺される部分がある。
c'(x)er(x)=q(x) だから、c(x)=∫ q(x)・e-r(x)dx+D。
つまり、
y=er(x)(∫ q(x)・e-r(x)dx+D) r(x)=-∫p(x)dxとするとき
(別解)
dy/dx+p(x)y=q(x)
r=∫p(x)dxとおき、両辺にerをかけると、
dy/dx er + p(x) y er = q(x) er
左辺は積の微分法則を逆算すると、y' (er) + y (p(x) er )=(yer )'
だから、(yer )' =q(x) er
つまり、yer = ∫q(x) er dx+c
r=∫p(x)dxとするときy=1/er (∫ q(x)・erdx+c)
(例)
y'+y=e2x
p(x)=1,q(x)=e2xから、∫p(x)dx=∫1dx=xだから、
y=1/ex (∫e2xex+c)=1/ex (∫e3x+c)=1/ex (1/3e3x+c)
y=1/3e2x+c/ex
微分方程式y'+y = xy^2はベルヌーイ型
微分方程式y'+y = xy^3はベルヌーイ型
2.ベルヌーイ型
ベルヌーイ型は線形1階に似ているけれど、xだけの項の代わりにxだけの項にynをかけた形
dy/dx+p(x)y=q(x)yn
の微分方程式だ。
z=y1-n=y/ynと変数変換すると、1/(1-n)dz/dx+p(x)z=q(x)と、1階線形に直せる。
(理由)
合成関数の微分で、dz/dx=dz/dy dy/dx= (y1-n) dy/dx =(1-n)/yn dy/dx
dy/dx= 1/(1-n) dz/dx yn
と変形できる。もとの式に代入すると、
1/(1-n) dz/dx yn+p(x)y=q(x)yn
両辺をynで割る。
1/(1-n) dz/dx +p(x)z=q(x)
これで、zの一階線形に変換できたね。
(例)
y'+y = xy2
1-n=-1から、z=y-1とおくと
- z' + z =x から、 z' - z =-x から、
p(x)=-1, q(x)=-x
r=∫p(x)dx=∫(-1)dx=-xとおくと、1階線形と部分積分で(integral(e-x)=-e-x,(-x)'=-1)から、
z=1/er (∫ q(x)・erdx+c)=1/e-x (∫ (-x)・e-xdx+c)=ex (∫ (-x)・e-x dx+c)=ex {(-x)(-e-x)-∫(-1)(-e-x)+D)}
z=x+1+exD=y-1
y=1/(x+1+exD)
(例)
y'+y = xy3
1-n=-2から、z=y-2とおくと
(-1/2) z' + z =x から、 z' -2 z =-2x から、
p(x)=-2, q(x)=-2x
r=∫p(x)dx=∫(-2)dx=-2xとおくと、1階線形, 部分積分で(integral(e-2x)=-1/2e-2x,(-2x)'=-2)から、
z=1/er (∫ q(x)・erdx+c)=1/e-2x (∫ (-2x)・e-2xdx+c)=e2x {(-2x)(-1/2e-2x)-∫(-2)(-1/2e-2x)+D)}
=e2x {xe-2x+1/2e-2x+D)}= x + 1/2 + De2x =y-2
y2(x+1/2+e2xD)=1
ロジスティックモデル
3.ロジスティック
指数関数のグラフは時間とともに急激に増大してしまう
人口爆発予測の曲線として使われたりする。
でも、実際は人口が無限大ということはなく、
どこかで頭打ちがあるだろう。
それも表せるのが
ロジスティックモデルだ。
y'- Ay=- By2(A,Bは正の定数)
これは、ベルヌーイ型でもあるね。
y'-Ay = -By2
1-n=-1から、z=y-1とおくと
- z' -A z =-B から、 z' + Az =B から、
p(x)=A, q(x)=B
r=∫Adx=Axとおくと、1階線形と部分積分で(integral(eAx)=1/AeAx,(B)'=0)から、
z=1/er (∫ q(x)・erdx+c)=1/eAx (∫ (B)・e-Axdx+c)=1/eAx (∫ (B)・e-Ax dx+c)
=1/eAx{(B)(1/AeAx)-∫(0)(1/Ae-Ax)+D)}=1/eAx {(B/A)eAx+D}
z=(B/A) + D/eAx=y-1
y=1/(B/A+D/eAx)となるね。
これは、xが時間、yが人口で
B=0なら指数型人口増加のモデルy=(1/D)eAx(Dは正)なる。
微分方程式はy'=Ayで、人口増加のスピードdy/dxは、そのときの人口y(x)に比例するというマルサスの法則にあてはまるね。
Bが正なら、制御項(- By2)が効いていて単調に変化して、極限値A/Bに収束する。
y(0)がA/Bより少ないときはDが正で単調増加し、y(0)がA/Bより多いときはDが負で単調減少する。
4.実装
質問:1階線形微分方程式をsympyで解くにはどうしたらよいでしょうか。
yが関数であることをy=Function('y')で宣言します。
y'+y=e2x
は、y'をDerivative(y(x),x)、yをy(x)で、e^2xをexp(2*x)とします。
等式なので、eq=Eq(Derivative(y(x),x) +y(x), exp(2*x)と等式自体を変数にしましょう。
これをy(x)の陽関数としての微分方程式を解くために
dsolve(eq,y(x))としましょう。
y=1/3e2x+c/ex
が求められるはずです。
#[IN]==========================
from sympy.abc import *
from sympy import *
y = Function('y')
eq = Eq(Derivative(y(x), x)+y(x), exp(2*x))
dsolve(eq, y(x))
#[OUT]=========================

だから、もちろん、ベルヌーイ型でも同じようにできるでしょう。
なれてきたら、1行でかけますね。yをy(x)として書くことだけ気をつけよう。
y'+y = xy2
y=1/(x+1+exD)
#[IN]=======================
dsolve( Eq(Derivative(y(x), x)+y(x), x*y(x)**2), y(x))
#[OUT]=========================
