• 検索結果がありません。

差分スキーム 物理 化学 生物現象には微分方程式でモデル化される例が多い モデルを使って現実の現象をコンピュータ上で再現することをシミュレーション ( 数値シミュレーション コンピュータシミュレーション ) と呼ぶ そのためには 微分方程式をコンピュータ上で計算できる数値スキームで近似することが必要

N/A
N/A
Protected

Academic year: 2021

シェア "差分スキーム 物理 化学 生物現象には微分方程式でモデル化される例が多い モデルを使って現実の現象をコンピュータ上で再現することをシミュレーション ( 数値シミュレーション コンピュータシミュレーション ) と呼ぶ そのためには 微分方程式をコンピュータ上で計算できる数値スキームで近似することが必要"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

(2) (2) (1) (1) 差分スキーム 物理・化学・生物現象には微分方程式でモデル化される例が多い。モデルを使って現実の 現象をコンピュータ上で再現することをシミュレーション(数値シミュレーション、コン ピュータシミュレーション)と呼ぶ。そのためには、微分方程式をコンピュータ上で計算 できる数値スキームで近似することが必要になる。その一つの方法が微分方程式を差分方 程式におき直すことである。 微分方程式の差分化 次の1次元境界値問題を考える。 u(0)=1, u(1)=0 格子上の関数 区間(0,1)を分割して、各格子点上での関数値を設定する。区間(0,1)をn分割すれば、格子点 数はn+1で、        格子間隔 h=        格子点の位置        格子点 でのuの値u( )=        格子点での関数値1+2 を定義できる。また、次の値を定義する。        u( u( 1次微分u'(x), 2次微分u''(x)の差分を導出する。 Taylor展開による方法 1次微分u'(x)の差分 Mapleのtaylorコマンドを使ってu(x)をTaylor展開する。 u a : = t a y l o r ( u ( x + h ) , h , 2 ) ; u b : = t a y l o r ( u ( x - h ) , h , 2 ) ; 前進差分 u(x+h)のTaylor展開より、 後退差分 u(x-h)のTaylor展開より、

(2)

(4) (4) 中心差分 uaa-ubbを計算して、       u'(x)   2次微分u''(x)の差分 uaa+ubbを計算して、2次微分u''(x)の差分を求めることができる。 差分スキームの構成 例11.1の差分スキームを求める。 i=1,$$$n-1 これを行列で表現すると、(n-1)×(n-1)行列として、 A= b= 与えられたnに対して連立1次方程式Au=bを解くことによって、境界値問題の近似解とし て差分解を求めることができる。

(3)

(5) (5) (10) (10) (8) (8) (9) (9) (6) (6) (7) (7) 差分スキームのプログラミング ステップ1 格子点の生成 例えば、区間(0,1)をn=6分割する。 n : = 7 ; g r i d p o i n t s : = n ; h : = e v a l f ( 1 / g r i d p o i n t s , 7 ) ; x : = V e c t o r ( 1 . . n + 1 ) : f o r i f r o m 1 t o n + 1 d o : x [ i ] : = h * ( i - 1 ) ; e n d d o ; ステップ2 係数行列の設定 A : = M a t r i x ( 1 . . n - 1 , 1 . . n - 1 ) : f o r i f r o m 1 t o n - 2 d o : A [ i , i + 1 ] : = - 1 . 0 / ( h * h ) : A [ i + 1 , i ] : = - 1 . 0 / ( h * h ) : e n d d o : f o r i f r o m 1 t o n - 1 d o : A [ i , i ] : = 2 . 0 / ( h * h ) + x [ i + 1 ] : e n d d o : A ; ステップ3 ベクトルbの設定 b : = V e c t o r ( 1 . . n - 1 ) ;

(4)

(12) (12) (11) (11) (13) (13) f o r i f r o m 1 t o n - 1 d o : b [ i ] : = ( 1 . 0 + 2 . 0 * x [ i + 1 ] - x [ i + 1 ] ^ 2 ) * e x p ( x [ i + 1 ] ) : e n d d o ; ステップ4 境界条件の設定 b [ 1 ] : = b [ 1 ] + 1 . 0 / ( h * h ) ; ステップ5 行列の解法 w i t h ( L i n e a r A l g e b r a ) : u : = L i n e a r S o l v e ( A , b ) ; ステップ6 境界値の付加 u u : = V e c t o r ( 1 . . n + 1 ) : f o r i f r o m 1 t o n - 1 d o u u [ i + 1 ] : = u [ i ] ; e n d d o : u u [ 1 ] : = 1 . 0 : u u [ n + 1 ] : = 0 . 0 : f 1 : = p l o t ( x , u u ) :

(5)

(10) (10) f 2 : = p l o t ( ( 1 - t ) * e x p ( t ) , t = 0 . 0 . . 1 . 0 , c o l o r = b l u e ) : w i t h ( p l o t s ) : d i s p l a y ( f 1 , f 2 ) ; t 0 1 0 1 非定常な問題:拡散現象 時間発展する非定常な問題として、拡散現象を考える。 1次元初期値問題:拡散方程式 u(x,0)=exp(-x ) 格子上の関数 空間に対して区間(-K,K)を分割し、時間に対して区間(0,T)を分割して、各格子点上での関 数値を設定する。区間(-K,K)をn分割し、 区間(0,T)をm分割する。 格子点数はn+1で、        格子間隔 h=        格子点の位置

(6)

(14) (14) (15) (15) 時刻        格子点 でのuの値u( , )=        格子点での関数値 を定義できる。 時間の差分スキーム 陽的スキーム u = 陰的スキーム u = A= とすると、 陽的スキーム 陰的スキーム 差分スキームのプログラミング(陰的スキームと陽的スキーム) ステップ1 格子点の生成 例えば、空間の区間(-10,10)をn=50分割, 時間の区間(0,1.6)を10分割する。D≡1とする。 n : = 5 0 ; g r i d p o i n t s : = n ;

(7)

(17) (17) (16) (16) (15) (15) (19) (19) (10) (10) (18) (18) h : = e v a l f ( 2 0 / g r i d p o i n t s , 7 ) ; d e l t a t : = 0 . 1 6 ; x : = V e c t o r ( 1 . . n - 1 ) : f o r i f r o m 1 t o n - 1 d o : x [ i ] : = - 1 0 . 0 + h * i ; e n d d o : ステップ2 係数行列の設定 E : = M a t r i x ( n - 1 , n - 1 , s h a p e = i d e n t i t y ) : A : = M a t r i x ( 1 . . n - 1 , 1 . . n - 1 ) : f o r i f r o m 1 t o n - 2 d o : A [ i , i + 1 ] : = - 1 . 0 / ( h * h ) : A [ i + 1 , i ] : = - 1 . 0 / ( h * h ) : e n d d o : f o r i f r o m 1 t o n - 1 d o : A [ i , i ] : = 2 . 0 / ( h * h ) : e n d d o : B : = E + d e l t a t * A : C : = E - d e l t a t * A : A : ステップ3 初期値の設定 u 0 : = V e c t o r ( 1 . . n - 1 ) : u k : = V e c t o r ( 1 . . n - 1 ) : v k : = V e c t o r ( 1 . . n - 1 ) : u u : = V e c t o r ( 1 . . n - 1 ) : f o r i f r o m 1 t o n - 1 d o : u 0 [ i ] : = e x p ( - x [ i ] * x [ i ] ) : e n d d o : u k : = u 0 : v k : = u 0 : w i t h ( L i n e a r A l g e b r a ) : m:=10; k : = 1 ; ステップ4 解法 f o r k f r o m 1 t o m d o : u u : = u k : v : = C . v k : u : = L i n e a r S o l v e ( B , u k ) : u k : = u : v k : = v : e n d d o : 陰的スキームによる解 p l o t ( x , u ) ;

(8)

(15) (15)

0 2 4 6 8

陽的スキームによる解 p l o t ( x , v ) ;

(9)

(10) (10) (15) (15) 0 2 4 6 8 f 1 : = p l o t ( x , u ) : f 2 : = p l o t ( e x p ( - t * t ) , t = - 1 0 . 0 . . 1 0 . 0 , c o l o r = b l u e ) : f 3 : = p l o t ( x , u u ) : w i t h ( p l o t s ) : d i s p l a y ( f 1 , f 2 , f 3 ) ;

(10)

(15) (15) t 0 5 10 1 非定常な問題:移流現象 時間発展する非定常な問題として、移流現象を考える。 1次元初期値問題:移流方程式 u0(x)= 上記の初期値問題をRiemann問題と呼ぶが、その厳密解はu0(x-at)である。 格子上の関数 空間に対して区間(-K,K)を分割し、時間に対して区間(0,T)を分割して、各格子点上での関 数値を設定する。区間(-K,K)をn分割し、 区間(0,T)をm分割する。 格子点数はn+1で、

(11)

(20) (20) (23) (23) (15) (15) (22) (22) (10) (10) (24) (24) (21) (21)        格子間隔 h=        格子点の位置 時刻        格子点 でのuの値u( , )= を定義できる。 陽的差分スキーム 風上スキーム Lax-Wendroffスキーム Lax-Wendroffスキームの導出 Taylor展開して、 u(x,t+k)=u(x,t)+k (x,t)+ ここで、 を代入して、 u(x,t+k)=u(x,t)-ak (x,t)+ これより導出される高精度スキームになっている。 差分スキームのプログラミング ステップ1 格子点の生成 空間の区間(-1.0,1.0)をn=200分割。a≡1とする。 n : = 2 0 0 ; g r i d p o i n t s : = n ; h : = e v a l f ( 2 . 0 / g r i d p o i n t s , 9 ) ; d e l t a t : = e v a l f ( 0 . 1 2 5 * h , 9 ) ; a : = 1 . 0 ;

(12)

(25) (25) (15) (15) (24) (24) (28) (28) (26) (26) (27) (27) x x : = V e c t o r ( 1 . . n + 1 ) : f o r i f r o m 1 t o n + 1 d o : x x [ i ] : = e v a l f ( - 1 . 0 + h * ( i - 1 ) , 9 ) ; e n d d o : ステップ2 初期値の設定 u 0 : = V e c t o r ( 1 . . n + 1 ) : u e x a c t : = V e c t o r ( 1 . . n + 1 ) : u k : = V e c t o r ( 1 . . n + 1 ) : v k : = V e c t o r ( 1 . . n + 1 ) : u : = V e c t o r ( 1 . . n + 1 ) : v : = V e c t o r ( 1 . . n + 1 ) : f o r i f r o m 1 t o n + 1 d o : i f x x [ i ] < = 0 . 0 t h e n u 0 [ i ] : = 1 . 0 e l s e u 0 [ i ] : = 0 . 0 : e n d i f : e n d d o ; u k : = u 0 : v k : = u 0 : m:=200; a t : = e v a l f ( a * d e l t a t * m , 9 ) ; ステップ3 厳密解 f o r i f r o m 1 t o n + 1 d o : i f x x [ i ] < = a t t h e n u e x a c t [ i ] : = 1 . 0 e l s e u e x a c t [ i ] : = 0 . 0 : e n d i f : e n d d o ; k : = 1 ; l : = 1 ; ステップ4 解法 upwind w h i l e ( k < m ) d o : f o r i f r o m 2 t o n d o : u [ i ] : = u k [ i ] - ( a * d e l t a t / h ) * ( u k [ i ] - u k [ i - 1 ] ) : e n d d o : u [ 1 ] : = 1 . 0 : u [ n + 1 ] : = 0 . 0 : u k : = u : k : = k + 1 e n d d o : ステップ4 解法 Lax-Wendroff w h i l e ( l < m ) d o :

(13)

(10) (10) (24) (24) (15) (15) f o r i f r o m 2 t o n d o : v [ i ] : = v k [ i ] - ( 0 . 5 * a * d e l t a t / h ) * ( v k [ i + 1 ] - v k [ i - 1 ] ) + ( 0 . 5 * a ^ 2 * ( d e l t a t ^ 2 ) / ( h ^ 2 ) ) * ( v k [ i + 1 ] - 2 . 0 * v k [ i ] + v k [ i - 1 ] ) : e n d d o : v [ 1 ] : = 1 . 0 : v [ n + 1 ] : = 0 . 0 : v k : = v : l : = l + 1 : e n d d o : f 1 : = p l o t ( ( x x , v ) , x = - 0 . 5 . . 1 . 0 , y = - 0 . 5 . . 1 . 5 , c o l o r = r e d ) : f 2 : = p l o t ( ( x x , u ) , x = - 0 . 5 . . 1 . 0 , y = - 0 . 5 . . 1 . 5 , c o l o r = b l u e ) : f 3 : = p l o t ( ( x x , u e x a c t ) , x = - 0 . 5 . . 1 . 0 , y = - 0 . 5 . . 1 . 5 , c o l o r = b l a c k ) : w i t h ( p l o t s ) : d i s p l a y ( f 1 , f 2 , f 3 ) ; x 0 1 y 1

参照

関連したドキュメント

しかしながら,式 (8) の Courant 条件による時間増分

うのも、それは現物を直接に示すことによってしか説明できないタイプの概念である上に、その現物というのが、

第四章では、APNP による OATP2B1 発現抑制における、高分子の関与を示す事を目 的とした。APNP による OATP2B1 発現抑制は OATP2B1 遺伝子の 3’UTR

Bでは両者はだいたい似ているが、Aではだいぶ違っているのが分かるだろう。写真の度数分布と考え

前章 / 節からの流れで、計算可能な関数のもつ性質を抽象的に捉えることから始めよう。話を 単純にするために、以下では次のような型のプログラム を考える。 は部分関数 (

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,