我需要创建矩阵Dx
和Dy
,当乘以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函数,X
为size(X)
,则[n m]
和x=X(:)
为{{ 1}}
答案 0 :(得分:0)
按照以下步骤操作:
convmtx2()
Function。这将为您提供所需的信息。
水平衍生物: *前向有限差分 - $ [ - 1,1] $。 *后向有限差分 - $ [1,-1] $。
垂直衍生物: *前向有限差分 - $ [-1; 1] $。 *后向有限差分 - $ [1; -1] $。