Я ищу альтернативное решение для следующего скрипта (где sp и ep - это два массива, определенные ранее, а ys - значение с плавающей запятой):
for alfa in [0.20, 0.25, 0.30, 0.40, 0.50, 0.60, 0.75, 0.80]:
def err(x):
C, e0, m, ss, si, a, p = x
HS = ((1-alfa)*C*((ep+e0)**m))+alfa*(ss-((ss-si)*np.exp(-a*(ep**p))))
return np.sum((HS-sp)**2)
#variables bounds:
lime0=(0.001, 0.05)
limm=(0,0.6)
limC=(ys*1.8,ys*2.5)
limp=(0.4,1.5)
limss=(ys*1.5,None)
limsi=(ys*0.8,ys*1.2)
lima=(0,30)
bd=(limC,lime0,limm,limss,limsi,lima,limp)
guess = (10, 0.001,0.3,1000,1000,15,1)
res = minimize(err, guess ,method='TNC',bounds=bd)
C, e0, m, ss, si, a, p = res.x
Я хотел бы получить сумму всех ((HS-sp)**2)
для каждого значения «alfa», а затем найдите, какие значения должны быть у переменных, сохраняя наложенные границы, чтобы получить предыдущую сумму = 0.
В Excel я установил решатель, поместив сумму в качестве цели и параметр, который должен быть = 0. Я хотел бы получить тот же результат с python.
Я думал использовать optimize. root, но не смог найти способ использовать его с границами для нескольких переменных.