0
votes

I need some help, i have a matrix rapresenting points on a grid and when given a element i would like to find the indices of its nearest neighbors keeping in mind that i have periodic boundary conditions, so that if i have the element A(1,1) its nearest neighbors are

  • A(1,N)

  • A(2,1)

  • A(1,2)

  • A(N, 1)

Where A is my matrix and N is the dimension, and i need a code which will find the indices of n.n of a given element. Thanks in advance.

1
Use the function mod.Cris Luengo
@CrisLuengo can you give me some hint, doesn't mod return the modules of a division?? Sorry but i can't see how i can use itAndrea
An example for 1d can be found here stackoverflow.com/q/20890128/2732801Daniel

1 Answers

0
votes

Here's my interpretation of your problem: Given some periodic matrix A:

>> A = magic(4)

A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

and some element x (example 1), then find the (i,j) indices of the 4 neighbours of x. In this case, the indices (3, 4), (4,3), (4, 1), (1, 4) correspond to 12, 15, 4, 13.

Since I don't know your use case, I don't know in what format the indices are most convenient for you. But as an example, we can write a function neighbors which returns a struct with the 4 indices of the element x.

function out = neighbors(A, x)
[m, n] = size(A);
[i, j] = find(A == x);

mod2 = @(x) mod(x-1, [m, n])+1;

out.down  = mod2([i+1, j  ]);
out.up    = mod2([i-1, j  ]);
out.right = mod2([i  , j+1]);
out.left  = mod2([i  , j-1]);

end

We can then run the function as follows.

A = magic(4);

out = neighbors(A, 1);
A(out.left(1), out.left(2)); % this returns 15
A(out.right(1), out.right(2)); % this returns 4
A(out.up(1), out.up(2)); % this returns 12
A(out.down(1), out.down(2)); % this returns 13