在 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 值将替换为其邻居的平均值。
我有一个简单的疑问,我想在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 值将替换为其邻居的平均值。