Матрица в каждой точке сетки - PullRequest
0 голосов
/ 02 мая 2018

Итак, у меня есть сетка

x = linspace(0,1,250);
y=x;
[X,Y] = meshgrid(x,y) ;

В каждой точке я хочу матрицу 2x2 (для которой я найду собственные значения). Но я не могу придумать лучший способ (если не считать петли по всему пространству 250x250).

Предположим, моя матрица для каждого X, Y была

M(1,1) = X
M(2,2) = Y
M(1,2) = sin(2*pi*X)
M(2,1) = X.*Y.^2; 

Каков наилучший способ сделать это, а затем получить собственные значения для каждого X, Y?

1 Ответ

0 голосов
/ 02 мая 2018

Не уверен, что вы имеете в виду «лучший», самый быстрый? Вот простой способ сделать это, если я понял, что вы хотели (2 собственных значения на пиксель):

Начните с ваших определений

x = linspace(0,1,250);
y=x;
[X,Y] = meshgrid(x,y) ;
S=sin(2*pi*X);
XY2=X.*Y.^2; 

Тогда мы можем использовать линейное индексирование :

for n=1:numel(X)
    M(:,n)=eig([X(n), S(n); XY2(n) , Y(n)]);
end

Вот и все, вся информация в М ... Это заняло ~ 3 секунды на моем ноутбуке. Если вам нужна более быстрая реализация функции eig для матриц 2x2, вы можете использовать this . Если вы хотите вернуться от линейного индексирования к 2D (i, j) индексу, вы можете использовать это, чтобы получить для пикселя i, j собственные значения:

M(:, sub2ind(size(X),i,j))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...