While command in MATLAB

  • MATLAB
  • Thread starter Dell
  • Start date
  • #1
590
0

Main Question or Discussion Point

we recently learned about loops in matlab, more specifically the while command, from what i understand, matlab will continue with the set command as long as the condition i chose is true.

as an excercise we had to make a program that will give me the highest value in a given matrix

what i tried doing was:

a=rand(5)
n=1
max=a(n)
while a(n)<max
n=n+1;
max=a(n);
end

what i thought this would do was take a random 5x5 matrix, start from a(1,1) and find the largest value,,, not so,

how can i make such a program using "while", not "if", what i want it to do is take a loop and keep on adding 1 to the previous n, keeping the largest value as max
 

Answers and Replies

  • #2
Hootenanny
Staff Emeritus
Science Advisor
Gold Member
9,622
6
Well the first problem is that a is a 5x5 array and by using a(n) you are only accessing the nth row of the matrix rather than each individual element. To examine each element you need to use two nested while loops as well as an if command.

Something like the following should work,

Code:
max = 0; m=1; n=1;
matrix = rand(5);

while m <= size(matrix,1)
     while n <=size(matrix,2)
          if matrix(m,n) > max
               max = matrix(m,n);
          end
          n=n+1;
     end
     m=m+1;
end

max
If you don't understand any of the commands that I have used, or don't understand why I have used them please do ask.
 
Last edited:
  • #3
590
0
Well the first problem is that a is a 5x5 array and by using a(n) you are only accessing the nth row of the matrix rather than each individual element. To examine each element you need to use two nested while loops as well as an if command.
QUOTE]

thanks, but i learned that MATLAB stores the matrix as a column, therefore if i have a 5x5 matrix "a" and want the 3rd element of the 2nd row, i can either ask for a(2,3) or a(12), check it out, it works,,
maybe when dealing with conditions this is not allowed but i dont see why not,

either way your way still didnt find the max value
 
  • #4
590
0
thanks for the help, got it

a=rand(5);
n=1;
mx=0;
b=size(a);
while n<=b(1)*b(2);
if mx<a(n);
mx=a(n);
end
n=n+1;
end

mx
 
  • #5
Hootenanny
Staff Emeritus
Science Advisor
Gold Member
9,622
6
thanks, but i learned that MATLAB stores the matrix as a column, therefore if i have a 5x5 matrix "a" and want the 3rd element of the 2nd row, i can either ask for a(2,3) or a(12), check it out, it works,,
maybe when dealing with conditions this is not allowed but i dont see why not,
I didn't know that, but it's something that I'll have to remember! Thanks.
thanks for the help, got it

a=rand(5);
n=1;
mx=0;
b=size(a);
while n<=b(1)*b(2);
if mx<a(n);
mx=a(n);
end
n=n+1;
end

mx
Excellent - you did it even without my help :redface:

Anyway, I found the error in my code. The column counter n needs to be reset for each new row m:
Code:
max = 0; m=1; n=1;
matrix = rand(5);

while m <= size(matrix,1)
     while n <=size(matrix,2)
          if matrix(m,n) > max
               max = matrix(m,n);
          end
          n=n+1;
     end
     m=m+1;
     n=1;
end

max
 

Related Threads for: While command in MATLAB

  • Last Post
Replies
1
Views
3K
Replies
4
Views
13K
  • Last Post
Replies
1
Views
2K
Replies
1
Views
411
  • Last Post
Replies
1
Views
497
  • Last Post
Replies
11
Views
1K
Replies
1
Views
16K
Replies
1
Views
578
Top