pypy.com/

Python、Unity、FX自動化などを勉強しています。あと、コーラと車も好きです。そこらへんについて、たまに記事を書きます。

Pythonで非線形方程式の解法(ニュートン法)

こんにちは。

今回は、Python非線形方程式を解くということで、
ニュートン法について書きたいと思います。

それでは書いていきます。

ニュートン(Neuton)法の考え方

考え方については、以前書いた以下の記事を参考にしてください。

ニュートン(Neuton)法のPythonコード

今回は、以下の式を解くコードを書きます。

y=5x^3+10x^2-2x-5\tag{1}

def f(x):
    return 5*x*x*x + 10*x*x - 2*x -5

def f_dash(x):
    return 15*x*x + 20*x -2

if __name__=="__main__":
    x_start = 2.0   # 初期位置
    err = 100.0
    x_pre = x_start
    max_itr = 10000 # 最大ステップ数

    for i in range(max_itr):
        if(err<0.00000001):
            break
        x_start = x_start - f(x_start)/f_dash(x_start)
        err = (x_start - x_pre) * (x_start - x_pre)
        x_pre = x_start
        print(x_start)
    print("result : %f" %(x_start))


結果としては、以下のようになります。

1.2755102040816326
0.8770043688220908
0.7178280530709943
0.6896230929582822
0.6887561075711665
0.6887552982476247
result : 0.688755

今回の式はグラフにすると、以下のようになるので、
ニュートン法による解があっていることがわかります。

f:id:SaidaTaisei:20200720141806p:plain