在"矢量化"中实现序列的求和在MATLAB中使用form而不是使用循环

时间:2014-03-04 18:22:53

标签: matlab sum vectorization

当我实现系列的总和时,例如:

squared error cost function

我使用循环,如下所示:

H=f(x);
C0=0;
for i=1:p
    C0=C0+((y(i) - H(i))^2);    %//H and Y are vectors of the same size. The function f(x) makes sure of this
end

C1=0;
for j=1:m
    C1=C1+(L(j)*(w(j).^2));
end

C=C0+C1

previous SO question我询问了一个不同的求和系列,有人提到完全摆脱循环并使用矩阵运算。然后他们给我提供了一个“矢量化”版本。他们为我提供的代码工作得很好,但我不知道他们是如何根据我提供的总和系列方程式得出的。

一般来说,如何在没有循环的情况下在MATLAB中实现求和系列?

我可以学习哪些一般规则,所以将来我可以用矢量化形式实现任何求和系列?

谢谢!

1 个答案:

答案 0 :(得分:3)

我会跳过第一个循环,因为我不确定它是如何工作的( - >评论)并解释第二个循环的矢量化:

C1=0;
for j=1:m
    C1=C1+(L(j)*(w(j).^2));
end

代码有什么作用?

  1. 平衡w
  2. 的每个元素
  3. 将结果与L
  4. 中的对应元素相乘
  5. 得到结果的总和。
  6. 要找到正确的操作,您必须知道有矩阵运算(*^ ...)和逐元素运算(.*,{{1} } ...)。如果您不知道已使用的操作,请键入.^

    第一步:使用doc *

    完成元素的平方
    .^

    现在与L

    中的相应元素相乘
    w.^2
    

    并得到结果向量的总和:

    L.*(w.^2)