Using conditional IF statement

1 view (last 30 days)
I have a matrix A and I generate B=randi([0,1],7,3).I want C=A*B only if sum of each row of B=1..I tried this..
A=[1 0 0 1 0 1 1
0 1 1 1 0 0 1
1 0 0 1 1 0 0
1 0 0 0 1 0 1
1 1 0 0 0 1 0
0 1 0 0 0 1 1]
for k=1:numIterations
B=randi([0,1],7,3);
if sum(B,2)==1;
C=A*B;
end
end
how to use IF condition in this case?
  2 Comments
Walter Roberson
Walter Roberson on 19 Dec 2016
What do you want to have happen if the condition is met multiple times within the "for k" loop? You are overwriting all of C each time.
summyia qamar
summyia qamar on 19 Dec 2016
thankyou..I skipped C(k)

Sign in to comment.

Accepted Answer

Roger Stafford
Roger Stafford on 19 Dec 2016
if all(sum(B,2)==1)
  1 Comment
summyia qamar
summyia qamar on 19 Dec 2016
I tried this.
A=[1 0 0 1 0 1 1
0 1 1 1 0 0 1
1 0 0 1 1 0 0
1 0 0 0 1 0 1
1 1 0 0 0 1 0
0 1 0 0 0 1 1];
for k=1:numIterations
B=randi([0,1],7,3);
if all(sum(B,2)==1)
C=A*B
end
end
[B C(ones(7,1))]
and result is C =
1 2 1
0 4 0
2 1 0
2 1 0
1 1 1
0 2 1
ans =
0 0 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 0 1 1
1 0 0 1
0 0 1 1
row 3 is not upto the condition

Sign in to comment.

More Answers (1)

Steven Lord
Steven Lord on 19 Dec 2016
Don't generate B randomly, or at least not the way you're generating it. Your constraint on B is that each row must have exactly one nonzero value. So generate the index of the column in each row that contains the nonzero value and use that to generate a B matrix that is guaranteed to satisfy your constraint.
numRows = 10;
numCols = 5;
rowind = (1:numRows).';
colind = randi(numCols, numRows, 1);
B = accumarray([rowind, colind], 1, [numRows, numCols]);
check = all(sum(B, 2) == 1)
The sz input to accumarray is necessary for the (unlikely) case where no row has a 1 in the last column, to ensure B is the correct size.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!