12月25日はニュートンの誕生日なのでニュートン法のプログラムを書いた

12月25日はアイザック・ニュートンの誕生日🎉なのでニュートン法で3次方程式の解を求めるプログラムをC++で書きました

ニュートン法とは

与えられた方程式の解を数値的に求める手法です。 f(x)=0を求めたいとすると、まず初期点 x_0を決め、つぎにその点での方程式の接線の方程式を求めます。y=f(x)x=x_kにおける接線の傾きはf'(x_k)なので接線の方程式はy=f'(x_k)(x-x_k)+f(x_k)となります。これをx=x_{k+1},y=0とおいて変形するとx_{k+1}=x_k- \frac{f(x_k)}{f'(x_k)}となり、x_0からx_1,x_2,\dotsを逐次求めていきます。プログラムではf'(x)の値が設定した値\epsilonより小さくなるか設定した回数求めることを繰り返すと終了するようにしています。  

ここの説明が分かりやすいです

qiita.com

ソースコード

コード上ではf(x)=2x^3-x^2-4x+2=0の解を求めます。方程式をグラフにすると下のようになります。

f:id:sh00t:20181226025327p:plain

青線を見ると初期値を変えることによって3つの解が求まることが分かると思います。

コード中の目的の関数f関数とfの導関数df関数を変えることで別の方程式の解を求めることができます

github.com

おわりに

簡単に方程式の解を求められ、多次元に拡張することも可能で使用する場面は多そうだと感じました。

このブログは12月24日の夜から12月25日にかけて書かれました