矩阵周期边界条件Matlab



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

  • A(1,N(

  • A(2,1(

  • A(1,2(

  • A(N,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,它返回一个具有元素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

最新更新