Использование scipy.optimize.minimize дает мне ошибку типа в заголовке, и я не совсем уверен, что не так с моим кодом.
Я проверил пример кода на https://emcee.readthedocs.io/en/v2.2.1/user/line/ и сравнил его с моим собственным, чтобы посмотреть, поможет ли это мне вообще. Я проверил, нашел ли я случайно назвал списки и функционировал одно и то же случайно, а затем перезапустил свой код после перезапуска ядра просто для уверенности, и ничего из этого не сработало. Последнее, что я пробовал, - это проверка, является ли все, что я ввел в функцию минимизации, итерационным, за исключением функции, которую следует вызывать.
import numpy as np
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.optimize import curve_fit
from scipy.optimize import minimize
import scipy.integrate as integrate
import scipy.special as special
%matplotlib inline
data = np.loadtxt('final_06.xy', skiprows = 4)
energy = data[:,0]
print(energy)
e = energy[energy < 250]
Hist = np.histogram(e, bins = 1500)
x = (Hist[1][1:]+Hist[1][:-1])/2
y = Hist[0]
def gaussian(x, a, b, c, d, e):
pi = np.pi
exp = np.exp(-(((x-a)/b)**2)/2)
bot = b*np.sqrt(2*pi)
return((e/bot)*exp+c*x+d)
sela = (x>0)&(x<10)
popta, pcova = curve_fit(gaussian, x[sela], y[sela], [2.6, 0.2, 0.,25., 250])
plt.figure()
plt.plot(x[sela], y[sela])
plt.plot(x[sela], gaussian(x[sela], *popta))
print(popta, np.diag(pcova))
print(popta[1]*2.35482, popta[1]*4.29193)
def Fsi(x, a, b, c):
pi = np.pi
exp = np.exp(-(((x-a)/b)**2)/2)
bot = b*np.sqrt(2*pi)
return((c/bot)*exp)
def Fbi(x, a, b):
return a*x+b
def lgLike(events, n, x, pars):
S, B = events
a, b, c, d, e = pars
L = S*Fsi(x, a, b, e)+B*Fbi(x, c, d)
fac = np.math.factorial(n)
lnl = np.math.log(L)
lnn = np.math.log(fac)
return -1*(np.sum(n*lnl-lnn-L))
LnLike = np.vectorize(lgLike)
S_guess = [0.0]
B_guess = [len(y[sela])]
guesses = [S_guess, B_guess]
print(iter(guesses))
para = minimize(LnLike, guesses, args=(y[sela], x[sela], popta))
Я должен получить какой-то результат для S и B, который был бы моими фактическими начальными параметрами, однако я продолжаю получать сообщение об ошибке «TypeError: 'numpy.float64' объект не повторяется".