4.2 連立非線形方程式 (1)繰返し法による方法 n 個の変数からなる非線形方程式を考える。 f1 ( x1 , x2 , , xn ) 0 f 2 ( x1 , x2 , , xn ) 0 f n ( x1 , x2 , , xn ) 0 これをベクトル表記して次のように表す。 x ( x1 , x2 ,, xn ) f ( x) ( f1 ( x), f 2 ( x),, f n ( x)) 繰返し法による方法 1変数の場合と同様,以下のようにして解く g( x) f ( x) x, x g( x), x ( k 1) g( x ( k ) ) ただし, 単純な繰返し法では,収束するとは限らない!! 使えない!! (2)ニュートン・ラプソン法 ニュートン・ラプソン法の考え方(1) 真の解との誤差を h (h1 , h2 ,, hn ) としてベクトル表記すると f ( x (1) h) 0 これは,次のような式をベクトル表記したものである。 f1 ( x1 h1 , x2 h2 ,, xn hn ) 0 (1) (1) (1) f 2 ( x1 h1 , x2 h2 ,, xn hn ) 0 (1) (1) (1) f n ( x1 h1 , x2 h2 ,, xn hn ) 0 (1) (1) (1) ニュートン・ラプソン法の考え方(2) テーラ展開し,1次の項まで近似すると (1) 1 (1) (1) 1 (1) f1 ( x , x2 , xn (1) f 2 ( x , x2 , xn f1 ) x1 f1 h x1 x1(1) 1 x2 f1 h x2 x2(1) 2 xn f 2 ) x1 f 2 h x1 x1(1) 1 x2 f 2 h x2 x2(1) 2 xn f n ) x1 f n h x1 x1(1) 1 x2 f n h x2 x2(1) 2 xn (1) xn xn(1) hn xn xn(1) hn xn xn(1) hn (1) 1 (1) f n ( x , x2 , xn (1) ニュートン・ラプソン法の考え方(3) ベクトル表記すると f x (1) h f x (1) J x (1) h ニュートン・ラプソン法の考え方(4) J x :ヤコビアンと呼ばれる。 (Jacobian) f1 f1 f1 , , , x x x 2 n 1 f f f 2 2 2, , , J x x1 x2 xn f f n f n n , , xn x1 x2 ニュートン・ラプソン法の考え方(5) 適当な初期値 x ( 0) を決め(k=0) J x(k ) h f x(k ) を解いて, h を求め x ( k 1) x ( k ) h とする。これを繰り返せば,解に収束する。 発展 行列が大きくなると, 近似値の計算のたびに 連立方程式を解く必要があるので 計算量が多くなる。 実際には, 非線形連立偏微分方程式の数値解法に 応用されることが多いので, それに合わせた数値解法が提案されている。 簡単な例題を手計算で進めてみると x 2 xy y 2 1 0 x y 0 2 x y x 2 y J ( x, y ) 1 1 初期の近似値を x ( 0) とすると ,y ( 0) 1, 1 3 3 J (1, 1) 1 1 J (1, 1) h f (1, 1) 3 3 h1 2 1 1 h 0 2 3h1 3h2 2, h1 h2 0 簡単な例題 h1 h2 , 6h1 2, h1 h2 1 3 x (1) , y (1) x ( 0) h1 , y ( 0) h2 2 3 , 2 3 5 / 3 5 / 3 J (2 / 3, 2 / 3) 1 1 J (2 / 3,2 / 3) h f (5 / 3,5 / 3) 5 / 3 5 / 3 h1 22 / 3 1 h 1 0 2 (以降,省略) 例題を Excel でやってみよう Excelでの定義 グラフを描いて確かめよう 収束の様子 VBAでのプログラム ①Jacobianの設定,関数値の設定,ボタンのClickイベントハンドラ Sub setJACOBI(JACOBI, A) JACOBI(1, 1) = 2 * A(1) + A(2) Jacobianの設定 JACOBI(1, 2) = A(1) + 2 * A(2) JACOBI(2, 1) = 1 JACOBI(2, 2) = -1 ' - f(X) JACOBI(1, 3) = -(A(1) * A(1) + A(1) * A(2) + A(2) * A(2) - 1) JACOBI(2, 3) = -(A(1) - A(2)) End Sub 関数値の設定 Sub setInitial(A) (連立方程式の解法で掃出し法を用いる) A(1) = 1: A(2) = 1 End Sub Sub ボタン2_Click() Dim A(2) EPS = 0.0000001 N = 連立非線形Newton(A, EPS, 2) MsgBox " 繰返し回数" & N & " 結果=(" & A(1) & " " & A(2) & ")" End Sub VBAでのプログラム ②連立非線形方程式の解法 Function 連立非線形Newton(A, EPS, N) Dim JACOBI() As Double: ReDim JACOBI(N, N + 1) setInitial A iter = 0: itermax = 100: E = EPS * 100 Do While E > EPS And iter < itermax iter = iter + 1 setJACOBI JACOBI, A ‘ Yacobian,関数値の設定 If 掃出法(JACOBI, N, ESP) Then Exit Do E = 0 ‘ 補正値の加算,収束判定 For i = 1 To N D = A(i) - JACOBI(i, N + 1) E = E + D * D A(i) = A(i) + JACOBI(i, N + 1) Next Loop 連立非線形Newton = iter End Function (3)その他の方法 ①ベアストウ・ヒッチコック法(Bairstow-Hitchcock method) 非線形代数方程式に特化した繰返し計算による方法 ②DKA法(Durand-Kerner-Aberth method) ニュートン法に対してデュランとカーナーが修正を行い, アバースの修正を用いる方法であり, 非線形代数方程式を対象とする方法。 (N個の解をまとめて計算する) なお,DKA法については,4.3節で 複素根を対象とした方法として示す。 (4)演習 ① 以下の連立方程式の収斂の様子をExcelを使って観察せよ。 x xy y 7 0 x y 1 0 2 2 ② 上記連立方程式をサンプルプログラムを用いて解け。
© Copyright 2024 ExpyDoc