我有一个关于matlab的(初学者)问题。我尝试了几件事(例如:将其写为矢量化循环或将其写为'if-loop'并明确计算总和),但我一直犯错误,因此,我在matlab中不断出现错误。
我必须最大化以下功能:
\sum_{i=1}^{L} \sum_{k=1}^K (r_k^3 t_{ik})
以L,K,r_k着称。此外,t_ik是desicion变量,因此它们的值为{0,1}。
任何帮助都将不胜感激。
答案 0 :(得分:3)
如果您正在寻找更多矢量化结果,您可以在总和中bsxfun
创建产品,然后sum
在整个矩阵上创建产品以获得答案(例如,Adam Farabaugh)。您在LaTeX表单中的等式看起来像这样(我更容易阅读):
看起来t
是2D矩阵,而r
是矢量。使用上面的语句,看起来你正在占用t
的每一行,并将这一行以逐个元素的方式与r
相乘,r
中的每个元素都被提升到第三种力量。您对t
中的所有行重复此操作,然后总结结果。假设r
是行向量,并且t
中的列数与r
中的元素数相匹配,请执行以下操作:
prods = bsxfun(@times, r.^3, t);
result = sum(prods(:));
第一个语句将采用r
并创建一个矩阵,其中此矩阵的每一行都是r
提升到第三个幂的副本。这是bsxfun
的结果,它是 Binary Singleton EXpansion FUNction 的缩写。简而言之,它复制了两者之间维度较小的变量的任何维度,并复制元素以使两个变量的大小匹配。
然后我们采用这个新矩阵,并使用矩阵t
进行逐元素乘法。一旦我们这样做,我们简单地总结该矩阵中的所有元素。您可以像Adam建议的那样嵌套sum
次调用,但是如果您真的想让它更通用,您只需展开矩阵,使其成为单个向量,然后应用{{1在这个单一的向量上。
答案 1 :(得分:0)
您正在描述双循环:
result=0;
for i=1:L
for k=1:K
result=r(K)^3*t(i*k)+result ;
end
end
但是我相信你的问题与matlab无关,你只是不知道如何从数学转换为代码。
答案 2 :(得分:-2)
如果有人来看,正确的方法是
sum(sum(a))
其中a是你的矩阵。这也可以扩展到更多尺寸。