Не уверен, что вы имеете в виду «лучший», самый быстрый? Вот простой способ сделать это, если я понял, что вы хотели (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))