在Matlab中创建差分矩阵

时间:2017-05-23 00:35:32

标签: matlab

我需要创建矩阵DxDy,当乘以2D区域(x)的列堆栈表示时,它们分别在x和y方向上给出部分差异,以便{ {1}}也会以向量形式给出x方向的部分导数(与Dx*x相同的维数)。

衍生物通过以下方式接近:

  对于所有x> p,f'(x,y)= 0.5 *(f(x + 1,y)-f(x-1,y))。 1和x< n(行数)

     

f'(1,y)= f(2,y)-f(1,y)

     

f'(n,y)= f(n,y)-f(n-1,y)

代表Dx,同样代表Dy。

我尝试使用以下代码创建矩阵:

x

但是这需要花费太多时间,我觉得应该更快创建[X,Y] = meshgrid(1:n,1:m); % m,n - the dimentions of x X = X(:)'; Y = Y(:)'; Dx = sparse(m*n,m*n); Dy = sparse(m*n,m*n); for x = 1:n for y = 1:m idx = y + (x-1)*m; if (x == 1) Dx(idx,:) = ((X == x+1) .* (Y == y)) - ((X == x) .* (Y == y)); elseif (x == n) Dx(idx,:) = ((X == x) .* (Y == y)) - ((X == x-1) .* (Y == y)); else Dx(idx,:) = 0.5*(((X == x+1) .* (Y == y)) - ((X == x-1) .* (Y == y))); end if (y == 1) Dy(idx,:) = ((X == x) .* (Y == y+1)) - ((X == x) .* (Y == y)); elseif (y == m) Dy(idx,:) = ((X == x) .* (Y == y)) - ((X == x) .* (Y == y-1)); else Dy(idx,:) = 0.5*(((X == x) .* (Y == y+1)) - ((X == x) .* (Y == y-1))); end end end Dy

关于Dx:对于由x代表的2D函数,Xsize(X),则[n m]x=X(:)为{{ 1}}

1 个答案:

答案 0 :(得分:0)

按照以下步骤操作:

  1. 使用过滤器表示操作。衍生过滤器很容易按照您定义的方式进行。
  2. 使用MATLAB的convmtx2() Function
  3. 创建卷积矩阵

    这将为您提供所需的信息。

    图像处理中的微分滤镜

    水平衍生物:  *前向有限差​​分 - $ [ - 1,1] $。  *后向有限差分 - $ [1,-1] $。

    垂直衍生物:  *前向有限差​​分 - $ [-1; 1] $。  *后向有限差分 - $ [1; -1] $。

相关问题