Для этих scipy.optimize
функций требуется функция с подписью, подобной
f(x, *args)
x
- это массив (часто 1d), который будет меняться решателем; args
- это кортеж аргументов, которые просто передаются извне.
Измените eqs
, чтобы соответствовать этому шаблону
In [11]: def eqs(X, C, D):
...: A, B = X[:-1], X[-1]
...: eq1 = (A - B * np.sin(C)).tolist()
...: eq2 = [5 * B + D * np.sum(A * np.cos(C))]
...: return eq1 + eq2
...: n = 3
...: A0 = np.random.rand(n)
...: B0 = np.random.rand(1)
...:
...: C = np.random.rand(n)
...: D = np.random.rand(1)
Сделайте пробный вызов eqs
:
In [12]: eqs(np.concatenate((A0,B0)),C,D)
Out[12]:
[-0.28460532658572657,
-0.03649115738682615,
0.7625781482352719,
array([5.46430853])]
Теперь попробуйте это в fsolve
:
In [13]: fsolve(eqs, np.concatenate((A0,B0)), args=(C,D))
Out[13]: array([0., 0., 0., 0.])