48
MATLAB MATLAB MATLAB 개개 개 개개 개개 개 개개 6 6 개 개개개개개 개개개 개개 개개 개 개개개개개 개개개 개개 개개 0 10 20 30 0 10 20 30 0 10 20 30

MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

  • Upload
    delano

  • View
    543

  • Download
    5

Embed Size (px)

DESCRIPTION

MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일. 강의 내용. 함수 파일의 작성 함수 파일의 구조 지역변수와 전역변수 함수파일의 저장 사용자정의 함수의 이용 스크립트 파일과 함수 파일의 비교 익명 함수와 인라인 함수 함수의 함수 부함수 중첩함수 응용예제. 서 론. - PowerPoint PPT Presentation

Citation preview

Page 1: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB

MATLABMATLAB 개요 및 응용개요 및 응용66 장 사용자정의 함수와 함수 파일장 사용자정의 함수와 함수 파일

010

2030

0

10

20

30

0

10

20

30

Page 2: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 2/48

강의 내용강의 내용

함수 파일의 작성함수 파일의 작성 함수 파일의 구조함수 파일의 구조 지역변수와 전역변수지역변수와 전역변수 함수파일의 저장함수파일의 저장 사용자정의 함수의 이용사용자정의 함수의 이용 스크립트 파일과 함수 파일의 비교스크립트 파일과 함수 파일의 비교 익명 함수와 인라인 함수익명 함수와 인라인 함수 함수의 함수함수의 함수 부함수부함수 중첩함수중첩함수 응용예제응용예제

Page 3: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 3/48

서 론서 론

수학에서 간단한 함수 수학에서 간단한 함수 ff((xx)) 는 주어진 는 주어진 xx 의 각 값에 유일한 값을 연관시킨다의 각 값에 유일한 값을 연관시킨다 . . 함수는 함수는 yy==ff((xx)) 로 표현할 수 있으며로 표현할 수 있으며 , , 일반적으로 일반적으로 ff((xx)) 는 는 xx 에 의한 수학적 에 의한 수학적 표현식이다표현식이다 . . 식의 식의 xx 에 값에 값 (( 입력입력 )) 을 대입하면 을 대입하면 yy 의 값의 값 (( 출력출력 )) 이 얻어진다이 얻어진다 . .

MATLABMATLAB 에는 많은 함수들이 에는 많은 함수들이 내장함수내장함수 (built-in function)(built-in function) 로 프로그램 되어 로 프로그램 되어 있으며있으며 , , 함수 이름과 입력인자함수 이름과 입력인자 (argument)(argument) 만 입력하면 결과를 얻을 수 있다만 입력하면 결과를 얻을 수 있다 . . 예예 ) sin(x), cos(x), sqrt(x), exp(x), log(x), …) sin(x), cos(x), sqrt(x), exp(x), log(x), …

내장함수가 아닌 함수의 값을 계산할 필요가 있을 때내장함수가 아닌 함수의 값을 계산할 필요가 있을 때 함수 식이 간단하고 한번만 계산하면 되는 경우 함수 식이 간단하고 한번만 계산하면 되는 경우 : : 프로그램의 일부로 작성프로그램의 일부로 작성 여러 입력인자들에 대해 여러 번 함수 값을 계산할 때 여러 입력인자들에 대해 여러 번 함수 값을 계산할 때 : : 사용자 정의사용자 정의 (user-(user-

defined)defined) 함수함수를 만들어 내장함수처럼 반복적으로 사용를 만들어 내장함수처럼 반복적으로 사용 FunctionFunction 은 프로그램 속의 부프로그램은 프로그램 속의 부프로그램 (subprogram)(subprogram) 으로서 입력데이터를 으로서 입력데이터를

이용하여 계산을 수행한 후 계산결과를 이용하여 계산을 수행한 후 계산결과를 function function 밖으로 출력해준다밖으로 출력해준다 . .

Page 4: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 4/48

함수 파일함수 파일 (Function file)(Function file)

반복적인 일련의 계산과정이 필요할 때반복적인 일련의 계산과정이 필요할 때 , , 또는 계산과정에서 만들어지거나 또는 계산과정에서 만들어지거나 잠시 필요한 중간 변수들에 관심이 없거나 감추고 싶을 때잠시 필요한 중간 변수들에 관심이 없거나 감추고 싶을 때 , , 즉 주어진 즉 주어진 입력에 대해 결과인 출력만을 얻고 싶을 때 함수 파일을 작성한다입력에 대해 결과인 출력만을 얻고 싶을 때 함수 파일을 작성한다 ..

FunctionFile

Input Input datadata

Input Input

argumentargumentOutput Output

datadata

Output Output

argumentargument

사용자 정의함수 예 사용자 정의함수 예 : : 직각삼각형의 두 변으로부터 빗변을 구하는 직각삼각형의 두 변으로부터 빗변을 구하는 함수함수

Function√(x2+y2)

xx=3 =3

yy=4=4zz=5=5

수학함수로 사용하는 용도 외에도 함수파일은 큰 프로그램의 수학함수로 사용하는 용도 외에도 함수파일은 큰 프로그램의 부프로그램으로 사용될 수 있다부프로그램으로 사용될 수 있다 . . 독립적으로 테스트가 가능한 독립적으로 테스트가 가능한 부프로그램들로 큰 프로그램을 작성하면부프로그램들로 큰 프로그램을 작성하면 , , 유지관리에 유리하다유지관리에 유리하다 .. C – functionC – function ,, FORTRAN – subroutine,FORTRAN – subroutine, PASCAL - PASCAL -

procedureprocedure

Page 5: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 5/48

함수 파일의 생성함수 파일의 생성

명령창에서 명령창에서 edit edit 명령을 입력명령을 입력하거나하거나 File File →New→M-file →New→M-file 메뉴메뉴 를 순서대로 를 순서대로선택하면선택하면 , , Editor/DebuggerEditor/Debugger 창창이 열린다이 열린다 . . 스크립트 파일이 특별한 형식 스크립트 파일이 특별한 형식 없이 명령창에서 사용하는 명령어들을 모아 놓은 데 비해없이 명령창에서 사용하는 명령어들을 모아 놓은 데 비해 , , 함수 파일은 함수 파일은 정해진 형식을 가지고 있으며 스크립트 파일과 다른 차이점을 가지고 있다정해진 형식을 가지고 있으며 스크립트 파일과 다른 차이점을 가지고 있다 ..

함수 파일의 구조함수 파일의 구조

Function definition lineFunction definition line

H1 line H1 line ((lookforlookfor 에서 사용에서 사용 ))

On-line helpOn-line help 에서에서사용되는 주석문사용되는 주석문

Function bodyFunction body(( 함수 프로그램함수 프로그램 ))

Function Function 파일임을 알리며파일임을 알리며 , , 반드시 소문자로 한다반드시 소문자로 한다 . .

출력인자들출력인자들

함수이름함수이름

입력인자들입력인자들

Page 6: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 6/48

함수 파일의 구조 함수 파일의 구조 –– 함수 정의함수 정의

Function definition lineFunction definition line

함수 파일의 함수 파일의 첫번째 라인첫번째 라인에는 반드시 에는 반드시 함수 정의 라인함수 정의 라인이 있어야 한다이 있어야 한다 . . 그렇지 않으면그렇지 않으면 , , 스크립트 파일로 인식된다스크립트 파일로 인식된다 ..

Function definition lineFunction definition line 의 역할의 역할 파일을 함수 파일로 정의파일을 함수 파일로 정의 함수의 이름을 정의함수의 이름을 정의 입력인자와 출력인자의 개수와 순서를 정의입력인자와 출력인자의 개수와 순서를 정의

함수 정의 라인의 형식 함수 정의 라인의 형식 ::

functionfunction [ [ 출력변수출력변수 1, 1, 출력변수출력변수 2, ….] = 2, ….] = function_namefunction_name(( 입력변수입력변수 1, 1, 입력변수입력변수 2, …2, …))

함수 파일임을 알림함수 파일임을 알림 . . 반드시 소문자로 반드시 소문자로 입력입력 ..

꺾 은 괄 호 안 에 출 력 인 자 들 을 꺾 은 괄 호 안 에 출 력 인 자 들 을 나 열 함나 열 함 . . 출 력 인 자 가 한 개 인 출 력 인 자 가 한 개 인 경 우 에 는 꺾 은 괄 호 없 이 변 수 경 우 에 는 꺾 은 괄 호 없 이 변 수 하나만 쓴다하나만 쓴다 ..

프로그램에서 사용할 함수 이름프로그램에서 사용할 함수 이름 . . 함수 이름에 대한 규칙은 변수와 함수 이름에 대한 규칙은 변수와 동일함동일함

함수 프로그램 안에서 함수 프로그램 안에서 사용할 입력인자들로 괄호 사용할 입력인자들로 괄호 안에 입력안에 입력

Page 7: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 7/48

함수 파일의 구조 함수 파일의 구조 –– 입력 인자입력 인자

입력 및 출력 인자는 함수 안으로 필요한 데이터를 공급하고 계산된 입력 및 출력 인자는 함수 안으로 필요한 데이터를 공급하고 계산된 결과를 함수 밖으로 출력해주는 역할을 한다결과를 함수 밖으로 출력해주는 역할을 한다 ..

입력인자에 대한 규칙입력인자에 대한 규칙 함수 이름 다음에 함수 이름 다음에 괄호괄호 속에 입력하며 속에 입력하며 , , 한 개 이상인 경우 콤마로 한 개 이상인 경우 콤마로

구분함구분함 입력인자는 대개 한 개 이상이지만입력인자는 대개 한 개 이상이지만 , , 전혀 갖지 않을 수도 있음전혀 갖지 않을 수도 있음 입력인자는 스칼라 뿐만 아니라 벡터나 배열이 될 수도 있으므로입력인자는 스칼라 뿐만 아니라 벡터나 배열이 될 수도 있으므로 , , 함수 함수

파일 내에서 수학식은 입력인자의 차원에 맞춰서 표현파일 내에서 수학식은 입력인자의 차원에 맞춰서 표현되어야 한다되어야 한다 ..radial radial 함수에서 입력인자 함수에서 입력인자 x, x, yy 는 스칼라일 수도 있지만는 스칼라일 수도 있지만 , , 벡터일수도 있으므로 크기 벡터일수도 있으므로 크기 rr과 각 과 각 thetatheta 를 계 산 할 때 를 계 산 할 때 원소별 연산으로 나타내었원소별 연산으로 나타내었음음 ..

>> x=[3 5 6 9];y=[4 12 8 12];>> x=[3 5 6 9];y=[4 12 8 12];>> [d, ang]=radial(x, y);>> [d, ang]=radial(x, y);

Page 8: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 8/48

함수 파일의 구조 함수 파일의 구조 –– 출력 인자출력 인자

출력인자에 대한 규칙출력인자에 대한 규칙 함수 정의 라인에서 부호 함수 정의 라인에서 부호 ‘‘==’’ 의 왼쪽에 쓰며의 왼쪽에 쓰며 , , 인자가 두 개 이상인 인자가 두 개 이상인

경우 경우 꺾은 괄호 속에 콤마로 구분하여 나열꺾은 괄호 속에 콤마로 구분하여 나열한다한다 . .

출력인자가 단 한 개인 경우에는 꺾은 괄호가 필요 없다출력인자가 단 한 개인 경우에는 꺾은 괄호가 필요 없다 . .

출력인자가 전혀 없는 경우에는 출력인자가 전혀 없는 경우에는 ‘‘==’’ 부호와 출력인자를 생략부호와 출력인자를 생략한다한다 . .

출력인자가 없는 함수의 예 출력인자가 없는 함수의 예 : : 그래프만을 출력하거나 계산결과를 그래프만을 출력하거나 계산결과를 파일에 저장하는 경우 파일에 저장하는 경우

출력인자는 함수 파일 속에서 계산된 결과를 본 프로그램에 전달하는 출력인자는 함수 파일 속에서 계산된 결과를 본 프로그램에 전달하는 역할을 하므로역할을 하므로 , , 함수 파일이 작동하기 위해서는 함수 프로그램 함수 파일이 작동하기 위해서는 함수 프로그램 안에서 반드시 출력인자에 값이 주어져야 한다안에서 반드시 출력인자에 값이 주어져야 한다 . .

문자열문자열 (string)(string) 을 함수 파일에 입력인자로 전달할 수도 있다을 함수 파일에 입력인자로 전달할 수도 있다 . . 함수 함수 파일 안에서 다른 함수를 이용하고자 할 때 이용할 함수의 이름을 파일 안에서 다른 함수를 이용하고자 할 때 이용할 함수의 이름을 전달하기 위해 문자열을 입력인자에 전달한다전달하기 위해 문자열을 입력인자에 전달한다 ..

Page 9: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 9/48

함수 파일의 구조함수 파일의 구조 -- 입력 및 출력 인자입력 및 출력 인자

일반적으로 함수 파일은 입력인자와 출력인자를 통해 필요한 데이터를 일반적으로 함수 파일은 입력인자와 출력인자를 통해 필요한 데이터를 받고 계산결과를 출력하며받고 계산결과를 출력하며 , , 함수 파일 안에서 사용한 변수들은 함수 파일 함수 파일 안에서 사용한 변수들은 함수 파일 안에서만 유효안에서만 유효하므로 함수를 부른 본 프로그램에서는 사용할 수 없다하므로 함수를 부른 본 프로그램에서는 사용할 수 없다 ..

스크립트 파일에서 사용했던 입력과 출력 명령어들의 특성은 그대로 스크립트 파일에서 사용했던 입력과 출력 명령어들의 특성은 그대로 유지된다유지된다 . . 즉즉 , , 스크립트 파일처럼 함수 파일에서 명령어 뒤에 세미콜른을 스크립트 파일처럼 함수 파일에서 명령어 뒤에 세미콜른을 붙이지 않으면 각 명령어의 계산결과가 화면에 표시되며붙이지 않으면 각 명령어의 계산결과가 화면에 표시되며 , input , input 명령을 명령을 통해 사용자로부터 데이터를 입력 받을 수 있고통해 사용자로부터 데이터를 입력 받을 수 있고 , , dispdisp 나 나 fprintffprintf, , plotplot 등의 등의 명령어를 통해 데이터를 화면이나 파일에 출력시킬 수 있다명령어를 통해 데이터를 화면이나 파일에 출력시킬 수 있다 ..

다양한 함수파일의 정의 예다양한 함수파일의 정의 예functionfunction [r, theta] [r, theta] = radial(= radial(x, yx, y)) : : 두 개의 입력인자와 두 개의 출력인자두 개의 입력인자와 두 개의 출력인자

functionfunction [r] [r] = radial(= radial(x, yx, y)) : : 두 개의 입력인자와 한 개의 출력인자두 개의 입력인자와 한 개의 출력인자

functionfunction rr = radial(= radial(x, yx, y)) : : 두 개의 입력인자와 한 개의 출력인자두 개의 입력인자와 한 개의 출력인자

functionfunction [S, V][S, V] = Sphere(= Sphere(rr)) : : 한 개의 입력인자와 두 개의 출력인자한 개의 입력인자와 두 개의 출력인자

functionfunction path(path(v0, thetav0, theta)) : : 두 개의 입력인자두 개의 입력인자 , , 출력인자 없음출력인자 없음

Page 10: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 10/48

함수파일 구조함수파일 구조 --H1 line,H1 line, Help text Help text lineslines

%% 로 시작되는 함수 정의라인 아래의 주석부분으로 함수에 대한 로 시작되는 함수 정의라인 아래의 주석부분으로 함수에 대한 정보를 제공하는 것이 목적이므로 필수는 아니다정보를 제공하는 것이 목적이므로 필수는 아니다 ..

H1 H1 라인라인 첫 번째 줄의 주석첫 번째 줄의 주석으로서 대개 으로서 대개 함수의 이름과 간단한 정의함수의 이름과 간단한 정의를 포함한다를 포함한다 .. 명령창에 입력한 명령창에 입력한 lookfor lookfor 명령은 키워드를 함수의 명령은 키워드를 함수의 H1 H1 라인에서 찾아 라인에서 찾아

H1 H1 라인의 내용을 화면에 표시한다라인의 내용을 화면에 표시한다 . .

Page 11: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 11/48

함수 파일의 변수함수 파일의 변수

계산수행 부분에서는 계산수행 부분에서는 MATLAB MATLAB 프로그래밍의 모든 특징을 사용할 수 프로그래밍의 모든 특징을 사용할 수 있으며있으며 , , 출력인자가 있는 경우 반드시 계산 결과를 출력인자에 출력인자가 있는 경우 반드시 계산 결과를 출력인자에 돌려줘야 한다돌려줘야 한다 ..

지역변수지역변수 (local variable)(local variable) 와 전역변수와 전역변수 (global variable)(global variable)함수 파일의 모든 변수는 함수 파일의 모든 변수는 workspaceworkspace 가 아닌 별도의 메모리 공간을 가 아닌 별도의 메모리 공간을 사용하므로 함수 파일 안에서만 인식되는 사용하므로 함수 파일 안에서만 인식되는 ““ 지역지역”” 변수이다변수이다 . . 따라서 명령 따라서 명령 창에서는 함수 파일의 입력변수나 출력변수의 이름을 인식하지 못한다창에서는 함수 파일의 입력변수나 출력변수의 이름을 인식하지 못한다 ..

Page 12: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 12/48

함수 파일에서의 전역변수함수 파일에서의 전역변수

함수 파일 안의 특정 변수를 다른 함수 파일에서 사용하거나 명령창에서 함수 파일 안의 특정 변수를 다른 함수 파일에서 사용하거나 명령창에서 사용하기 위해 사용하기 위해 globalglobal 명령을 이용하여 명령을 이용하여 전역변수전역변수로 선언할 수 있다로 선언할 수 있다 ..

변수의 전역변수 선언변수의 전역변수 선언 global global 명령어 뒤에 전역변수로 선언할 변수들을 공백으로 구분하여 명령어 뒤에 전역변수로 선언할 변수들을 공백으로 구분하여

나열한다나열한다 . . 변수들 구분을 절대 콤마변수들 구분을 절대 콤마 (,)(,) 로 하면 안 되고 공백으로 해야 한다로 하면 안 되고 공백으로 해야 한다 ..

예예 ) ) globalglobal var1 var2 var3var1 var2 var3 … … 특정 변수들을 전역변수로 사용하기 위해서는 사용할 함수 파일이나 특정 변수들을 전역변수로 사용하기 위해서는 사용할 함수 파일이나

스크립트 파일스크립트 파일 , , 명령창 등에서 동일하게 명령창 등에서 동일하게 global global 명령어로 선언해 주어야 명령어로 선언해 주어야 한다한다 . . 선언된 곳에서만 인식이 된다선언된 곳에서만 인식이 된다 ..

global global 명령명령으로 선언한 후에 유효으로 선언한 후에 유효하므로 가능하면 파일의 제일 앞 부분에서 하므로 가능하면 파일의 제일 앞 부분에서 선언하는 것이 좋다선언하는 것이 좋다 ..

전역변수로 선언된 후전역변수로 선언된 후 , , 어디서든 변수의 값은 변경이 가능하다어디서든 변수의 값은 변경이 가능하다 .. 전역변수는 일반변수와 구별하기 위해 가급적이면 식별이 가능하도록 길게 전역변수는 일반변수와 구별하기 위해 가급적이면 식별이 가능하도록 길게

하거나 하거나 전부 대문자로 이름을 정하는 것이 좋다전부 대문자로 이름을 정하는 것이 좋다 .. 명령 창에서 전역변수로 선언하게 되면 명령 창에서 전역변수로 선언하게 되면 workspaceworkspace 의 변수로 인식된다의 변수로 인식된다 ..

Page 13: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 13/48

global global 명령에 의한 전역변수 선언명령에 의한 전역변수 선언

Page 14: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 14/48

함수 파일의 저장함수 파일의 저장

함수 파일은 사용하기 전에 반드시 파일로 저장이 되어야 한다함수 파일은 사용하기 전에 반드시 파일로 저장이 되어야 한다 . . 파일 파일 이름은 함수 정의 라인의 함수 이름과 같도록이름은 함수 정의 라인의 함수 이름과 같도록 하는 것을 강력하게 하는 것을 강력하게 권장함권장함 ..

함수 파일을 함수 이름과 같게 저장하지 않았다면함수 파일을 함수 이름과 같게 저장하지 않았다면 , , 이 이 함수를 호출할 함수를 호출할 때때는 함수 이름 대신에 는 함수 이름 대신에 파일이름을 사용파일이름을 사용해야 한다해야 한다 . . 함수파일에서 함수 정의 라인이 함수파일에서 함수 정의 라인이 function [r, theta]=function [r, theta]=radialradial(x, y)(x, y) 일 때일 때

파일 이름은 파일 이름은 radial.mradial.m 으로 정하도록 권장한다으로 정하도록 권장한다 . . 그러면 이 함수를 그러면 이 함수를 radialradial 로 호출할 수 있다로 호출할 수 있다 . . 그러나 만일 그러나 만일 dist.mdist.m 과 같이 다른 이름으로 과 같이 다른 이름으로 저장을 한다면저장을 한다면 , , 더 이상 더 이상 radialradial 이란 이름으로 호출하지 못하고 이란 이름으로 호출하지 못하고 distdist 로 로 호출해야 한다호출해야 한다 ..

Page 15: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 15/48

함수 파일의 사용함수 파일의 사용

사용자가 정의한 함수는 내장함수와 같은 방법으로 사용한다사용자가 정의한 함수는 내장함수와 같은 방법으로 사용한다 . . 함수는 함수는 명령창이나 스크립트 파일명령창이나 스크립트 파일 , , 또는 다른 함수에서 호출할 수 있다또는 다른 함수에서 호출할 수 있다 ..

함수 파일을 사용하기 위해서는 파일을 현재 디렉토리에 저장하거나 함수 파일을 사용하기 위해서는 파일을 현재 디렉토리에 저장하거나 search pathsearch path 에 파일이 저장된 디렉토리를 등록해야 한다에 파일이 저장된 디렉토리를 등록해야 한다 ..

함수의 사용함수의 사용 명령창이나 스크립트 파일에서 함수의 이름을 입력인자와 함께 쓴다명령창이나 스크립트 파일에서 함수의 이름을 입력인자와 함께 쓴다 ..

>> radial(3, 4)>> radial(3, 4) % % 함수 정의 라인 함수 정의 라인 : funciton [r, theta]=radial(x, y): funciton [r, theta]=radial(x, y)ans = 5ans = 5

다른 함수의 입력인자로 쓸 수 있다다른 함수의 입력인자로 쓸 수 있다 ..>> sqrt( radial(3,4) )>> sqrt( radial(3,4) )

ans = 2.2361ans = 2.2361 수학식의 일부로 함수를 쓸 수 있다수학식의 일부로 함수를 쓸 수 있다 ..

>> y=0.2*exp( radial(3,4) )>> y=0.2*exp( radial(3,4) )y = 14.8413y = 14.8413

함수의 출력 값을 변수에 할당한다함수의 출력 값을 변수에 할당한다 . .

Page 16: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 16/48

function [r, theta] = radial(x, y)function [r, theta] = radial(x, y)% radial(x, y)% radial(x, y) 는 벡터 는 벡터 (x,y)(x,y) 의 크기와 각을 의 크기와 각을 계산함계산함% % 출력 출력 rr 은 벡터의 크기은 벡터의 크기% % 출력 출력 thetatheta 는 벡터의 각 는 벡터의 각 θ(rad)θ(rad) 를 돌려준를 돌려준다다 ..

… … r = sqrt(x.^2+y.^2);r = sqrt(x.^2+y.^2);theta = atan(y./x);theta = atan(y./x);

입력인자 입력인자 : : 수수 , , 계산 가능한 식계산 가능한 식 , , 값이 미리 할당된 변수값이 미리 할당된 변수 함수 정의 라인에서 입력인자와 출력인자의 각 위치별로 함수 함수 정의 라인에서 입력인자와 출력인자의 각 위치별로 함수

호출시에 인자들이 할당된다호출시에 인자들이 할당된다 ..

>> >> re=[3 5 6]; re=[3 5 6]; >> im=[4 12 8];>> im=[4 12 8];>> [d, ang] = radial(re, im)>> [d, ang] = radial(re, im)d = 5 13 10d = 5 13 10ang =ang =0.9273 1.1760 0.92730.9273 1.1760 0.9273

함수 파일의 사용 함수 파일의 사용 - - 입력인자입력인자

>> [d, ang] = radial(3, 4)>> [d, ang] = radial(3, 4)

d = 5d = 5ang = 0.9273ang = 0.9273

Page 17: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 17/48

예제 예제 6.1 6.1 수학함수의 사용자정의 수학함수의 사용자정의 함수함수

함수 에 대한 함수 파일 함수 에 대한 함수 파일 f.mf.m 을 작성하되을 작성하되 , , 함수에 대한 함수에 대한

입력을 입력을 xx, , 출력을 출력을 yy==ff((xx)) 로 하고로 하고 , , xx 는 벡터일 수 있도록 하라는 벡터일 수 있도록 하라 . .

이 함수를 이용하여 이 함수를 이용하여 ff(6)(6) 과 과 xx=1, 3, 5, 7=1, 3, 5, 7 에 대한 에 대한 ff((xx)) 를 계산하라를 계산하라 ..

function y=f(xfunction y=f(x))

num=x.^4 .* sqrt(3*x+5);num=x.^4 .* sqrt(3*x+5);den=(x.^2 + 1).^2;den=(x.^2 + 1).^2;

y=num./den;y=num./den;

>> f(6)>> f(6)ans =ans = 4.54014.5401>> y = f(6)>> y = f(6)yy = =

4.54014.5401>> f(1:2:11)>> f(1:2:11)ansans = = 0.7071 3.0307 4.1347 4.8971 5.5197 6.06380.7071 3.0307 4.1347 4.8971 5.5197 6.0638

>> y = f([1 3 5 7])>> y = f([1 3 5 7])y =y = 0.7071 3.0307 4.1347 4.89710.7071 3.0307 4.1347 4.8971

22

4

)1(

53)(

x

xxxf

파일명 파일명 : f.m: f.m

Page 18: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 18/48

예제 예제 6.2 6.2 온도 단위의 변환온도 단위의 변환

화씨온도 화씨온도 FF 를 섭씨온도 를 섭씨온도 CC 로 변환하는 함수 로 변환하는 함수 FtoC.mFtoC.m 을 작성하고을 작성하고 , , 이 함수를 이 함수를 이용하여 다음 문제를 풀어라이용하여 다음 문제를 풀어라 . . 온도 변화 온도 변화 ΔΔTT 에 의한 에 의한 물체 길이의 변화는 물체 길이의 변화는 ΔΔLL==ααLLΔΔTT 로 주어진다 로 주어진다 . . 만일온도가 만일온도가 40°F40°F 에서 에서 92°F92°F 까지 변한다면 까지 변한다면 , 4.5 , 4.5 ⅹⅹ2.25 2.25 m m 크기의 사각형 알루미늄판 크기의 사각형 알루미늄판 ((αα =23x10 =23x10-6-6)) 의 면적 변화는얼마가 되겠는가 의 면적 변화는얼마가 되겠는가 ??

function function C=FtoC(F)C=FtoC(F)

% % FtoCFtoC 는 화씨온도 는 화씨온도 FF 를 섭씨온도 를 섭씨온도 CC 로 로 바꾼다바꾼다 ..

C=5*(F-32)./9;C=5*(F-32)./9;

파일명 파일명 : FtoC.m: FtoC.m

Script file : Ch6Ex2Script file : Ch6Ex2

a1=4.5; b1=2.25; T1=40; T2=92; alpha=23e-6;a1=4.5; b1=2.25; T1=40; T2=92; alpha=23e-6;

deltaT=FtoC(T2)deltaT=FtoC(T2)--FtoC(T1);FtoC(T1);

a2=a1+alpha*a1*deltaT;a2=a1+alpha*a1*deltaT;

b2=b1+alpha*b1*deltaT;b2=b1+alpha*b1*deltaT;

AreaChange=a2*b2AreaChange=a2*b2--a1*b1;a1*b1;

fprintf(fprintf(‘‘ 면 적 변 화 는 면 적 변 화 는 %6.5f m^2%6.5f m^2 이 다이 다 .'.', ,

AreaChange)AreaChange)

Page 19: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 19/48

스크립트 파일과 함수 파일의 비교스크립트 파일과 함수 파일의 비교

스크립트 파일과 함수 파일의 비교스크립트 파일과 함수 파일의 비교

항목항목 스크립트스크립트 (Script) (Script) 파일파일 함수함수 (Function) (Function) 파일파일

입 력 및 출 력 입 력 및 출 력 인자인자(input & output (input & output

argument) argument)

입 력 인 자 는 불필 요 하 며입 력 인 자 는 불필 요 하 며 , ,

출력인자를 돌려주지 않음출력인자를 돌려주지 않음입력인자를 받아들일 수 있으입력인자를 받아들일 수 있으며며 , , 출력인자를 돌려준다출력인자를 돌려준다 . .

변수의 범위변수의 범위전역변수전역변수 (Global variable)(Global variable) 로 로 workspaceworkspace 에 저장됨에 저장됨

지 역 변 수지 역 변 수 (Local variable)(Local variable) 로로 , ,

함수 내에서만 사용되고 소멸됨함수 내에서만 사용되고 소멸됨

파일 이름 및파일 이름 및형식형식

일 반 적 인 파 일 이 름 의 일 반 적 인 파 일 이 름 의 제약을 따르며제약을 따르며 , , 특별한 형식 특별한 형식 없음없음

함 수 정 의 를 위 한 형 식 을 함 수 정 의 를 위 한 형 식 을 따 라 야 하 며따 라 야 하 며 , , 파 일 이 름 은 파 일 이 름 은 함수이름과 동일함수이름과 동일해야 한다해야 한다 ..

기타기타여러 번 수행해야 할 일련의 여러 번 수행해야 할 일련의 명령어들을 모아 둔 파일명령어들을 모아 둔 파일

자 신 의 프 로 그 램 에 서 특 정 자 신 의 프 로 그 램 에 서 특 정 목적을 위한 부프로그램이나 목적을 위한 부프로그램이나 계산프로그램으로 사용계산프로그램으로 사용

Page 20: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 20/48

익명함수익명함수 (Anonymous (Anonymous function)function) (1/3)(1/3)

익명함수는 별도의 함수 파일익명함수는 별도의 함수 파일 (M-files)(M-files) 을 만들지 않고 정의하는을 만들지 않고 정의하는 , , 한 한 줄로 된 간단한 사용자정의 함수줄로 된 간단한 사용자정의 함수이다이다 . . 익명 함수는 명령어 창이나 익명 함수는 명령어 창이나 스크립트 파일스크립트 파일 ,, 일반 사용자정의 함수 안에서 정의할 수 있다일반 사용자정의 함수 안에서 정의할 수 있다 ..

익명함수는 익명함수는 MATLAB 7MATLAB 7 에서 도입에서 도입되었으며되었으며 , MATLAB , MATLAB 이전 버전에서 이전 버전에서 같은 목적으로 사용되던 같은 목적으로 사용되던 inline inline 함수를 대체한다함수를 대체한다 . . 둘 다 사용할 수는 둘 다 사용할 수는 있으나있으나 , , 여러 장점 때문에 익명함수의 사용을 권장한다여러 장점 때문에 익명함수의 사용을 권장한다 ..

익명함수의 정의익명함수의 정의

name = @(arglist) exprname = @(arglist) expr

예예 ) cube=@(x) x^3 ) cube=@(x) x^3 → cube(→ cube(xx) = ) = xx33, cube(2)=8, cube(2)=8 익명함수를 생성하고 익명함수를 생성하고 익명함수의 핸들을 익명함수의 핸들을 = = 변수 변수 namename 에 할당에 할당한다한다 . .

함수 핸들은 함수 사용을 위한 수단이며함수 핸들은 함수 사용을 위한 수단이며 , , 함수를 다른 함수에 전달하기 함수를 다른 함수에 전달하기 위한 방법을 제공하기도 한다위한 방법을 제공하기도 한다 ..

exprexpr 은 은 MATLABMATLAB 으로 표현된 수학식으로 내장함수나 사용자정의 으로 표현된 수학식으로 내장함수나 사용자정의 함수도 포함할 수 있음함수도 포함할 수 있음 ..

Page 21: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 21/48

익명함수의 정의익명함수의 정의 (( 계속계속 ))

name = @(arglist) exprname = @(arglist) expr

독립변수는 독립변수는 arglistarglist 에 나열되며에 나열되며 , , 변수가 한 개 이상이면 콤마로 변수가 한 개 이상이면 콤마로 분리한다분리한다 . . 예예 ) circle = @ (x, y) (16*x^2+9*y^2) ) circle = @ (x, y) (16*x^2+9*y^2) → circle(→ circle(xx, , yy)=16)=16xx22+9+9yy22

수학식은 입력인자의 차원에 따라 원소별 연산 또는 선형대수 계산으로 수학식은 입력인자의 차원에 따라 원소별 연산 또는 선형대수 계산으로 작성되어야 한다작성되어야 한다 ..

수학식은 익명함수가 정의되기 전에 미리 정의된 변수를 포함할 수 있수학식은 익명함수가 정의되기 전에 미리 정의된 변수를 포함할 수 있다다 ..

예예 ) ) >> a=4; b=12;c=9;>> a=4; b=12;c=9; >> f = @ (x) (a*x^2+b*x+c)>> f = @ (x) (a*x^2+b*x+c)

>> f(1)>> f(1) ans =ans = 2525

미리 정의된 변수를 포함하는 익명함수가 정의될 때미리 정의된 변수를 포함하는 익명함수가 정의될 때 , MATLAB, MATLAB 은 정의 은 정의 당시의 변수의 값을 취하므로당시의 변수의 값을 취하므로 , , 나중에 변수 값이 다른 값으로 바뀌어도 나중에 변수 값이 다른 값으로 바뀌어도 함수는 변하지 않는다함수는 변하지 않는다 . . 이 경우 익명함수를 다시 정의해야 한다이 경우 익명함수를 다시 정의해야 한다 ..

익명함수익명함수 (2/3)(2/3)

Page 22: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 22/48

>> >> FA = @(x) exp(x^2)/sqrt(x^2+5)FA = @(x) exp(x^2)/sqrt(x^2+5)

FA = FA =

@(x)exp(x^2)/sqrt(x^2+5)@(x)exp(x^2)/sqrt(x^2+5)

>> >> FA(2)FA(2)

ans =ans =

18.199418.1994

>> z = FA(3)>> z = FA(3)

z =z =

2.1656e+0.032.1656e+0.03

>>> FA = @(x) exp(x.^2)./sqrt(x.^2+5)> FA = @(x) exp(x.^2)./sqrt(x.^2+5)

FA = @(x)exp(x^2)/sqrt(x^2+5)FA = @(x)exp(x^2)/sqrt(x^2+5)

>> FA([1 0.5 2])>> FA([1 0.5 2])

ans =1.1097 0.5604 18.1994ans =1.1097 0.5604 18.1994

2

2( )

5

xef x

x

의 익명함수 정의의 익명함수 정의 함수함수

xx 가 배열로 주어질 경우를 가 배열로 주어질 경우를 고려한 정의고려한 정의

익명함수익명함수 (3/3)(3/3)

Page 23: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 23/48

다변수 함수의 익명함수 정의다변수 함수의 익명함수 정의

>>> > HA = @(x,y) 2*x^2HA = @(x,y) 2*x^2--4*x*y+y^24*x*y+y^2

HA = HA =

@(x,y) 2*x^2@(x,y) 2*x^2--4*x*y+y^24*x*y+y^2

>> >> HA(2,3)HA(2,3)

ans = ans =

--77

2 2( , ) 2 4f x y x xy y 의 한 줄로 된 함수 정의의 한 줄로 된 함수 정의 22 변 수 변 수 함수함수

2 21.5 cos( /2)sin( , ) 1.8 x y y xf x y 22 변 수 변 수 함수함수

>>> f> f = @(x,y) 1.8.^( = @(x,y) 1.8.^(--1.5*1.5*sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(x)sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(x)

f = f =

@(x,y)1.8.^(@(x,y)1.8.^(--1.5*sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(x)1.5*sqrt(x.^2+y.^2)).*cos(0.5*y).*sin(x)

>> x=[>> x=[--4:0.2:4]; y=[4:0.2:4]; y=[--4:0.2:4]; [X,Y]= meshgrid(x,y); 4:0.2:4]; [X,Y]= meshgrid(x,y);

>> Z=f(X,Y); mesh(X,Y,Z)>> Z=f(X,Y); mesh(X,Y,Z)

-4-2

02

4

-4

-2

0

2

4-0.4

-0.2

0

0.2

0.4

Page 24: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 24/48

예제 예제 6.3 6.3 극좌표로 주어진 두 점극좌표로 주어진 두 점

두 점의 위치가 극좌표로 주어질 때두 점의 위치가 극좌표로 주어질 때 , , 두 점 사이의 두 점 사이의 거 리 를 계 산 하 는 익 명 함 수 를 작 성 하 라거 리 를 계 산 하 는 익 명 함 수 를 작 성 하 라 . . 이 이 익명함수를 사용하여 점 익명함수를 사용하여 점 AA(2, π/6)(2, π/6) 와 점 와 점 BB(5, 3π/4) (5, 3π/4)

사이의 거리를 구하라사이의 거리를 구하라 ..

2 2 2 cosA B A B A Bd r r r r

두 점 사 이 의 거두 점 사 이 의 거리 리 ::

>>> d= @ (rA,thetA,rB,thetB) sqrt(rA^2+rB^2-2*rA*rB*cos(thetB-thetA))> d= @ (rA,thetA,rB,thetB) sqrt(rA^2+rB^2-2*rA*rB*cos(thetB-thetA))

d =d =

@(rA,thetA,rB,thetB)sqrt(rA^2+rB^2-2*rA*rB*cos(thetBthetA))@(rA,thetA,rB,thetB)sqrt(rA^2+rB^2-2*rA*rB*cos(thetBthetA))

>> DistAtoB = d(2, pi/6, 5, 3*pi/4)>> DistAtoB = d(2, pi/6, 5, 3*pi/4)

DistAtoB =DistAtoB =

5.84615.8461

Page 25: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 25/48

Inline Inline 함수 함수 (1/2)(1/2)

익명함수와 마찬가지로 별도의 함수 파일을 만들지 않고 프로그램 익명함수와 마찬가지로 별도의 함수 파일을 만들지 않고 프로그램 내에서 간단한 수학함수를 정의하는 간단한 사용자정의 함수이다내에서 간단한 수학함수를 정의하는 간단한 사용자정의 함수이다 ..

fname = inline(‘fname = inline(‘ 수학식수학식’’ )) 예예 ) cube= inline(‘x^3’)) cube= inline(‘x^3’) 수학식수학식은 한 개 또는 여러 개의 독립변수를 가질 수 있다은 한 개 또는 여러 개의 독립변수를 가질 수 있다 . . ii 와 와 jj 를 제외한 어떠한 글자도 독립변수로 사용될 수 있으며를 제외한 어떠한 글자도 독립변수로 사용될 수 있으며 , ,

독립변수가 두 개 이상인 경우 알파벳 순으로 정해진다독립변수가 두 개 이상인 경우 알파벳 순으로 정해진다 .. 수학식수학식에는 내장함수와 사용자정의 함수가 포함될 수 있다에는 내장함수와 사용자정의 함수가 포함될 수 있다 .. 수학식수학식 은 은 입력인자의 차원에 따라 원소별 연산 또는 선형대수 입력인자의 차원에 따라 원소별 연산 또는 선형대수

계산으로 작성되어야 한다계산으로 작성되어야 한다 .. 수학식수학식은 미리 정의된 변수를 포함할 수 은 미리 정의된 변수를 포함할 수 없다없다 .. 일단 함수가 정의되면일단 함수가 정의되면 , , 함수의 이름과 괄호 안에 입력인자의 값을 함수의 이름과 괄호 안에 입력인자의 값을

입력하여 함수를 사용한다입력하여 함수를 사용한다 .. inline inline 함수는 다른 함수의 입력인자로 사용될 수도 있다함수는 다른 함수의 입력인자로 사용될 수도 있다 ..

Page 26: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 26/48

예예 ) ) x x=1, 4, 5=1, 4, 5 에서 에서 ff((xx) = 2) = 2xx22--1010 의 값을 구하라 의 값을 구하라 ..

>> >> f=inline('2*x.^2 f=inline('2*x.^2 -- 10') 10')

f = Inline function:f = Inline function:

f(x) = 2*x.^2 f(x) = 2*x.^2 -- 10 10

>> >> f(2) f(2)

ans = ans = --22

>> x=4;>> x=4;

>> >> f(x) f(x)

ans = 22ans = 22

>> >> f([1 4 5]) f([1 4 5])

ans = ans = --8 22 408 22 40

>> root=>> root=fzero(f, 0) fzero(f, 0)

root =root = - -2.23612.2361

>> f(root)>> f(root)

ans = 1.7764eans = 1.7764e--015015

2

2( )

5

xef x

x

의 의 inline inline 함 수 함 수

정의정의

>> f = inline('exp(x.^2)./sqrt(x.^2+5)')f =f =Inline function:Inline function:f(x) = exp(x.^2)./sqrt(x.^2+5)f(x) = exp(x.^2)./sqrt(x.^2+5)>> f(2)ans =ans =18.199418.1994>> f([1 0.5 2])ans =ans =1.1097 0.5604 18.19941.1097 0.5604 18.1994

Inline Inline 함수 함수 (2/2)(2/2)

Page 27: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 27/48

다변수함수의 다변수함수의 Inline Inline 함수 정의함수 정의

name =name = inline inline('(' 수학식수학식 , 'arg1', 'arg2', 'arg3'), 'arg1', 'arg2', 'arg3')

함수를 호출할 때 사용하는 입력인자들의 순서는 정의할 때 나열한 순서로 함수를 호출할 때 사용하는 입력인자들의 순서는 정의할 때 나열한 순서로 정의된다정의된다 . . 독립변수들을 나열하지 않은 경우에는 알파벳 순서를 따른다독립변수들을 나열하지 않은 경우에는 알파벳 순서를 따른다 ..

예예 ) ) 함수 함수 f f ((xx, , yy)=2)=2xx2 2 - 4- 4xy xy + y+ y22 의 정의 의 정의

>> HA=inline('2*x^2-4*x*y+y^2')>> HA=inline('2*x^2-4*x*y+y^2')HA =HA =

Inline function:Inline function:

HA(x,y) = 2*x^2-4*x*y+y^2HA(x,y) = 2*x^2-4*x*y+y^2

예예 ) inline ) inline 명령어로 명령어로 ff((xx)=)=xxsin(2sin(2xx22--ππ/6)/6) 을 그려라을 그려라 ..

익 명 함 수 를 익 명 함 수 를 이 용 하 여 다 시 이 용 하 여 다 시 실행해보라실행해보라 ..

>> >> f=inlinef=inline(‘x.*(‘x.*sin(2*x.^2-pi/6)');sin(2*x.^2-pi/6)');>> >> x=[0:0.1:4*pi]; y=f(x); x=[0:0.1:4*pi]; y=f(x); >> plot(x, y) >> plot(x, y) >> f(pi)>> f(pi)ans = 1.1245ans = 1.1245

Page 28: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 28/48

Inline FunctionInline Function 의 사용 예의 사용 예

inline inline 명 령 어 를 이 용 하 여 명 령 어 를 이 용 하 여 ff((tt)=)=tt22sin(sin(ωωt t --ππ/6), 0≤/6), 0≤ωω≤2, 0≤≤2, 0≤tt≤6≤6ππ 의 의 그래프를 그려라그래프를 그려라 ..

익 명 함 수 를 익 명 함 수 를 이 용 하 여 다 시 이 용 하 여 다 시 실행해보라실행해보라 ..

>> f=inline(' t.^2.*sin(omega.*t-pi/6)')>> f=inline(' t.^2.*sin(omega.*t-pi/6)')

f =f =

Inline function:Inline function:

f(omega,t) = t.^2.*sin(omega.*t-pi/6)f(omega,t) = t.^2.*sin(omega.*t-pi/6)

>> omega=linspace(0,2,200); >> omega=linspace(0,2,200);

>> t=linspace(0,6*pi,200);>> t=linspace(0,6*pi,200);

>> x=f(omega, t); >> x=f(omega, t);

>> plot(t, x); >> plot(t, x);

>> grid on>> grid on

>> axis tight>> axis tight

Page 29: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 29/48

예제예제

그림과 같이 극좌표계로 표현된 두 점 그림과 같이 극좌표계로 표현된 두 점 AA 와 와 B B 사이의 사이의 거리 거리 dd 는 는 cos cos 제제 22법칙에 의해 다음 식으로 주어진다법칙에 의해 다음 식으로 주어진다 ..

inline inline 함수를 이용하여 함수를 이용하여 dd 를 정의하고 를 정의하고 두 점 두 점 A(2, A(2, ππ/6)/6)와 와 B(5, 3B(5, 3ππ/4) /4) 사이의 거리사이의 거리를 구하라를 구하라 ..

>> d=inline( ‘sqrt(a^2 + b^2 – 2*a*b*cos(theta_B – theta_A))’ )d =d =

Inline function:Inline function: d(a, b, theta_A, theta_B) = sqrt(a^2 + b^2 d(a, b, theta_A, theta_B) = sqrt(a^2 + b^2 -- 2*a*b*cos(theta_B 2*a*b*cos(theta_B -- theta_A)) theta_A))>> distance = d(2,5, pi/6, 3*pi/4)distance =distance = 5.84615.8461>>>> d=inline( ‘sqrt(a^2 + b^2 – 2*a*b*cos(theta_B – theta_A))’, ‘a’, …

‘theta_A’, ‘b’, ‘theta_B’) % 독립변수 지정d=d= Inline function:Inline function: d(a, theta_A, b, theta_B) = sqrt(a^2+b^2-2*a*b*cos(theta_B - theta_A))d(a, theta_A, b, theta_B) = sqrt(a^2+b^2-2*a*b*cos(theta_B - theta_A))

ABabbad cos222

a

b

AB

dd

Page 30: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 30/48

함수의 함수함수의 함수 (Function (Function Function)Function)

다른 함수 다른 함수 Function BFunction B 를 입력으로 받아들이는 어떤 함수 를 입력으로 받아들이는 어떤 함수 Function AFunction A 를 를 MATLABMATLAB 에서는 함수의 함수에서는 함수의 함수 , , 즉 즉 함수 함수함수 함수 (function function)(function function) 라고 한라고 한다다 . .

예예 ) ) 함수의 영점함수의 영점 ( ( ff((xx)=0)=0 인 인 x x 값값 )) 을 구하는 을 구하는 MATLAB MATLAB 내장함수 내장함수 fzerofzero 는 는 영점영점 을 구할 함수를 입력인자로 받아들이므로을 구할 함수를 입력인자로 받아들이므로 , fzero, fzero 는 는 함수 함수함수 함수이다이다 ..

다른 함수를 받아들이는 다른 함수를 받아들이는 함수 함수함수 함수의 입력인자에는 받아들일 함수의 의 입력인자에는 받아들일 함수의 이름을 기입해야 하며이름을 기입해야 하며 , , 이 함수의 이름은 함수 함수의 프로그램이 함수의 이름은 함수 함수의 프로그램 (( 코드코드 ))

에서 연산에 사용된다에서 연산에 사용된다 . .

함수 함수를 호출할 때함수 함수를 호출할 때 , , 전달할 특정함수의 이름을 표기하는 방법전달할 특정함수의 이름을 표기하는 방법 함수 핸들을 이용하는 방법과 함수 이름을 문자열 표현으로 표기하는 방법함수 핸들을 이용하는 방법과 함수 이름을 문자열 표현으로 표기하는 방법 ..

사용 방법은 함수 함수에서 연산을 프로그래밍하는 방식에 영향을 미친다사용 방법은 함수 함수에서 연산을 프로그래밍하는 방식에 영향을 미친다 . .

함수핸들을 이용하는 것이 더 쉽고 효율적이다함수핸들을 이용하는 것이 더 쉽고 효율적이다 ..

Page 31: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 31/48

함수 핸들을 이용한 함수 함수의 호출함수 핸들을 이용한 함수 함수의 호출

함수 핸들은 함수와 관련된 함수 핸들은 함수와 관련된 MATLAB MATLAB 값으로값으로 , MATLAB , MATLAB 데이터 데이터 형이며형이며 , , 다른 함수에 입력인자로 전달될 수 있다다른 함수에 입력인자로 전달될 수 있다 ..

내장 함수와 사용자정의 함수의 경우내장 함수와 사용자정의 함수의 경우 , , 함수 이름 앞에 기호 함수 이름 앞에 기호 @@ 를 를 붙이면 함수 핸들이 생성되며붙이면 함수 핸들이 생성되며 , , 변수에 할당할 수 있다변수에 할당할 수 있다 . .

예예 ) ) cosHandle = @coscosHandle = @cos 은 내 장 함 수 은 내 장 함 수 coscos 의 함 수 핸들 을 변 수 의 함 수 핸들 을 변 수 cosHandlecosHandle 에 에 할당한다할당한다 . .

익명함수는 익명함수의 이름 자체가 함수 핸들이다익명함수는 익명함수의 이름 자체가 함수 핸들이다 ..

예예 ) ) 임의의 함수 임의의 함수 ff((xx)) 를 입력으로 받아 를 입력으로 받아 xx==aa 와 와 xx==b b 사이의 정의역에 사이의 정의역에 대한 그대한 그 래프와 좌우 경계와 중앙에서의 함수 값을 출력하는 래프와 좌우 경계와 중앙에서의 함수 값을 출력하는 사용자정의 함수 사용자정의 함수 함수 파일을 작성하라함수 파일을 작성하라 ..

Page 32: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 32/48

함수함수 파일의 작성 예제함수함수 파일의 작성 예제

function function xyout=funplot(xyout=funplot(FunFun, a, b), a, b)% funplot% funplot 은 입력함수 은 입력함수 FunFun 의 그래프를 영역 의 그래프를 영역 [a, b][a, b] 에 대해 그린다에 대해 그린다 ..% % 입력인자입력인자 ::% Fun = % Fun = 그래프를 그릴 함수의 함수 핸들그래프를 그릴 함수의 함수 핸들% a = % a = 영역의 첫 번째 점영역의 첫 번째 점% b = % b = 영역의 마지막 점영역의 마지막 점% % 출력인자출력인자 ::% xyout = 3×2% xyout = 3×2 의 행렬로 세 점 의 행렬로 세 점 x=a, (a+b)/2, bx=a, (a+b)/2, b 에서의 에서의 x x 값과 값과 y y 값으로 값으로

구성됨구성됨

x=linspace(a,b,100);x=linspace(a,b,100);y=y=FunFun(x);(x);plot(x, y)plot(x, y)xlabel('x'), ylabel('y') xlabel('x'), ylabel('y') % xyout % xyout 행렬행렬xyout(1,1)=a; xyout(2,1)=(a+b)/2; xyout(3,1)=b;xyout(1,1)=a; xyout(2,1)=(a+b)/2; xyout(3,1)=b;xyout(1,2)=y(1);xyout(1,2)=y(1);xyout(2,2)=xyout(2,2)=FunFun((a+b)/2);((a+b)/2);xyout(3,2)=y(100);xyout(3,2)=y(100);

Page 33: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 33/48

함수핸들을 이용한 함수함수의 호출함수핸들을 이용한 함수함수의 호출 (1/2)(1/2)

영역 영역 [0.5, 4][0.5, 4] 에 대한 함수 에 대한 함수 ff((xx)=e)=e--0.170.17xxxx33--22xx22+0.8+0.8xx--33 을 앞의 사용자정의 을 앞의 사용자정의 함수 함수 funplotfunplot 에 전달하여 결과를 구해 보자에 전달하여 결과를 구해 보자 ..

사용자정의 함수 파일을 만들어 전달하는 사용자정의 함수 파일을 만들어 전달하는 방법방법

>> FdemoAnony=@(x) exp(-0.17*x).*x.^3-2*x.^2+0.8*x-3>> FdemoAnony=@(x) exp(-0.17*x).*x.^3-2*x.^2+0.8*x-3

>> >> ydemo=funplot(FdemoAnony, 0.5, 4);ydemo=funplot(FdemoAnony, 0.5, 4);

functionfunction y= y=FdemoFdemo(x)(x)

y=exp(-0.17*x).*x.^3-2*x.^2+0.8*x-3;y=exp(-0.17*x).*x.^3-2*x.^2+0.8*x-3;

>> >> ydemo=funplot(@Fdemo,0.5,4)ydemo=funplot(@Fdemo,0.5,4)ydemo =ydemo =

0.50000.5000 -2.9852-2.98522.2500 2.2500 -3.5548-3.55484.0000 4.0000 0.6235 0.6235

익명함수를 정의하여 전달하는 방법익명함수를 정의하여 전달하는 방법

Page 34: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 34/48

함수 함수함수 함수의 입력인자에 전달할 함수의 이름을 문자열로 표기하여 의 입력인자에 전달할 함수의 이름을 문자열로 표기하여 함수 함수를 호출할 수 있다함수 함수를 호출할 수 있다 . . 함수 핸들이 도입되기 전에 사용된 이 함수 핸들이 도입되기 전에 사용된 이 방법보다는 함수 핸들 사용 방법을 권장한다방법보다는 함수 핸들 사용 방법을 권장한다 ..

함수 함수함수 함수에서 사용자정의 함수의 이름을 이용하여 함수를 받아들인 에서 사용자정의 함수의 이름을 이용하여 함수를 받아들인 경우경우 , , 함수 함수 내부에서 받아들인 함수의 값은 함수 함수 내부에서 받아들인 함수의 값은 fevalfeval 명령어로 명령어로 계산해야 한다계산해야 한다 . . 이것이 함수 핸들을 사용할 때와 차이점이다이것이 함수 핸들을 사용할 때와 차이점이다 ..

fevalfeval((ffunction unction evalevaluate) uate) 명령어명령어주어진 입력인자 값에 대한 함수값을 계산함주어진 입력인자 값에 대한 함수값을 계산함

variable = feval(variable = feval(‘‘ 함수 이름’함수 이름’ , , 입력인자 입력인자 값값 ))

함수 이름은 문자열로 표기한다함수 이름은 문자열로 표기한다 .. 함수는 내장함수 또는 사용자정의 함수일 수 있다함수는 내장함수 또는 사용자정의 함수일 수 있다 .. 입력인자가 두 개 이상이면입력인자가 두 개 이상이면 , , 콤마로 입력인자들을 구분한다콤마로 입력인자들을 구분한다 .. 출력인자가 두 개 이상이면출력인자가 두 개 이상이면 , , 출력변수들은 대괄호 안에 콤마로 출력변수들은 대괄호 안에 콤마로

구분하여입력한다구분하여입력한다 ..

함수핸들을 이용한 함수함수의 호출함수핸들을 이용한 함수함수의 호출 (2/2)(2/2)

Page 35: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 35/48

feval(function evaluate) 명령어의 사용 예

사용자정의 함수 사용자정의 함수 loanloan 을 을 feval feval 명령어에 사용한 명령어에 사용한 예예

>>>> feval('sqrt',64)feval('sqrt',64)ans =ans = 88

>> >> [M,T]=feval('loan',50000,3.9,10)[M,T]=feval('loan',50000,3.9,10) %% 대출 대출 $50000,$50000, 연이율 연이율 3.9%,3.9%, 기간 기간 1010년년M =M = 502.22502.22T =T = 60266.4760266.47

functionfunction [mpay,tpay]=loan(amount, rate,years) [mpay,tpay]=loan(amount, rate,years)

% amount : % amount : 대 출금대 출금 , rate : , rate : 연 이율연 이율 , years : , years : 대출기간대출기간

format bankformat bank

ratem=rate*0.01/12; ratem=rate*0.01/12;

a=1+ratem;a=1+ratem;

b=(a^(years*12)-1)/ratem;b=(a^(years*12)-1)/ratem;

mpay=amount*a^(years*12)/(a*b) mpay=amount*a^(years*12)/(a*b) %%월 상환액월 상환액tpay=mpay*years*12; tpay=mpay*years*12; % % 총 상환액총 상환액

>> x=feval('sin',pi/6)>> x=feval('sin',pi/6)x =x = 0.50000.5000

feval feval 명령어의 사용 예명령어의 사용 예

Page 36: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 36/48

함수 이름으로 호출하는 함수함수의 작성함수 이름으로 호출하는 함수함수의 작성

function function xyout = funplotS(xyout = funplotS(FunFun, a, b), a, b)% funplot% funplot 은 입력함수 은 입력함수 FunFun 의 그래프를 영역 의 그래프를 영역 [a, b][a, b] 에 대해 그린다에 대해 그린다 ..% % 입력인자입력인자 ::% Fun = % Fun = 그래프를 그릴 함수의 이름 그래프를 그릴 함수의 이름 (( 문자열 표시문자열 표시 ) ) % a = % a = 영역의 첫 번째 점영역의 첫 번째 점% b = % b = 영역의 마지막 점영역의 마지막 점% % 출력인자출력인자 ::% xyout = 3×2% xyout = 3×2 의 행렬로 세 점 의 행렬로 세 점 x=a, (a+b)/2, bx=a, (a+b)/2, b 에서의 에서의 x x 값과 값과 y y 값으로 값으로

구성됨구성됨

x=linspace(a,b,100);x=linspace(a,b,100);y=y=fevalfeval((FunFun, x); , x); % % 전달받은 함수를 이용하여 전달받은 함수를 이용하여 100100 개의 점에서 개의 점에서 f(x) f(x) 값을 값을

계산함계산함plot(x, y)plot(x, y)xlabel('x'), ylabel('y') xlabel('x'), ylabel('y')

% xyout % xyout 행렬행렬xyout(1,1)=a; xyout(2,1)=(a+b)/2; xyout(3,1)=b;xyout(1,1)=a; xyout(2,1)=(a+b)/2; xyout(3,1)=b;xyout(1,2)=y(1);xyout(1,2)=y(1);xyout(2,2)=xyout(2,2)=FevalFeval((FunFun, (a+b)/2);, (a+b)/2);xyout(3,2)=y(100);xyout(3,2)=y(100);

Page 37: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 37/48

functionfunction y= y=FdemoFdemo(x)(x)

y=exp(y=exp(--0.17*x).*x.^30.17*x).*x.^3--2*x.^2+0.8*x2*x.^2+0.8*x--3;3;

사 용 자 정 의 함 수 사 용 자 정 의 함 수 FdemoFdemo 를 이 용 하 여 함 수 함 수 를 이 용 하 여 함 수 함 수 funplotSfunplotS 를 를 호출하는 예호출하는 예

>> >> ydemoS=funplotS(ydemoS=funplotS('Fdemo''Fdemo', 0.5, 4), 0.5, 4)ydemoS =ydemoS =

0.5000 0.5000 -2.9852-2.98522.2500 2.2500 -3.5548-3.55484.0000 4.0000 0.6235 0.6235

>>>>

함수 이름에 의한 함수함수의 호출함수 이름에 의한 함수함수의 호출

functionfunction xyout = xyout = funplotSfunplotS((FunFun, a, b), a, b)

Page 38: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 38/48

부함수부함수 (Subfunction)(Subfunction)

사용자정의 함수의 체계적인 작성을 위해사용자정의 함수의 체계적인 작성을 위해 ,, 주함수주함수 의 프로그램을 작은 의 프로그램을 작은 작업단위로 나눈 후 이들을 함수로 만들 수 있는데작업단위로 나눈 후 이들을 함수로 만들 수 있는데 , , 이 함수들을 이 함수들을 부함수부함수라고 라고 한다한다 . .

주함수와 부함수들은 하나의 파일에 함께 저장주함수와 부함수들은 하나의 파일에 함께 저장 (( 파일명파일명 : : 주함수의 이름주함수의 이름 )) 되며되며 , , 주함수가 처음에 주함수가 처음에 오고 나머지 오고 나머지 부함수들의 순서는 임의로부함수들의 순서는 임의로 할 수 있다 할 수 있다 . . 각 함수는 각 함수는 함수 정의 라인으로 시작된다함수 정의 라인으로 시작된다 ..

스크립트 파일이나 외부의 함수에서는 주함수만 호출할 수 있다스크립트 파일이나 외부의 함수에서는 주함수만 호출할 수 있다 . . 같은 파일에 같은 파일에 있 는 부 함 수끼리 는 서 로 호 출 할 수 있 으 며있 는 부 함 수끼리 는 서 로 호 출 할 수 있 으 며 , , 각 부 함 수 의 변 수 들 은 각 부 함 수 의 변 수 들 은 지역변수이므로 상대방 함수 안의 변수들에게 접근할 수 없다지역변수이므로 상대방 함수 안의 변수들에게 접근할 수 없다 ..

functionfunction outarg = outarg = PfuncPfunc(inarg1, inarg2) (inarg1, inarg2) % % 주함수주함수x=x=Sfunc1Sfunc1(inarg1); (inarg1); y=y=Sfunc2Sfunc2(inarg2); (inarg2); outarg = x*y;outarg = x*y;

functionfunction a = a = Sfunc1Sfunc1(in1) (in1) % % 부함수 부함수 11a = .... ;a = .... ;

functionfunction b = b = Sfunc2Sfunc2(in2) (in2) % % 부함수 부함수 22b = ...b = ...

파일명파일명 : Pfunc.m: Pfunc.m

Page 39: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 39/48

예제 예제 6.4 6.4 평균과 표준편차평균과 표준편차

수 집합의 평균과 표준편차를 계산하는 사용자정의 함수를 작성하라수 집합의 평균과 표준편차를 계산하는 사용자정의 함수를 작성하라 . . 주함수와 부함수를 이용하여 다음 성적의 평균과 표준편차를 구하라주함수와 부함수를 이용하여 다음 성적의 평균과 표준편차를 구하라 ::

80 80 75 75 91 91 60 60 79 79 89 89 65 65 80 80 95 95 50 50 81 81

functionfunction [me, SD] = [me, SD] = statstat(v)(v)n = length(v);n = length(v);me = me = AVGAVG(v, n);(v, n);SD = SD = StandDivStandDiv(v, me, n);(v, me, n);

functionfunction av = av = AVGAVG(x,num)(x,num)av = sum(x)/num;av = sum(x)/num;

functionfunction Sdiv = Sdiv = StandDivStandDiv(x, xAve, num)(x, xAve, num)xdif = x xdif = x -- xAve; xAve;xdif2 = xdif.^2;xdif2 = xdif.^2;Sdiv = sqrt(sum(xdif2)/(num-1));Sdiv = sqrt(sum(xdif2)/(num-1));

평균 식 과 표 준편차 평균 식 과 표 준편차 식식 ::

>> Grades=[80 75 91 60 79 89 65 80 95 50 81];

>> [AveGrade, StanDeviation] = stat(Grades)

AveGrade =

76.8182

StanDeviation =

13.6661

>>

파일명파일명 : stat.m: stat.m

주함수 주함수 statstat

부함수부함수

1

1 n

ave ii

x xn

1

/ ( 1)n

i avei

x x n

Page 40: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 40/48

중첩함수중첩함수 (nested function)(nested function)

중첩중첩 (( 된된 )) 함수는 사용자정의 함수 속에 작성된 또 다른 사용자정의 함수이다함수는 사용자정의 함수 속에 작성된 또 다른 사용자정의 함수이다 .. 일반함수와 달리 중첩함수가 포함된 함수와 중첩함수는 모두 일반함수와 달리 중첩함수가 포함된 함수와 중첩함수는 모두 end end 문으로 문으로 끝나야 끝나야 한다한다 . . 중첩함수는 또 다른 중첩함수를 포함할 수도 있다중첩함수는 또 다른 중첩함수를 포함할 수도 있다 ..

function y = A(a1, a2) ....... function z = B(b1, b2) ....... end .......end

중첩함수가 한 개인 경우중첩함수가 한 개인 경우 (( 예예 :: 중 첩 함 수중 첩 함 수 BB 를 포 함 한 를 포 함 한

주함수 주함수 AA))

중첩함수가 두 개인 경우중첩함수가 두 개인 경우 (( 예예 :: 중 첩 함 수 중 첩 함 수 B, CB, C 를 포 함 한 를 포 함 한

주함수 주함수 AA))function y = A(a1, a2) ....... function z = B(b1, b2) ....... end....... function w = C(c1, c2) ....... end……end

각 함수는 각 함수는 endend 로 끝나야 한다로 끝나야 한다 .. 함수 함수 A, B, CA, B, C 는 서로의 작업공간에 는 서로의 작업공간에 접근할 수 있다접근할 수 있다 ..

각 함수는 서로를 호출할 수 있다각 함수는 서로를 호출할 수 있다 ..

Page 41: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 41/48

같은 레벨의 두 중첩함수를 이용하여 다음 성적의 평균과 표준편차를 같은 레벨의 두 중첩함수를 이용하여 다음 성적의 평균과 표준편차를 계산하라계산하라 . . 80 80 75 75 91 91 60 60 79 79 89 89 65 65 80 80 95 95 50 50 81 81

function [me, SD] = stat(v)n = length(v);me = AVG(v, n);SD = StandDiv(v, me, n);

function av = AVG(x,num)av = sum(x)/num;

function Sdiv=StandDiv(x, xAve, num)xdif = x - xAve;xdif2 = xdif.^2;Sdiv = sqrt(sum(xdif2)/(num-1));

부함수를 이용한 함수 파일 부함수를 이용한 함수 파일 stat.mstat.m

function [me, SD] = statNest(v) function [me, SD] = statNest(v) nn = length(v); = length(v);meme = = AVG(v)AVG(v);;

function av = AVG(x)function av = AVG(x)av = sum(x)/av = sum(x)/nn;;endend

function Sdiv = StandDiv(x)function Sdiv = StandDiv(x)xdif = x xdif = x -- meme;;xdif2 = xdif.^2;xdif2 = xdif.^2;Sdiv = sqrt(sum(xdif2)/(Sdiv = sqrt(sum(xdif2)/(nn-1));-1));endend

SD = SD = StandDiv(v)StandDiv(v);;endend

중첩함수를 이용한 함수 파일 중첩함수를 이용한 함수 파일 statNest.mstatNest.m

주함수 stat

중첩함수

중첩함수

예제 예제 6.46.4 중첩함수를 이용한 풀이중첩함수를 이용한 풀이 (1/2)(1/2)

Page 42: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 42/48

중첩함수의 순서는 중첩함수의 순서는 중요하지 않음중요하지 않음

함수 파일의 변수는 함수 파일의 변수는 해당 함수가 수행 해당 함수가 수행 중일 때만 인식되며중일 때만 인식되며 함수의 종료와 함께 함수의 종료와 함께 삭제된다삭제된다 ..

function [me, SD] = statNest(v)function [me, SD] = statNest(v)

nn = length(v); = length(v);meme = = AVG(v)AVG(v);;

function av = AVG(x)function av = AVG(x)av = sum(x)/av = sum(x)/nn;;endend

function Sdiv = StandDiv(x)function Sdiv = StandDiv(x)xdif = x xdif = x -- meme;;xdif2 = xdif.^2;xdif2 = xdif.^2;Sdiv = sqrt(sum(xdif2)/(Sdiv = sqrt(sum(xdif2)/(nn-1));-1));endend

SD = SD = StandDiv(v)StandDiv(v);;endend

function [me, SD] = statNest(v) function [me, SD] = statNest(v) nn = length(v); = length(v);meme = = AVG(v)AVG(v);;SD = SD = StandDiv(v)StandDiv(v);;

function av = AVG(x)function av = AVG(x)av = sum(x)/av = sum(x)/nn;;endend

function Sdiv = StandDiv(x)function Sdiv = StandDiv(x)xdif = x xdif = x -- meme;;xdif2 = xdif.^2;xdif2 = xdif.^2;Sdiv = sqrt(sum(xdif2)/(Sdiv = sqrt(sum(xdif2)/(nn-1));-1));endend

endend>> >> Grades=[Grades=[80 75 91 60 79 89 65 80 95 50 81];80 75 91 60 79 89 65 80 95 50 81];>> >> [AveGrade, StanDeviation] = stat(Grades)[AveGrade, StanDeviation] = stat(Grades)AveGrade = AveGrade = 76.818276.8182StanDeviation =StanDeviation = 13.666113.6661

예제 예제 6.46.4 중첩함수를 이용한 풀이중첩함수를 이용한 풀이 (2/2)(2/2)

Page 43: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 43/48

중첩함수 속에 또 다른 중첩함수를 쓰면 두 레벨의 중첩함수가 생성된다중첩함수 속에 또 다른 중첩함수를 쓰면 두 레벨의 중첩함수가 생성된다 . . 네 개의 중첩함수가 두 레벨에 걸쳐 있는 예네 개의 중첩함수가 두 레벨에 걸쳐 있는 예 ::

두 레벨의 중첩함수두 레벨의 중첩함수

function y=A(a1,a2)function y=A(a1,a2)..............

function z=B(b1,b2)function z=B(b1,b2)..............

function w=C(c1,c2)function w=C(c1,c2)..............endend

endend

function u=D(d1,d1)function u=D(d1,d1)..............

function h=E(e1,e1)function h=E(e1,e1)..............endend

endend..............endend

AA 의 의 AA 의 중 첩 함 수의 중 첩 함 수 , , CC 는 는 BB 의 의 중첩함수중첩함수 ,,

DD 는 는 AA 의 중 첩 함 수의 중 첩 함 수 , , EE 는 는 DD 의 의 중첩함수중첩함수

중첩함수는 자기 위의 레벨에서 호출할 중첩함수는 자기 위의 레벨에서 호출할 수 있다수 있다 . . 예예 ) ) AA 는 는 BB, , DD 를 호출할 수 를 호출할 수 있으나있으나 , , CC, , EE 를 호출할 수는 없다를 호출할 수는 없다 ..

주함수 안에서 같은 레벨끼리는 서로 주함수 안에서 같은 레벨끼리는 서로 호출할 수 있다호출할 수 있다 . . 예예 ) ) 함수 함수 BB 는 는 DD 를를 , , DD 는 는 BB 를 호출할 수 있다를 호출할 수 있다 ..

중 첩 함 수 는 하 위 의 중 첩 함 수 에 서 중 첩 함 수 는 하 위 의 중 첩 함 수 에 서 호출될 수 있다호출될 수 있다 ..

주함수에서 정의된 변수는 어떤 레벨의 주함수에서 정의된 변수는 어떤 레벨의 중첩함수에서도 인식하고 재정의할 수 중첩함수에서도 인식하고 재정의할 수 있다있다 ..

Page 44: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 44/48

지수함수 증가지수함수 증가 // 감쇠 모델은 감쇠 모델은 AA((tt) = ) = AA00 eektkt 이다이다 . . 단단 , , AA00= = AA((tt00). ). 이 모델을 이 모델을 사용하여 사용하여 AA00 와 와 AA ((tt11)) 을 알 때 을 알 때 AA((tt)) 를 예측하는 를 예측하는 사용자정의 함수를 사용자정의 함수를 작성하라작성하라 . . 함수 이름과 입력인자함수 이름과 입력인자는는 At = expGD(A0,AT1,t1,t)At = expGD(A0,AT1,t1,t) 를 사용하라를 사용하라 . . 여기서 출력인자 여기서 출력인자 AtAt 는 는 AA((tt)) 에 해당되며에 해당되며 , , 입력인자 입력인자 A0, At1, t1, tA0, At1, t1, t 는 각각 는 각각 AA00, , AA ((tt11)), , tt11, , tt 에 해당된다에 해당된다 . . 명령어 창에서 이 함수를 이용하여 다음 두 명령어 창에서 이 함수를 이용하여 다음 두 경우의 해를 구하라경우의 해를 구하라 ..

a) a) 멕시코의 인구는 멕시코의 인구는 19801980 년에 년에 67006700 백만 명백만 명 , 1986, 1986 년에 년에 79007900 백만 명이었다백만 명이었다 . . 20002000년의 년의 인구를 추정하라인구를 추정하라 ..

b) b) 방사성 물질의 반감기방사성 물질의 반감기 (half-life)(half-life) 는 는 5.85.8년이다년이다 . 7g. 7g 의 샘플 중 의 샘플 중 3030년 후에 남게 년 후에 남게 되는 되는 샘플의 양은 얼마인가샘플의 양은 얼마인가 ??

응용예제 응용예제 6.56.5 지수함수 증가 및 감쇠지수함수 증가 및 감쇠

(1/2)(1/2)

위 모델의 사용을 위해 먼저 상수 위 모델의 사용을 위해 먼저 상수 kk의 값 을 구 한 다의 값 을 구 한 다 . . kk 가 구 해 지 면 가 구 해 지 면 모델을 이용하여 임의 시간에서의 모델을 이용하여 임의 시간에서의 값을 예측할 수 있다값을 예측할 수 있다 ..

1 11 0

1 0

( )1( ) lnkt A tA t A e k

t A

function function At=expGD(A0, At1, t1, t)At=expGD(A0, At1, t1, t)

% expGD % expGD 지수함수적 증가와 감쇠의 지수함수적 증가와 감쇠의 계산계산

% % 입력인자들입력인자들 : A0 = A(0), At1=A(t1): A0 = A(0), At1=A(t1)% t1=% t1= 시간 시간 t1, t=t1, t= 시간 시간 tt% % 출력인자출력인자 : At = : At = 시간 시간 tt 에서의 양에서의 양

k=log(At1/A0)/t1;k=log(At1/A0)/t1;At=A0*exp(k*t);At=A0*exp(k*t);

Page 45: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 45/48

a) a) AA00=67, =67, AA ((tt11))=79, =79, tt11=6, =6, tt=20 =20 이므로 이므로 해를 다음과 같이 구한다해를 다음과 같이 구한다 ..

>> expGD(67,79,6,20)>> expGD(67,79,6,20)

ans =ans =

116.03116.03

b) b) AA00=7, =7, AA ((tt11=5.8=5.8))=3.5(=3.5( 반감기반감기 : : 물질의 양이 반으로 감소하는 데 걸리는 물질의 양이 반으로 감소하는 데 걸리는 시간시간 )) 이고이고 , , tt=30 =30 이므로 이므로 해를 다음과 같이 구한다해를 다음과 같이 구한다 ..

>> expGD(7, 3.5, 5.8, 30)>> expGD(7, 3.5, 5.8, 30)

ans =ans =

0.190.19

응용예제 응용예제 6.56.5 (2/2)(2/2)

Page 46: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 46/48

응용예제 응용예제 6.6 6.6 발사체의 운동발사체의 운동 (1/2)(1/2)

발사체의 궤적을 계산하고 그래프로 그리는 함수 발사체의 궤적을 계산하고 그래프로 그리는 함수 파 일 을 작 성 하 라파 일 을 작 성 하 라 . . 함 수 의 입 력 은 초기 함 수 의 입 력 은 초기 발사속도와 각도이고 출력은 최고 높이와 최대 발사속도와 각도이고 출력은 최고 높이와 최대 거리이다거리이다 . . 함수를 사용하여 함수를 사용하여 39°39° 의 각도에서 의 각도에서 속도 속도 230 m/s230 m/s 로 발사된 발사체의 궤적을 구하라로 발사된 발사체의 궤적을 구하라 ..

20 0

max max, 2

y yv vt h

g g

• 초기속도 초기속도 vv00 의 의 수평 및 수직 수평 및 수직 성분성분 ::

0 0 0 0cos , sinx yv v v v

• 수직 방향의 속도와 위수직 방향의 속도와 위치치 ::

20 0

1, =

2y y yv v gt y v t gt

• 발사체가 최고점발사체가 최고점 ((vvyy=0)=0) 에 도달하는 데 걸리는 시간과 해당 에 도달하는 데 걸리는 시간과 해당 높이높이 ::

• 총 비행시간총 비행시간 (( 발사체가 최고점에 도달하는 데 걸리는 시간의 두 발사체가 최고점에 도달하는 데 걸리는 시간의 두 배배 ) : ) :

• 수평 방향의 속도와 위수평 방향의 속도와 위치치 ::

0 0 0cos , x xv v y v t 일정

max2tot ht t

Page 47: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 47/48

응용예제 응용예제 6.6 6.6 (2/2)(2/2)

function function [hmax, dmax]=trajectory(v0, theta[hmax, dmax]=trajectory(v0, theta))

% trajectory:% trajectory: 발사체의 최고 높이와 거리 계산발사체의 최고 높이와 거리 계산% % 입 력 인 자 입 력 인 자 : v0=: v0= 초기 속 도초기 속 도 (m/s), theta=(m/s), theta=

발사각발사각% % 출력인자 출력인자 : hmax=: hmax= 최고 높이최고 높이 , dmax=, dmax= 최대 최대

거리 거리 % % 마지막으로 궤적의 그래프를 그린다마지막으로 궤적의 그래프를 그린다 ..

g=9.81;g=9.81;

v0x=v0*cos(theta*pi/180); v0x=v0*cos(theta*pi/180);

v0y=v0*sin(theta*pi/180);v0y=v0*sin(theta*pi/180);

thmax=v0y/g; hmax=v0y^2/(2*g);thmax=v0y/g; hmax=v0y^2/(2*g);

ttot=2*thmax; dmax=v0x*ttot;ttot=2*thmax; dmax=v0x*ttot;

% % 궤적 그래프궤적 그래프tplot=linspace(0,ttot,200);tplot=linspace(0,ttot,200);

x=v0x*tplot; y=v0y*tplot-0.5*g*tplot.^2;x=v0x*tplot; y=v0y*tplot-0.5*g*tplot.^2;

plot(x,y)plot(x,y)

xlabel(xlabel('DISTANCE (m)'); ylabel('HEIGHT (m)''DISTANCE (m)'); ylabel('HEIGHT (m)'))

title(title('PROJECTILE''S TRAJECTORY''PROJECTILE''S TRAJECTORY'))

Page 48: MATLAB 개요 및 응용 6 장 사용자정의 함수와 함수 파일

MATLAB HCH

6 장 사용자정의 함수와 함수 파일 48/48

66 장 강의록 끝장 강의록 끝

66 장 끝장 끝