使用Matlab将两个向量乘以for循环

时间:2016-02-09 04:33:24

标签: matlab loops multiplying

我在这里缺少一个非常基本的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.

最终,我要做的是随意索引每个向量xy,计算相当于两个标量的乘积的scalar结果,并保持运行和。

有什么想法吗?

2 个答案:

答案 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描述部分中的第一句描述了这种用法)

编辑:增加两个变量 如果要在同一循环中递增两个变量,请使用一个循环向ij添加偏移量(假设它们可以不同)。如果它们始终相同,只需使用一个变量。

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
相关问题