공학 문제에서 다변수 함수 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 좌표는 y의 값에 상관이 없으므로 같은 열에 대해서 같은 값을 가지고, y 좌표는 x값에 상관이 없으므로 같은 행에 대해서 같은 값을 가지는 것을 알 수 있다.
그럼 이제 이것으로 z=f(x,y)를 풀어보자.
z=3xy+x/y 라 한다면 이를 풀기 위해선 meshgrid를 사용해 x,y에 대한 2차원 grid를 생성하고, 행렬의 성분에 대한 곱과 나누기를 통해 (x,y)에서 z값을 행렬 형태로 얻을 수 있다.
코드는 다음과 같다.
여기서 X.*Y와 X./Y는 각 성분에 대해 곱해야 하기 때문에 .을 사용하였다.
따라서 meshgrid를 통해 좌표를 형성하면, 행렬 곱을 사용해 x,y에서 z의 값을 빠르게 계산할 수 있다.
'Matlab' 카테고리의 다른 글
[Matlab] 문자열 행렬에서 일치하는 문자 인덱스 찾기 : strcmp, logical array (0) | 2023.04.24 |
---|---|
[Matlab] logical 배열(array)? (0) | 2023.04.24 |
[Matlab] 조건을 하나씩 대입하며 작동하는 함수 만들기 : 익명함수, arrayfun, 함수 핸들 (0) | 2023.04.23 |
[Matlab] 여러개의 조건에서 값 계산 : 행렬 성분끼리 곱하기, try-catch (0) | 2023.04.23 |
Matlab 실습 15.mesh, surf (0) | 2022.12.24 |
댓글