用Matlab实现两个向量的for循环相乘
有一个非常基本的Matlab问题,我在这里遗漏了。我的实际应用程序与此大不相同,但下面的简化示例概述了我遇到的问题用Matlab实现两个向量的for循环相乘,matlab,loops,multiplication,Matlab,Loops,Multiplication,有一个非常基本的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(it
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
假设我不想对这个实现进行矢量化,那么如何从两个向量中有选择地相乘两个aribitrary索引呢?上面的代码将抛出以下错误,因为partialSum不是我想要的累积标量
In an assignment A(:) = B, the number of elements in A and B must be the same.
最终,我要做的是任意索引到每个向量x
和y
,计算等于两个标量乘积的scalar
结果,并保持一个运行总和
有什么想法吗 为循环尝试两个嵌套的
:
for i=1:5
for j=1:5
partialSum = partialSum + x(i)*h(j);
end
end
您的代码在i
的每次迭代中分配j=1:5
。(描述部分的第一句描述了这种用法)
编辑:增加两个变量
如果两个变量在同一个循环中递增,则使用一个循环向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
尝试两个嵌套的循环:
for i=1:5
for j=1:5
partialSum = partialSum + x(i)*h(j);
end
end
您的代码在i
的每次迭代中分配j=1:5
。(描述部分的第一句描述了这种用法)
编辑:增加两个变量
如果两个变量在同一个循环中递增,则使用一个循环向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
我认为您只需要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
编辑2:最通用的选项
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个索引变量:
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
编辑2:最通用的选项
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
这就是我想要做的,除了我希望j
和I
在每次迭代时都递增。好的,我最初的问题正是你所说的关于循环的第二个变量。我能够识别出一种模式,可以用来将实现简化为单个循环。我是从我的c型循环构造中提取出来的。这就是我想要做的,除了我希望j
和I
在每次迭代中都增加。好吧,我最初的问题正是你所说的关于循环的第二个变量。我能够识别出一种模式,可以用来将实现简化为单个循环。我是从我的c型环阵型中抽出来的。对于这个例子。如果i
不等于j
,那怎么办呢?你可以让第二个索引成为你想要的i的任何函数,2*i
,i^2
…除非真的没有模式,否则应该有一种方法可以实现。在这种情况下。如果i
不等于j
,那怎么办呢?你可以让第二个索引成为你想要的i的任何函数,2*i
,i^2
…除非真的没有模式,否则应该有办法实现它。