我在这里缺少一个非常基本的Matlab问题。我的实际应用与此大不相同,但以下简化示例概述了我遇到的问题。
function [x] = test(y,h)
x = zeros(1,5);
for iteration = 1:5
partialSum = 0;
for i=1:5, j=1:5;
partialSum = partialSum + x(i)*h(j);
end
x(iteration) = partialSum;
end
end
假设我不想对此实现进行向量化,如何从两个向量中正确选择性地乘以两个任意索引?上面的代码将抛出以下错误,因为 partialSum 不是我想要的累积标量。
In an assignment A(:) = B, the number of elements in A and B must be the same.
最终,我要做的是随意索引每个向量x
和y
,计算相当于两个标量的乘积的scalar
结果,并保持运行和。
有什么想法吗?
答案 0 :(得分:3)
我认为你只需要1个索引变量:
for i = 1:5
partialSum = partialSum + x(i)*h(i);
end
编辑:如果您需要i和j进行偏移,请尝试以下方法:
offset = 17; % for example
for i = 1:5
partialSum = partialSum + x(i)*h(i+offset);
end
EDIT2:最常用的选项
x_indices = [1 2 17 42 900];
h_indices = [3 7 29 401 1000];
for i = 1:5
partialSum = partialSum + x(x_indices(i))*h(h_indices(i));
end
答案 1 :(得分:1)
尝试两个嵌套的for
循环:
for i=1:5
for j=1:5
partialSum = partialSum + x(i)*h(j);
end
end
您的代码会在j=1:5
的每次迭代中分配i
。 (for
manpage的描述部分中的第一句描述了这种用法)
编辑:增加两个变量
如果要在同一循环中递增两个变量,请使用一个循环向i
和j
添加偏移量(假设它们可以不同)。如果它们始终相同,只需使用一个变量。
i = 1;
j = 1;
for offset=0:4
partialSum = partialSum + x(i + offset) * h(j + offset);
end
for i=1:5
partialSum = partialSum + x(i) * h(i);
end