いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

ニュートン法で方程式の解を求める

 ニュートン法は、グラフの接線を利用して方程式の解の近似値を求める、効率のよい方法です。これについては前の記事があります。
www.omoshiro-suugaku.com
このときは具体的にプログラムを書いて解を求めて……とはやりませんでした。今回は実験してみましょう。
 図はy=f(x)のグラフです。
f:id:Inuosann:20200819193535p:plain:w250
点(p,q)で接線を引き、x軸との交点を求めます。接線の方程式は
f:id:Inuosann:20200819184952p:plain:w200
ですから、y=0とおくと
f:id:Inuosann:20200819185111p:plain:w150
これが接線とx軸の交点の座標です。この点での接線をまた引き、同じことを繰り返します。図を見ると分かりますが、何回かで接線とx軸の交点はかなりグラフとx軸の交点に近づきます。手で計算すると大変ですから、もちろんコンピュータでやります。ここではf’(x)を通常の導関数の計算で求めるのではなく、近似値で代用します。この近似値は前に使った方法で求めます。
 では、例によってPythonで。√2を求めてみます。

import sys
def f(x):
    return x *x - 2
def g(p): # x = p での微分係数(導関数の値)を求める
    return (f(p + d) - f(p))/d
#
x = 2 #xの初期値
d = 0.0001 #微分係数を求めるためのxの増分
#
#xのところで接線を引き、x軸との交点を求める。
#その交点の座標を改めてxとおき、繰り返す。
for i in range(100):
    x = x - f(x) / g(x)
#
print('解の近似値 x = ', x)
sys.exit()

実行結果は以下の通り。
解の近似値 x = 1.414213562373095
 この方法(グラフの傾きを近似値で求める)なら、相手にする方程式によって導関数を入れ直す、という作業は不要です。

 方程式は、解の公式があるものなど本当にわずかです。ほぼないと言ってもよいでしょう。しかし実用では困りません。コンピュータを使えば近似値を求めることができるからです。