我需要创建一个函数,通过最小化卡方误差来优化参数beta。你知道吗
我的公式是误差=vg(r)+(beta/3)*H/(1+z)rdelta(r)
我有vg(r)、delta(r)和r本身的数据。H和z是已知的参数,我可以猜测beta版,但我不知道如何在python中实现这一点。你知道吗
我是python新手,需要一些帮助
我试过用scipy.优化.最小化功能,但似乎无法让它工作。你知道吗
import numpy as np
from scipy import optimize as opt
import math
#parameters
z = 1.05352
bias = 1.85
h = 0.676
Om = 0.31
Ol = 1.-Om
pi = math.pi
H = 1.1
#beta = 0.47663662075855323
# ^this is a guess, I need this parameter optimized
def veldif(vr, delta):
model = -beta/3*H/(1+z)**delta
d = np.power((vr-model),2)
quotient = np.divide(d ,model)
chisquare = np.sum(quotient)
return chisquare
result = opt.minimize(veldif,beta)
预期结果:优化的beta值(标量)
实际结果:error(似乎是通过“veldif”函数传递值的错误,以及“veldif”函数的语法错误。你知道吗
现在还不太清楚你的
r, vg(r), delta(r)
是什么,你是如何访问它们的。但是,您的代码片段缺少beta
的初始猜测,它应该是目标函数的变量veldif
,而不是vr
(如果您正在搜索最佳beta)。至于vg(r) and delta(r)
;您可以将这两个函数定义为将r
作为输入并返回关联值的函数。具体操作如下:有关如何使用
scipy.optimize.minimize
的更多信息,请参阅docs。你知道吗相关问题 更多 >
编程相关推荐