Main Content

curl

ベクトル場の回転と角速度

説明

[curlx,curly,curlz,cav] = curl(X,Y,Z,Fx,Fy,Fz) は、ベクトル成分 FxFy、および Fz をもつ 3 次元ベクトル場の数値回転および角速度を計算します。出力 curlxcurly、および curlz は回転のベクトル成分を表し、cav は回転の角速度を表します。

ベクトル成分 FxFyFz の座標を定義する配列 XYZ は、単調でなければなりませんが、等間隔でなくてもかまいません。meshgrid で生成される XYZ は同じサイズの 3 次元配列でなければなりません。

[curlx,curly,curlz,cav] = curl(Fx,Fy,Fz) は、サンプル点の既定のグリッドを想定します。既定のグリッド点 XYZ[m,n,p] = size(Fx) である式 [X,Y,Z] = meshgrid(1:n,1:m,1:p) で決定されます。この構文は、点の間の絶対距離を考慮せず、メモリを節約する場合に使用します。

[curlz,cav] = curl(X,Y,Fx,Fy) は、ベクトル成分 Fx および Fy をもつ 2 次元ベクトル場の数値回転および角速度を計算します。出力 curlz は回転の z 成分を表し、cav は回転の角速度を表します。

FxFy の座標を定義する行列 XY は、単調でなければなりませんが、等間隔でなくてもかまいません。meshgrid で生成される XY は同じサイズの 2 次元行列でなければなりません。

[curlz,cav] = curl(Fx,Fy) は、サンプル点の既定のグリッドを想定します。既定のグリッド点 XY[m,n] = size(Fx) である式 [X,Y] = meshgrid(1:n,1:m) で決定されます。この構文は、点の間の絶対距離を考慮せず、メモリを節約する場合に使用します。

cav = curl(___) は、ベクトル場の角速度のみを返します。

すべて折りたたむ

気流を表す 3 次元ベクトル場のデータセットを読み込みます。データセットにはサイズが 35 x 41 x 15 の配列が含まれます。

load wind

ベクトル場の数値回転と角速度を計算します。

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

計算された回転と角速度の 2 次元スライスを表示します。z(:,:,1) のデータをスライスします。ここで z 座標は -0.002 と等しくなります。

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

pcolor を使用して 2 次元座標で角速度をプロットします。quiver を使用して、ベクトル場の x 成分および y 成分を表示します。

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 平面の 3 次元回転の成分をプロットします。

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.

2 次元座標とベクトル場を指定します。

[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.

2 次元ベクトル場の数値回転と角速度を求めます。回転と角速度の値はすべての入力座標で定数です。

[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

気流を表す 3 次元ベクトル場のデータセットを読み込みます。データセットにはサイズが 35 x 41 x 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.

入力引数

すべて折りたたむ

入力座標。行列または 3 次元配列として指定します。

  • 2 次元ベクトル場の場合、XY は同じサイズの 2 次元行列でなければならず、そのサイズは 22 列以上でなければなりません。

  • 3 次元ベクトル場の場合、XYZ は同じサイズの 3 次元配列でなければならず、そのサイズは 2 x 2 x 2 以上でなければなりません。

データ型: single | double
複素数のサポート: あり

入力座標のベクトル場の成分。行列または 3 次元配列として指定します。FxFyFzXYZ と同じサイズでなければなりません。

データ型: single | double
複素数のサポート: あり

出力引数

すべて折りたたむ

入力座標の回転のベクトル成分。行列または 3 次元配列として返されます。

入力座標の角速度。行列または 3 次元配列として返されます。

詳細

すべて折りたたむ

数値回転および角速度

ベクトル場の "数値回転" は、特定の点でのベクトル場の既知の値を使用して回転の成分を推定する方法です。

3 つの変数の 3 次元ベクトル場 F(x,y,z)=Fx(x,y,z)e^x+Fy(x,y,z)e^y+Fz(x,y,z)e^z の場合、F の回転の定義は次のようになります。

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

角速度は ω=12(×F)·F^ として定義されます。

2 つの変数の 2 次元ベクトル場 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 は、有限差分を使用してその定義で偏導関数を計算します。内部データ点の場合、偏導関数は "中心差分" を使用して計算されます。端のデータ点の場合、偏導関数は "片側 (前進) 差分" を使用して計算されます。

たとえば、位置が XY でサイズが mn 列の行列 FxFy で表される 2 次元ベクトル場 F について考えます。位置は [X,Y] = meshgrid(x,y) で作成された 2 次元グリッドです。ここで、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 より前に導入