スライド タイトルなし

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
② 上記連立方程式をサンプルプログラムを用いて解け。