MATLAB 함수 완전 정복: 정의, 워크스페이스, 입출력, 익명/중첩/비공개 함수
함수 기초
함수는 특정 작업을 수행하는 문장들의 집합입니다. MATLAB에서 함수는 별도 파일에 정의되며, 파일명과 함수명이 동일해야 합니다.
함수는 자신만의 로컬 워크스페이스에서 변수를 다루며, 이는 MATLAB 명령 프롬프트의 기본 워크스페이스(base workspace)와 분리됩니다.
여러 입력 인수를 받고 여러 출력 인수를 반환할 수 있습니다.
함수 구문
function [out1,out2,...,outN] = myfun(in1,in2,in3,...,inN)
예제: 최댓값 구하는 함수 mymax
파일명: mymax.m
function max = mymax(n1, n2, n3, n4, n5)
% 이 함수는 입력된 다섯 숫자 중 최댓값을 계산합니다.
max = n1;
if (n2 > max) max = n2; end
if (n3 > max) max = n3; end
if (n4 > max) max = n4; end
if (n5 > max) max = n5; end
end
- 첫 줄은
function 키워드로 시작하며 함수명과 인수 순서를 정의합니다.
- 함수 문 바로 다음 주석줄은 도움말 텍스트가 됩니다.
help mymax 입력 시 출력됩니다.
호출 예:
mymax(34, 78, 89, 23, 11)
결과: ans = 89
익명 함수(Anonymous Functions)
한 줄 표현식으로 정의되는 인라인 함수입니다. 파일 생성 없이 명령줄이나 스크립트/함수 내부에서 바로 만들 수 있습니다.
f = @(arglist) expression
예제: 거듭제곱 익명 함수
power = @(x, n) x.^n;
result1 = power(7, 3) % 343
result2 = power(49, 0.5) % 7
result3 = power(10, -10) % 1e-10
result4 = power(4.5, 1.5) % 9.5459
주 함수(Primary)와 하위 함수(Sub-functions)
익명 함수가 아닌 함수는 파일 내에 정의해야 합니다. 각 파일에는 필수 주 함수가 맨 위에 오고, 그 뒤에 선택적 하위 함수들이 옵니다.
- 주 함수: 파일 외부(명령줄, 다른 함수)에서 호출 가능
- 하위 함수: 같은 파일 내의 주 함수와 다른 하위 함수에서만 호출 가능
예제: 이차방정식 근 구하기 (하위 함수 disc 사용)
파일명: quadratic.m
function [x1,x2] = quadratic(a,b,c)
% 이차방정식 근을 반환. 입력: x^2, x, 상수항 계수
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
function dis = disc(a,b,c) % 하위 함수
% 판별식 계산
dis = sqrt(b^2 - 4*a*c);
end
호출: quadratic(2,4,-4) → ans = 0.7321
중첩 함수(Nested Functions)
함수 본문 안에 다른 함수를 정의할 수 있습니다. 중첩 함수는 외부 함수의 워크스페이스를 공유합니다.
function x = A(p1, p2)
...
function y = B(p3)
...
end
...
end
예제: 이차방정식에서 disc를 중첩 함수로
파일명: quadratic2.m
function [x1,x2] = quadratic2(a,b,c)
function disc % 중첩 함수
d = sqrt(b^2 - 4*a*c);
end
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
호출: quadratic2(2,4,-4) → ans = 0.73205
비공개 함수(Private Functions)
특정 함수 그룹에서만 보이게 하려면 private 서브폴더에 넣습니다. 상위 폴더의 함수들만 접근 가능합니다.
예제: disc를 private 함수로 분리
- 작업 디렉토리에
private 폴더 생성 후 disc.m 저장
- 작업 디렉토리에
quadratic3.m 생성
% private/disc.m
function dis = disc(a,b,c)
dis = sqrt(b^2 - 4*a*c);
end
% quadratic3.m
function [x1,x2] = quadratic3(a,b,c)
d = disc(a,b,c); % private 함수 호출
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
호출: quadratic3(2,4,-4) → ans = 0.73205
전역 변수(Global Variables)
여러 함수 간에 변수를 공유하려면 모든 함수에서 global로 선언합니다. 기본 워크스페이스에서도 접근하려면 명령줄에서 선언합니다. 대문자 이름을 권장합니다.
예제: 평균 계산에 전역 변수 TOTAL 사용
% average.m
function avg = average(nums)
global TOTAL
avg = sum(nums) / TOTAL;
end
% 스크립트
global TOTAL; TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n) % 결과: 35.5