代码之家  ›  专栏  ›  技术社区  ›  yankeefan11

网格每个点处的矩阵

  •  2
  • yankeefan11  · 技术社区  · 7 年前

    所以我有一个网格

    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 回复  |  直到 7 年前
        1
  •  2
  •   bla    7 年前

    不知道你说的“最好”是什么意思,最快?如果我理解您的要求(每像素2个特征值),下面是一个简单的方法:

    从定义开始

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

    然后,我们可以使用 linear indexing :

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

    就是这样,所有的信息都在M。。。 在我的笔记本电脑上花了大约3秒钟的时间。如果希望更快地实现 eig 函数用于可以使用的2x2矩阵的情况 this 。如果要从线性索引返回到2D(i,j)索引,可以使用此方法获取像素i,j的特征值:

    M(:, sub2ind(size(X),i,j))