Функция optimize.minimize, разница в ноутбуке Jupyter и Python? - PullRequest
0 голосов
/ 19 апреля 2019

Я пишу код, который принимает некоторые данные и подгоняет данные, используя модель с 5 неизвестными параметрами.

Я приведу некоторые начальные значения этих параметров.Я минимизирую разницу между данными и моделью (функция chi ^ 2) с помощью функции optimize.minimize для получения наиболее подходящих значений этих параметров.

Я запускаю коды в блокноте Jupyter и скрипте Python.Тем не менее, результаты разные.Блокнот Jupyter дает гораздо лучшую подгонку.В скрипте python соответствие не очень хорошее, и результирующие значения неизвестных параметров, кажется, не сильно меняются от начальных значений (с некоторыми параметрами, остающимися постоянными)

Я попытался просмотреть документацию двухразличные версии функций optimize.minimize, которые установлены в Jupyter (0.19.1) и python (0.18.0).

Я проверил значения аргументов, но они все одинаковы для двух функций (обе установлены мной и значения по умолчанию).

функция правдоподобия:

def ds_lnlike(par, logm, d, d_err):
    logms, ds1, ds2, a1, a2 = par     
    model= np.log(10)*(ds1*10**((a1 + 1)*(logm - logms)) + ds2*10**((a2 +1)*(logm - logms)))/np.e**(10**(logm - logms))
    return -0.5*np.sum(((d-model)**2)/d_err**2)

optimize.minimize:

nll = lambda *args: -model.ds_lnlike(*args) 
result = op.minimize(nll, [logms[j], ds1[j], ds2[j], a1[j], a2[j]], args=(x, y, dy), method='TNC', bounds = ((7,13),(0, 0.1),(0, 0.1), (-2, 4), (-2, -1)), tol=1.0e-4)
logms[j], ds1[j], ds2[j], a1[j], a2[j] = result["x"]

начальные значения: 10.7 1.0e-3 0.5e-3 -0.5 -1.5

значения Jupyter: 1.07708741e+01, 6.59697230e-03, 9.48211306e-04, -3.37329546e-01, -1.57843904e+00

значения Python: 10.699999999999999, 0.0062248066587528919, 0.0012695745516126539, -0.5, -1.5

...