Матрица периодов c граничных условий Matlab - PullRequest
0 голосов
/ 01 марта 2020

Мне нужна помощь, у меня есть матрица, представляющая точки на сетке, и когда мне дается элемент, я хотел бы найти индексы его ближайших соседей, имея в виду, что у меня есть периодические c граничные условия, так что если я имеет элемент A (1,1), его ближайшими соседями являются

  • A (1, N)

  • A (2,1)

  • A (1,2)

  • A (N, 1)

Где A - моя матрица и N - это размерность, и мне нужен код, который найдет индексы nn данного элемента. Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2020

Вот моя интерпретация вашей проблемы: Учитывая некоторую периодическую c матрицу A:

>> A = magic(4)

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

и некоторый элемент x (пример 1), затем найдите (i, j ) индексы 4 соседей x. В этом случае индексы (3, 4), (4,3), (4, 1), (1, 4) соответствуют 12, 15, 4, 13.

, поскольку я не знаю ваш вариант использования, я не знаю, в каком формате индексы наиболее удобны для вас. Но в качестве примера мы можем написать функцию neighbors, которая возвращает структуру с 4 индексами элемента 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...