본문 바로가기
Matlab

[Matlab] z = f(x,y) 푸는 방법 : meshgrid

by Mene 2023. 4. 24.
반응형

공학 문제에서 다변수 함수 z = f(x,y)를 사용하는 경우가 있다.

 

이런 문제를 풀기 위해 for문을 돌려 x축으로 값을 나열하고, y축으로 값을 나열하여 풀 수도 있다.

 

하지만 matlab에서는 meshgrid를 사용하여 x,y 대한 값을 2차원 grid 형태(좌표 (x,y))로 변환하는 기능을 가지고 있다.

 

이를 이용하면 행렬의 성분끼리의 연산을 통해 z=f(x,y)를 쉽게 계산할 수 있다.

 

 

 

 

먼저 meshgrid에 대해 알아보면 형태는 다음과 같다.

 

[X,Y] = meshgrid(x,y)

 

x, y는 벡터의 형태이고(1*N 행렬), meshgrid를 사용하면 X,Y는 각각 2차원 행렬로 각 좌표에 해당하는 x,y값을 가지게 된다.

 

 

 

 

예시를 한 번 들어보자. x좌표를 0부터 10까지 2의 간격으로 가지게 하고, y좌표를 10에서 50까지 10의 간격으로 가지게 한 다음 meshgrid를 사용해보자.

 

x=0:2:10;
y=10:10:50;
 
[X,Y]=meshgrid(x,y)
 
 

 

x 좌표는 y의 값에 상관이 없으므로 같은 열에 대해서 같은 값을 가지고, y 좌표는 x값에 상관이 없으므로 같은 행에 대해서 같은 값을 가지는 것을 알 수 있다.

 

 

 

 

그럼 이제 이것으로 z=f(x,y)를 풀어보자.

 

z=3xy+x/y 라 한다면 이를 풀기 위해선 meshgrid를 사용해 x,y에 대한 2차원 grid를 생성하고, 행렬의 성분에 대한 곱과 나누기를 통해 (x,y)에서 z값을 행렬 형태로 얻을 수 있다.

 

코드는 다음과 같다.

 

x=0:2:10;
y=10:10:50;
 
[X,Y]=meshgrid(x,y);
 
z=3*X.*Y+X./Y

 

 

여기서 X.*Y와 X./Y는 각 성분에 대해 곱해야 하기 때문에 .을 사용하였다.

 

따라서 meshgrid를 통해 좌표를 형성하면, 행렬 곱을 사용해 x,y에서 z의 값을 빠르게 계산할 수 있다.

반응형

댓글