我有一个简单的疑问,我想在Matlab中扩展一个向量:
a = [1 2 3 4 n];
以下列方式:
b = [1 1.5 2 2.5 3 3.5 4 ... n];
这意味着,创建一个具有前一个的双倍大小的新向量,但新添加的值必须是前一个和下一个数字的平均值。
是否有解决此问题的循环?
答案 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)