【发布时间】:2018-04-17 16:27:52
【问题描述】:
我期待用 3 个参数(x1、x2 和 x3)最小化非线性函数
我的信息来源是:
最小化函数的解释: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
他们提供了一个例子: https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html
我不属于数学领域,所以如果我使用了不正确的措辞/表达方式,请先原谅我。
这是我的代码:
import numpy as np
from scipy.optimize import minimize
def rosen(x1,x2,x3):
return np.sqrt(((x1**2)*0.002)+((x2**2)*0.0035)+((x3**2)*0.0015)+(2*x1*x2*0.015)+(2*x1*x3*0.01)+(2*x2*x3*0.02))
我认为第一步到这里还不错..
然后需要说明:
x0 : ndarray
Initial guess. len(x0) is the dimensionality of the minimization problem.
鉴于我在最小化函数中声明了 3 个参数,我将声明一个 3 dim 数组,例如这样?
x0=np.array([1,1,1])
res = minimize(rosen, x0)
print(res.x)
不想要的输出是:
rosen() missing 2 required positional arguments: 'x2' and 'x3'
我不太明白我应该在哪里陈述位置参数。
除此之外,我想为x1,x2,x3 的输出值设置一些界限。
我试过了
res = minimize(rosen, x0, bounds=([0,None]),options={"disp": False})
还有哪些输出:
ValueError: length of x0 != length of bounds
那么我应该如何表达res 内的界限呢?
所需的输出只是根据函数的最小值为x1,x2,x3 输出一个数组,其中每个值都是最小值 0,如边界中所述,并且args 加起来为 1。
【问题讨论】: