Создание определяющей функции для оптимизации в SciPy

1

Я пытаюсь научиться использовать 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)
  • 2
    det - это функция Python, det(x) - это вызов функции det передающей x качестве аргумента, поэтому det(x) понимается как возвращаемое значение. Попробуйте с minimize(det, x0, ...)
  • 0
    Извините, xdze2 мы публиковали одновременно ...
Показать ещё 1 комментарий
Теги:
scipy

1 ответ

0
Лучший ответ

Вы уже пробовали следующее?

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])
  • 1
    Благодарю. Это работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню