矩阵周期性边界条件 Matlab

Matrix periodic boundary conditions Matlab

我需要一些帮助,我有一个在网格上表示点的矩阵,当给定一个元素时,我想找到它最近邻居的索引,记住我有周期性边界条件,所以如果我有元素 A(1,1) 它最近的邻居是

其中 A 是我的矩阵,N 是维度,我需要一个代码来找到给定元素的 n.n 的索引。 提前致谢。

这是我对你的问题的解释: 给定一些周期性矩阵 A:

>> A = magic(4)

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

和一些元素x(例如1),然后找到x的4个邻居的(i,j)索引。在这种情况下,索引 (3, 4), (4,3), (4, 1), (1, 4) 对应于 12, 15, 4, 13.

由于我不知道你的用例,我不知道索引的格式对你来说最方便。但作为示例,我们可以编写一个函数 neighbors,其中 returns 一个具有元素 x.

的 4 个索引的结构
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

然后我们可以运行函数如下。

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