gpt4 book ai didi

python - 修复 curve_fit 中的拟合参数

转载 作者:行者123 更新时间:2023-11-30 22:24:12 25 4
gpt4 key购买 nike

我有一个函数Imaginary,它描述了物理过程,我想将其拟合到数据集x_interpolate, y_interpolate。该函数是洛伦兹峰值函数的一种形式,我有一些用户给定的初始值,除了我使用峰值查找算法找到的 f_peak(峰值位置)。除偏移量外,所有拟合参数均应为正值,因此我相应地设置了 bounds_I

def Imaginary(freq, alpha, res, Ms, off):
numerator = (2*alpha*freq*res**2)
denominator = (4*(alpha*res*freq)**2) + (res**2 - freq**2)**2
Im = Ms*(numerator/denominator) + off
return Im

pI = np.array([alpha_init, f_peak, Ms_init, 0])

bounds_I = ([0,0,0,0, -np.inf], [np.inf,np.inf,np.inf, np.inf])

poptI, pcovI = curve_fit(Imaginary, x_interpolate, y_interpolate, pI, bounds=bounds_I)

在某些情况下,我想在拟合过程中保持参数f_peak固定。我尝试了一个简单的解决方案,将 bounds_I 更改为:

bounds_I = ([0,f_peak+0.001,0,0, -np.inf], [np.inf,f_peak-0.001,np.inf, np.inf])

出于多种原因,这不是执行此操作的最佳方法,因此我想知道是否有更 Pythonic 的方法来执行此操作?谢谢您的帮助

最佳答案

如果参数是固定的,那么它并不是真正的参数,因此应该将其从参数列表中删除。定义一个模型,将该参数替换为固定值,并对其进行拟合。下面的示例为简洁起见而进行了简化并且是独立的:

x = np.arange(10)
y = np.sqrt(x)
def parabola(x, a, b, c):
return a*x**2 + b*x + c

fit1 = curve_fit(parabola, x, y) # [-0.02989396, 0.56204598, 0.25337086]
b_fixed = 0.5
fit2 = curve_fit(lambda x, a, c: parabola(x, a, b_fixed, c), x, y)

第二次调用 fit 返回[-0.02350478, 0.35048631],它们是 a 和 c 的最优值。 b的值固定为0.5。

当然,该参数也应该从初始向量 pI 和边界中删除。

关于python - 修复 curve_fit 中的拟合参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47884910/

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