合并结果的函数
问题描述:
早上好大家合并结果的函数
我努力开发数学模型,解决了工业工程问题之一,但我在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)
这样
- 在外循环的第一次迭代中,行索引的范围从
1
到4
。 - 在第二次迭代ITR范围从
1+(2-1)*4
到4+(2-1)*4
是从5
到8
- 等
这是更新的代码
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”
非常感谢您的回答是非常有益的,我用了修改后的模型在我的情况,但在X函数只有一个变化正确的是X(M +(I-2)* n_row, n)= 3; –
我不明白你的意见:如果你使用'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索引必须是真正的正整数或逻辑_ –