?? grad.m
字號:
function [fx,fy,fz] = grad(M, options)% grad - gradient, forward differences%% [gx,gy] = grad(M, options);% or% g = grad(M, options);%% options.bound = 'per' or 'sym'% options.order = 1 (backward differences)% = 2 (centered differences)%% Works also for 3D array.% Assme that the function is evenly sampled with sampling step 1.%% See also: div.%% Copyright (c) Gabriel Peyreoptions.null = 0;bound = getoptions(options, 'bound', 'sym');order = getoptions(options, 'order', 1);% retrieve number of dimensionsnbdims = 2;if size(M,1)==1 || size(M,2)==1 nbdims = 1;endif size(M,1)>1 && size(M,2)>1 && size(M,3)>1 nbdims = 3;endif strcmp(bound, 'sym') if order==1 fx = M([2:end end],:,:)-M; else fx = ( M([2:end end],:,:)-M([1 1:end-1],:,:) )/2; % boundary fx(1,:,:) = M(2,:,:)-M(1,:,:); fx(end,:,:) = M(end,:,:)-M(end-1,:,:); end if nbdims>=2 if order==1 fy = M(:,[2:end end],:)-M; else fy = ( M(:,[2:end end],:)-M(:,[1 1:end-1],:) )/2; % boundary fy(:,1,:) = M(:,2,:)-M(:,1,:); fy(:,end,:) = M(:,end,:)-M(:,end-1,:); end end if nbdims>=3 if order==1 fz = M(:,:,[2:end end])-M; else fz = ( M(:,:,[2:end end])-M(:,:,[1 1:end-1]) )/2; % boundary fz(:,:,1) = M(:,:,2)-M(:,:,1); fz(:,:,end) = M(:,:,end)-M(:,:,end-1); end endelse if order==1 fx = M([2:end 1],:,:)-M; else fx = ( M([2:end 1],:,:)-M([end 1:end-1],:,:) )/2; end if nbdims>=2 if order==1 fy = M(:,[2:end 1],:)-M; else fy = ( M(:,[2:end 1],:)-M(:,[end 1:end-1],:) )/2; end end if nbdims>=3 if order==1 fz = M(:,:,[2:end 1])-M; else fz = ( M(:,:,[2:end 1])-M(:,:,[end 1:end-1]) )/2; end endendif nargout==1 if nbdims==2 fx = cat(3,fx,fy); elseif nbdims==3 fx = cat(4,fx,fy,fz); endend
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -