最小化带有 2 个参数的函数
Minimizing function with 2 arguments
我正在尝试最小化具有 2 个参数的函数:
def c_Gamma_gamma_fv(cf, cv):
return np.abs((4 * eta_gamma * charges**2 * a_q * cf).sum() + 4.* cf *a_tau/3. + a_w * cv)**2/Gamma_gamma
def mu_fv(cf, cv):
return np.array([cf**4, cf**2 * cv**2, cf**2 *
c_Gamma_gamma_fv(cf, cv), cv**2 * c_Gamma_gamma_fv(cf, cv), cf**4, cv**2 * cf**2, cf**2 * cv**2,
cv**4, cv**2 * cf**2, cv**4])
def chi_square_fv(cf, cv):
return ((mu_fv(cf, cv) - mu_data) @ inv_cov @ (mu_fv(cf, cv) - mu_data))
x0 = [1., 1.]
res_fv = minimize(chi_square_fv, x0)
但是,我收到错误 "TypeError: chi_square_fv() missing 1 required positional argument: 'cv'"。但是,当我执行以下操作时:
print(chi_square_fv(1.,1.))
我得到输出
38.8312698786
我不明白这一点,而且我是这类程序的新手。我该如何进行? OBS:Gamma_gamma只是代码的一个常量。
由于您没有向我们提供代码中的所有变量值,我不得不猜测。
我认为问题在于你如何传入参数。 x0 = [1.,1.]
将 x0
指定为具有 2 个值的列表,这是一个实体。但是,在您的 chi_square_fv
中,输入是两个单独的值而不是列表。
您可以尝试更改您的 chi_square_fv
功能:
def chi_square_fv(clist):
cf, cv = clist
return ((mu_fv(cf, cv) - mu_data) @ inv_cov @ (mu_fv(cf, cv) - mu_data))
如果你 read docs 最小化你会发现可选的 args
参数(也可以参见@sacha 的评论)
因此,由于您的函数有两个参数,并且您希望最小化其中一个参数,因此您需要为其他参数传递值
minimize(chi_square_fv, x0, args=(cv,))
这会将一些 cv
值作为第二个参数传递给函数 chi_square_fv
我正在尝试最小化具有 2 个参数的函数:
def c_Gamma_gamma_fv(cf, cv):
return np.abs((4 * eta_gamma * charges**2 * a_q * cf).sum() + 4.* cf *a_tau/3. + a_w * cv)**2/Gamma_gamma
def mu_fv(cf, cv):
return np.array([cf**4, cf**2 * cv**2, cf**2 *
c_Gamma_gamma_fv(cf, cv), cv**2 * c_Gamma_gamma_fv(cf, cv), cf**4, cv**2 * cf**2, cf**2 * cv**2,
cv**4, cv**2 * cf**2, cv**4])
def chi_square_fv(cf, cv):
return ((mu_fv(cf, cv) - mu_data) @ inv_cov @ (mu_fv(cf, cv) - mu_data))
x0 = [1., 1.]
res_fv = minimize(chi_square_fv, x0)
但是,我收到错误 "TypeError: chi_square_fv() missing 1 required positional argument: 'cv'"。但是,当我执行以下操作时:
print(chi_square_fv(1.,1.))
我得到输出
38.8312698786
我不明白这一点,而且我是这类程序的新手。我该如何进行? OBS:Gamma_gamma只是代码的一个常量。
由于您没有向我们提供代码中的所有变量值,我不得不猜测。
我认为问题在于你如何传入参数。 x0 = [1.,1.]
将 x0
指定为具有 2 个值的列表,这是一个实体。但是,在您的 chi_square_fv
中,输入是两个单独的值而不是列表。
您可以尝试更改您的 chi_square_fv
功能:
def chi_square_fv(clist):
cf, cv = clist
return ((mu_fv(cf, cv) - mu_data) @ inv_cov @ (mu_fv(cf, cv) - mu_data))
如果你 read docs 最小化你会发现可选的 args
参数(也可以参见@sacha 的评论)
因此,由于您的函数有两个参数,并且您希望最小化其中一个参数,因此您需要为其他参数传递值
minimize(chi_square_fv, x0, args=(cv,))
这会将一些 cv
值作为第二个参数传递给函数 chi_square_fv