"Russell May" <russellmay@sbcglobal.net> wrote in message
news:mvrrlr$3e5$1@newscl01ah.mathworks.com...
> I am working on a problem where I need to convert a nested for loop to a
> while loop. I've got the problem partially solved but I was only able to
> get the code to initialize the first row of the Array. Where am I going
> wrong?
>
> Here is the initial code that I made for the for loop:
> A = [3 5 4;-8 -1 33;-17 6 -9];
> B = zeros(size(A))
> for i = 1:1:size(A,1)
> for j = 1:1:size(A,2)
> if(A(i,j) >= 1)
> B(i,j)=A(i,j)+20
> else
> B(i,j)=log(A(i,j))
> end
> end
> end
>
> Here is what I came up for the while loop:
> B = zeros(size(A));
> i = 0;
> j = 0;
Let's add a few lines so you can see the values of your indices each time
MATLAB executes the loops.
> while i < size(A,1)
> i = i+1;
fprintf('Before start of WHILE J, i is %d and j is %d\n', i, j);
> while j < size(A,2)
> j= j+1;
> if A(i,j)>=1
> B(i,j)=A(i,j)+20
> else
> B(i,j)=log(A(i,j))
> end
fprintf('Before end of WHILE J, i is %d and j is %d\n', i, j);
> end
fprintf('Before end of WHILE I, i is %d and j is %d\n', i, j);
Adding these three status display lines should show you a problem. Moving
one line of code that you have already written will solve that problem.
*snip*
--
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com