Main Content

curl

벡터장의 회전(Curl)과 각속도(Angular Velocity)

설명

예제

[curlx,curly,curlz,cav] = curl(X,Y,Z,Fx,Fy,Fz)는 벡터 성분 Fx, Fy, Fz를 갖는 3차원 벡터장의 수치적 회전과 각속도를 계산합니다. 출력값 curlx, curly, curlz는 회전의 벡터 성분을 나타내고, cav는 회전의 각속도를 나타냅니다.

벡터 성분 Fx, Fy, Fz에 대한 좌표를 정의하는 배열 X, Y, Z는 단조(Monotonic) 배열이어야 하나, 간격이 균일할 필요는 없습니다. X, Y, Z는 동일한 크기의 3차원 배열이어야 하며, 이는 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를 갖는 2차원 벡터장의 수치적 회전과 각속도를 계산합니다. 출력값 curlz는 회전의 z 성분을 나타내고, cav는 회전의 각속도를 나타냅니다.

Fx, Fy에 대한 좌표를 정의하는 행렬 X, Y는 단조(Monotonic) 행렬이어야 하나, 간격이 균일할 필요는 없습니다. X, Y는 동일한 크기의 2차원 행렬이어야 하며, 이는 meshgrid로 생성할 수 있습니다.

[curlz,cav] = curl(Fx,Fy)는 샘플 점의 디폴트 그리드를 가정합니다. 디폴트 그리드 점 X, Y는 표현식 [X,Y] = meshgrid(1:n,1:m)으로 결정됩니다. 여기서 [m,n] = size(Fx)입니다. 메모리를 절약하고 점 간 절대 거리를 고려하지 않으려면 이 구문을 사용하십시오.

예제

cav = curl(___)은 벡터장의 각속도만 반환합니다.

예제

모두 축소

바람의 흐름을 나타내는 3차원 벡터장 데이터 세트를 불러옵니다. 데이터 세트는 크기가 35×41×15인 배열을 포함합니다.

load wind

벡터장의 수치적 회전과 각속도를 계산합니다.

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

계산된 회전과 각속도의 2차원 슬라이스를 표시합니다. z 좌표가 -0.002인 z(:,:,1)에서 데이터를 슬라이스합니다.

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

입력 인수

모두 축소

입력 좌표로, 행렬 또는 3차원 배열로 지정됩니다.

  • 2차원 벡터장의 경우, X, Y는 동일한 크기의 2차원 행렬이어야 하며, 크기는 2×2보다 작을 수 없습니다.

  • 3차원 벡터장의 경우, X, Y, Z는 동일한 크기의 3차원 배열이어야 하며, 크기는 2×2×2보다 작을 수 없습니다.

데이터형: single | double
복소수 지원 여부:

입력 좌표에서의 벡터장 성분으로, 행렬 또는 3차원 배열로 지정됩니다. Fx, Fy, FzX, Y, Z와 크기가 동일해야 합니다.

데이터형: 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에서 행렬 FxFy로 표현되는 크기 m×n의 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 이전에 개발됨