Я пытаюсь научиться использовать scipy.optimize. В качестве яркого примера я пытаюсь свести к минимуму детерминант матрицы 2 на 2 с элементами, ограниченными по абсолютной величине на.5. Я определяю функцию det (x), которая принимает четыре числа, помещает их в квадратный массив numpy и возвращает определитель. Кажется, это работает. Затем, когда я пытаюсь свести к минимуму эту функцию, я получаю сообщение об ошибке "Объективная функция должна возвращать скаляр". Что происходит?
Вот мой код:
n=2
import numpy as np
from scipy.optimize import minimize
def det(x):
A=np.zeros((n,n))
for i in range(n):
for j in range(n):
A[i,j]=x[2*i+j]
return np.linalg.det(A)
x0=[.01,-.01,.02,-.1]
b=(-0.5,0.5)
bnds=[b,b,b,b]
sol=minimize(det(x),x0,method='SLSQP',bounds=bnds)
print(sol)
Вы уже пробовали следующее?
sol=minimize(det,x0,method='SLSQP',bounds=bnds)
->
fun: -0.49999999712754745
jac: array([-0.5, -0.5, -0.5, 0.5])
message: 'Optimization terminated successfully.'
nfev: 42
nit: 7
njev: 7
status: 0
success: True
x: array([ 0.5, 0.5, 0.5, -0.5])
det
- это функция Python,det(x)
- это вызов функцииdet
передающейx
качестве аргумента, поэтомуdet(x)
понимается как возвращаемое значение. Попробуйте сminimize(det, x0, ...)