MATLAB Why Does My Matlab Code Give an Out of Bounds Error?

  • Thread starter Thread starter MaxManus
  • Start date Start date
  • Tags Tags
    Bounds Matlab
AI Thread Summary
The discussion revolves around a coding error encountered in a fluid mechanics simulation. The user defined two matrices, pu and pv, and attempted to access elements within these matrices using nested loops. The error message indicated an "index out of bounds" issue, specifically when trying to access pv(2,11,1), which does not exist given the defined size of pv as [10,10,10]. The confusion stemmed from incorrectly using the loop variable 'i' for both loops instead of using 'j' for the second loop. The solution involved correcting the loop structure to properly iterate over the intended dimensions, ensuring that 'j' was used in the second loop to avoid accessing out-of-bounds indices.
MaxManus
Messages
268
Reaction score
1
Hey, I have defined
Code:
pu = zeros(nx,ny,N);
pv = zeros(nx,ny,N);
pu(:,ny,:) = 1;

and written the loop:
line 38-40
Code:
 for i = 2:(nx-1);
        for i = 2:(ny-1);
            ps(i,j) = p(i,j,n) - a1*(pu(i+1,j,n) - pu(i,j,n)) -a2*(pv(i,j+1,n) - pv(i,j,n));

and I get the error
? Attempted to access pv(2,11,1); index out of bounds because size(pv)=[10,10,10].

Error in ==> fluidmekanikk at 40
ps(i,j) = p(i,j,n) - a1*(pu(i+1,j,n) - pu(i,j,n)) -a2*(pv(i,j+1,n) - pv(i,j,n));

Could someone help me with the error?
 
Physics news on Phys.org
Well, obviously, you tried to access p(2,11,1) which does not exist.

Looking at the indexes, it was probably pv(i,j+1,n), since that goes highest int he middle term.

Now... what range does j iterate over?
 
Hurkyl said:
Well, obviously, you tried to access p(2,11,1) which does not exist.

Looking at the indexes, it was probably pv(i,j+1,n), since that goes highest int he middle term.

Now... what range does j iterate over?

Thanks for fast reply and solution.
The code
Code:
for i = 2:(nx-1);
        for i = 2:(ny-1);
was supposed to be
Code:
for i = 2:(nx-1);
        for j = 2:(ny-1);
and I had used the j as variable earlier.
 
Last edited:
Back
Top