我使用此代码创建了一个矩阵:
row=4;
column=5;
pop=5;
for ii = 1:(row*pop)
done = false;
while ~done
newRow = randi([0 2],column,1);
done = (sum(newRow)<12)...
&& (~any(diff([0;find(newRow);column+1])>3));
end
result(:,ii) = newRow;
end
result = permute(reshape(result,column,row,pop), [2 1 3]);
我得到一个矩阵结果(4,5,5)
,然后我想再次在特定的行和弹出中由一个约束引起。
for ii=1:pop;
while size(find(waktu_libur(:,:,ii)>20&waktu_libur(:,:,ii)<23),1)~=11,
%#condition that had to be fullfilled by matrix result.
for bb=1:row;
if find(waktu_libur(bb,:,ii)>20&waktu_libur(bb,:,ii)<23),
continue;
else
done = false;
while ~done
newRow = randi([0 2],column,1);
done = (sum(newRow)<12)...
&& (~any(diff([0;find(newRow);column+1])>3));
end
dummy = newRow;
dummy= permute(reshape(dummy,jum_bag,1), [2 1]); %#this matrix which is used to replace
result(bb:,ii)=dummy %#process replacing dummy to row in matrix result that still obey contraint.
end %#end looping if
end %# end looping for
end %#end looping while
end %# end looping for
我认为我的代码是正确的。但是在运行之后,它会出现这个错误:
??? Subscripted assignment dimension mismatch.
有没有人看到导致此错误的原因?
答案 0 :(得分:0)
修复这些问题后,代码运行良好:
waktu_libur
替换为result
。result(bb:,ii)
jum_bag
在reshape(dummy,jum_bag,1)
中未定义。但是,由于reshape()
要求输入和输出元素的数量相等,唯一的可能是设置jum_bag = numel(dummy)
。
醇>
在这些更改之后,代码会运行。不幸的是,我无法重现您的错误。
但是,我建议改变一些其他事项:
在第一个代码段的开头添加clear result
。您没有初始化输出变量但是动态构建它(顺便说一下,慢)。然后你改变result
的形状。如果重新执行代码,则动态创建不起作用,因为内存中存在result
且维度错误。
此代码newRow = randi([0 2],column,1);
创建列向量。因此,不需要以下reshape(dummy,jum_bag,1)
,它也会创建列向量。