gpt4 book ai didi

python - 最小化多变量函数 Python SciPy

转载 作者:行者123 更新时间:2023-12-01 04:37:36 24 4
gpt4 key购买 nike

我正在尝试最小化具有参数 S1S2S3n1 的函数, n2n3。还有权重:w1w2w3

这是函数:

f = (w1**2 * n1**2 + w2**2 * n2**2 + w3**2 * n3**2) / (w1**2 * S1**2 + w2**2 * S2**2 + w3**2 * S3**2 + 2*w1*S1*w2*S2 * 2*w1*S1*w2*S2 + 2*w2*S2*w3*S3)

我想知道给定的 S1S2S3n1n2n3w1w2w3 将使 f 最小化>?

这是我到目前为止的代码:

def opt(S1, S2, S3, n1, n2, n3):
xo = np.array([0,1,.01])
from scipy.optimize import minimize
signoise = lambda w1,w2,w3: (w1**2 * n1**2 + w2**2 * n2**2 + w3**2 * n3**2) / (w1**2 * S1**2 + w2**2 * S2**2 + w3**2 * S3**2 + 2*w1*S1*w2*S2 * 2*w1*S1*w2*S2 + 2*w2*S2*w3*S3)
w1min, w2min, w3min = scipy.optimize.minimize(signoise, (.4, .2, .4))
return w1min, w2min, w3min

scipy.optimize.minimize 采用两个参数,函数和初始猜测。我不知道它是否适用于多变量函数,因为我得到了

error : <lambda>() takes exactly 3 arguments (1 given)

好的,我听从了 CodyKramer 的建议。当我用 S1、S2、S3、n1、n2、n3 的任意值对其进行测试时,我得到了所有这些作为答案: status: 0 success: True njev: 1 nfev: 5 hess_inv: array([[1, 0 , 0], [0, 1, 0], [0, 0, 1]]) fun: 5.1874999894628917e-18 x: array([ 0.4, 0.2, 0.4]) message: '优化已成功终止。' jac: array([ -1.81249989e-17, -4.62499946e-17, 1.53125002e-17]) 最后一行“jac”是我要找的三个数字吗?

最佳答案

问题是,正如你所写的 lambda需要 3 个参数,而不是 1 个参数(这恰好是一个包含 3 个元素的序列)。我会将您的目标函数提取为独立函数

def signoise(w):
w1, w2, w3 = w # unpack your tuple into each variable
# populate your S and n coefficients
return w1**2 * n1**2 + w2**2 * n2**2 + w3**2 * n3**2) / (w1**2 * S1**2 + w2**2 * S2**2 + w3**2 * S3**2 + 2*w1*S1*w2*S2 * 2*w1*S1*w2*S2 + 2*w2*S2*w3*S3

然后你可以修改你的函数

def opt(S1, S2, S3, n1, n2, n3):
xo = np.array([0,1,.01])
from scipy.optimize import minimize
return scipy.optimize.minimize(signoise, (.4, .2, .4))

关于python - 最小化多变量函数 Python SciPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31463732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com