【发布时间】:2017-01-13 12:45:46
【问题描述】:
我尝试使用拉格朗日乘数优化函数,并尝试循环遍历该函数以获取数字列表,但出现错误
ValueError: setting an array element with a sequence.
这是我的代码,我哪里出错了?如果 n 不是数组,我可以正确得到结果
import numpy as np
from scipy.optimize import fsolve
n = np.arange(10000,100000,10000)
def func(X):
x = X[0]
y = X[1]
L = X[2]
return (x + y + L * (x**2 + y**2 - n))
def dfunc(X):
dLambda = np.zeros(len(X))
h = 1e-3
for i in range(len(X)):
dX = np.zeros(len(X))
dX[i] = h
dLambda[i] = (func(X+dX)-func(X-dX))/(2*h);
return dLambda
X1 = fsolve(dfunc, [1, 1, 0])
print (X1)
非常感谢您的帮助,非常感谢您
【问题讨论】:
-
能否给出出现此错误的行号?
-
我不确定您要做什么,但您的表达式
(func(X+dX)-func(X-dX))/(2*h)返回一个数组,您正尝试将其插入一维数组dLambda。 -
错误在这一行 21, 在
X1 = fsolve(dfunc, [1, 1, 0]) -
@periphreal 最初,n 只是一个数字,所以我可以通过打印(X1)得到一个包含三个数字的数组,现在我试图将 n 更改为数字列表,但它没有工作
标签: python numpy optimization