Borrar filtros
Borrar filtros

check if whole matrix zero

43 visualizaciones (últimos 30 días)
Light
Light el 7 de Jun. de 2013
Now i combined answers. Help me about this iteration. I want it iterate until whole matrix zero.
A=[-1,1,1;0,-1,0;0,0,-1;1,0,0]
if ~sum(A(:)) % this iteration will be continued until whole matrix zero 0
f = find(any(A==-1,2)); % i have to find row which including only one -1, if found 2 or more, i have to pick just one of them in that iteration. How can i find it?
% in one column only one -1 and 1. then after find row with only one -1, i have to add it to the row with 1 which is staying with one column. It is the way my matrix will be zero.
2nd row which including only one -1 is added to the first row. after that:
A=[-1,0,1;0,0,0;0,0,-1;1,0,0]
If all whole matrix not zero. then will be iterated again. Please give me some clue. Help me!
Thank you for ADVICE!
  2 comentarios
Light
Light el 7 de Jun. de 2013
My savers it can be answered one by one.
How can i use if function to iterate it. Give me some structure please

Iniciar sesión para comentar.

Respuestas (1)

Walter Roberson
Walter Roberson el 7 de Jun. de 2013
while true
if (the ending condition is met)
break
end
rownum = index of one row that has exactly one -1
neg1idx = column index of -1 in row number rownum
plus1rownum = row index of row that has +1 in column number negidx
A(plus1rownum,:) = A(plus1rownum,:) + A(rownum, :);
end
It is, however, highly recommended that you add protections in case the input matrix is not structured the way you expect.
  4 comentarios
Walter Roberson
Walter Roberson el 7 de Jun. de 2013
~any(M(:))
will be true if M is entirely 0
Using nnz is a good idea:
nnz(M) == 0
will be true if M has only 0's in it.
Hugo
Hugo el 7 de Jun. de 2013
Using the terminology of Walter Roberson but simpler
while ~(ending condition is met)
% Include the iteration code here
end
As mentioned in the previous comments, be careful with the ending condition
1) If you write
while sum(A(:)
the code will iterate until all elements of A add up to zero. This can occur, however, even if not all elements of A are zero.
2) If you write either
while sum(abs(A(:)))
or
while any(A(:))
then the code will iterate until all elements of A are zero (not just their sum).
NOTICE that in your comment to Walter Roberson answer, the condition if sum(A(:)) lets the iteration continue unless the sum of the elements of A is different from zero, which I think is not exactly what you want, or is it?
Best regards

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by