コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。 4.非線型方程式 コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。 1642/12/25 - 1727/3/20 Sir Isaac Newton
非線型方程式の種類 ①代数方程式 ②超越方程式(sin関数や指数関数など超越関数を含む方程式)
注意 ①複素数の範囲内では, 代数方程式の解の個数は,分かっているが, 超越方程式の解の個数は,一般的には分からない。 ②いずれの方程式を解くにしても, あらかじめ概略のグラフを描く等の手段により, 解の存在と,どの範囲に解があるかを 確認しておく必要がある。
4.1 実根(複素数は含めない)の求め方 (1)繰返し法 4.1 実根(複素数は含めない)の求め方 (1)繰返し法 解くべき方程式 を と置き換えることができるとき とし,適当な解の予測値 を与えて, 繰返し演算を行う。
繰返し法の例題 [例] 解 に急速に近づく
厳密解との比較のための式定義 繰返し法を Excel で式定義して様子を眺めよう 2次方程式の 根の公式による解
繰返し法での収束の様子 グラフを描いて確かめよう
課題(1) 下記の方程式を繰返し法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること
交点における g(x) の傾きが1より大きい場合 繰返し法では,ほとんど収束しない 収束しない例
解決策 交点の傾きが 1 より小さくなるような等価な方程式に変換する。たとえば, とおけば, とすればよい。 を求めて,
解決策 [確認] とおいて を求めて元に戻す。
課題(2) ① 下記の方程式が繰返し法では収斂しないことを確認せよ。 ② また,どのようにすれば収斂するかを検討せよ。 ① 下記の方程式が繰返し法では収斂しないことを確認せよ。 ② また,どのようにすれば収斂するかを検討せよ。 ③ 収斂する方法をExcelで定義して提出せよ。
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 Sub ボタン1_Click() R = 繰返し法(E, iter, 0.0000001, 5000) MsgBox " 繰返し回数 = " & iter & _ " 結果 = " & Format(R, "#0.0000") & " 誤差 = " & E End Sub
(2)区間縮小法 区間 の間に解が一つだけあることが分かっていれば, は, と の間で符号を変える。すなわち もし, ならば である。 ここで,中点 における関数値の正負によって区間を 縮小できる。すなわち
例題とする関数 [例] の場合
区間縮小法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更
区間縮小法の収束の様子 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 Sub ボタン4_Click() R = 区間縮小法(E, iter, 0.000001, 500) MsgBox " 繰返し回数 = " & iter & " 結果 = " & _ Format(R, "#0.0000") & " 誤差 = " & E End Sub
課題(3) 下記の方程式を区間縮小法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること
(3)ニュートン・ラプソン(Newton-Raphson)法 (ニュートン・ラフソン法と呼ぶ人もいるが?…ニュートン・ラプソン法が多勢) 近似値 として,真の解との誤差を とすると 左辺をテーラ展開して,1次の項までとれば したがって, は,より高い精度の近似値となる。 これを繰り返して,解に収束させていく。
ニュートン・ラプソン法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更
ニュートンラプソン法の収束の様子 Excel式定義で確かめてみよう(2)
課題(4) 下記の方程式をニュートンラプソン法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること
Function ニュートンラプソン法(E, iter, EPS, iterMax) ' X^2 - X - 2 = 0を解く Function F(X) As Double F = X * X - X - 2 ' ここに解くべき関数を書く End Function Function DF(X) As Double DF = 2*X - 1 ‘ ここに微分式を書く 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 Sub ボタン5_Click() R = ニュートンラプソン法(E, iter, 0.00001, 500) MsgBox " 繰返し回数 = " & iter & " 結果 = " & _ Format(R, "#0.0000") & " 誤差 = " & E End Sub
(4)セカント(secant)法 (secantとは,「割線」,「交差する」等の意味) 導関数を求めることができない場合,解の近似値を2個用意し, 2点を結ぶ直線とX軸との交点を新たな近似値とする方法。すなわち, 曲線に交差する割線 これを繰り返すことで解に収束させる。
セカント(secant)法 k 回目の式は以下のように表すことができる。 (セカント法の弱点) 初期値を2個与える必要があるので, 初期値を2個与える必要があるので, 多変数への拡張が困難である。 曲線に交差する割線
ニュートンラプソン法との比較 微分値の替わりに 割線を用いていると捉えてよい。
セカント法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更
セカント法による収斂
課題(5) 下記の方程式をセカント法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること
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プログラムを用いて 以下の方法による収斂回数を比較せよ。 ① 繰返し法 ② 区間縮小法 ③ ニュートンラプソン法 ① 繰返し法 ② 区間縮小法 ③ ニュートンラプソン法 ④ セカント法