在阵列中每个元素之间使用MATLAB linspace

在阵列中每个元素之间使用MATLAB linspace,matlab,linear-interpolation,Matlab,Linear Interpolation,使用MATLAB,我想在数组中的每个点之间进行线性插值 使用插值将以非线性方式进行。我想做的是类似于产生低通滤波器系数 我已经想出了一个解决方案,但我希望避免对循环使用: a=[0 0 1 0 0]; %Input matrix N=5; %Number of points to be added b=[]; for i=1:length(a)-1 b=[b linspace(a(i),a(i+1),N)]; end 是否可以在没有循环的情况下执行此操作?您可以创建一个线性样条曲线,其

使用MATLAB,我想在数组中的每个点之间进行线性插值

使用
插值
将以非线性方式进行。我想做的是类似于产生低通滤波器系数

我已经想出了一个解决方案,但我希望避免对循环使用

a=[0 0 1 0 0]; %Input matrix
N=5; %Number of points to be added
b=[];
for i=1:length(a)-1
    b=[b linspace(a(i),a(i+1),N)];
end

是否可以在没有循环的情况下执行此操作?

您可以创建一个线性样条曲线,其中
a
中的点作为控制点。之后,可以指定从开始间隔到结束间隔的任意数量的点。正如Raab70所说,您可以使用
interp1
interp1
可以通过以下方式调用(使用
linear
interpolation):

x
是控制点的
x
值,
y
y
xp
是您要评估函数的点。因为没有明确的
x
值,而只需要
y
值,所以可以创建一个从1到
L
的虚拟向量,其中
L
是输出数据中的点数。此虚拟向量用于
x
值。之后,指定
y
作为输出数据。在本例中,它是
a
的数组。接下来,需要指定沿曲线采样的位置。因为您希望在每个空间之间引入5个点,所以总共有5*4+5=25个点。每个“插槽”5分,共有4个插槽。还包括来自原始输出数据的5个点。要创建这25个点,只需执行从1到5的
linspace
,并指定需要在这段时间间隔内创建25个点。这将完美地捕获控制点(虚拟值
1,2,3,4,5
)以及要用于在每个控制点之间插值的值

因此,请尝试以下方法:

N = 5; %// Number of points to introduce in between each control point
y = [0 0 1 0 0]; %// Your output data
L = numel(y); %// Size of output data. Cache so we don't have to keep typing in numel(y)
x = 1:L; %// Dummy vector
xp = linspace(1, L, N*(L-1) + N); %// Create points to interpolate. N*(L-1) + N is also just N*L
out = interp1(x, y, xp, 'linear'); %// Generate interpolated array
out
因此给了我:

out =

Columns 1 through 9

     0         0         0         0         0         0         0    0.1667    0.3333

Columns 10 through 18

0.5000    0.6667    0.8333    1.0000    0.8333    0.6667    0.5000    0.3333    0.1667

Columns 19 through 25

     0         0         0         0         0         0         0

插值方法是
interp1
的输入。您可以使用
interp1(x,v,xq,'linear')
其中x是采样位置,v是数据,xq是所需的采样位置。有关更多信息,请参阅。我用cmap_rwg=interp1((0:2)/2,[1,0,0;1,1,1,1;0,1,0],(1:100)/100)制作了一个简单的红-白-绿颜色图;
out =

Columns 1 through 9

     0         0         0         0         0         0         0    0.1667    0.3333

Columns 10 through 18

0.5000    0.6667    0.8333    1.0000    0.8333    0.6667    0.5000    0.3333    0.1667

Columns 19 through 25

     0         0         0         0         0         0         0