コンピュータプログラミング
- 37 -
8.
非線形な方程式の解を求める(ニュートン法)8.1.
背景例えば
という方程式の解を求めることはできるだろうか?この方程式
の解がどこにあるのかを確認するために,曲線
を描いてみよう(コンピ ュータを使わないのなら
と
を重ねて描く).
図をみるかぎりでは-1と
0
の間にふたつ,1と2
の間にひとつ答え(y=0との交点)があり そうである.この3つの答えを見つける方法を考える.8.2.
アルゴリズムこのような非線形方程式(連立一次方程式ではない方程式)の解を数値的に求める方法がニュ ートン法である.ニュートン法は以下のような繰り返し計算によって解を求めるものである.
ある非線形な関数
が与えられているときに方程式
を解くことを考える.こ のとき,以下の繰り返し計算によって,解
の
近似値を得ることができる.
その原理は右の図に示したとおりで,繰り返し 計算によって接線が x 軸と f(x) の交点に近 づくような点を選び続ける操作を行なっている ことがわかる.
x
nx
n+1y=f(x)
x y
解
コンピュータプログラミング
- 38 -
8.3.
実装例最初に示した非線形方程式についてニュートン法を用いて解を求める.
8.4.
演習問題次の非線形方程式の解を求めなさい.答えはひとつとは限らないので注意すること.
①
②
③
④
8.5.
次回までの課題演習問題④について以下の事項をみたすようにまとめたレポートを提出しなさい.レポート用 紙の大きさは
A4
とする.次回の講義(12/13)の開始前に回収する.提出遅れは原則として認め ない.大学で印刷する場合には十分早く来て提出時刻に遅れないようにすること.A)
コメント文に解説を入れたソースコードがあること.B)
ソースコードとは別に解法の手順を説明した文章があること.C)
答えが複数あった場合にはすべての答えを示すこと.どのようにしてその答えにたどり着 いたのかも述べること.D)
自分が到達した答えが正しいことを何かしらの方法で示すこと.Sub newton()
'sin (2x) -x/2+1/2=0 の解を求める Dim x As Double
Dim diff As Double
x = -0.5 '初期値を変えると到達する解が変わる
Do
diff = -(Sin(2 * x) - x / 2 + 1 / 2) / (2 * Cos(2 * x) - 1 / 2) x = x + diff
Loop Until Abs(diff) < 0.001 MsgBox x
End Sub