HOWTO · MATLAB

MATLAB의 meshgrid() 함수

MATLAB의 meshgrid()가 좌표 벡터를 행렬로 변환하는 방법을 배우고, 2차원 그리드 전체에서 함수를 평가하며, 결과를 surf()로 시각화합니다.

이 페이지의 내용

MATLAB의 meshgrid()는 좌표 벡터를 좌표 행렬로 변환하므로, 2차원 그리드의 모든 점에서 함수를 평가하고 결과 값을 그릴 수 있습니다. 아래 예제는 행렬의 방향을 명확히 하기 위해 x 좌표와 y 좌표의 개수를 다르게 사용합니다.

meshgrid()가 좌표를 대응시키는 방식

소문자 입력 벡터로 meshgrid(x, y)를 호출합니다. 대문자 행렬 X와 Y를 반환합니다. X의 각 행은 x 좌표를 반복하고, Y의 각 열은 하나의 y 좌표를 반복합니다. 행은 y의 값에 대응하고, 열은 x의 값에 대응합니다.

예를 들어, x = 1:4는 값이 4개이고 y = 1:6은 값이 6개입니다. 결과 행렬 X와 Y는 각각 6행 4열입니다. 그리드를 확인하거나 함수 값의 행렬과 맞출 때 이 방향을 기억해 두면 유용합니다.

2차원 좌표 그리드 만들기

이 독립 실행이 가능한 Octave 호환 예제는 정사각형이 아닌 그리드를 만들고, 모든 좌표 쌍에서 함수를 평가하며, 결과 표면을 그립니다. 좌표 패턴의 간략한 모습과 행렬 크기를 출력합니다.

warning('off', 'Octave:gnuplot-graphics');
set(0, 'defaultfigurevisible', 'off');
x = 1:4;
y = 1:6;
[X, Y] = meshgrid(x, y);
Z = X.^2 + Y.^2;

fprintf('X(1,:) =');
fprintf(' %g', X(1,:));
fprintf('\nY(:,1) =');
fprintf(' %g', Y(:,1));
fprintf('\nsize(Z) = %d %d\n', size(Z));
surf(X, Y, Z);

출력된 첫 행은 X가 각 행에서 1 2 3 4를 반복한다는 것을 보여줍니다. Y의 첫 열은 1부터 6까지의 y 좌표를 보여주며, 각 값이 그 행 전체에 반복됩니다. 따라서 X(i,j)와 Y(i,j)의 각 쌍이 하나의 좌표 쌍을 이루고, Z(i,j)는 그 지점에서의 함수 값을 저장합니다. .^ 연산자는 행렬의 각 원소를 제곱합니다. 일반적인 행렬 거듭제곱으로는 이 원소별 계산을 표현할 수 없습니다.

X(1,:) = 1 2 3 4
Y(:,1) = 1 2 3 4 5 6
size(Z) = 6 4

그리드 위에서 함수를 평가하고 그리기

이 예제는 좌표 행렬로부터 Z = X.^2 + Y.^2를 계산한 뒤 X, Y, Z를 surf()에 전달합니다. 이 워크플로에서는 그려지는 각 높이가 좌표 쌍에 대응하도록, Z의 행 수와 열 수가 X 및 Y와 같아야 합니다. 입력 벡터 중 하나를 변경하면 meshgrid()가 그리드 차원을 변경하고, 원소별 식이 그에 맞는 값을 계산합니다.

함수 수준을 위에서 내려다보는 뷰에는 surf() 대신 MATLAB의 contour(X, Y, Z)가 같은 행렬을 사용할 수 있습니다. 이는 같은 값의 곡선을 시각화합니다. 여기서 추가 실행 예제가 아니라 대체 그리기 호출입니다.

3차원 좌표 그리드 만들기

3차원 좌표 그리드는 체적 전체에서 평가되는 양처럼 함수가 세 개의 공간 좌표에 의존할 때 유용합니다. 이 문서에서는 두 벡터를 사용하는 meshgrid(x, y) 워크플로를 다루며, 3차원 호출 구문이나 출력 차원을 명시하지 않습니다. 세 번째 좌표에 이 접근법을 적용하기 전에, 사용하는 MATLAB 릴리스의 문서를 확인하세요.