在 Matlab 中扩展矢量

Extend vector in Matlab

我有一个简单的疑问,我想在Matlab中扩展一个向量:

a = [1 2 3 4 n];

通过以下方式:

b = [1 1.5 2 2.5 3 3.5 4 ... n];

这意味着,创建一个新向量,其大小是前一个向量的两倍,但新添加的值必须是前一个和下一个数字的平均值。

有解决这个问题的循环的想法吗?

可能的解决方案

b(1:2:2*numel(a)-1)=a
b(2:2:end) = a(1:end-1)+diff(a)/2

没有任何订单假设

a = [1 2 5 9 17];
d=[diff(a),0]
a2=[a;a+d/2]
b=a2(1:end-1)

您可以使用线性插值法(interp1)来解决这个问题。使用 a 向量,我们可以在每个元素处和每个元素之间插入值。

a = [1 2 3 4 17];

b = interp1(a, linspace(1, numel(a), numel(a) * 2 - 1), 'linear');
%   1   1.5   2   2.5   3   3.5   4   10.5   17 

说明

这是假设您有一个函数 f(x),其中 x = [1 2 3 4 5]f(x) = a。您最终想要的是 f(x) 的值,其中 x = [1 1.5 2 2.5 3 3.5 4 4.5 5] (即值和值 in-between 值。如果我们使用 'linear' 选项,则 in-between 值将替换为其邻居的平均值。