gpt4 book ai didi

python - 为什么 scipy.optimize.curve_fit() 在拟合函数中使用定义数量的参数时表现更好?

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:28 32 4
gpt4 key购买 nike

我正在尝试将任意长度的多项式函数拟合到某些粒子数据,并且我注意到当拟合函数的参数被明确指定而不是提供未定义数量的参数时, curve_fit() 的性能要好得多,即

import scipy.optimize as optimize


def fit(x, a, b):
return a + b*x

my_fit = optimize.curve_fit(fit, x_data, y_data)

性能比

好得多
import scipy.optimize as optimize
import numpy as np


def fit(x, *args):
return np.sum([arg * x**i for i, arg in enumerate(args)])

my_fit = optimize.curve_fit(fit, x_data, y_data, p0=[1, 1])

以下是使用我自己的数据时的拟合比较:

Fitting with *args and explicit coefficients comparison

有人对这种行为有任何解释吗?

最佳答案

它的工作原理实际上是相同的,问题是 fit 的第二个定义不适用于 numpy 数组,因为 np.sum 将始终产生单个数字。只需指定轴即可工作:

import scipy.optimize as optimize

def fit(x, a, b):
return a + b*x

def fit2(x, *args):
return np.sum([arg * x**i for i, arg in enumerate(args)], axis=0)


x_data = np.linspace(-0.3, 0.3, 200)
y_data = x_data * 1000 + np.random.normal(size=x_data.shape[0], scale=20)

my_fit = optimize.curve_fit(fit, x_data, y_data, p0=[1, 1])
my_fit2 = optimize.curve_fit(fit2, x_data, y_data, p0=[1, 1])

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5))
ax1.scatter(x_data, y_data, alpha=0.5, color='red')
ax1.plot(x_data, fit(x_data, my_fit[0][0], my_fit[0][1]), color='k')
ax2.scatter(x_data, y_data, alpha=0.5, color='red')
ax2.plot(x_data, fit2(x_data, my_fit2[0][0], my_fit2[0][1]), color='k')

enter image description here

关于python - 为什么 scipy.optimize.curve_fit() 在拟合函数中使用定义数量的参数时表现更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170734/

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