猿问

在 SciPy 中为优化创建行列式函数

我正在尝试学习如何使用scipy.optimize。作为一个热身示例,我试图最小化 2 x 2 矩阵的行列式,其中条目的绝对值限制为 0.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)


牧羊人nacy
浏览 151回答 1
1回答

HUX布斯

您是否尝试了以下方法?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])
随时随地看视频慕课网APP

相关分类

Python
我要回答