Найдите определенное root с ограничениями на несколько переменных - PullRequest
0 голосов
/ 06 мая 2020

Я ищу альтернативное решение для следующего скрипта (где 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, но не смог найти способ использовать его с границами для нескольких переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...