偏微分方程式とその数値計算
樋口さぶろお
龍谷大学理工学部数理情報学科
計算科学☆演習II L07(2015-05-22 Fri)
最終更新: Time-stamp: ”2015-05-22 Fri 20:18 JST hig”
今日の目標
微分方程式が偏微分方程式かどうか判定できる 偏微分方程式(拡散方程式)の数値計算のプログ ラムを書ける
http://hig3.net
略解:モーメント母関数M(λ, t)からの母期待値の計算
L06-Q1
Quiz解答:モーメント母関数と確率
1 関係するのは e10λ3C1(peλ)1(qe−λ)2 の項で,確率は,3pq2.
2 tが奇数のとき,t= 2t′+ 1と書くと,関係するのは e10λtCt′(peλ)t′(qe−λ)t′+1 の項.
tが偶数のとき,e9λ の項は現れず,係数は0.
よって,
P(9, t) =
0 (tが偶数)
t!
(t−1 2 )!(t+1
2 )!pt−21qt+12 (tが奇数)
略解:モーメント母関数M(λ, t)からの母期待値の計算
L06-Q2
Quiz解答:モーメント母関数
1 漸化式は,P(x, t+ 1) = 39P(x−1, t) + 19P(x, t) + 59P(x+ 1, t),初項 はP(x,2) =
{
1 (x= 3) 0 (他) .
2 漸化式は,M(λ, t+ 1) = (39eλ+19+ 59e−λ)M(λ, t),初項は
M(λ,2) = e3λ より,一般項は,M(λ, t) = e3λ(39eλ+19 +59e−λ)t−2.
3 M(λ,100)の,e100λ の係数を考える. (39eλ+19 +59e−λ)100−2 のe97λ の係数を考えればよく,P(100,100) =98C1(39)97(19)1
4 E[X(t)] = ∂λ∂ M(λ, t)|λ=0= 3−29 ×(t−2)
5 V[X(t)] = E[X(t)2]−(E[X(t)])2 = 6881×(t−2)
注:4のような問では,効く項が1個だけとはかぎらない. 2個以上の項の 和になることもある.
偏微分方程式とその数値計算
先週までのあらすじ
X(t)についての問題文 プログラミング→ x+=getrandom(getuniform());
↓ 頭で意味を考えて書き替え
P(x, t) の漸化式と初項 プログラミング→ 今日の話
↓ 形式的な式変形 M(λ, t) の漸化式と初項
↓ 等比数列の一般項を求める M(λ, t) の具体的な式
↓eλxの係数 P(x, t)
↓ ∂λ∂ |λ=0
E[Xn]
偏微分方程式とその数値計算 P(x, t)と拡散方程式
ここまで来たよ
1 略解:モーメント母関数M(λ, t)からの母期待値の計算
2 偏微分方程式とその数値計算 P(x, t)と拡散方程式 P(x, t)の数値計算
偏微分方程式とその数値計算 P(x, t)と拡散方程式
P(x, t)と拡散方程式
微分の差分近似の復習
f(x+ ∆x)−f(x)≃f′(x)∆x f(x+ ∆x)−f(x)
∆x →f′(x) (∆x→0) f(x)−f(x−∆x)
∆x →f′(x) (∆x→0)
P(x, t) やX(t) の漸化式は,t⇝t+ 1,x±1って言ってきたけど,ここ では t⇝t+ ∆t,x±∆x と思おう.
p=q = 12 とすると,例えば,
P(x, t+ 1) =pP(x−1, t) +qP(x+ 1, t)
⇝P(x, t+ ∆t) =1
2P(x−∆x, t) +1
2P(x+ ∆x, t)
偏微分方程式とその数値計算 P(x, t)と拡散方程式
±∆t,±∆x を微分で書きたい…
P(x, t+ ∆t)−P(x, t) =1
2[(P(x+ ∆x, t)−P(x, t))
−(P(x, t)−P(x−∆x, t))]
∂P
∂t (x, t)∆t=1 2
(∂P
∂x(x, t)−∂P
∂x(x−∆x, t) )
∆x
∂P
∂t (x, t)∆t=1 2
( ∂
∂x
∂P
∂x(x, t)∆x )
∆x
∂P
∂t (x, t) =1 2
(∆x)2
∆t
∂2P
∂x2(x, t)
熱や濃度のときは P(x, t) でなく,よくu(x, t) で書く. 12(∆x)∆t2 ⇝D >0:
拡散定数.
偏微分方程式とその数値計算 P(x, t)と拡散方程式
拡散方程式
拡散方程式(放物型偏微分方程式の典型例)
∂u
∂t(x, t) =D·∂2u
∂x2(x, t) x 軸上を,熱や溶けた砂糖が伝わっていく. u(x, t): 時刻tにおける,位置 x の
温度, 砂糖濃度
u:
従属
変数,x, t:独立変数 解の例
u(x, t) =a(2t+x2) +bx+c. 確率,熱,砂糖の合計が変化しちゃう→ 初 期条件,境界条件.
u(x, t) = 1
√2πDte−x
2 2Dt
偏微分方程式とその数値計算 P(x, t)と拡散方程式
偏微分方程式
多変数関数 u(x1, x2, . . . , xn)に対する微分方程式で,いろんな独立変数 のの偏微分が混ざってるもの ↔常微分方程式 u′(t) =−2u(t).
x′′(t) =−x(t).
拡散方程式,熱方程式は,偏微分方程式の中でも,放物型といわれるタイ
プ 現象の数学A
別のタイプ: 波動方程式,双曲型 現象の数学B,ラプラス方程式,楕円型 太鼓の形
アニメ http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_
2013/img/pde-diff.cdf
常微分方程式: x(t): 数x が変化していく
偏微分方程式: u(x, t): 関数 u(x) が変化していく
偏微分方程式とその数値計算 P(x, t)と拡散方程式
L07-Q1
Quiz(偏微分方程式)
次のうち,偏微分方程式と呼べるのはどれとどれ?
1 計算科学IIでやったP(x, t) の漸化式の極限の微分方程式
2 物理数学IIでやったニュートンの運動方程式mx′′=−kx−bx′.
3 物理数学IIや数理モデル基礎Iでやったx′′+ax′+bx=c.
4 関数論でやった コーシー-リーマンの関係式
5 計算科学Iでやったルンゲクッタ法で解ける微分方程式
6 数理モデル基礎IIでやった,平衡点のタイプを考えるような連立微 分方程式
偏微分方程式とその数値計算 P(x, t)の数値計算
ここまで来たよ
1 略解:モーメント母関数M(λ, t)からの母期待値の計算
2 偏微分方程式とその数値計算
P(x, t)と拡散方程式
P(x, t)の数値計算
偏微分方程式とその数値計算 P(x, t)の数値計算
P(x, t)の数値計算
大注意:計算機使うけど
標本抽出
じゃない.
乱数
不要. 漸化式 P(x, t+ 1) = (P(∗, t)の式) を計算したい.
(rw6,sim6では横がt,縦n(サンプル番号)だったから逆) P(x, t) を配列 double u[x]で表す. 添字t は?
for(t)の中でu=P(x, t) を更新していく(ランダムウォークの x=x+getrandom(getuniform());と同じのり)
偏微分方程式とその数値計算 P(x, t)の数値計算
Cの配列の復習
1 d o u b l e u [ 1 0 ] ; /∗宣言∗/
2
3 i n t u [ ] ={0 , 2 , 3 , 1 , 0 , 0 , 0 , 0 , 0 , 0}; /∗宣言兼代入∗/
u[0],u[1],...,u[9]が使える.
u[-1],u[10]にアクセスすると不吉なことが起こる. 代入する前は,値が0である保証はもちろんない.
偏微分方程式とその数値計算 P(x, t)の数値計算
イメージするための例え話
U(x, t) 人のウォーカーが実際にいる.
数式的 U(x, t): 時刻 tに,座標 x にいるウォーカーの人数. 上の状況なら
U(0, t) = 0, U(1, t) = 2, U(2, t) = 3, U(3, t) = 1, U(他, t) = 0.
C的 U[x]座標 x にいるウォーカーの人数(時刻 t とともに更新) int U[10]; /*配列の宣言. 10−1 =x座標の上限*/
または
int U[]={0,2,3,1,0,0,...}; /*宣言兼代入*/
実際の double u[]は 1.0/6みたいなも値.
偏微分方程式とその数値計算 P(x, t)の数値計算
u[]の更新: u での例え話
ut+1 = (utの式), u0=初項 を解く
1 d o u b l e u ;
2 d o u b l e u n e x t ;
3
4 /∗ こ こ で u を 初 項 に 従 っ て 初 期 化 ∗/
5
6 f o r( t =0; t<=tmax ; t ++){
7 /∗ こ こ で 時 刻 t の u を 出 力 ∗/
8
9 /∗ 漸 化 式 を 適 用 ∗/
10 u n e x t =(∗ u の 出 て く る 漸 化 式 右 辺 ∗) ;
11 u=u n e x t ;
12 }
u[t] とか使うのは効率悪い.
あれ? uとunextと2個あるのは無駄. u=(* uの出てくる漸化式右辺*);
でいいじゃん
偏微分方程式とその数値計算 P(x, t)の数値計算
u[]の更新: 本番
1 d o u b l e u [ xの 範 囲 の 長 さ ] ;
2 d o u b l e u n e x t [ xの 範 囲 の 長 さ ] ;
3
4 /∗ こ こ で u [ x ] を 初 項 に 従 っ て 初 期 化 ∗/
5
6 f o r( t =0; t<=tmax ; t ++){
7 /∗ こ こ で 時 刻 t の u [ x ] を 出 力 ∗/
8
9 /∗ 漸 化 式 を 適 用 ∗/
10 f o r( x=xmin ; x<=xmax ; x++){
11 u n e x t [ x ] = (∗ u [ x ] の 出 て く る 漸 化 式 右 辺 ∗) ;
12 }
13 f o r( x=xmin ; x<=xmax ; x++){
14 u [ x ]= u n e x t [ x ] ;
15 }
16 }
次に出てくる境界条件は無視して書いてます.
偏微分方程式とその数値計算 P(x, t)の数値計算
L07-Q2
Quiz(2項係数の漸化式)
次のランダムウォークの確率の漸化式を考える.
P(x, t+ 1) = {1
5P(x−1, t) +45P(x+ 1, t) (それ以外)
0 (x <−1, x >6),
P(x,0) = {
0.5 (x= 1,3) 0 (それ以外)
下のような P(x, t) の表を,漸化式を適用して埋めよう.
t\x −2 −1 0 +1 +2 +3 +4 +5 +6 +7
0 1 2
偏微分方程式とその数値計算 P(x, t)の数値計算
数値計算的悩み
1 問題 →解決
2 x, tの範囲は正負両方↔配列の添字は0以上 → オフセット
3 x, tの範囲は無限↔ 配列のサイズを宣言→ 境界条件
偏微分方程式とその数値計算 P(x, t)の数値計算
配列の宣言:オフセット 範囲 x=xmin,· · ·,0,· · ·, xmax.
例:xmin=−10, xmax= 10 u[-10]とかエラー
1 #d e f i n e XMAX 10
2 #d e f i n e XOFFSET 10 /∗ ず ら し 定 数. −XMIN よ り 大 き め,
3 境 界 条 件 を 考 え る と も っ と 大 き く.∗/
4 d o u b l e u [XMAX+1+XOFFSET ] ; /∗大きめサイズで宣言.
5 境 界 条 件 を 考 え る と も っ と 大 き く.∗/
P(−10, t)↔u[-10+XOFFSET]
...
P(0, t)↔u[0+XOFFSET]
P(x, t)↔u[x+XOFFSET]
...
P(10, t)↔u[XMAX+1+XOFFSET-1]
樋口さぶろお (数理情報学科) L07偏微分方程式とその数値計算 計算科学☆演習II(2015) 19 / 24
偏微分方程式とその数値計算 P(x, t)の数値計算
境界条件 計算機では,しょせん有限範囲
u[xmin+XOFFSET], · · ·, u[XMAX+1+XOFFSET]しか計算できない. しか〜し,端で困る.
unext[xmin+XOFFSET]=
0.5*u[xmin-1+XOFFSET]+0.5*u[xmin+1+XOFFSET];
解決策:
解くべき数学の問題を変更する.
P(x, t+ 1) =
1
2P(x−1, t) +12P(x+ 1, t) (xmin≦x≦xmax) スペシャルルール (x≤xmin−1) スペシャルルール (x≥xmax+ 1) u[xmin-1+XOFFSET],u[XMAX+1+XOFFSET+1] を強制的に決める
今の場合,u[xmin-1+XOFFSET]=u[XMAX+1+XOFFSET+1]=0としておけば, もとの無限領域の問題と似る. 固定境界条件
世の中には,他に自由境界条件,周期境界条件,· · ·. 端から砂糖を投入,端
偏微分方程式とその数値計算 P(x, t)の数値計算
微分方程式+初期条件+境界条件の書き方の作法
微分方程式
∂u
∂t(x, t) =D·∂2u
∂x2(x, t) (xmin< x < xmax, t >0) 初期条件
u(x,0) =xの式 (xmin< x < xmax, t >0) 境界条件
u(xmin, t) =u(xmax, t) = 0 (t≥0) xmin−1 をxmin と置き直した.
偏微分方程式とその数値計算 P(x, t)の数値計算
L07-Q3 Quiz(漸化式)
下の漸化式を計算しようと思って,間違ったプログラムを書いてしまっ た. 横x縦tの表で計算結果を書こう. 7≤x≤13 の範囲でいい.
P(x, t+ 1) = {1
5P(x−1, t) +45P(x+ 1, t) (それ以外)
0 (x <−1, x >20),
P(x,0) = {
1 (x= 10) 0 (それ以外)
1 d o u b l e u [ 2 1 ] ;
2 u [ ]の 初 期 化;
3 f o r( t =0; t<3; t ++){
4 f o r( x =1; x<20; x++){
5 u [ x ] = 0 . 2∗u [ x−1]+0.8∗u [ x + 1 ] ;
6 }
7 }
横方向樋口さぶろおx,縦方向(数理情報学科)t の表を書いてL07偏微分方程式とその数値計算,この部分が終了したときの配列の中身計算科学☆演習II(2015) 22 / 24
偏微分方程式とその数値計算 P(x, t)の数値計算
お知らせ
Mathラウンジ=チューター 月火水木昼.
Visual Studio の使い方や自宅インストールにも対応できます.
eラーニング予習問題ふつうのペースにもどります. 2015-05-26火23:55 締切
数理情報演習履修説明会 2015-06-24水4or5らしい.
manaba出席カード提出
https://attend.ryukoku.ac.jp
偏微分方程式とその数値計算 P(x, t)の数値計算
(講義の)プチテストやります!
日時2015-06-05金2 90分 講義の30ピーナッツ
外部記憶ペーパーなしで行きます
出題計画2015-05-29金に確定します. 2014の過去問題とは時期も内容も違うことに注意.出題について
演習と講義の両方から出題します.
離散的な確率変数が与えられたとき母平均値,母分散,母標準偏差,母期待値の計算 標本が与えられたとき標本平均値,標本分散,標本標準偏差,標本期待値の計算 ランダムウォークのP(x, t)をいろんな方法で
ランダムウォークのE[X(t)],V[X(t)]をいろんな方法で Xの規則からP の初項と漸化式を求める
P の初項と漸化式からMの初項と漸化式を求め,Mを求める
Mから確率Pと期待値E[ϕ(X)]を求める
Cでの乱数の使い方
ランダムウォークの確率シミュレーションの方法とプログラム 偏微分方程式の数値計算の方法とプログラム
プログラミングの問題はありますが, ExcelやVisual Studioの問題はありません.