合并结果的函数

问题描述:

早上好大家合并结果的函数

我努力开发数学模型,解决了工业工程问题之一,但我在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 

谢谢您的时间,您的考虑

在外循环(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索引必须是真正的正整数或逻辑_ –