Если вы не можете решить уравнения для ваших ограничений, и вы можете жить с ограничением, удовлетворяемым некоторым допуском, другая возможность состоит в добавлении термина к хи-квадрату с большим весом, который гарантирует, что ограничение почти доволен.
Например, если вам нужна эта сумма (sin (p [i]) == 1, вы можете сделать следующее:
constraint_func = lambda a: sin(a).sum()-1
def fitfunc (a,x):
np.concatenate((a[0]+a[1]*exp(-x/a[4])+a[2]*exp(-x/a[5])+a[3]*exp(-x /a[6]),
[constraint_func(a)]))
def errfunc(a,x,y):
tolerance = 1e-10
return np.concatenate((fitfunc(a,x) - y, [tolerance]))
Очевидно, что сходимость будет медленнее, но все равно будет гарантирована.