SturdyCobble's Study Note

[MATLAB] 08. 함수 본문

프로그래밍/MATLAB

[MATLAB] 08. 함수

StudyingCobble 2019. 9. 1. 00:56

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


※ 이 글은 최소한 Python과 같은 프로그래밍 언어를 한 번 이상 접한 사람을 독자로 가정하여 작성되었습니다. 사용버전은 R2019a기준입니다. 또한 기본적인 프로그램 조작보다는 프로그래밍에 초점을 맞추어 작성하였습니다.

이번 글에서는 함수에 대해 다룹니다. 수학적인 함수가 아닌 프로그래밍에서의 함수입니다.

 

MATLAB에서 함수는 독특한 지위를 갖는데, 함수가 별도의 파일로 존재할 때 함수 이름은 파일 명과 같아야 하며, 같은 파일 내에 존재하는 경우 스크립트의 가장 마지막에 위치해야 합니다. 아래 예시를 참고해봅시다.(파일명과 같아 메인이 되는 함수는 end가 없어도 됩니다.)

function w = f(x,y,z)
w = x.^2 + y.^2 + z.^2;
end

 

수학적인 함수와 비슷한 형태로 정의해봤습니다. (실제 상황에서는 저렇게 하다간 함수 이름이 다 겹쳐 오류가 날 수 있으니 소규모 코드가 아니면 저렇게 짧은 변수나 함수명은 지양해야 합니다.) function으로 시작하는 점만 빼면 매우 수학수학합니다. 또한, Python처럼 함수가 중첩되는 것도 가능합니다.

f(1,2,3)

function w = f(x,y,z)
	w = x.^2 + y.^2 + z.^2; % 함수 호출마다 값이 나오는 걸 막으려면 세미콜론을 사용하세요
end
------------------실행 결과-----------------
ans =

    14

 

여러 인자는 다음과 같이 출력합니다.

[a,b,c]=func1(1,2,3)
function [x,y,z] = func1(u,v,w)
    x = u*v;
    y = v*w;
    z = w*u;
end

 

또한, Python의 docstring처럼 다음과 같이 함수에 설명을 넣어 help함수로 접근할 수 있습니다.

 

% USAGE : func01 (x, y, z)
% Return x.^2 + y.^2 + z.^2
function w = func01(x,y,z)
w = x.^2 + y.^2 + z.^2;
end

---------------------------------
>> help func01
   USAGE : func01 (x, y, z)
   Return x.^2 + y.^2 + z.^2

 

만약, 함수가 다른 파일에 존재한다면, trace, rank와 같은 함수가 아닌 이상 특정 범위에서만 사용가능합니다. 스크립트 내에 존재하는 함수는 로컬함수라고 하며, 파일명이 함수명인 함수는 메인 함수라고 부릅니다. (함수 이름을 main으로 하면 자동으로 파일명과 같은 함수로 인식됩니다.) 

 

 함수 파일이 따로 존재하는 경우 그냥 바로 사용할 수 있는 범위는 같은 폴더입니다. 그 외의 경우는 아래 링크를 참고해보세요.

https://kr.mathworks.com/matlabcentral/answers/31113-call-functions-from-subpath

 

call functions from subpath - MATLAB Answers - MATLAB Central

I am posting this as a new answer because I think it is long enough, but it is based on a comment to my previous answer. If you look at how MATLAB handles the paths of its toolboxes, you will see that all directories and subdirectories get added to the pat

kr.mathworks.com

 

 프라이빗 함수는 작업 공간 내 private 폴더에 저장된 함수로 바로 위 폴더에서만 접근 가능합니다. 

 

 

한편, 함수의 이름이 없는 '익명 함수'가 MATLAB에 존재합니다. Python으로 따지면, lambda 표현식과 비슷한데요, 아래와 같이 작성합니다.

 

f = @(인수들)표현식

 

아래와 같이 함수 핸들을 입력값으로 전달하는 것도 가능합니다.

fplot(@(x)sin(x.^2),[0,10])

이름이 없다는 것 뿐만 아니라 이렇게 함수 핸들을 전달할 때 유용하게 이용됩니다.

 

때로는 함수의 입력값 중 일부를 무시할 수 있어야 하는 경우도 있을 것입니다. 아래의 경우 

 

 

이러한 함수들안에 사용된 변수는 그 함수 내에서만 통용됩니다.(지역 변수)

하지만, 따로 스크립트 파일 내에서 통용되는 전역 변수를 만들 수도 있습니다. 일반적으로 대문자만을 이용하여 작명하는 게 구분에 도움이 된다고 합니다. C언어의 매크로 상수와 비슷한 맥락인듯 합니다.

 

----------------mole.m--------------------
function w = mole(n)
global AVOGADRO
w = AVOGADRO*n;
----------------명령 창-----------------------
>>AVOGADRO = 6.02e23;
>>mole(10)
ans =

   []
>>global AVOGADRO
>>AVOGADRO = 6.02e23;
>>mole(10)
ans =

   6.02e+24

 

 

 

Comments