Programming/MATLAB

[MATLAB] 함수 정의 3가지 방법

임아톰 2018. 7. 20. 11:48

 

 

*이번 여름 방학에는 MATLAB 공부를 하려고합니다. 공부 중간에 정리하면 좋을만한 내용은 간략하게 정리해서 올리려 합니다. 피드백은 언제나 환영합니다 :)

 

함수 정의하는 법으로 그 시작을 하려고 합니다. 파이썬 수업 때 교수님께서 하신 말씀이 생각나네요. 코딩 초보는 내장 함수를 잘 사용하는 사람이 코딩 잘하는 사람이고 코딩 중수부터는 함수를 잘 만드는 사람이 코딩 잘하는 사람이고 코딩 고수의 세계에선 함수를 잘 설계하는 사람이 코딩 잘하는 사람이라고... 코딩의 세계는 함수로 시작해서 함수로 끝난다고 해도 과언이 아닌 것 같네요. 함수가 대체 뭐길래 이렇게 중요할까요.

 

「코딩의 대상이 되는 것은 크게 3가지가 있습니다. 바로 상수와 변수와 함수입니다. 이게 다냐고    요? 크게 보면 그렇습니다. …하지만 함수는 우리가 사는 우주를 지배하고 있고, 수학의 세계에서도 가장 중요한 위상을 차지합니다. 그렇기 때문에 현실 세계를 반영한 비트의 세계도 상수와 변수와 함수들에 의해 정의될 수밖에 없습니다.」

 

-세상을 만드는 글자 코딩 , 박준석

 

함수(數)의 함은 상자를, 수는 숫자를 의미 합니다. 셈하는 상자 정도로 말할 수 있겠네요. 상자에 숫자를 넣었더니 어떤 숫자가 튀어나오더라 , 여기서 함수는 입력과 출력 둘 간의 관계를 짝지어 줍니다. 이 때 입력과 출력은 변수일 수도 혹은 상수일 수도 있죠. 자주 사용하는 연산(셈)이 있다면 매 번 연산을 해줄 것이 아니라 그 연산을 상자로 뚝 딱 만들어 놔서 해결할 수 있어요.

 

MATLAB에서도 아주 간단하게 함수를 정의 할 수 있더군요!! MATLAB에서 함수를 정의하는 방법 3가지를 소개합니다!

 

-----------------------------------------------------------------------------------------------------------

 

1. global function 

 

2. local function

 

3. 익명함수

 

----------------------------------------------------------------------------------------------------------

 

1. global function ( primary function)

 

MATLAB의 가장 일반적인 함수 정의 방법입니다.  함수 전용 파일을 만들어서 함수를 사용할 때 그 파일을 불러오는 방식인데요. MATLAB에서 파일 하면 M파일이라고 생각하시면 됩니다.(MATLAB의 M인 것 같네요) 이 M 파일은 

 

 

'새로 만들기' 를 눌러서 생성하거나 명령 창에 edit를 타이프 하셔서 생성할 수 있습니다.

그럼 이렇게 편집기가 생성됩니다.

 

 

이제 이 곳M 파일 편집기에 함수를 작성하면 됩니다.

 

함수 만드는 법은 아주 간단합니다. 간단한 예시를 하나 보시죠. 두 수 중 큰수를 출력하는 함수입니다.

 

 

함수 M-파일의 첫 번째 줄은 function으로 시작합니다. 이를 통해 MATLAB은 이 파일을 함수로 인식합니다. 

function을 입력해주신 다음에는 y = f ( x ) 형태로 함수를 작성하면 됩니다. 여기서 y는 출력, x는 입력 그리고 f는 함수 이름 입니다. 주의 하실 점은 함수 이름을 지어주실 때, MATLAB의 다른 내장 함수 이름과 겹치지 않도록 해야합니다. gamma 같은 함수 이름은 이미 존재하기 때문에 피해야 합니다.

참고로 함수 형식은 입출력 개수에 따라 다음과 같은 형태도 가능합니다.

function A = RectArea(a,b) → 2개 입력, 1개 출력

function [V, S] = SphereVolArea(r)  1개 입력, 2개 출력

function trajectory(v,h,g)  3개 입력, 출력 없음

 

첫 번 째 줄 다음에 오는 주석 부분(%다음의 초록줄)은 이 함수가 무엇을 위한 것인지 설명해주는 코멘트를 써주시면 됩니다.  입력한 내용은

help 함수이름을 타이프하면 주석부분의 코멘트가 이렇게 나타납니다. 

 

이제 function body 부분에는 함수 작동 내용을 코딩하시면 됩니다. 이제 함수의 body 부분까지 코딩을 완료했다면 저장까지 해주어야 함수 정의가 완성 됩니다. 저장 버튼 혹은 Ctrl+s를 눌러서 저장합니다.

저장 시에는 꼭 함수 이름과 파일 이름을 동일하게 저장해야 합니다. 그렇게 하지 않을 경우 매우 머리 아픈일이 발생할 수 있다고 합니다.

 

2. local function (sub function)

부함수(sun function)은 함수 내부의 또 다른 함수를 의미합니다. 함수 안에 또 다른 함수를 필요한 만큼 만들 수 있습니다. 함수가 복잡해질 경우 일을 쪼개서 하나 하나 씩 해결하는 게 쉽습니다. 이 쪼갠 것들을 서로 다른 부함수로 만들어 메인함수에 사용하면 됩니다. 예시와 함께 보시죠.

 

 

 

여기서 메인함수는 f이고 부함수는 f2와 f3 입니다. 마찬가지로 함수이름과 파일명이 f로 동일 한 것을 확인할 수 있습니다.

주의할 점은 부함수에서 사용하는 변수들은 그 안에서만 사용 가능하고 부함수는 함수 바깥에서 사용할 수 없습니다.

 

 

3. 익명함수 (anonymous function)

익명함수는 한 줄 함수입니다. 

간단한 함수를 정의하고 싶을 때, M 파일을 생성하여 함수를 정의하는 대신 간단히 한줄로 함수를 정의할 수 있습니다. 정의하는 방법은 다음과 같습니다.

 

name = @ (arglist) expr

 

예시와 함께 보시죠.

f = @(x) exp(x)-1 한 줄을 입력하면 다음과 같이 함수 f가 정의됩니다.

 

f(2)와 같이 입력을 넣으시면 출력 값을 얻을 수 있습니다.

 

입력 값을 여러개 받는 것도 가능합니다.

exr = @ ( x, y) sqrt(x.^2 + y.^2)

 

#추가적으로 알면 도움이 될만한 것들

함수를 작성 하다보면 입력 인자의 수에 따라 실행을 다르게 하고 싶을 수 있습니다. 그런 경우에는 nargin(Number of argument of Input)을 사용하면 됩니다. nargin은 현재 실행 중인 함수 호출에 주어진 함수의 입력 개수를 반환 합니다. 

nargin을 이용하면 다음과 같이 코딩할 수 있습니다.

다음과 같이 입력인자가 1개 일 때와 2개 일 떄 각 각 그에 맞는 실행 결과를 확인할 수 있습니다.

 

다음으로 인수를 개수와 무관하게 받고 싶을 때는 varargin(Variable Argument Input)을 이용하면 됩니다. varargin은 1 X N 셀형 배열이 되어 입력 값을 저장 합니다. 다음과 같이 사용가능 해요.

 

 

 

 

여기까지 MATLAB에서 함수 정의하는 방법 3가지에 대해서 알아봤어요. 이제 막 걸음마 단계지만 MATLAB의 강력함이 느껴집니다! 고수가 되는 그날 까지 ㅎㅎ 차근 차근 알아가보려 합니다 :)

 

 

 

 

 

 

반응형