我有一個關於matlab的(初學者)問題。我已經嘗試了幾件事(例如:把它寫成一個向量化的循環,或者把它寫成'if-loop'並明確計算總和),但是我一直在犯錯誤,因此我一直在matlab中出錯。matlab中的雙求和
我曾經也有最大化以下功能:
\sum_{i=1}^{L} \sum_{k=1}^K (r_k^3 t_{ik})
與L,K,r_k聞名。另外,t_ik是desicion變量,所以它們的值在{0,1}。
任何幫助,將不勝感激。
我有一個關於matlab的(初學者)問題。我已經嘗試了幾件事(例如:把它寫成一個向量化的循環,或者把它寫成'if-loop'並明確計算總和),但是我一直在犯錯誤,因此我一直在matlab中出錯。matlab中的雙求和
我曾經也有最大化以下功能:
\sum_{i=1}^{L} \sum_{k=1}^K (r_k^3 t_{ik})
與L,K,r_k聞名。另外,t_ik是desicion變量,所以它們的值在{0,1}。
任何幫助,將不勝感激。
你所描述的循環雙:
result=0;
for i=1:L
for k=1:K
result=r(K)^3*t(i*k)+result ;
end
end
不過,我相信,你的問題是不相關的MATLAB,你只是不知道如何從數學轉換爲代碼。
如果有人來尋找,要做到這一點,正確的做法是
sum(sum(a))
其中a是你的矩陣。這也擴展到更多維度。
如果您正在尋找更加矢量化的結果,您可以在整個矩陣中通過bsxfun
然後sum
在總和內創建產品以獲得您的答案(àla Adam Farabaugh)。你膠乳形式的公式看起來像這樣(我更容易閱讀):
它看起來像t
是一個二維矩陣,而r
是一個載體。有了上述說法,看起來您正在取t
的每一行,並將該行按逐元素方式乘以r
,並將r
中的每個元素都提升至第三個電源。對t
中的所有行重複此操作,然後總結結果。假設r
是行向量,列在t
量匹配元素的r
數量,做這樣的事情:
prods = bsxfun(@times, r.^3, t);
result = sum(prods(:));
第一條語句將採取r
並創建一個矩陣,其中的這每一行矩陣將複製r
提升至第三力量。這是bsxfun
的後果,這是二進制單身擴展功能的簡稱。簡而言之,它複製兩個尺寸之間具有較小尺寸的變量的任何維度,並複製這些元素以使兩個變量的大小相匹配。
然後,我們採用這個新矩陣,並使用矩陣t
進行逐元素乘法。一旦我們這樣做,我們簡單地總結這個矩陣中的所有元素。你可以嵌套sum
這樣的電話,就像Adam建議的那樣,但是如果你真的想使它更通用,你可以簡單地將展開爲矩陣,這樣它就是一個單獨的矢量,然後在這個單獨的矢量上應用sum
。
謝謝,但似乎我錯誤地表達了我的問題......但是,我只是找到了解決我的真正問題的方法,但由於這是問題的正確答案,所以我會將其標記爲正確的答案。抱歉給你帶來不便。 – Riley 2014-12-01 18:12:08