この記事では VBA でニュートン・ラフソン法で方程式の数値解を求めるプログラムを実装する方法について解説します。
【VBA】ニュートン・ラフソン法
高次方程式
上の図のように適当な初期値
と表すことができます。これを変形すると
というように
で与えられます。これを繰り返すと交点は
で表されますが、
'[VBA] ニュートン・ラフソン法 (Newton-Raphson method) Sub Newton_Raphson() Dim eps As Double Dim x0 As Double Dim xn As Double Dim k As Integer '初期値 x0 = InputBox("初期値を入力してください") '収束判定定数 eps = 0.001 '|sn-s0|が eps より大きい間は処理を繰り返します Do While Abs(xn - x0) > eps And k < 100 k = k + 1 xn = x0 x0 = xn - (xn ^ 2 - 2 * xn - 3) / (2 * xn - 2) Loop If k < 100 Then MsgBox xn Else MsgBox "解はみつかりませんでした" End If End Sub
Newton_Raphson() を実行すると初期値の入力が促されるので「 5 」を入れてみると
3.00060975609756
という近似解が表示されます(真の解は
-1.00006103608759
が得られます。eps の値を小さくするほど精度が上がります。
Do While Abs(xn - x0) > eps And k < 100
の “And k < 100” は安全装置で、ループの中でカウント数 k を 1 つずつ増やして k が 100 になっても解がみつからない場合は繰り返し処理を停止させます(無限ループを回避します)。試しに
x0 = xn - (xn ^ 2 - 2 * xn - 3) / (2 * xn - 2)
の部分を
x0 = xn - (xn ^ 2 + 1) / (2 * xn)
に変えて実行してみてください。これは
エクセルや数学に関するコメントをお寄せください