矩阵周期性边界条件 Matlab
Matrix periodic boundary conditions 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
,其中 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
我需要一些帮助,我有一个在网格上表示点的矩阵,当给定一个元素时,我想找到它最近邻居的索引,记住我有周期性边界条件,所以如果我有元素 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
,其中 returns 一个具有元素 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
然后我们可以运行函数如下。
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