2014-04-27 18 views
1

我有以下代碼,寫在Matlab,找到的三個單元的組合MW:單位1,2和3的邏輯如下:簡化下面的代碼的一種方法

合併單位的總1,存儲它。

合併單元2的總數,存儲它。

合併單元3的總數,存儲它。

合併單元1和單元2的總和,將其存儲。

將第1單元和第2單元以及第3單元的合計存儲起來。

合併單元1和單元3的總和,將其存儲。

合併單元2和單元3的總和,將其存儲。

Programcaticaly,我這樣做witht他以下幾點:

%Max MW for each unit 
maxMW = [200 60 50]; 

%Min MW for each unit 
minMW = [50 15 15] 


%Load Pattern in MW 
       %1-2  3-4  5-6  7-8 
loadPattern = [250  320  110  75] 

%Full load production cost for each unit 
productionCost = [15.4 16.0062 16.800 18.060 18.900] 

combination(1) = maxMW(1) 
combination(2) = maxMW(2) 
combination(3) = maxMW(3) 
combination(4) = maxMW(1)+maxMW(2) 
combination(5) = maxMW(1)+maxMW(2)+maxMW(3) 
combination(6) = maxMW(2)+maxMW(3) 
combination(7) = maxMW(1) + maxMW(3) 

有沒有一種方法來簡化組合(I)嵌段?

回答

2

如果順序並不重要,那麼這段代碼:

M=[1 2 3]; 
S=0; 
for i=1:length(M) 
S=S+nchoosek(3,i); 
end 
combinations=sum((arrayfun(@str2num,num2str(dec2bin(1:S))).*repmat(M,S,1))'); 

給出了這樣的:

combinations(1)=M(3) 
combinations(2)=M(2) 
combinations(3)=M(2)+M(3) 
combinations(4)=M(1) 
combinations(5)=M(1)+M(3) 
combinations(6)=M(1)+M(2) 
combinations(7)=M(1)+M(2)+M(3) 
+0

這太棒了!比我想象的要複雜一點。我需要15分來代表,但如果可以的話,我會得到。再次感謝! –

+1

這有點複雜,Divakar的解決方案實際上可能更適合您的應用程序。 – David

2

你也能試試這個 -

combination(1:3) = maxMW(nchoosek(1:3,3)); 
combination([4 7 6]) = sum(maxMW(nchoosek(1:3,2)),2)'; %%//' 
combination(5) = sum(maxMW(nchoosek(1:3,1))) 

一個更普遍的一個可能如果有人感興趣,可以提交更多的投入。