プログラム(Python)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# -*- coding: utf-8 -*- import math import numpy as np import matplotlib.pyplot as plt # 処理対象関数 def f(x): return x*x - 4.0 # 導関数 def df(x): return 2.0*x # ニュートン法 def newton_method(a,eps): xxx = np.array([a,a]) yyy = np.array([0,f(a)]) for i in range(1000): # 漸化式 ah = a - f(a)/df(a) # 変化が十分小さければ終了 if abs(ah - a) < eps:break # 近似解の更新 a = ah xxx = np.append(xxx,a) yyy = np.append(yyy,0) xxx = np.append(xxx,a) yyy = np.append(yyy,f(a)) plt.plot(xxx,yyy) return a # f(x)を描画する xx1 = np.linspace(1, 10,100) yy1 = f(xx1) plt.plot(xx1,yy1) # 解をもとめる a = newton_method(10.0, 0.0001) # 実行結果 print(a) # グラフを表示 plt.grid(True) plt.xlabel('X') plt.ylabel('Y') plt.show() |
実行結果
1 |
2.00000927130158 |