【发布时间】:2022-01-13 21:04:21
【问题描述】:
我有一个多变量函数(代码如下),取决于x1 和x2,我为此函数有一个目标输出值,名为target。我修复了x1,并在外部函数中提供了我的target:find_x2。目标是最小化内部函数error,这只是我的输出目标和结果值est之间的平方距离,相对于x2。
但运行后:
find_x2(target = .12, x1 = 100) 产生x2 = 0.99899,但应该大致是.80。
看起来该函数正在最小化est 而不是x2,但我不明白为什么。任何帮助将不胜感激。
代码:
import numpy as np
from scipy.optimize import minimize_scalar, minimize
def find_x2(x1, target):
def error(x2, x1 = x1, target = target):
k = np.zeros(x1)
V = np.zeros(x1)
for i in range(x1):
try:
k[i-1] = (i/x1)**(-1/x2)
except:
k[x1-1]=1
for i in range(x1):
V[i] = k[i]/sum(k)
est = sum(V**2)
return (target - est)**2
return minimize_scalar(error, bounds = (.001,.999), method = 'bounded')
【问题讨论】:
-
minimize_scalar 的第一个参数应该是
error吗?看起来您正在最小化其他一些功能 -
谢谢,应该是
error,谢谢。我将编辑问题以防止进一步混淆。 -
你能提供一个合理的三元组(x1,x2,目标)吗?我想运行这个
-
x1 = 100,目标 = 0.12 和 x2 = 0.8016846
-
try/except 不像你期望的那样工作——在每个 k 向量的最后一个元素中都有 nan。也许计算为向量,然后使用 numpy.roll 之后移动元素
标签: python optimization scipy