プログラム(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 49 50 51 52 |
import math import numpy as np import matplotlib.pyplot as plt # 解を求める関数 def f(x): return x*x*x-3*x*x+9*x-8; # 二分法 def bisection_method(a, b, eps): s = 0 xxx = np.array([]) yyy = np.array([]) for i in range(1000): # 収束条件を満たせば終了 if(abs(a-b)<eps): break # 漸化式 s = (a+b)/2.0 # 収束条件(近似解の変化が十分小さい)を満たせば計算終了 if(f(s) * f(a)<0): b = s # グラフにプロット xxx = np.append(xxx,b) yyy = np.append(yyy,0) xxx = np.append(xxx,b) yyy = np.append(yyy,f(b)) else: a = s # グラフにプロット 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 s # f(x)を描画する xx1 = np.linspace(0.75, 1.75,100) yy1 = f(xx1) plt.plot(xx1,yy1) # 二分法で解をもとめる a = bisection_method(0.0, 2.0, 0.0001) # 1.16595458984375 # 実行結果 print(a) # グラフを表示 plt.grid(True) plt.xlabel('X') plt.ylabel('Y') plt.show() |
実行結果
1 |
1.16595458984375 |