curl

向量场的旋度和角速度

说明

示例

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

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

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

示例

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

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

[ curlz , cav ] = curl( Fx , Fy ) 假定一个默认的样本点网格。默认网格点 X Y 由表达式 [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 显示向量场的 x y 分量。

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

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

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

指定二维坐标和向量场。

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

绘制向量场分量 Fx Fy

quiver(x,y,Fx,Fy)

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

[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 = 9 0 x = 1 3 4 显示 y z 平面的角速度,用 y = 5 9 显示 x z 平面的角速度,用 z = 0 显示 x y 平面的角速度。使用颜色指示向量场中指定位置的角速度。

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);

输入参数

全部折叠

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

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

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

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

输入坐标处的向量场分量,指定为矩阵或三维数组。 Fx Fy Fz 的大小必须与 X Y Z 的大小相同。

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

输出参量

全部折叠

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

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

详细信息

全部折叠

数值旋度和角速度

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

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

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

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

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

curl F = × F = ( F y x F x y ) e ^ z .

角速度定义为 ω = 1 2 ( × F ) z = 1 2 ( F y x F x y ) e ^ z

算法

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

例如,假设有一个二维向量场 F ,它由位于 X Y 位置的矩阵 Fx Fy 表示,大小为 m × n 。位置是由 [X,Y] = meshgrid(x,y) 创建的二维网格,其中 x 是长度为 n 的向量, y 是长度为 m 的向量。然后 curl 计算偏导数 ∂F y / ∂x ∂F x / ∂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 之前推出

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.