[FX,FY,FZ,...] = GRADIENT(F,...) Distance between grid points in X,Y,Z,… direction [FX,FY,FZ,…] is numerical gradient of matrix F FX corresponds to dF/dx, the differences in the x (column) direction [x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(z),hold on, quiver(px,py), hold off y (1,5) (2,5) (3,5) (4,5) (5,5) (1,4) (2,4) (3,4) (4,4) (5,4) (1,3) (2,3) (3,3) (4,3) (5,3) (1,2) (2,2) (3,2) (4,2) (5,2) (1,1) (2,1) (3,1) (4,1) (5,1) [x,y] = meshgrid(-2:1:2, -2:1:2) Create a mesh on the domain of the function z. Examples: x(4,5)=1 y(4,5)=2 x(2,2)=-1 y(2,5)=2 x z=x.*exp(-x.^2-y.^2) Element by element operation 2 1 1 4 2 4 . * 3 5 3 2 9 10 2 1 1 4 5 10 * 3 5 3 2 12 2 X(4,5)=1 Y(4,5)=2 Z(4,5)=1*exp(-1^2-2^2)=exp(-5)=0.0067 -0.0007 -0.0135 -0.0366 -0.0135 -0.0007 -0.0067 -0.1353 -0.3679 -0.1353 -0.0067 0 0 0 0 0 0.0067 0.1353 0.3679 0.1353 0.0067 0.0007 0.0135 0.0366 0.0135 0.0007 [x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(z),hold on, quiver(px,py), hold off y (1,5) (2,5) (3,5) (4,5) (5,5) (1,4) (2,4) (3,4) (4,4) (5,4) (1,3) (2,3) (3,3) (4,3) (5,3) (1,2) (2,2) (3,2) (4,2) (5,2) (1,1) (2,1) (3,1) (4,1) (5,1) x -0.0007 -0.0135 -0.0366 -0.0135 -0.0007 -0.0067 -0.1353 -0.3679 -0.1353 -0.0067 0 0 0 0 0 0.0067 0.1353 0.3679 0.1353 0.0067 0.0007 0.0135 0.0366 0.0135 0.0007 [x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(z),hold on, quiver(px,py), hold off [px,py]=gradient(z,1,1) px = -0.0061 -0.1219 -0.3312 -0.1219 -0.0061 py = -0.0128 -0.0180 0 0.0180 0.0128 0.0003 0.0067 0.0183 0.0067 0.0003 -0.1286 -0.1806 0 0.1806 0.1286 0.0067 0.1353 0.3679 0.1353 0.0067 y 0.0003 0.0067 0.0183 0.0067 0.0003 -0.0061 -0.1219 -0.3312 -0.1219 -0.0061 0 0.1286 0.0128 0 0.1806 0.0180 0 0 0 0 -0.1806 -0.0180 0 -0.1286 -0.0128 (1,5) (2,5) (3,5) (4,5) (5,5) (1,4) (2,4) (3,4) (4,4) (5,4) (1,3) (2,3) (3,3) (4,3) (5,3) (1,2) (2,2) (3,2) (4,2) (5,2) (1,1) (2,1) (3,1) (4,1) (5,1) x CONTOUR(Z) is a contour plot of matrix Z treating the values in Z as heights above a plane. A contour plot are the level curves of Z for some values V. The values V are chosen automatically. px = -0.0061 -0.1219 -0.3312 -0.1219 -0.0061 py = -0.0128 -0.0180 0 0.0180 0.0128 0.0003 0.0067 0.0183 0.0067 0.0003 0.0067 0.1353 0.3679 0.1353 0.0067 0.0003 0.0067 0.0183 0.0067 0.0003 [x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(z),hold on, quiver(px,py), hold off -0.0061 -0.1219 -0.3312 -0.1219 -0.0061 5 4.5 4 3.5 3 -0.1286 -0.1806 0 0.1806 0.1286 0 0.1286 0.0128 0 0.1806 0.0180 0 0 0 0 -0.1806 -0.0180 0 -0.1286 -0.0128 2.5 2 1.5 1 1 1.5 2 2.5 3 3.5 4 4.5 z = x .* exp(-x.^2 - y.^2); 5 [x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2); contour(z),hold on, quiver(px,py), hold off HOLD ON holds the current plot and all axis properties so that subsequent graphing commands add to the existing graph. 5 4.5 4 HOLD OFF returns to the default mode whereby PLOT commands erase the previous plots and reset all axis properties before drawing new plots. 3.5 3 2.5 2 1.5 1 1 1.5 2 2.5 3 3.5 4 4.5 5 DIV = DIVERGENCE(X,Y,Z,U,V,W) computes the divergence of a 3-D vector field U,V,W. The arrays X,Y,Z define the coordinates for U,V,W and must be monotonic and 3-D plaid (as if produced by MESHGRID). load wind div = divergence(x,y,z,u,v,w); slice(x,y,z,div,[90 134],[59],[0]); shading interp daspect([1 1 1]) camlight load wind div = divergence(x,y,z,u,v,w); slice(x,y,z,div,[90 134],[59],[0]); shading interp daspect([1 1 1]) camlight Slice at (90,59,0) Wind is an array of (41,35,15). Origin: (70.2,17.5,0) End: (134.3, 60, 16) 20 15 10 5 z 0 y x -5 60 140 40 120 100 20 80 0 60 load wind div = divergence(x,y,z,u,v,w); slice(x,y,z,div,[90 134],[59],[0]); shading interp daspect([1 1 1]) camlight 20 20 15 15 10 10 5 5 0 0 -5 60 -5 60 140 40 120 140 40 120 100 20 80 0 60 100 20 80 0 60 load wind div = divergence(x,y,z,u,v,w); slice(x,y,z,div,[90 134],[59],[0]); shading interp daspect([1 1 1]) camlight 20 20 15 10 10 0 5 -10 0 -20 60 -5 60 140 40 120 140 120 40 100 100 20 80 0 20 80 60 0 60 load wind div = divergence(x,y,z,u,v,w); slice(x,y,z,div,[90 134],[59],[0]); shading interp daspect([1 1 1]) camlight 6 4 20 2 10 0 0 -10 -2 -20 60 140 120 40 -4 100 20 80 0 60 -6 [CURLX, CURLY, CURLZ, CAV] = CURL(X,Y,Z,U,V,W) computes the curl and angular velocity perpendicular to the flow (in radians per time unit) of a 3D vector field U,V,W. The arrays X,Y,Z define the coordinates for U,V,W and must be monotonic and 3D plaid (as if produced by MESHGRID). Ω v R 1 v 2 load wind cav = curl(x,y,z,u,v,w); slice(x,y,z,cav,[90 134],[59],[0]); shading interp daspect([1 1 1]); axis tight colormap hot(16) camlight 15 10 5 0 130 120 50 110 40 100 90 30 20 80 L = DEL2(U), when U is a matrix, is a discrete approximation of 0.25*del^2 u = (d^2u/dx^2 + d^2/dy^2)/4. The matrix L is the same size as U, with each element equal to the difference between an element of U and the average of its four neighbors.