Help with this code.
情報
この質問は閉じられています。 編集または回答するには再度開いてください。
古いコメントを表示
for i = 1:5
b1(i,:)= round(((1860-0)*(rand(1)))+0)
end
b1
for i = 1:5
b2(i,:)= round(((1908-0)*(rand(1)))+0);
end
b2
for i = 1:5
b3(i)= round(((1316-0)*(rand(1)))+0);
end
b3
for i = 1:5
b4(i)= round(((2940-0)*(rand(1)))+0);
end
b4
for i=1:5
b5(i,:)= round(((1860-0)*(rand(1)))+0);
end
b5
for i=1:5
b6(i,:)= round(((1860-0)*(rand(1)))+0);
end
b6
In this code I want a condition that if b5+b6=b1 then only it should execute the result otherwise search for solutions until this criterion matches. Please help me with this.
3 件のコメント
Guillaume
2015 年 2 月 26 日
Each loop could be replaced with:
bn = randi([minval maxval], 5, 1);
which is a lot more readable.
Since b5+b6 == b1 has only one solution, why not generate b1 as the sum of the other two? You could be there forever if you generate all three randomly.
Abhinav
2015 年 2 月 26 日
回答 (1 件)
As per my comment, it seems very silly to generate random sets that have no way of working when you could just generate sets that always work, so this will get you there faster:
invalidset = true;
while invalidset
b1 = randi([0 1860], 5, 1);
%... same for b2, b3, ...
b5 = randi([0 1860], 5, 1);
b6 = b1 - b5;
invalidset = any(b6 <0 | b6 > 1860);
end
But if you really want to waste time generating a random bunch of 3 sets that have no chance of working, it's:
invalidset = true;
while invalidset
b1 = randi([0 1860], 5, 1);
%... same for b2, b3, ...
b5 = randi([0 1860], 5, 1);
b6 = randi([0 1860], 5, 1);
invalidset = ~isequal(b1, b5 + b6);
end
First option took 0.007044 seconds to generate a set on my machine. Second option is still running after a minute.
0 件のコメント
この質問は閉じられています。
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!