试图为多个噪声正弦波找到一条最佳拟合线

2024-10-01 11:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为多个噪声正弦波创建一个平均跟踪线/最佳拟合线。这是我生成的创建正弦波的代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import leastsq



x = np.arange(0,10,.05)
noise = np.random.normal(0,.05,200)
wave = np.sin(x)
y = noise + wave

noise2 = np.random.normal(0,.05,200)
y2 = noise2 + wave

noise3 = np.random.normal(0,.05,200)
y3 = noise3 + wave


plt.plot(x, y)
plt.plot(x, y2)
plt.plot(x, y3)
plt.xlabel('x-axis')
plt.ylabel('y-axis')

plt.show()

当我在网上/这个网站上搜索建议时,我遇到的问题是大多数人都在为一组数据点创建最适合的行,而不是多行。在

如有任何建议,将不胜感激,谢谢!在

到目前为止,我一直在努力:

^{pr2}$

但这不管用,我想是因为月经停止了。在


Tags: importplotasnppltrandomwavenormal
1条回答
网友
1楼 · 发布于 2024-10-01 11:30:13

有几种方法可以做到这一点。以下是我认为最简单的实现方法。在

首先,让我们定义一个接受元组(a, b, c)的函数,并找到每个y, y1, y2a*sin(b*x+c)的拟合之和。在

def f(params):
    y_hat = params[0] * np.sin(params[1] * x + params[2])
    return np.linalg.norm(y_hat - y) + np.linalg.norm(y_hat - y2) + np.linalg.norm(y_hat - y3)

这样,我们可以调用^{}

^{pr2}$

要进行健全性检查,请尝试解决方案([ 0.99811506, -1.00102866, 3.14393633]):

>> plot(0.99811506 * sin(-1.00102866 * x + 3.14393633))

enter image description here

与嘈杂的数据相比:

enter image description here

相关问题 更多 >