如何用多项式对这些信号数据进行插值?

How to interpolate those signal data with a polynomial?

我试图在 R 中找到多项式的系数,但我不确定多项式的阶数。

我有数据:

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

现在我想找到满足所有这些点的(显然)非线性函数。函数值应该还在区间[-1,1],所有这些点应该理解为抛物线的顶点

编辑

实际上这不是示例数据,我只需要这个函数来精确地处理这些点。

我试着用25次以下的多项式来描述然后放弃了,用多项式似乎只能近似曲线但不能直接得到它。

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

您的数据具有很强的特征,即它们是从正弦信号中采样的。由于 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)


你的初衷不是不能有多项式,但不能是普通的多项式。普通多项式是无界的。当 x 倾向于 Inf-Inf.

时,它将倾向于 Inf-Inf

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

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

注意,我已经删除了第一个数据,与 "periodic" 方法一样,spline 希望 y 在两端具有相同的值。一旦我们放下第一个数据,y 两边的值都是 1。

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

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