Я хотел бы написать скрипт подгонки кривой, который позволяет мне фиксировать параметры функции вида:
def func(x, *p):
assert len(p) % 2 == 0
fval = 0
for j in xrange(0, len(p), 2):
fval += p[j]*np.exp(-p[j+1]*t)
return fval
Например, допустим, я хочу p = [p1, p2, p3, p4], и я хочу, чтобы p2 и p3 были постоянными A и B (переход от подбора с 4 параметрами к подгонке с 2 параметрами).Я понимаю, что functools.partial не позволяет мне делать это, поэтому я хочу написать свою собственную обертку.Но у меня немного проблем с этим.Это то, что у меня есть до сих пор:
def fix_params(f, t, pars, fix_pars):
# fix_pars = ((ind1, A), (ind2, B))
new_pars = [None]*(len(pars) + len(fix_pars))
for ind, fix in fix_pars:
new_pars[ind] = fix
for par in pars:
for j, npar in enumerate(new_pars):
if npar == None:
new_pars[j] = par
break
assert None not in new_pars
return f(t, *new_pars)
Проблема с этим, я думаю, в том, что scipy.optimize.curve_fit не будет хорошо работать с функцией, переданной через этот тип оболочки.Как мне обойти это?