import numpy as np
import matplotlib.pyplot as plt
## パラメータを設定する。
a = 4
b = 7
c = 2
## 関数を定義する。
def f(x):
return -x*(x-a)*(x-b)*(x-c)
## グリッド数 10
x0 = np.linspace(0,8, 10) # 0から8までを10個に区切ってxをつくる。
fx_max0 = np.max(f(x0)) # f(x)の最大の値
ind_max0 = np.argmax(f(x0)) # f(x)の最大値のインデックス
x_max0 = x0[ind_max0] # そのインデックスのxが求めたい値
print("グリッド数10")
print(f"最大のf(x): {f(x_max0)}")
print(f"最大のf(x)をもたらすx: {x_max0}")
## グリッド数 100
x1 = np.linspace(0,8, 100) # 0から8までを100個に区切ってxをつくる。
fx_max1 = np.max(f(x1)) # f(x)の最大の値
ind_max1 = np.argmax(f(x1)) # f(x)の最大値のインデックス
x_max1 = x1[ind_max1] # そのインデックスのxが求めたい値
print("グリッド数100")
print(f"最大のf(x): {f(x_max1)}")
print(f"最大のf(x)をもたらすx: {x_max1}")
plt.plot(x0,f(x0), "-", color="blue", alpha=0.5, label="10 grids")
plt.plot(x_max0, f(x_max0), "*", color="blue", markersize=10)
plt.plot(x1,f(x1), "--", color="green", alpha=0.5, label="100 grids")
plt.plot(x_max1, f(x_max1), "^", color="green", markersize=10)
plt.legend()
plt.show()