在Matlab中扩展矢量

时间:2017-01-31 17:37:15

标签: matlab vector extend

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

a = [1 2 3 4 n];

以下列方式:

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

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

是否有解决此问题的循环?

3 个答案:

答案 0 :(得分:2)

可能的解决方案

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

答案 1 :(得分: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](即值和值介于之间。如果我们使用'linear'选项,那么中间值将替换为其邻居的平均值。

答案 2 :(得分:0)

没有任何订单假设

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