gpt4 book ai didi

matlab - 在数组中的每个元素之间使用 MATLAB linspace

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:51 26 4
gpt4 key购买 nike

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

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

我想出了一个解决方案,但我想避免使用 for 循环:

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 所说,您可以使用 interp1interp1 可以通过以下方式调用(使用linear 插值):

out = interp1(x, y, xp, 'linear')

x 是控制点的 x 值,yy 值。 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

关于matlab - 在数组中的每个元素之间使用 MATLAB linspace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com