[英]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.
最终,我想要做的是任意索引每个向量x
和y
,计算与两个标量的乘积相等的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
联机帮助页的“ 描述”部分中的第一句话描述了此用法)
编辑:递增两个变量如果要在同一循环中递增两个变量 ,请使用一个循环为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.