2014-12-01 19 views
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}。

任何幫助,將不勝感激。

回答

0

你所描述的循環雙:

result=0; 
for i=1:L 
    for k=1:K 
     result=r(K)^3*t(i*k)+result ; 
    end 
end 

不過,我相信,你的問題是不相關的MATLAB,你只是不知道如何從數學轉換爲代碼。

+1

謝謝,但似乎我錯誤地表達了我的問題......但是,我只是找到了解決我的真正問題的方法,但由於這是問題的正確答案,所以我會將其標記爲正確的答案。抱歉給你帶來不便。 – Riley 2014-12-01 18:12:08

-2

如果有人來尋找,要做到這一點,正確的做法是

sum(sum(a)) 

其中a是你的矩陣。這也擴展到更多維度。

+0

雖然這在技術上是正確的,但這不適用於這個問題。有三個需要求和的向量,而不是矩陣。 – rayryeng 2014-12-01 19:50:17

+0

然後將它們連接成一個矩陣並使用我的方法。這似乎是你的問題是非常可以矢量化的,將來如果你發佈你試過的代碼,你會得到更多針對你的情況的答案。 – 2014-12-01 19:52:29

+0

您不能簡單地將矢量連接在一起並在行上應用'sum'。它不會計算正確的結果。看到我的答案。 – rayryeng 2014-12-15 22:52:48

3

如果您正在尋找更加矢量化的結果,您可以在整個矩陣中通過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