Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab实现两个向量的for循环相乘_Matlab_Loops_Multiplication - Fatal编程技术网

用Matlab实现两个向量的for循环相乘

用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

有一个非常基本的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
假设我不想对这个实现进行矢量化,那么如何从两个向量中有选择地相乘两个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
…除非真的没有模式,否则应该有办法实现它。