繁体   English   中英

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

[英]Using Matlab to multiply two vectors using a for-loop

我在这里缺少一个非常基本的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结果,并保持一个连续的和。

任何想法?

我认为您只需要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

尝试两个嵌套的for循环:

for i=1:5
    for j=1:5
        partialSum = partialSum + x(i)*h(j);
    end
end

您的代码在i每次迭代中分配j=1:5 for联机帮助页的“ 描述”部分中的第一句话描述了此用法)

编辑:递增两个变量如果要在同一循环中递增两个变量 ,请使用一个循环为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM