gpt4 book ai didi

python - 具有正弦波纹的 n 阶多项式的曲线拟合

转载 作者:行者123 更新时间:2023-11-28 17:56:48 25 4
gpt4 key购买 nike

我正在为特定测量设备中的测量误差建模。 data 是这样的外观:低频多项式上的高频正弦纹波。我的模型也应该捕捉到涟漪。

拟合误差的曲线应为以下形式:error(x) = a0 + a1*x + a2*x^2 + ... an*x^n + Asin(x/lambda) 。多项式的 n 阶未知。我的计划是从 1-9 迭代 n 并选择具有最高 F-value 的那个.

我玩过 numpy.polyfitscipy.optimize.curve_fit迄今为止。 numpy.polyfit仅适用于多项式,因此虽然我可以生成“最佳拟合”多项式,但无法确定正弦项的参数 A 和 lambda。 scipy.optimize.curve_fit如果我已经知道 error(x) 的多项式部分的多项式阶数,效果会很好。

有没有巧妙的方法同时使用 numpy.polyfitscipy.optimize.curve_fit完成这个?还是另一个库函数?

这是我如何使用 numpy.polyfit 的代码选择最佳多项式:

def GetErrorPolynomial(X, Y):

maxFval = 0.0
for i in range(1, 10): # i is the order of the polynomial (max order = 9)
error_func = np.polyfit(X, Y, i)
error_func = np.poly1d(error_func)

# F-test (looking for the largest F value)
numerator = np.sum(np.square(error_func(X) - np.mean(Y))) / i
denominator = np.sum(np.square(Y - error_func(X))) / (Y.size - i - 1)
Fval = numerator / denominator

if Fval > maxFval:
maxFval = Fval
maxFvalPolynomial = error_func

return maxFvalPolynomial

这是我如何使用 curve_fit 的代码:

def poly_sine_fit(x, a, b, c, d, l):
return a*np.square(x) + b*x + c + d*np.sin(x/l)

param, _ = curve_fit(poly_sine_fit, x_data, y_data)

它被“硬编码”为二次函数,但我想选择“最佳”顺序,就像我在上面使用 np.polyfit 所做的那样

最佳答案

我终于找到了一种对涟漪建模的方法,并且可以回答我自己的问题。这2006 paper对类似于我的数据集的涟漪进行曲线拟合。

首先,我进行了最小二乘多项式拟合,然后从原始数据中减去这条多项式曲线。这给我留下的只是涟漪。应用傅里叶变换,我挑选出让我重建正弦波纹的主要频率。然后我简单地将这些波纹添加到我一开始获得的多项式曲线中。做到了。

关于python - 具有正弦波纹的 n 阶多项式的曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852522/

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