4.非線型方程式

Download Report

Transcript 4.非線型方程式

4.非線型方程式
コンピュータの高速化により,
即座に計算できるようになってきたが,
手法的にはコンピュータ出現以前に考え出された
方法が数多く使われている。
1642/12/25 - 1727/3/20
Sir Isaac Newton
非線型方程式の種類
①代数方程式
f ( x)  a0 xn  a1xn1   an1x  an  0
②超越方程式(sin関数や指数関数など超越関数を含む方程式)
f ( x)  x  cos x  0
注意
①複素数の範囲内では,
代数方程式の解の個数は,分かっているが,
超越方程式の解の個数は,一般的には分からない。
②いずれの方程式を解くにしても,
あらかじめ概略のグラフを描く等の手段により,
解の存在と,どの範囲に解があるかを
確認しておく必要がある。
4.1 実根(複素数は含めない)の求め方
(1)繰返し法
解くべき方程式
f ( x)  0 を x  g (x)
と置き換えることができるとき
xk 1  g ( xk )
とし,適当な解の予測値
繰返し演算を行う。
x0 を与えて,
繰返し法の例題
[例]
2
x
1
2
f ( x)  x  4 x  1  0  x  g ( x) 
4
x0  0
0 1
 0.25
4
0.252  1
x2 
 0.265625
4

x1 
解
2  3  0.267949
に急速に近づく
厳密解との比較のための式定義
繰返し法を Excel で式定義して様子を眺めよう
2次方程式の
根の公式による解
x2 1
x  g ( x) 
4
繰返し法での収束の様子
グラフを描いて確かめよう
課題(1)
下記の方程式を繰返し法を用いて,
Excelで定義し,
収斂の様子をグラフで確かめること
f ( x)  2 x 2  3x  1  0  x j 
2 x 2j 1  1
3
交点における g(x) の傾きが1より大きい場合
繰返し法では,ほとんど収束しない
収束しない例
f ( x)  4 x 2  x  1  0  x  g ( x)  4 x 2  1

1  17 
x 


8 


解決策
交点の傾きが 1 より小さくなるような等価な方程式に変換する。たとえば,
1
x
2( x  1)
とおけば,
4
1
f ( x)  4 x  x  1 

1
2
4( x  1) 2( x  1)
2
4  2( x  1)  4( x  1) 2  4 x2  10x  2


0
2
2
4( x  1)
4( x  1)
 2 x 2  5 x  1  0
 2 x 2  1
x  g ( x) 
5
1
とすればよい。
x を求めて, x 
2( x  1)
解決策
[確認]
1
x
2( x  1)
とおいて x を求めて元に戻す。
課題(2)
① 下記の方程式が繰返し法では収斂しないことを確認せよ。
② また,どのようにすれば収斂するかを検討せよ。
③ 収斂する方法をExcelで定義して提出せよ。
f ( x)  6x 2  2x 1  0
VBAでのプログラム
Function 漸化式(X) As Double
漸化式 = (X * X + 1) / 2
' この部分に漸化式を書く
End Function
Function 繰返し法(E, iter, EPS, iterMax) As Double
iter = 0: X1 = 0: E = EPS * 100
Do While E > EPS And iter < iterMax
iter = iter + 1
X2 = 漸化式(X1)
E = Abs(X2 - X1)
X1 = X2
Loop
繰返し法 = X2
End Function
Sub ボタン1_Click()
R = 繰返し法(E, iter, 0.0000001, 5000)
MsgBox " 繰返し回数 = " & iter & _
" 結果 = " & Format(R, "#0.0000") & " 誤差 = " & E
End Sub
(2)区間縮小法
区間
x1 , x2  の間に解が一つだけあることが分かっていれば,
f (x) は,x1 と x2 の間で符号を変える。すなわち
f ( x1 ) f ( x2 )  0
もし, f ( x1 )  0 ならば
ここで,中点
f ( x2 )  0
x  x1  x2  2
である。
における関数値の正負によって区間を
縮小できる。すなわち
f ( x)  0 
f ( x)  0 
x1, x
x, x2 
例題とする関数
[例]
f ( x)  x 2  x  2  0
の場合
Excel式定義で確かめてみよう(1)
f ( x)  x 2  x  2  0
の場合
区間縮小法の式定義
式が変わればここを変更
Excel式定義で確かめてみよう(2)
区間縮小法の収束の様子
VBAでのプログラム
Function F(X) As Double
F = X * X - X - 2 ' ここに解くべき関数を書く
End Function
Function 区間縮小法(E, iter, EPS, iterMax) As Double
iter = 0: X1 = 1: X2 = 4: E = EPS * 100
Do While E > EPS And iter < iterMax
iter = iter + 1: X = (X1 + X2) / 2: Y = F(X)
If Abs(Y) < EPS Then: Exit Do
ElseIf Y > 0 Then:
X2 = X
Else:
X1 = X
End If
E = Abs(X2 - X1)
Loop
E = Abs(Y): 区間縮小法 = X
End Function
Sub ボタン4_Click()
R = 区間縮小法(E, iter, 0.000001, 500)
MsgBox " 繰返し回数 = " & iter & " 結果 = " & _
Format(R, "#0.0000") & " 誤差 = " & E
End Sub
課題(3)
下記の方程式を区間縮小法を用いて,
Excelで定義し,
収斂の様子をグラフで確かめること
f ( x)  x  cos x  0
(3)ニュートン・ラプソン(Newton-Raphson)法
(ニュートン・ラフソン法と呼ぶ人もいるが?…ニュートン・ラプソン法が多勢)
近似値
x1 として,真の解との誤差を h とすると
f ( x1  h)  0
左辺をテーラ展開して,1次の項までとれば
f ( x1  h)  f ( x1 )  f ( x1 )h  0  h  
f ( x1 )
したがって, x2  x1 
f ( x1 )
f ( x1 )
f ( x1 )
は,より高い精度の近似値となる。
これを繰り返して,解に収束させていく。
y
y  f (x)
xk 2 xk 1
xk
x
ニュートン・ラプソン法の式定義
Excel式定義で確かめてみよう(1)
f ( x)  x 2  x  2  0
の場合
式が変わればここを変更
ニュートンラプソン法の収束の様子
Excel式定義で確かめてみよう(2)
課題(4)
下記の方程式をニュートンラプソン法を用いて,
Excelで定義し,
収斂の様子をグラフで確かめること
f ( x)  2x2  3x 1  0
Function F(X) As Double
F = X * X - X - 2 ' ここに解くべき関数を書く
End Function
Function DF(X) As Double
DF = 2*X - 1 ‘ ここに微分式を書く
End Function
Function ニュートンラプソン法(E, iter, EPS, iterMax)
' X^2 - X - 2 = 0を解く
iter = 0: X = 1: E = EPS * 100
Do While iter < iterMax
iter = iter + 1
Y = F(X): If Abs(Y) < EPS Then Exit Do
X = X - Y / DF(X)
Loop
E = Abs(Y): ニュートンラプソン法 = X
End Function
Sub ボタン5_Click()
R = ニュートンラプソン法(E, iter, 0.00001, 500)
MsgBox " 繰返し回数 = " & iter & " 結果 = " & _
Format(R, "#0.0000") & " 誤差 = " & E
End Sub
(4)セカント(secant)法
(secantとは,「割線」,「交差する」等の意味)
導関数を求めることができない場合,解の近似値を2個用意し,
2点を結ぶ直線とX軸との交点を新たな近似値とする方法。すなわち,
f ( x1 )  f ( x2 )
y
( x3  x2 )  f ( x2 )  0
x1  x2
x1  x2
 x3  x2  f ( x2 )
f ( x1 )  f ( x2 )
これを繰り返すことで解に収束させる。
曲線に交差する割線
y  f (x)
y
x
xk 2 xk 1 xk
セカント(secant)法
k 回目の式は以下のように表すことができる。
xk 1  xk
xk 1  xk  f ( xk )
f ( xk 1 )  f ( xk )
(セカント法の弱点)
初期値を2個与える必要があるので,
多変数への拡張が困難である。
曲線に交差する割線
y
y  f (x)
x
xk 2 xk 1 xk
ニュートンラプソン法との比較
微分値の替わりに
割線を用いていると捉えてよい。
y
y  f (x)
y
y  f (x)
x
xk 2 xk 1
xk
x
xk 2 xk 1 xk
セカント法の式定義
Excel式定義で確かめてみよう(1)
f ( x)  x 2  x  2  0
の場合
式が変わればここを変更
セカント法による収斂
課題(5)
下記の方程式をセカント法を用いて,
Excelで定義し,
収斂の様子をグラフで確かめること
f ( x)  2x2  3x 1  0
VBAでのプログラム(関数F(X)はニュートンラプソンと共通)
Function セカント法(E, iter, EPS, iterMax)
EPS = 0.00001: iter = 0: iterMax = 500
X1 = 1: X2 = 4: E = EPS * 100
Y1 = F(X1) ' X1に関する式を書く
Do While E > EPS And iter < iterMax
iter = iter + 1
Y2 = F(X2) ' X2に関する式を書く
Y = (Y1 + Y2) / 2
If Abs(Y) < EPS Then Exit Do
X = X2 - Y2 * (X1 - X2) / (Y1 - Y2)
X1 = X2: X2 = X: Y1 = Y2 '前回式の保存
Loop
E = Abs(Y): セカント法 = X
End Function
Sub ボタン6_Click()
R = セカント法(E, iter, 0.00001, 500)
MsgBox " 繰返し回数 = " & iter & " 結果 = " & _
Format(R, "#0.0000") & " 誤差 = " & E
End Sub
課題(6)
サンプルVBAプログラムを用いて
以下の方法による収斂回数を比較せよ。
① 繰返し法
② 区間縮小法
③ ニュートンラプソン法
④ セカント法
f ( x)  x  cos x  0