Octave支持几种一维插值方法,大多数方法将在本节中介绍。Polynomial Interpolation和Interpolation on Scattered Data描述其他方法。
yi =
interp1 (x, y, xi)
¶yi =
interp1 (y, xi)
¶yi =
interp1 (…, method)
¶yi =
interp1 (…, extrap)
¶yi =
interp1 (…, "left")
¶yi =
interp1 (…, "right")
¶pp =
interp1 (…, "pp")
¶一维插值。
插入输入数据以确定的值yi在点上xi如果没有指定,x被视为的指数y(1:length (y)
). 如果y是矩阵或N维射线,对的每列执行插值y.
插值method是其中之一:
"nearest"
返回最近的邻居。
"previous"
返回上一个邻居。
"next"
返回下一个邻居。
"linear"
(default)最近邻居的线性插值。
"pchip"
分段三次Hermite插值多项式——一阶导数光滑的保形插值。
"cubic"
三次插值(与"pchip"
).
"spline"
三次样条插值——平滑贯穿曲线的一阶导数和二阶导数。
将“*”添加到上述任何方法的开头interp1
假设x均匀间隔,且仅x(1)
和x(2)
被引用。这通常更快,而且永远不会更慢。默认方法为"linear"
.
如果extrap是字符串"extrap"
,然后使用当前method如果extrap为anumber,则用该数字替换端点之外的值。当未指定时,extrap默认为NA
.
如果字符串参数"pp"
则xi不应提供,并且interp1
返回一个分段多项式对象。此对象以后可以与一起使用ppval
以评估插值。有一个等价物,这样ppval(interp1(x,y, method,
.
"pp"
), xi)==interp1(x,y, xi, method, "extrap"
)
中的重复点x指定不连续的插入剂。最多可以有2个具有相同值的连续点。如果x正在增加,默认的不连续插入点是右连续的。如果x正在减少,默认的间断插入保持连续。插入装置的连续性条件可以通过使用参数来指定"left"
或"right"
以分别选择左连续插入物或右连续插入物。不连续插值只允许用于"nearest"
和"linear"
方法;在所有其他情况下x-值必须是唯一的。
的使用示例interp1
是
xf = [0:0.05:10]; yf = sin (2*pi*xf/5); xp = [0:10]; yp = sin (2*pi*xp/5); lin = interp1 (xp, yp, xf); near = interp1 (xp, yp, xf, "nearest"); pch = interp1 (xp, yp, xf, "pchip"); spl = interp1 (xp, yp, xf, "spline"); plot (xf,yf,"r", xf,near,"g", xf,lin,"b", xf,pch,"c", xf,spl,"m", xp,yp,"r*"); legend ("original", "nearest", "linear", "pchip", "spline");
详见: pchip, spline, interpft, interp2, interp3, interpn.
各种插值方法之间有一些重要的区别。这个"spline"
方法强制插值的一阶导数和二阶导数都具有连续导数,而其他方法则没有。这意味着的结果"spline"
方法通常更平滑。如果要插值的函数实际上是光滑的,那么"spline"
会取得优异成绩。然而,如果要评估的函数在某种程度上是不连续的,那么"pchip"
插值可能会给出更好的结果。
这可以通过代码来证明
t = -2:2; dt = 1; ti =-2:0.025:2; dti = 0.025; y = sign (t); ys = interp1 (t,y,ti,"spline"); yp = interp1 (t,y,ti,"pchip"); ddys = diff (diff (ys)./dti) ./ dti; ddyp = diff (diff (yp)./dti) ./ dti; figure (1); plot (ti,ys,"r-", ti,yp,"g-"); legend ("spline", "pchip", 4); figure (2); plot (ti,ddys,"r+", ti,ddyp,"g*"); legend ("spline", "pchip");
图29.1:的比较"pchip"
和"spline"
astep函数的插值方法
图29.2:的二阶导数的比较"pchip"
和"spline"
阶跃函数的插值方法
傅立叶插值是一种重采样技术,将信号转换到频域,用零填充,然后再转换到时域。
y =
interpft (x, n)
¶y =
interpft (x, n, dim)
¶傅立叶插值。
如果x是向量,那么x使用重新采样n点。中的数据x假定是等距的。如果x是矩阵或N维数组,对的每列执行插值x.
如果dim指定,然后按尺寸插入dim.
interpft
假设插值函数是周期性的,并对插值的端点进行假设。
详见: interp1.
傅立叶插值有两个显著的局限性。首先,假设函数信号是周期性的,因此非周期性信号在边缘处表现不佳。其次,信号及其插值都需要在等空间点进行采样。的使用示例interpft
是
t = 0 : 0.3 : pi; dt = t(2)-t(1); n = length (t); k = 100; ti = t(1) + [0 : k-1]*dt*n/k; y = sin (4*t + 0.3) .* cos (3*t - 0.1); yp = sin (4*ti + 0.3) .* cos (3*ti - 0.1); plot (ti, yp, "g", ti, interp1 (t, y, ti, "spline"), "b", ... ti, interpft (y, k), "c", t, y, "r+"); legend ("sin(4t+0.3)cos(3t-0.1)", "spline", "interpft", "data");
这证明了傅立叶插值对非周期函数的不良行为,如中所示图29.3.
图29.3:的比较interp1
和interpft
对于非周期性数据
此外,支持函数spline
和lookup
的基础interp1
函数可以直接调用。
pp =
spline (x, y)
¶yi =
spline (x, y, xi)
¶返回点的三次样条插值x和y.
当使用两个参数调用时,返回分段多项式pp可以与一起使用ppval
以在特定点处多项式求值。
当用第三输入自变量调用时,spline
计算点处的样条曲线xi.第三种呼叫形式spline (x, y, xi)
相当于ppval (spline (x, y), xi)
.
变量x必须是长度的向量n.
y可以是向量或数组。如果y是一个向量,它的长度必须为n或n + 2
。如果的长度y是n,然后"not-a-knot"
使用结束条件。如果的长度y是n + 2
,然后是向量的第一个值和最后一个值y是三次样条曲线在端点处的一阶导数的值。
如果y是一个数组,那么的大小y必须具有表单[s1, s2, …, sk, n]
或[s1, s2, …, sk, n + 2
。数组内部被重塑为矩阵,其中前导尺寸从s1 * s2 * … * sk
然后将该矩阵的每一行分别处理。请注意,这恰好与相反interp1
但已经结束了MATLAB兼容性。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2