物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python scipyのfsolveで任意の方程式の解を求める

任意の方程式の解、つまり 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()