如何用多项式对这些信号数据进行插值?
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 = 6
、y = -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)
我没有将样条插值与正弦函数进行比较。它们不可能完全相同,但在统计建模中,我们可以使用其中任何一个来模拟潜在的循环信号/效应。
我试图在 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 = 6
、y = -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)
我没有将样条插值与正弦函数进行比较。它们不可能完全相同,但在统计建模中,我们可以使用其中任何一个来模拟潜在的循环信号/效应。