** Мне нужно минимизировать функцию «энергия» (код ниже) двух переменных - лямда, бета.Другие параметры известны.Лямда и бета также ограничены (лямда> 0, бета> 0).После запуска появляется ошибка «Требуемая ошибка не обязательно достигается из-за потери точности».В чем может быть ошибка?**
def energy(params):
lamda, beta = params
def t_kinetic_in(r):
return C_kin * 4 * np.pi * r**2 * (a * (1 - 0.625*np.exp(-lamda * (R - r)) + 0.4 * (np.sin(beta * (R - r)) +
np.sin(2 * kf * (R - r))) / (R - r) )) ** 5/3
def t_kinetic_ex(r):
return C_kin * 4 * np.pi * r**2 * (np.exp(-lamda * (r - R))) ** 5/3
#electrostatic energy for electron-electron interaction
def w_electron_in(r):
return 8/3 * np.pi**2 * r**4 * (a * (1 - 0.625*np.exp(-lamda * (R - r)) + 0.4 * (np.sin(beta* (R - r)) +\
np.sin(2 * kf * (R - r))) / (R - r) )) ** 2.0
def w_electron_ex(r):
return 8/3 * np.pi**2 * r**4 * (np.exp(-lamda * (r - R)))**2.0
#electrostatic energy for ion-electron interaction
def v_ion_in(r):
return -8/3 * np.pi**2 * r**4 * (a * (1 - 0.625*np.exp(-lamda * (R - r)) + 0.4 * (np.sin(beta * (R - r)) + \
np.sin(2 * kf * (R - r))) / (R - r) ))**2.0
def v_ion_ex(r):
return -8/3 * np.pi**2 * r ** 4 * (np.exp(-lamda * (r - R))) ** 2.0
#LDA version for homogenious
def vxc_in_2(r):
return 4 * np.pi * r**2 * (-3/4 * (3/np.pi)**(1/3) * (a * (1-0.625*np.exp(-lamda*(R-r))+\
0.4*(np.sin(beta*(R-r))/(R-r)+np.sin(2*kf*(R-r))/(R-r))))**(4/3) - 0.056 * (a * (1-0.625*np.exp(-lamda*(R-r))+\
0.4*(np.sin(beta*(R-r))/(R-r)+np.sin(2*kf*(R-r))/(R-r))))**(4/3) / (0.079 + (a * (1-0.625*np.exp(-lamda*(R-r))+\
0.4*(np.sin(beta*(R-r))/(R-r)+np.sin(2*kf*(R-r))/(R-r))))**(1/3)))
def vxc_ex_2(r):
return 4 * np.pi * r**2 * (-3/4 * (3/np.pi)**(1/3) * (np.exp(-lamda*(r-R)))**(4/3) - 0.056 * (np.exp(-lamda*(r-R)))**(4/3)\
/ (0.079 + (np.exp(-lamda*(r-R)))**(1/3)))
return integrate.quad(t_kinetic_in, 0, R )[0] + integrate.quad(t_kinetic_ex, R, 10000 )[0] + \
0.5*integrate.quad(w_electron_in, 0, R )[0] + 0.5*integrate.quad(w_electron_ex, R, 10000)[0] + \
integrate.quad(v_ion_in, 0, R )[0] + integrate.quad(v_ion_ex, R, 10000)[0] + \
integrate.quad(vxc_in_2, 0, R )[0] + integrate.quad(vxc_ex_2, R, 10000)[0]
initial_guess = [1.57, 0.008]
result = optimize.minimize(energy, initial_guess)
if result.success:
fitted_params = result.x
print(fitted_params)
else:
raise ValueError(result.message)