2016-07-24 100 views
-1

早上好大家合併結果的函數

我努力開發數學模型,解決了工業工程問題之一,但我在MATLAB代碼寫的問題。所以我在下面的代碼中簡化了這個問題。我需要合併X的所有結果在一個矩陣後的函數中使用使用它在下一步(在這個簡單的情況下,這個矩陣將是40 * 3)

LIST=randi([0,1],[4,3]); 

for i = 1:10 
    j=i 

V=randi([0,1],[4,3]); 

for m = 1:4 
for n = 1:2 
    if V(m,n)== 1; 
     X(m,n) = LIST(m,n); 
    elseif V(m,n)== 0; 
     X(m,n) = 2; 
end 
end 
end 

for m = 1:4 
for n = 3 
    if V(m,n)== 1; 
     X(m,n) = LIST(m,n); 
    elseif V(m,n)== 0; 
     X(m,n) = 3; 
    end 
end 
end 

X 
end 

謝謝您的時間,您的考慮

回答

0

在外循環(for i = 1:10)的每次迭代中,X矩陣中的值將被覆蓋。

爲了存儲所有需要增加第二個循環的最大極限值(for m = 1:4)的X矩陣的行值,即4。通過識別評估它作爲中行的LIST矩陣的數量限制

X(m+(i-1)*4,n) 

你可以使你的腳本更「普通」:

您可以通過修改X矩陣的索引如下做到這一點使用功能size功能:

[n_row,n_col]=size(LIST) 

這樣

  • 在外循環的第一次迭代中,行索引的範圍從14
  • 在第二次迭代ITR範圍從1+(2-1)*44+(2-1)*4是從58

這是更新的代碼

LIST=randi([0,1],[4,3]); 
[n_row,n_col]=size(LIST) 

for i = 1:10 
    j=i 
    V=randi([0,1],[4,3]); 
% for m = 1:4 
    for m = 1:n_row 
     for n = 1:2 
     if V(m,n)== 1; 
%    X(m,n) = LIST(m,n); 
      X(m+(i-1)*n_row,n) = LIST(m,n); 
     elseif V(m,n)== 0; 
%    X(m,n) = 2 
      X(m+(i-1)*n_row,n) = 2; 
     end 
     end 
    end 
% for m = 1:4 
    for m = 1:n_row 
     for n = 3 
     if V(m,n)== 1; 
%    X(m,n) = LIST(m,n) 
      X(m+(i-1)*n_row,n) = LIST(m,n); 
     elseif V(m,n)== 0; 
%    X(m,n) = 3; 
      X(m+(i-1)*n_row,n) = 3; 
     end 
     end 
    end 
    X 
end 

希望這有助於。

Qapla」

+0

非常感謝您的回答是非常有益的,我用了修改後的模型在我的情況,但在X函數只有一個變化正確的是X(M +(I-2)* n_row, n)= 3; –

+0

我不明白你的意見:如果你使用'X(m +(i-2)* n_row,n)= 3;',這取決於V(mn)的值,你可能得到一個無效索引(0或否定的)。例如,第一次迭代外循環'(i = 1)','m = 1' ==>'X(1+(1-2)* 4,n)'==>'X(-3,n) 。另一種情況,例如, G。 'i = 1'和'm = 4' ==>'X(0,n)'。你應該得到一個錯誤,例如_Subscript索引必須是真正的正整數或邏輯_ –