Matlab中的扩展向量

Matlab中的扩展向量,matlab,vector,extend,Matlab,Vector,Extend,我有一个简单的疑问,我想在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 可能的解决办法 b(1:2:2*numel(a)-1)=a

我有一个简单的疑问,我想在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
可能的解决办法

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)

没有任何订单上的假设

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.5 2.5 3 3.5 4 4.5]
(即值和值之间的值。如果我们使用
'linear'
选项,则中间的值将替换为其相邻值的平均值。

您可以使用线性插值(
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)
where
x=[12345]
f(x)=a
。你最终想要的是
f(x)
where
x=[1112.533.545]
(即值和介于值之间的值。如果我们使用
“线性”
选项,则介于值之间的值将替换为其相邻值的平均值