Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

curl

向量场的旋度和角速度

说明

示例

[curlx,curly,curlz,cav] = curl(X,Y,Z,Fx,Fy,Fz) 计算具有向量分量 FxFyFz 的三维向量场的数值旋度和角速度。输出 curlxcurlycurlz 表示旋度的向量分量,cav 表示旋度的角速度。

数组 XYZ 用于定义向量分量 FxFyFz 的坐标,它们必须是单调的,但无需间隔均匀。XYZ 必须为大小相同的三维数组,可以由 meshgrid 生成。

[curlx,curly,curlz,cav] = curl(Fx,Fy,Fz) 假定一个默认的样本点网格。默认网格点 XYZ 由表达式 [X,Y,Z] = meshgrid(1:n,1:m,1:p) 确定,其中 [m,n,p] = size(Fx)。如果您希望节省内存且不在意点之间的绝对距离,则可使用此语法。

示例

[curlz,cav] = curl(X,Y,Fx,Fy) 计算具有向量分量 FxFy 的二维向量场的数值旋度和角速度。输出 curlz 表示旋度的 z 分量,cav 表示旋度的角速度。

矩阵 XY 用于定义 FxFy 坐标,它们必须是单调的,但无需间隔均匀。XY 必须为大小相同的二维矩阵,可以由 meshgrid 生成。

[curlz,cav] = curl(Fx,Fy) 假定一个默认的样本点网格。默认网格点 XY 由表达式 [X,Y] = meshgrid(1:n,1:m) 确定,其中 [m,n] = size(Fx)。如果您希望节省内存且不在意点之间的绝对距离,则可使用此语法。

示例

cav = curl(___) 仅返回向量场的角速度。

示例

全部折叠

加载一个表示风场的三维向量场数据集。该数据集包含大小为 35×41×15 的数组。

load wind

计算向量场的数值旋度和角速度。

[curlx,curly,curlz,cav] = curl(x,y,z,u,v,w);

显示计算得出的旋度和角速度的二维切片。在 z(:,:,1) 处对数据进行切片,其中 z 坐标等于 -0.002。

k = 1;
xs = x(:,:,k); 
ys = y(:,:,k); 
zs = z(:,:,k); 
us = u(:,:,k); 
vs = v(:,:,k); 

使用 pcolor 在二维坐标中绘制角速度。使用 quiver 显示向量场的 xy 分量。

pcolor(xs,ys,cav(:,:,k))
shading interp
colorbar
hold on
quiver(xs,ys,us,vs,'k')
hold off

Figure contains an axes object. The axes object contains 2 objects of type surface, quiver.

接下来,在切割出的 xy 平面上绘制三维旋度的分量。

quiver3(xs,ys,zs,curlx(:,:,k),curly(:,:,k),curlz(:,:,k),'b')
view(0,90)

Figure contains an axes object. The axes object contains an object of type quiver.

指定二维坐标和向量场。

[x,y] = meshgrid(-4:4,-4:4);
Fx = -y*2;
Fy = x*2;

绘制向量场分量 FxFy

quiver(x,y,Fx,Fy)

Figure contains an axes object. The axes object contains an object of type quiver.

求二维向量场的数值旋度和角速度。旋度和角速度的值在所有输入坐标下均为常量。

[curlz,cav] = curl(x,y,Fx,Fy)
curlz = 9×9

     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4
     4     4     4     4     4     4     4     4     4

cav = 9×9

     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2
     2     2     2     2     2     2     2     2     2

加载一个表示风场的三维向量场数据集。该数据集包含大小为 35×41×15 的数组。

load wind

计算向量场的角速度。

cav = curl(x,y,z,u,v,w);

将向量三维体数据的角速度显示为切片平面。用 x=90x=134 显示 yz 平面的角速度,用 y=59 显示 xz 平面的角速度,用 z=0 显示 xy 平面的角速度。使用颜色指示向量场中指定位置的角速度。

h = slice(x,y,z,cav,[90 134],59,0); 
shading interp
colorbar
daspect([1 1 1]); 
axis tight
camlight
set([h(1),h(2)],'ambientstrength',0.6);

Figure contains an axes object. The axes object contains 4 objects of type surface.

输入参数

全部折叠

输入坐标,指定为矩阵或三维数组。

  • 对于二维向量场,XY 必须为大小相同的二维矩阵,并且该大小不能小于 2×2

  • 对于三维向量场,XYZ 必须为相同大小的三维数组,并且该大小不能小于 2×2×2

数据类型: single | double
复数支持:

输入坐标处的向量场分量,指定为矩阵或三维数组。FxFyFz 的大小必须与 XYZ 的大小相同。

数据类型: single | double
复数支持:

输出参数

全部折叠

输入坐标处旋度的向量分量,以矩阵或三维数组形式返回。

输入坐标处的角速度,以矩阵或三维数组形式返回。

详细信息

全部折叠

数值旋度和角速度

向量场的数值旋度是根据向量场在某些点的已知值来估计旋度分量的一种方式。

对于具有三个变量的三维向量场 F(x,y,z)=Fx(x,y,z)e^x+Fy(x,y,z)e^y+Fz(x,y,z)e^zF 的旋度定义为

curl F=×F=(FzyFyz)e^x+(FxzFzx)e^y+(FyxFxy)e^z.

角速度定义为 ω=12(×F)·F^

对于具有两个变量的二维向量场 F(x,y)=Fx(x,y)e^x+Fy(x,y)e^y,旋度为

curl F=×F=(FyxFxy)e^z.

角速度定义为 ω=12(×F)z=12(FyxFxy)e^z

算法

curl 使用有限差分计算其定义中的偏导数。对于内部数据点,使用中心差分计算偏导数。对于沿边缘的数据点,使用单侧(正向)差分计算偏导数。

例如,假设有一个二维向量场 F,它由位于 XY 位置的矩阵 FxFy 表示,大小为 m×n。位置是由 [X,Y] = meshgrid(x,y) 创建的二维网格,其中 x 是长度为 n 的向量,y 是长度为 m 的向量。然后 curl 计算偏导数 ∂Fy / ∂x∂Fx / ∂y,如下所示

  • dFy_dx(:,i) = (Fy(:,i+1) - Fy(:,i-1))/(x(i+1) - x(i-1))

    dFx_dy(j,:) = (Fx(j+1,:) - Fx(j-1,:))/(y(j+1) - y(j-1))

    (对于内部数据点。)

  • dFy_dx(:,1) = (Fy(:,2) - Fy(:,1))/(x(2) - x(1))

    dFy_dx(:,n) = (Fy(:,n) - Fy(:,n-1))/(x(n) - x(n-1))

    (对于左边缘和右边缘的数据点。)

  • dFx_dy(1,:) = (Fx(2,:) - Fx(1,:))/(y(2) - y(1))

    dFx_dy(m,:) = (Fx(m,:) - Fx(m-1,:))/(y(m) - y(m-1))

    (对于上边缘和下边缘的数据点。)

向量场的数值旋度等于 curlz = dFy_dx - dFx_dy,角速度为 cav = 0.5*curlz

扩展功能

版本历史记录

在 R2006a 之前推出