当我实现系列的总和时,例如:
我使用循环,如下所示:
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中实现求和系列?
我可以学习哪些一般规则,所以将来我可以用矢量化形式实现任何求和系列?
谢谢!
答案 0 :(得分:3)
我会跳过第一个循环,因为我不确定它是如何工作的( - >评论)并解释第二个循环的矢量化:
C1=0;
for j=1:m
C1=C1+(L(j)*(w(j).^2));
end
代码有什么作用?
要找到正确的操作,您必须知道有矩阵运算(*
,^
...)和逐元素运算(.*
,{{1} } ...)。如果您不知道已使用的操作,请键入.^
。
第一步:使用doc *
.^
现在与L
中的相应元素相乘w.^2
并得到结果向量的总和:
L.*(w.^2)