MATLAB Answers

0

for loops not working

Asked by sriram amarnath on 24 Jun 2019 at 1:30
Latest activity Commented on by sriram amarnath on 24 Jun 2019 at 12:48
The below code is to calculate the modes on a plate. The for loops are not using all the values of m & n
% Modes on a plate
Lx=0.286; % length of plate(m)
Lz=0.198; % breadth of plate(m)
for m = 1:1000 % mode numbers
for n = 1:10
func=((n.*pi)./Lx).^2 +((m.*pi)./Lz).^2;% summation function n=1:10 & m= 1:1000
end
end

  2 Comments

dpb
on 24 Jun 2019 at 1:41
I'm sure the loop runs 10,000 times--only you don't do anything inside the loop except write over the same variable with each computed value in succession so all you get in the end is the very last value.
So how do i get a matrix of every value?

Sign in to comment.

2 Answers

Answer by madhan ravi
on 24 Jun 2019 at 1:59
Edited by madhan ravi
on 24 Jun 2019 at 3:32
 Accepted Answer

The same goal can be achieved trivially using meshgrid() or ndgrid() without a loop:
% Modes on a plate
Lx=0.286; % length of plate(m)
Lz=0.198; % breadth of plate(m)
n=10;
m=1000;
[Y,X]= ndgrid(1:m,1:n);
func=(X*pi/Lx).^2 +(Y*pi/Lz).^2;
But the modication in your code is as follows:
func = zeros(1000,10); % before loop
func(m,n) = ... %just add (m,n) next to func inside the loop

  1 Comment

Thanks madhan ravi your a saviour!

Sign in to comment.


Answer by dpb
on 24 Jun 2019 at 2:34

"The MATLAB way" is to avoid the loops altogether...
N=10; M=1000;
[X,Y]=meshgrid([1:N],1:M]);
func=(X*pi/Lx).^2 +(Y*pi/Lz).^2;

  0 Comments

Sign in to comment.