파일 내에서 함수 생성하기
스크립트와 함수 모두에서 프로그램 파일에 일련의 명령을 저장하여 해당 명령을 재사용할 수 있습니다. 사용자가 명령줄에 입력하는 것과 같은 형식으로 명령을 저장하기 때문에 스크립트는 가장 간단한 유형의 프로그램이라 할 수 있습니다. 함수에서는 입력값을 전달하고 출력값을 반환할 수 있으므로 함수가 더 유연합니다. 예를 들어, fact라는 함수는 숫자(n)의 계승을 계산하고 그 결과(f)를 반환합니다.
function f = fact(n)
f = prod(1:n);
end
이 함수 유형은 명령줄이 아니라 파일 내에서 정의해야 합니다. 대개 자체 파일에 함수를 저장합니다. MATLAB®은 프로그램과 파일 이름을 연결하므로 이런 경우 함수와 파일에 동일한 이름을 사용하는 것이 좋습니다(이 예제에서는 fact.m 사용). 현재 폴더나 MATLAB 검색 경로에 있는 폴더에 파일을 저장합니다.
MATLAB과 함께 설치되는 함수에 적용되는 동일한 구문 규칙을 사용하여 명령줄에서 함수를 호출할 수 있습니다. 예를 들어, 5의 계승을 계산합니다.
x = 5;
y = fact(5)
y =
120
R2016b부터는 스크립트 파일의 끝에 함수를 포함시켜 함수를 저장할 수도 있습니다. 예를 들어, 몇 가지 명령과 두 개의 함수 fact 및 perm을 사용하여 mystats.m이라는 파일을 만듭니다. 다음 스크립트는 (3,2)의 순열을 계산합니다.
x = 3;
y = 2;
z = perm(x,y)
function p = perm(n,r)
p = fact(n)/fact(n-r);
end
function f = fact(n)
f = prod(1:n);
end
명령줄에서 스크립트를 호출합니다.
mystats
z =
6
함수 정의 , 출력인수
1) 1개 output
function myOutput = myFunction(x)
2) 여러개 output
function [one,two,three] = myFunction(x)
3) output 없을 경우
function myFunction(x)
or
function [] = myFunction(x)
함수의 유형
로컬 함수(Local Function)와 중첩 함수(Nested Function) - 파일 내에 존재
프로그램 파일은 여러 함수를 포함할 수 있습니다. 로컬 함수와 중첩 함수는 프로그램을 보다 작은 작업으로 나누어 코드를 읽고 유지하기 쉽게 만드는 데 유용합니다.
로컬 함수는 동일한 파일 내에서 사용할 수 있는 서브루틴입니다. 로컬 함수는 프로그래밍 작업을 나눌 수 있는 가장 일반적인 방법입니다. 함수 정의만 포함하는 함수 파일에서, 로컬 함수는 파일의 메인 함수 뒤에 어떤 순서로든 나타날 수 있습니다. 명령과 함수 정의를 포함하는 스크립트 파일에서, 로컬 함수는 파일의 끝에 있어야 합니다. 스크립트 내의 함수 사용은 R2016b 이상에서 지원됩니다.
예를 들어, 메인 함수 myfunction, 두 개의 로컬 함수 squareMe 및 doubleMe를 포함하는 myfunction.m이라는 함수 파일을 생성해 보겠습니다.
function b = myfunction(a)
b = squareMe(a)+doubleMe(a);
end
function y = squareMe(x)
y = x.^2;
end
function y = doubleMe(x)
y = x.*2;
end
로컬 함수는 myfunction에서만 사용할 수 있지만 메인 함수는 명령줄 또는 다른 프로그램 파일에서 호출할 수 있습니다.
myfunction(pi)
ans =
16.1528
중첩 함수는 다른 함수 내에 완전히 포함됩니다. 중첩 함수와 로컬 함수 간의 주요 차이점은 중첩 함수는 부모 함수에 정의된 변수를 인수로 명시적으로 전달하지 않고도 사용할 수 있다는 점입니다.
중첩 함수는 구성요소 간에 데이터를 전달하는 응용 프로그램과 같이 서브루틴이 데이터를 공유하는 경우 유용합니다. 예를 들어, 슬라이더 또는 편집 가능한 텍스트 상자를 사용하여 0에서 1 사이의 값을 설정할 수 있는 함수를 생성해 보겠습니다. 콜백에 중첩 함수를 사용하는 경우 슬라이더 및 텍스트 상자는 값과 서로의 핸들을 명시적으로 전달하지 않고도 공유할 수 있습니다.
function myslider
value = 0;
f = figure;
s = uicontrol(f,'Style','slider','Callback',@slider);
e = uicontrol(f,'Style','edit','Callback',@edittext,...
'Position',[100,20,100,20]);
function slider(obj,~)
value = obj.Value;
e.String = num2str(value);
end
function edittext(obj,~)
value = str2double(obj.String);
s.Value = value;
end
end
'MATLAB' 카테고리의 다른 글
| MATLAB 이미지인식 만들기 (0) | 2022.01.30 |
|---|---|
| MATLAB 조건문 / if switch, for , while ... (0) | 2022.01.24 |
| matlab 완전 기초 주석추가 / 객체지향 (0) | 2022.01.22 |
| 행렬과 배열 (0) | 2022.01.21 |
| MATLAB 파일 읽기 (0) | 2022.01.21 |
댓글