【发布时间】: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 没问题,其实还是贴个答案比较好