【问题标题】:Creating determinant function for optimization in SciPy在 SciPy 中为优化创建行列式函数
【发布时间】:2019-01-28 17:38:22
【问题描述】:

我正在尝试学习如何使用 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)

【问题讨论】:

  • det是python函数,det(x)是对det函数的调用,将x作为参数,所以det(x)被理解为返回值。试试minimize(det, x0, ...)
  • 抱歉 xdze2 我们同时发帖...
  • @jtlz2 没问题,其实还是贴个答案比较好

标签: python scipy


【解决方案1】:

您是否尝试过以下方法?

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2020-11-25
    • 2016-07-24
    • 1970-01-01
    • 2017-02-08
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多