【问题标题】:Using Matlab to multiply two vectors using a for-loop使用Matlab使用for循环将两个向量相乘
【发布时间】:2016-02-09 04:33:24
【问题描述】:

我在这里遗漏了一个非常基本的 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 结果,并保持运行总和。

有什么想法吗?

【问题讨论】:

    标签: matlab loops multiplication


    【解决方案1】:

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

    【讨论】:

    • 对于这种情况。如果i 不等于j 怎么办?
    • 你可以让第二个索引成为你想要的任何 i 函数,2*ii^2...除非真的没有模式,否则应该有办法让它工作。
    【解决方案2】:

    尝试两个嵌套的for 循环:

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

    您的代码在i 的每次迭代中分配j=1:5。 (for manpageDescription 部分的第一句话描述了这种用法)

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

    【讨论】:

    • 这就是我想要做的,除了我希望 ji 在每次迭代时都增加。
    • 嗯,我最初的问题正是你所说的关于循环的第二个变量。我能够辨别出一种模式,我可以使用它来将实现减少到单个循环。我正在从我的 c-like 循环结构中拉出来。
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2019-08-23
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多