С копированием-вставкой вашего кода (включая изменение *coeffs
) я получаю
1135:~/mypy$ python3 stack58206395.py
[ 2. 30.2 15. ]
[45. 56.2 30. ]
Traceback (most recent call last):
File "stack58206395.py", line 24, in <module>
coeffs, cov = leastsq(residual_t, g0, args=(x,y))
File "/usr/local/lib/python3.6/dist-packages/scipy/optimize/minpack.py", line 383, in leastsq
shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
File "/usr/local/lib/python3.6/dist-packages/scipy/optimize/minpack.py", line 26, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
TypeError: residual_t() missing 2 required positional arguments: 'b' and 'c'
То есть ошибка при использовании residual_t
в leastsq
call.
Если я добавлю
residual_t(g0, x, y)
сразу после определения g0
, я получу ту же ошибку:
1136:~/mypy$ python3 stack58206395.py
[ 2. 30.2 15. ]
[45. 56.2 30. ]
Traceback (most recent call last):
File "stack58206395.py", line 23, in <module>
residual_t(g0, x, y)
TypeError: residual_t() missing 2 required positional arguments: 'b' and 'c'
Так что вам нужно определить residual_t
работать с таким звонком. Я не собираюсь делать предположения о том, что вы действительно хотите, поэтому я оставлю исправление на ваше усмотрение.
Просто помните, что residual_t
будет вызываться с x0
, соединенным скортеж args
. Это типичное использование для scipy.optimize
функций. При необходимости просмотрите документы.
edit
Определение функции следующим образом:
def residual_t(abc, x, y):
a,b,c = abc
return y-t(x,a,b,c)
выполняется без ошибок.