如何用多项式插值那些信号数据?

时间:2016-09-29 20:55:43

标签: r interpolation trigonometry polynomials

我试图在R中找到多项式的系数,但我不确定多项式的顺序是什么。

我有数据:

x=seq(6, 174, by=8)    
y=rep(c(-1,1),11)

现在我想找到(显然)非线性函数来点击所有这些点。函数值仍应位于[-1,1]区间内,所有这些点都应理解为抛物线的顶点。

enter image description here

修改

实际上这不是示例数据,我只需要确切地说明这些功能。

我试图用多项式来描述它,直到25度,然后放弃,用多项式似乎只能逼近曲线但不能直接得到它。

建议使用正弦曲线。有人知道如何获得精确的三角函数吗?

1 个答案:

答案 0 :(得分:3)

您的数据具有强烈的特征,即它们是从正弦信号中采样的。由于限制y被约束到[-1,1],我们肯定知道幅度是1,所以我们假设我们需要sin函数:

y = sin((2 * pi / T) * x + phi)

其中T是句点,phi是句号。您的数据期限很明显:2 * 8 = 16。要获得phi,只需使用x = 6y = -1时的事实。那是

sin(12 * pi / T + phi) = -1

给出了一个解决方案:phi = -pi/2 - 12 * pi / T

我们走了:

T <- 16
phi <- -pi/2 - 12 * pi / T
f <- function(x) sin(x * pi / 8 + phi)

plot(x, y)
x0 <- seq(6, 174, by = 0.2)
y0 <- f(x0)
lines(x0, y0, col = 2)

enter image description here

你有多项式的初衷并非不可能,但它不能是普通的多项式。普通多项式是无界的。当Inf倾向于-Infx时,它会趋向于Inf-Inf

局部多项式是可能的。既然你说:所有这些点应该被理解为抛物线的顶点,你似乎期望一个平滑的函数。然后三次样条是理想的。具体来说,我们不需要自然的三次样条而是周期的三次样条spline包中的stats函数可以帮助我们:

int <- spline(x[-1], y[-1], method = "periodic", xout = x0)

注意,我已经删除了第一个数据,与“定期”方法一样,spline希望y在两端都具有相同的值。删除第一个数据后,y值均为1。

plot(x, y)
lines(int, col = 2)

enter image description here

我没有将样条插值与正弦函数进行比较。它们不能完全相同,但在统计建模中我们可以使用其中一个模拟基础循环信号/效果