如何将反锯齿函数拟合到曲线或图上?

时间:2019-06-06 17:11:02

标签: python python-3.x scipy curve-fitting scipy-optimize

我有一个图应该是锯齿波。

我正在尝试将锯齿方程式(如wiki所示)拟合到数据点,但我无法这样做。

n_step_list = [-500, -400, -300, -200, -100, 0, 100, 200, 300, 400, 500]
value_list =  [-24, 73, 55, 36, 18, 0, -18, 79, 61, 43, 24]

def f(x, A, fi):
    total_sum = 0
    i = 1
    while i < 151:
        total_sum += np.power(-1, i) * np.sin(2 * np.pi * i * fi * x) / i
        i += 1

    total_sum *= 2 * A / np.pi

    return total_sum

A, fi = curve_fit(f, n_step_list, value_list, (10000000000000, 28))[0]

但是我得到荒谬的结果。最初的猜测是,我使用一个值(-100、18)提供给curve_fit,并尝试计算A和fi的值。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这里是使用scipy的锯齿波形发生器和scipy的differential_evolution遗传算法给出的初始参数估计的钳工。代码中所引用的参数“ width”是特定于锯齿波发生器的,确定波形是上升,下降还是对称,并根据scipy文档确定范围是0到1。

enter image description here

super(itemView)