任意の方程式の解、つまり func(x) = 0
になる x
を探させる。解が複数ある場合も初期値から探索したときに最も近い解を返す。
from scipy.optimize import fsolve import numpy as np # 変数 beta = 0.6955076793404303 ionpair = 4886 # 方程式 func = lambda delE : np.sqrt(delE/(np.log(ionpair*beta**2)-np.log(1-beta**2)-beta**2))*beta-92 # 初期値 initial_guess = 1000 # 解く solution = fsolve(func, initial_guess) # 解 print(solution[0])
139021.52385380902
と出てくるはず。確認のためにグラフを作っておく
x = np.linspace(0,200000) y = func(x) import matplotlib.pyplot as plt plt.plot(x, y) plt.grid(True) plt.xlabel("x") plt.ylabel("y") plt.show()