57
MATLAB MATLAB MATLAB 개요 개요 및 및 응용 응용 6장 사용자정의 사용자정의 함수와 함수와 함수 함수 파일 파일 0 10 20 30 0 10 20 30 0 10 20 30

9-28수치해석(조교수업)[1] [호환 모드]isdl.cau.ac.kr/education.data/numerical.analysis/prac3.pdf · 2010-10-12 · MATLAB HCH 6장사용자정의함수와함수파일 2/48

Embed Size (px)

Citation preview

MATLAB

MATLABMATLAB 개요개요 및및 응용응용

66장장 사용자정의사용자정의 함수와함수와 함수함수 파일파일

010

2030

010

2030

0

10

20

30

MATLAB HCH

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

강의강의 내용내용

vv 함수함수 파일의파일의 작성작성

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

vv 지역변수와지역변수와 전역변수전역변수

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

vv 사용자정의사용자정의 함수의함수의 이용이용

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

vv 익명익명 함수와함수와 인라인인라인 함수함수

vv 함수의함수의 함수함수

vv 부함수부함수

vv 중첩함수중첩함수

vv 응용예제응용예제

MATLAB HCH

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

서서 론론

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

현식이다현식이다.. 식의식의 xx에에 값값((입력입력))을을 대입하면대입하면 yy의의 값값((출력출력))이이 얻어진다얻어진다..vv MATLABMATLAB에는에는 많은많은 함수들이함수들이 내장함수내장함수(built(built--inin function)function)로로 프로그램프로그램 되되

어어 있으며있으며,, 함수함수 이름과이름과 입력인자입력인자(argument)(argument)만만 입력하면입력하면 결과를결과를 얻을얻을 수수

있다있다.. 예예)) sin(x),sin(x), cos(x),cos(x), sqrt(x),sqrt(x), exp(x),exp(x), log(x),log(x), ……vv 내장함수가내장함수가 아닌아닌 함수의함수의 값을값을 계산할계산할 필요가필요가 있을있을 때때

uu 함수함수 식이식이 간단하고간단하고 한번만한번만 계산하면계산하면 되는되는 경우경우 :: 프로그램의프로그램의 일부로일부로 작성작성

uu 여러여러 입력인자들에입력인자들에 대해대해 여러여러 번번 함수함수 값을값을 계산할계산할 때때 :: 사용자사용자 정의정의(user(user--defined)defined) 함수함수를를 만들어만들어 내장함수처럼내장함수처럼 반복적으로반복적으로 사용사용

vv FunctionFunction은은 프로그램프로그램 속의속의 부프로그램부프로그램(subprogram)(subprogram)으로서으로서 입력데이터입력데이터

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

MATLAB HCH

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

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

vv 반복적인반복적인 일련의일련의 계산과정이계산과정이 필요할필요할 때때,, 또는또는 계산과정에서계산과정에서 만들어지만들어지

거나거나 잠시잠시 필요한필요한 중간중간 변수들에변수들에 관심이관심이 없거나없거나 감추고감추고 싶을싶을 때때,, 즉즉 주주

어진어진 입력에입력에 대해대해 결과인결과인 출력만을출력만을 얻고얻고 싶을싶을 때때 함수함수 파일을파일을 작성한다작성한다..

FunctionFile

Input Input datadata

Input Input argumentargument

Output Output datadata

Output Output argumentargument

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

Function√(x2+y2)

xx=3 =3 yy=4=4 zz=5=5

vv 수학함수로수학함수로 사용하는사용하는 용도용도 외에도외에도 함수파일은함수파일은 큰큰 프로그램의프로그램의 부프로그부프로그

램으로램으로 사용될사용될 수수 있다있다.. 독립적으로독립적으로 테스트가테스트가 가능한가능한 부프로그램들로부프로그램들로 큰큰

프로그램을프로그램을 작성하면작성하면,, 유지관리에유지관리에 유리하다유리하다..uu CC –– functionfunction,, FORTRANFORTRAN –– subroutine,subroutine, PASCALPASCAL -- procedureprocedure

MATLAB HCH

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

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

vv 명령창에서명령창에서 editedit 명령을명령을 입력입력하거나하거나 FileFile →New→M→New→M--filefile 메뉴메뉴를를 순서대로순서대로

선택하면선택하면,, Editor/DebuggerEditor/Debugger 창창이이 열린다열린다.. 스크립트스크립트 파일이파일이 특별한특별한 형식형식 없없

이이 명령창에서명령창에서 사용하는사용하는 명령어들을명령어들을 모아모아 놓은놓은 데데 비해비해,, 함수함수 파일은파일은 정해정해

진진 형식을형식을 가지고가지고 있으며있으며 스크립트스크립트 파일과파일과 다른다른 차이점을차이점을 가지고가지고 있다있다..

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

Function definition lineFunction definition line

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

OnOn--line helpline help에서에서사용되는사용되는 주석문주석문

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

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

출력인자들출력인자들

함수이름함수이름

입력인자들입력인자들

MATLAB HCH

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

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

vv FunctionFunction definitiondefinition lineline함수함수 파일의파일의 첫번째첫번째 라인라인에는에는 반드시반드시 함수함수 정의정의 라인라인이이 있어야있어야 한다한다.. 그렇지그렇지

않으면않으면,, 스크립트스크립트 파일로파일로 인식된다인식된다..vv FunctionFunction definitiondefinition lineline의의 역할역할

uu 파일을파일을 함수함수 파일로파일로 정의정의uu 함수의함수의 이름을이름을 정의정의uu 입력인자와입력인자와 출력인자의출력인자의 개수와개수와 순서를순서를 정의정의

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

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

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

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

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

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

MATLAB HCH

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

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

vv 입력입력 및및 출력출력 인자는인자는 함수함수 안으로안으로 필요한필요한 데이터를데이터를 공급하고공급하고 계산된계산된 결결

과를과를 함수함수 밖으로밖으로 출력해주는출력해주는 역할을역할을 한다한다..

vv 입력인자에입력인자에 대한대한 규칙규칙

uu 함수함수 이름이름 다음에다음에 괄호괄호 속에속에 입력하며입력하며,, 한한 개개 이상인이상인 경우경우 콤마로콤마로 구분함구분함

uu 입력인자는입력인자는 대개대개 한한 개개 이상이지만이상이지만,, 전혀전혀 갖지갖지 않을않을 수도수도 있음있음

uu 입력인자는입력인자는 스칼라스칼라 뿐만뿐만 아니라아니라 벡터나벡터나 배열이배열이 될될 수도수도 있으므로있으므로,, 함수함수

파일파일 내에서내에서 수학식은수학식은 입력인자의입력인자의 차원에차원에 맞춰서맞춰서 표현표현되어야되어야 한다한다..

radialradial 함수에서함수에서 입력인자입력인자 x,x, yy는는 스칼라일스칼라일 수도수도 있지만있지만,, 벡벡

터일수도터일수도 있으므로있으므로 크기크기 rr과과각각 thetatheta를를 계산할계산할 때때 원소별원소별

연산으로연산으로 나타내었음나타내었음..>>>> x=[x=[33 55 66 99]];;y=[y=[44 1212 88 1212]];;>>>> [d,[d, ang]=radial(x,ang]=radial(x, y)y);;

MATLAB HCH

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

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

vv 출력인자에출력인자에 대한대한 규칙규칙

uu 함수함수 정의정의 라인에서라인에서 부호부호 ‘‘==’’ 의의 왼쪽에왼쪽에 쓰며쓰며,, 인자가인자가 두두 개개 이상인이상인 경우경우

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

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

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

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

저장하는저장하는 경우경우

vv 출력인자는출력인자는 함수함수 파일파일 속에서속에서 계산된계산된 결과를결과를 본본 프로그램에프로그램에 전달하는전달하는

역할을역할을 하므로하므로,, 함수함수 파일이파일이 작동하기작동하기 위해서는위해서는 함수함수 프로그램프로그램 안에서안에서

반드시반드시 출력인자에출력인자에 값이값이 주어져야주어져야 한다한다..

vv 문자열문자열(string)(string)을을 함수함수 파일에파일에 입력인자로입력인자로 전달할전달할 수도수도 있다있다.. 함수함수 파일파일

안에서안에서 다른다른 함수를함수를 이용하고자이용하고자 할할 때때 이용할이용할 함수의함수의 이름을이름을 전달하기전달하기

위해위해 문자열을문자열을 입력인자에입력인자에 전달한다전달한다..

MATLAB HCH

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

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

vv 일반적으로일반적으로 함수함수 파일은파일은 입력인자와입력인자와 출력인자를출력인자를 통해통해 필요한필요한 데이터를데이터를

받고받고 계산결과를계산결과를 출력하며출력하며,, 함수함수 파일파일 안에서안에서 사용한사용한 변수들은변수들은 함수함수 파일파일

안에서만안에서만 유효유효하므로하므로 함수를함수를 부른부른 본본 프로그램에서는프로그램에서는 사용할사용할 수수 없다없다..vv 스크립트스크립트 파일에서파일에서 사용했던사용했던 입력과입력과 출력출력 명령어들의명령어들의 특성은특성은 그대로그대로 유유

지된다지된다.. 즉즉,, 스크립트스크립트 파일처럼파일처럼 함수함수 파일에서파일에서 명령어명령어 뒤에뒤에 세미콜른을세미콜른을

붙이지붙이지 않으면않으면 각각 명령어의명령어의 계산결과가계산결과가 화면에화면에 표시되며표시되며,, inputinput 명령을명령을

통해통해 사용자로부터사용자로부터 데이터를데이터를 입력입력 받을받을 수수 있고있고,, dispdisp나나 fprintffprintf,, plotplot 등의등의

명령어를명령어를 통해통해 데이터를데이터를 화면이나화면이나 파일에파일에 출력시킬출력시킬 수수 있다있다..

vv 다양한다양한 함수파일의함수파일의 정의정의 예예

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

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

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

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

functionfunction path(path(vv00,, thetatheta)) :: 두두 개의개의 입력인자입력인자,, 출력인자출력인자 없음없음

MATLAB HCH

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

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

vv %%로로 시작되는시작되는 함수함수 정의라인정의라인 아래의아래의 주석부분으로주석부분으로 함수에함수에 대한대한 정보를정보를

제공하는제공하는 것이것이 목적이므로목적이므로 필수는필수는 아니다아니다..vv HH11 라인라인

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

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

MATLAB HCH

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

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

vv 함수함수 파일은파일은 사용하기사용하기 전에전에 반드시반드시 파일로파일로 저장이저장이 되어야되어야 한다한다.. 파일파일 이름이름

은은 함수함수 정의정의 라인의라인의 함수함수 이름과이름과 같도록같도록 하는하는 것을것을 강력하게강력하게 권장함권장함..vv 함수함수 파일을파일을 함수함수 이름과이름과 같게같게 저장하지저장하지 않았다면않았다면,, 이이 함수를함수를 호출할호출할 때때는는

함수함수 이름이름 대신에대신에 파일이름을파일이름을 사용사용해야해야 한다한다..uu 함수파일에서함수파일에서 함수함수 정의정의 라인이라인이 functionfunction [r,[r, theta]=theta]=radialradial(x,(x, y)y)일일 때때

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

MATLAB HCH

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

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

vv 사용자가사용자가 정의한정의한 함수는함수는 내장함수와내장함수와 같은같은 방법으로방법으로 사용한다사용한다.. 함수는함수는 명명

령창이나령창이나 스크립트스크립트 파일파일,, 또는또는 다른다른 함수에서함수에서 호출할호출할 수수 있다있다..vv 함수함수 파일을파일을 사용하기사용하기 위해서는위해서는 파일을파일을 현재현재 디렉토리에디렉토리에 저장하거나저장하거나

searchsearch pathpath에에 파일이파일이 저장된저장된 디렉토리를디렉토리를 등록해야등록해야 한다한다..

vv 함수의함수의 사용사용

uu 명령창이나명령창이나 스크립트스크립트 파일에서파일에서 함수의함수의 이름을이름을 입력인자와입력인자와 함께함께 쓴다쓴다..>>>> radial(radial(33,, 44)) %% 함수함수 정의정의 라인라인 :: funcitonfunciton [r,[r, theta]=radial(x,theta]=radial(x, y)y)ansans == 55

uu 다른다른 함수의함수의 입력인자로입력인자로 쓸쓸 수수 있다있다..>>>> sqrt(sqrt( radial(radial(33,,44)) ))ansans == 22..23612361

uu 수학식의수학식의 일부로일부로 함수를함수를 쓸쓸 수수 있다있다..>>>> y=y=00..22*exp(*exp( radial(radial(33,,44)) ))yy == 1414..84138413

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

MATLAB HCH

6장 사용자정의 함수와 함수 파일 13/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);

vv 입력인자입력인자 :: 수수,, 계산계산 가능한가능한 식식,, 값이값이 미리미리 할당된할당된 변수변수

vv 함수함수 정의정의 라인에서라인에서 입력인자와입력인자와 출력인자의출력인자의 각각 위치별로위치별로 함수함수 호출시에호출시에

인자들이인자들이 할당된다할당된다..

>>>> re=[re=[33 55 66]];;>>>> im=[im=[44 1212 88]];;>>>> [d,[d, ang]ang] == radial(re,radial(re, im)im)dd == 55 1313 1010angang ==00..92739273 11..17601760 00..92739273

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

>>>> [d,[d, ang]ang] == radial(radial(33,, 44))dd == 55angang == 00..92739273

MATLAB HCH

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

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

vv 함수함수 에에 대한대한 함수함수 파일파일 ff..mm을을 작성하되작성하되,, 함수에함수에 대한대한 입력입력

을을 xx,, 출력을출력을 yy==ff((xx))로로 하고하고,, xx는는 벡터일벡터일 수수 있도록있도록 하라하라..이이 함수를함수를 이용하여이용하여 ff((66))과과 xx==11,, 33,, 55,, 77에에 대한대한 ff((xx))를를 계산하라계산하라..

22

4

)1(53)(

++

=xxxxf

MATLAB HCH

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

>>>> f(f(66))ansans ==

44..54015401>>>> yy == f(f(66))yy ==

44..54015401>>>> f(f(11::22::1111))ansans ==

00..70717071 33..03070307 44..13471347 44..89718971 55..51975197 66..06380638>>>> yy == f([f([11 33 55 77])])yy ==

00..70717071 33..03070307 44..13471347 44..89718971

MATLAB HCH

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

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

vv 화씨온도화씨온도 FF를를 섭씨온도섭씨온도 CC로로 변환하는변환하는 함수함수 FtoCFtoC..mm을을 작성하고작성하고,, 이이 함수를함수를 이이

용하여용하여 다음다음 문제를문제를 풀어라풀어라.. 온도온도 변화변화 ΔΔTT에에 의한의한 물체물체 길이의길이의 변화는변화는

ΔΔLL==ααLLΔΔTT로로 주어진다주어진다.. 만일만일 온도가온도가 4040°°FF에서에서 9292°°FF까지까지 변한다면변한다면,, 44..55 ⅹⅹ22..2525 mm크기의크기의 사각형사각형 알루미늄판알루미늄판((αα ==2323xx1010--66))의의 면적면적 변화는변화는 얼마가얼마가 되겠는가되겠는가??

MATLAB HCH

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

functionfunction C=FtoC(F)C=FtoC(F)%% FtoCFtoC는는 화씨온도화씨온도 FF를를 섭씨온도섭씨온도 CC로로 바꾼다바꾼다..C=C=55*(F*(F--3232))..//99;;

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

Script file : Ch6Ex2Script file : Ch6Ex2

aa11==44..55;; bb11==22..2525;; TT11==4040;; TT22==9292;; alpha=alpha=2323ee--66;;deltaT=FtoC(TdeltaT=FtoC(T22))--FtoC(TFtoC(T11));;aa22=a=a11+alpha*a+alpha*a11*deltaT*deltaT;;bb22=b=b11+alpha*b+alpha*b11*deltaT*deltaT;;AreaChange=aAreaChange=a22*b*b22--aa11*b*b11;;fprintf(fprintf(‘‘면적면적 변화는변화는 %%66..55ff m^m^22이다이다..'',, AreaChange)AreaChange)

MATLAB HCH

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

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

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

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

입력입력 및및 출력출력 인자인자

(input(input && outputoutputargument)argument)

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

인자를인자를 돌려주지돌려주지 않음않음

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

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

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

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

파일파일 이름이름 및및

형식형식

일반적인일반적인 파일파일 이름의이름의 제약을제약을

따르며따르며,, 특별한특별한 형식형식 없음없음

함수함수 정의를정의를 위한위한 형식을형식을 따라야따라야

하며하며,, 파일파일 이름은이름은 함수이름과함수이름과

동일동일해야해야 한다한다..

기타기타여러여러 번번 수행해야수행해야 할할 일련의일련의

명령어들을명령어들을 모아모아 둔둔 파일파일

자신의자신의 프로그램에서프로그램에서 특정특정 목적목적

을을 위한위한 부프로그램이나부프로그램이나 계산프계산프

로그램으로로그램으로 사용사용

MATLAB HCH

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

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

vv 사용자정의사용자정의 함수함수의의 체계적인체계적인 작성작성을을 위해위해,, 주주함수함수의의 프로그램을프로그램을 작은작은 작업단작업단

위로위로 나눈나눈 후후 이들을이들을 함수로함수로 만들만들 수수 있는데있는데,, 이이 함수들을함수들을 부함수부함수라고라고 한다한다..vv 주함수와주함수와 부함수들은부함수들은 하나의하나의 파일에파일에 함께함께 저장저장((파일명파일명:: 주함수의주함수의 이름이름))되며되며,,

주함수가주함수가 처음에처음에 오고오고 나머지나머지 부함수들의부함수들의 순서는순서는 임의로임의로 할할 수수 있다있다.. 각각 함수함수

는는 함수함수 정의정의 라인으로라인으로 시작된다시작된다..vv 스크립트스크립트 파일이나파일이나 외부의외부의 함수에서는함수에서는 주함수만주함수만 호출할호출할 수수 있다있다.. 같은같은 파일파일

에에 있는있는 부함수끼리는부함수끼리는 서로서로 호출할호출할 수수 있으며있으며,, 각각 부함수의부함수의 변수들은변수들은 지역변지역변

수이므로수이므로 상대방상대방 함수함수 안의안의 변수들에게변수들에게 접근할접근할 수수 없다없다..functionfunction outargoutarg == PfuncPfunc(inarg(inarg11,, inarginarg22)) %% 주함수주함수x=x=SfuncSfunc11(inarg(inarg11));;y=y=SfuncSfunc22(inarg(inarg22));;outargoutarg == x*yx*y;;

functionfunction aa == SfuncSfunc11(in(in11)) %% 부함수부함수 11aa == ........ ;;

functionfunction bb == SfuncSfunc22(in(in22)) %% 부함수부함수 22bb == ......

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

MATLAB HCH

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

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

vv 수수 집합의집합의 평균과평균과 표준편차를표준편차를 계산하는계산하는 사용자정의사용자정의 함수를함수를 작성하라작성하라.. 주함수주함수

와와 부함수를부함수를 이용하여이용하여 다음다음 성적의성적의 평균과평균과 표준편차를표준편차를 구구하라하라::8080 7575 9191 6060 7979 8989 6565 8080 9595 5050 8181

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

functionfunction avav == AVGAVG(x,num)(x,num)avav == sum(x)/numsum(x)/num;;

functionfunction SdivSdiv == StandDivStandDiv(x,(x, xAve,xAve, num)num)xdifxdif == xx -- xAvexAve;;xdifxdif22 == xdifxdif..^̂22;;SdivSdiv == sqrt(sum(xdifsqrt(sum(xdif22)/(num)/(num--11))));;

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

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

76.8182StanDeviation =

13.6661>>

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

주함수주함수 statstat

부함수부함수

1

1 n

ave ii

x xn =

= å ( )1

/ ( 1)n

i aveix x ns

=

= - -å

MATLAB HCH

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

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

vv 중첩중첩((된된))함수는함수는 사용자정의사용자정의 함수함수 속에속에 작성된작성된 또또 다른다른 사용자정의사용자정의 함수이다함수이다..

vv 일반함수와일반함수와 달리달리 중첩함수중첩함수가가 포함된포함된 함수와함수와 중첩함수는중첩함수는 모두모두 endend 문으로문으로 끝끝

나야나야 한다한다.. 중첩함수는중첩함수는 또또 다른다른 중첩함수를중첩함수를 포함할포함할 수도수도 있다있다..

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

.......end.......

end

vv 중첩함수가중첩함수가 한한 개인개인 경우경우

((예예::중첩함수중첩함수BB를를 포함한포함한 주함수주함수 AA))vv 중첩함수가중첩함수가 두두 개인개인 경우경우

((예예::중첩함수중첩함수 B,B, CC를를 포함한포함한 주함수주함수 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는는 서로의서로의 작업공간에작업공간에 접근할접근할

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

MATLAB HCH

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

vv 같은같은 레벨의레벨의 두두 중첩함수를중첩함수를 이용하여이용하여 다음다음 성적성적의의 평균과평균과 표준편차를표준편차를 계산하계산하

라라.. 8080 7575 9191 6060 7979 8989 6565 8080 9595 5050 8181

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

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

functionfunction avav == AVG(x)AVG(x)avav == sum(x)/sum(x)/nn;;endend

functionfunction SdivSdiv == StandDiv(x)StandDiv(x)xdifxdif == xx -- meme;;xdifxdif22 == xdifxdif..^̂22;;SdivSdiv == sqrt(sum(xdifsqrt(sum(xdif22)/()/(nn--11))));;endend

SDSD == StandDiv(v)StandDiv(v);;endend

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

주함수 stat

중첩함수

중첩함수

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

MATLAB HCH

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

§§중첩함수의중첩함수의 순서순서

는는 중요하지중요하지 않음않음

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

는는 해당해당 함수가함수가 수수

행행 중일중일 때만때만 인식인식

되며되며 함수의함수의 종료종료

와와 함께함께 삭제된다삭제된다..

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

functionfunction avav == AVG(x)AVG(x)avav == sum(x)/sum(x)/nn;;endend

functionfunction SdivSdiv == StandDiv(x)StandDiv(x)xdifxdif == xx -- meme;;xdifxdif22 == xdifxdif..^̂22;;SdivSdiv == sqrt(sum(xdifsqrt(sum(xdif22)/()/(nn--11))));;endend

SDSD == StandDiv(v)StandDiv(v);;endend

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

functionfunction avav == AVG(x)AVG(x)avav == sum(x)/sum(x)/nn;;endend

functionfunction SdivSdiv == StandDiv(x)StandDiv(x)xdifxdif == xx -- meme;;xdifxdif22 == xdifxdif..^̂22;;SdivSdiv == sqrt(sum(xdifsqrt(sum(xdif22)/()/(nn--11))));;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)

MATLAB HCH

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

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

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

functionfunction y=A(ay=A(a11,a,a22))..............

functionfunction z=B(bz=B(b11,b,b22))..............

functionfunction w=C(cw=C(c11,c,c22))..............endend

endend

functionfunction u=D(du=D(d11,d,d11))..............

functionfunction h=E(eh=E(e11,e,e11))..............endend

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

§§ AA의의 AA의의 중첩함수중첩함수,, CC는는 BB의의 중첩함수중첩함수,,DD는는 AA의의 중첩함수중첩함수,, EE는는 DD의의 중첩함수중첩함수

§§ 중첩함수는중첩함수는 자기자기 위의위의 레벨에서레벨에서 호출할호출할

수수 있다있다.. 예예)) AA는는 BB,, DD를를 호출할호출할 수수 있으있으

나나,, CC,, EE를를 호출할호출할 수는수는 없다없다..§§ 주함수주함수 안에서안에서 같은같은 레벨끼리는레벨끼리는 서로서로 호호

출할출할 수수 있다있다.. 예예)) 함수함수 BB는는 DD를를,, DD는는 BB를를

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

수수 있다있다..§§ 주함수에서주함수에서 정의된정의된 변수는변수는 어떤어떤 레벨의레벨의

중첩함수에서도중첩함수에서도 인식하고인식하고 재정의할재정의할 수수

있다있다..

MATLAB HCH

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

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

vv 발사체의발사체의 궤적을궤적을 계산하고계산하고 그래프로그래프로 그리는그리는

함수함수 파일을파일을 작성하라작성하라.. 함수의함수의 입력은입력은 초기초기 발발

사속도와사속도와 각도이고각도이고 출력은출력은 최고최고 높이와높이와 최대최대

거리이다거리이다.. 함수를함수를 사용하여사용하여 3939°°의의 각도에서각도에서 속속

도도 230230 m/sm/s로로 발사된발사된 발사체의발사체의 궤적을궤적을 구하라구하라..

20 0

max max, 2

y yv vt h

g g= =

•• 초기속도초기속도 vv00의의 수평수평 및및 수직수직 성분성분:: ( ) ( )0 0 0 0cos , sinx yv v v vq q= =

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

1, =2y y yv v gt y v t gt= - -

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

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

•• 수평수평 방향의방향의 속도와속도와 위치위치:: ( )0 0 0cos , x xv v y v tq= = =일정

max2tot ht t=

MATLAB HCH

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

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

functionfunction [hmax,[hmax, dmax]=trajectory(vdmax]=trajectory(v00,, thetatheta))%% trajectorytrajectory:: 발사체의발사체의 최고최고 높이와높이와 거리거리 계산계산

%% 입력인자입력인자 :: vv00==초기속도초기속도(m/s),(m/s), theta=theta=발사각발사각

%% 출력인자출력인자 :: hmax=hmax=최고최고 높이높이,, dmax=dmax=최대최대 거리거리

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

g=g=99..8181;;vv00x=vx=v00*cos(theta*pi/*cos(theta*pi/180180));;vv00y=vy=v00*sin(theta*pi/*sin(theta*pi/180180));;thmax=vthmax=v00y/gy/g;; hmax=vhmax=v00y^y^22/(/(22*g)*g);;ttot=ttot=22*thmax*thmax;; dmax=vdmax=v00x*ttotx*ttot;;

%% 궤적궤적 그래프그래프

tplot=linspace(tplot=linspace(00,ttot,,ttot,200200));;x=vx=v00x*tplotx*tplot;; y=vy=v00y*tploty*tplot--00..55*g*tplot*g*tplot..^̂22;;plot(x,y)plot(x,y)xlabel(xlabel('DISTANCE'DISTANCE (m)')(m)');; ylabel('HEIGHTylabel('HEIGHT (m)'(m)'))title(title('PROJECTILE''S'PROJECTILE''S TRAJECTORY'TRAJECTORY'))

MATLAB HCH

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

66장장 강의록강의록 끝끝

MATLAB HCH

7장 MATLAB 프로그래밍 28/76

강의강의 내용내용

vv 관계관계 연산자와연산자와 논리논리 연산자연산자

vv 조건문조건문

vv SwitchSwitch--casecase 문문

vv 루프루프(loop)(loop)

vv 중첩중첩 루프와루프와 중첩중첩 조건문조건문

vv breakbreak 명령어와명령어와 continuecontinue 명령어명령어

vv 응용예제응용예제

MATLAB HCH

7장 MATLAB 프로그래밍 29/76

프로그래밍프로그래밍 개요개요 (1/2)(1/2)

vv 컴퓨터컴퓨터 프로그램은프로그램은 원하는원하는 목적을목적을 얻기얻기 위해위해 작성된작성된 일련의일련의 컴퓨터컴퓨터 명명

령어들이다령어들이다.. 간단한간단한 프로그램에서는프로그램에서는 순차적으로순차적으로 명령어가명령어가 수행되지만수행되지만,,

좀좀 더더 정교한정교한 프로그램에서는프로그램에서는 입력된입력된 변수의변수의 값이나값이나 상태에상태에 따라따라 수행수행

될될 명령어가명령어가 결정된다결정된다..

예예)) 우체국에서우체국에서 소포소포 요금을요금을 계산할계산할 때때,, 소포의소포의 중량과중량과 크기크기,, 소포의소포의 내용내용

물물,, 배송방법배송방법((특급특급,, 빠른빠른 우편우편,, 보통보통 등등)) 등에등에 따라따라 다른다른 계산식을계산식을 사용한다사용한다..

vv 동일한동일한 과정의과정의 명령어명령어 그룹을그룹을 반복해서반복해서 수행해야수행해야 할할 경우도경우도 있다있다..

예예)) 방정식을방정식을 수치적으로수치적으로 풀풀 때때,, 구하는구하는 답의답의 오차가오차가 어떤어떤 기준보다기준보다 작아질작아질

때까지때까지 일련의일련의 계산과정을계산과정을 반복적으로반복적으로 수행해야수행해야 한다한다..

vv MATLABMATLAB은은 프로그램의프로그램의 흐름을흐름을 제어할제어할 수수 있는있는 여러여러 도구들을도구들을 제공한제공한

다다..

uu 조건문조건문(conditional(conditional statement)statement)과과 switchswitch 구조는구조는 상황에상황에 따라따라 명령어들을명령어들을

건너뛰거나건너뛰거나 특정특정 그룹의그룹의 명령어들을명령어들을 실행시킬실행시킬 수수 있다있다..

uu ForFor 루프와루프와 whilewhile 루프는루프는 어떤어떤 명령어명령어 그룹을그룹을 여러여러 번번 반복반복 수행시킬수행시킬 수수 있있

다다..

MATLAB HCH

7장 MATLAB 프로그래밍 30/76

vv 프로그램의프로그램의 흐름을흐름을 바꾸기바꾸기 위해서는위해서는 프로그램프로그램 내에내에 결정결정 과정과정

(decision(decision--makingmaking process)process)이이 필요하다필요하다.. 바로바로 다음다음 명령을명령을 수행할수행할 것것

인지인지,, 아니면아니면 하나하나 또는또는 그그 이상의이상의 명령을명령을 뛰어넘어뛰어넘어 다른다른 명령을명령을 수행할수행할

것인지를것인지를 결정해야결정해야 한다한다.. 이러한이러한 결정은결정은 관계연산자관계연산자(relational(relational

operator)operator)와와 논리연산자논리연산자(logical(logical operator)operator)를를 이용하여이용하여 변수들의변수들의 값을값을

비교함으로써비교함으로써 이루어진다이루어진다..

vv 함수함수 파일은파일은 부프로그램부프로그램(subprogram)(subprogram)으로으로 프로그래밍에프로그래밍에 이용될이용될 수수 있있

다다.. 프로그램프로그램 내에서내에서 함수가함수가 포함된포함된 명령줄명령줄(command(command line)line)을을 만나면만나면

프로그램은프로그램은 함수에함수에 입력을입력을 제공한제공한 후후 그그 결과를결과를 기다린다기다린다.. 함수는함수는 계산계산

을을 수행한수행한 후후 결과를결과를 ““함수함수 호출호출”” 프로그램에프로그램에 되돌려되돌려 주며주며,, 프로그램은프로그램은

계속해서계속해서 그그 다음다음 명령을명령을 수행하게수행하게 된다된다..

프로그래밍프로그래밍 개요개요 (2/2)(2/2)

MATLAB HCH

7장 MATLAB 프로그래밍 31/76

알고리즘알고리즘**

vv 알고리즘알고리즘(Algorithm)(Algorithm) :: 한정된한정된 시간시간 안에안에 어떤어떤 일을일을 수행할수행할 수수 있도록있도록

잘잘 정의된정의된 명령어들을명령어들을 순서에순서에 맞춰맞춰 나열한나열한 것으로것으로,, 알고리즘은알고리즘은 제어제어

구조를구조를 이용하여이용하여 명령어들의명령어들의 실행실행 순서를순서를 변경할변경할 수수 있어야있어야 한다한다..

vv 알고리즘의알고리즘의 운영운영 방법방법 ::

uu 순차적순차적 실행실행(Sequential(Sequential operations)operations) :: 순서에순서에 따라따라 명령을명령을 실행시킴실행시킴

uu 조건부조건부 실행실행(Conditional(Conditional operations)operations) :: 참과참과 거짓을거짓을 판단할판단할 수수 있는있는 질문의질문의

결과에결과에 따라따라 다음에다음에 수행할수행할 명령들을명령들을 결정함결정함..

uu 반복반복 실행실행(Iterative(Iterative operationsoperations oror loops)loops) :: 어떤어떤 명령그룹들을명령그룹들을 반복해서반복해서 실실

행시킴행시킴

MATLAB HCH

7장 MATLAB 프로그래밍 32/76

구조화구조화 프로그래밍프로그래밍**

vv 구조화구조화 프로그래밍프로그래밍(Structured(Structured programming)programming)

uu 프로그램의프로그램의 기능들을기능들을 서로서로 분리하여분리하여 계층적계층적 모듈들을모듈들을 사용하여사용하여 프로그래프로그래

밍하는밍하는 것으로것으로,, MATLABMATLAB에서는에서는 함수들의함수들의 집합체로집합체로 프로그램을프로그램을 작성할작성할 수수

있다있다..

vv 구조화구조화 프로그래밍의프로그래밍의 장점장점

uu 전반적으로전반적으로 문제를문제를 먼저먼저 검토하고검토하고 나서나서 세부적인세부적인 사항을사항을 다룰다룰 수수 있으므로있으므로

구조화구조화 프로그램은프로그램은 작성하기가작성하기가 쉽다쉽다..

uu 한한 개의개의 응용문제를응용문제를 위해위해 작성한작성한 모듈들모듈들((함수들함수들))을을 다른다른 응용문제에도응용문제에도 사사

용할용할 수수 있다있다.. ((이것을이것을 reusablereusable codecode라고라고 한다한다))

uu 각각 모듈은모듈은 단단 하나의하나의 목적을목적을 수행하도록수행하도록 설계되었으며설계되었으며 따라서따라서 다른다른 모듈과모듈과

분리하여분리하여 테스트할테스트할 수수 있으므로있으므로,, 구조화구조화 프로그램은프로그램은 디버깅하기가디버깅하기가 쉽다쉽다..

uu 구조화구조화 프로그래밍은프로그래밍은 여러여러 사람들이사람들이 각자각자 모듈을모듈을 개발할개발할 수수 있으므로있으므로 공통공통

프로그램에프로그램에 대해대해 팀을팀을 이뤄이뤄 작업할작업할 때때 효과적이다효과적이다..

uu 모듈에모듈에 의미있는의미있는 이름을이름을 부여하고부여하고 모듈의모듈의 목적을목적을 명확히명확히 알알 수수 있도록있도록 설명설명

을을 붙인다면붙인다면,, 구조화구조화 프로그램은프로그램은 이해하고이해하고 수정하기가수정하기가 쉽다쉽다..

MATLAB HCH

7장 MATLAB 프로그래밍 33/76

흐름도흐름도(Flowchart)(Flowchart)**

vv 프로그램의프로그램의 흐름을흐름을 실제실제 프로그래밍프로그래밍 언어를언어를 사용하지사용하지 않고않고 그림과그림과 간단한간단한글이나글이나 식으로식으로 표시하는표시하는 것으로것으로 긴긴 프로그램을프로그램을 작성할작성할 때때 도움이도움이 된다된다..

연산연산

시작시작

논리논리 표현표현

연산연산 11

종료종료

연산연산 22

MATLAB HCH

7장 MATLAB 프로그래밍 34/76

관계연산자관계연산자(Relational operator)(Relational operator) (1/5)(1/5)

vv 관계연산자관계연산자는는 두두 수를수를 비교비교하여하여 결과가결과가 참인지참인지 거짓인지를거짓인지를 결정한다결정한다..

결과가결과가 참이면참이면 11을을,, 거짓이면거짓이면 00의의 값을값을 준다준다..

관계관계 연산자연산자 설명설명 예예

<< a < ba < b >>>> 55 >> 88 의의 결과는결과는 00

>> a > ba > b >>>> 55 >> 33 의의 결과는결과는 11

<=<= a ≤ ba ≤ b >>>> 55 <=<= 88 의의 결과는결과는 00

>=>= a ≥ ba ≥ b >>>> 55 >=>= 88 의의 결과는결과는 11

==== 같다같다 >>>> 44 ==== 44 의의 결과는결과는 11

~=~= 같지같지 않다않다

( C( C의의 != )!= )>>>> 55 ~=~= 44 의의 결과는결과는 11

vv 관계연산자는관계연산자는 수학식수학식 안에서안에서 산술산술 연산자처럼연산자처럼 사용될사용될 수수 있으며있으며,, 결과는결과는

배열의배열의 주소주소 지정에지정에 사용되거나사용되거나 MATLABMATLAB의의 다른다른 명령어들과명령어들과 함께함께 사용사용

되어되어 프로그램의프로그램의 흐름을흐름을 제어할제어할 수수 있다있다..

MATLAB HCH

7장 MATLAB 프로그래밍 35/76

vv 크기가크기가 같은같은 두두 배열을배열을 비교하면비교하면,, 원소원소 대대 원소원소 별로별로 비교하여비교하여 각각 원소의원소의

비교비교 결과에결과에 따라따라 00과과 11을을 갖는갖는 같은같은 크기의크기의 논리배열논리배열(logical(logical arry)arry)을을 출력출력

한다한다.. 스칼라를스칼라를 배열과배열과 비교하면비교하면,, 스칼라는스칼라는 배열의배열의 모든모든 요소와요소와 비교되어비교되어

비교비교 결과에결과에 따라따라 00과과 11을을 갖는갖는 논리배열을논리배열을 출력한다출력한다..

관계연산자관계연산자 (2/5)(2/5)

>>>> boolbool == 44 << 1010 %% 44가가 1010보다보다 작으므로작으므로 11을을 boolbool에에 할당한다할당한다..boolbool == 11>>>> ((33 >> 22)) ++ ((99 << 55)) ++ ((1212//22====33**22)) %% 11++00++11==22ansans == 22>>>> x=randperm(x=randperm(55),), y=randperm(y=randperm(55))xx == 11 22 33 44 55yy == 11 44 55 33 22>>>> zz == xx >=>= yy %% zz == (x(x >=>= y)y)와와 같다같다zz == 11 00 00 11 11>>>> aa == xx ==== yy %% a=(x==y),a=(x==y), 원소별로원소별로 xx 와와 yy의의 값이값이 같으면같으면 참이다참이다..aa == 11 00 00 00 00>>>> bb == xx ~~== yy %% 원소별로원소별로 xx 와와 yy의의 값이값이 같지같지 않으면않으면 참이다참이다..aa == 00 11 11 11 11

MATLAB HCH

7장 MATLAB 프로그래밍 36/76

vv 논리벡터가논리벡터가 산술연산에산술연산에 사용되면사용되면,, 논리벡터는논리벡터는 먼저먼저 수치벡터로수치벡터로 변환된변환된

다다..

vv 산술연산자산술연산자(+,(+, --,, *,*, /,/, \\ ))는는 관계연산자보다관계연산자보다 연산연산 순위가순위가 우선이다우선이다..

예예)) z=z= 55 >> 22 ++ 77 vsvs.. zz == 55 >> ((22 ++ 77))

vv 분모가분모가 00이이 되어되어 계산을계산을 못못 하게하게 되는되는 에러를에러를 막기막기 위한위한 기법으로기법으로 관계관계

연산자를연산자를 이용할이용할 수수 있다있다**..

관계연산자의관계연산자의 응용응용 (1/2)(1/2)

>>>> 33++44<<1616//22 %% 더하기와더하기와 나누기가나누기가 먼저먼저 실행되므로실행되므로 ““77 << 88””의의 결과는결과는 11임임ansans ==

11>>>> AA == [[ 22 33 00;; 11 00 44]];;>>>> AA == AA ++ (A==(A==00)*eps)*eps;; %% AA의의 원소중에원소중에 00이이 있으면있으면,, 00 대신대신 epseps로로 대체함대체함

>>>> formatformat longlong e,e, AAAA ==22..000000000000000000000000000000e+e+000000 33..000000000000000000000000000000e+e+000000 22..220446049250313220446049250313ee--01601611..000000000000000000000000000000e+e+000000 22..220446049250313220446049250313ee--016016 44..000000000000000000000000000000e+e+000000>>>> epseps %% epseps :: floatingfloating pointpoint relativerelative accuracy(accuracy(εε ))ansans == 22..22042204ee--016016

MATLAB HCH

7장 MATLAB 프로그래밍 37/76

vv sincsinc 함수함수 의의 그래프그래프 그그

리기리기

관계연산자의관계연산자의 응용응용** (2/2)(2/2)

xxxf sin)( =

>>>> xx == --1010 :: 1010 ;; %% 벡터벡터 xx에에 00이이 포함됨포함됨

>>>> yy == sin(x)sin(x) ../x/x ;; gridgrid ononWarningWarning:: DivideDivide byby zerozero..yy ==ColumnsColumns 11 throughthrough 88--00..05440544 00..04580458 00..12371237 00..09390939 --

00..04660466…………ColumnsColumns 1717 throughthrough 2121--00..04660466 00..09390939 00..12371237 00..04580458 --

00..05440544>>>> plot(x,plot(x, y)y)

MATLAB HCH

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

§§ ““DivideDivide byby zerozero”” 의의 수정수정

>>>> xx == --1010 :: 1010;;>>>> xx == xx ++ (x==(x==00)*eps)*eps ;;>>>> yy == sin(x)sin(x) ../x/x>>>> plot(x,plot(x, y)y);; gridgrid onon

MATLAB HCH

7장 MATLAB 프로그래밍 39/76

논리연산자논리연산자(Logical operator)(Logical operator) (1/4)(1/4)

vv MATLABMATLAB의의 논리논리 연산자연산자

vv 논리연산자는논리연산자는 숫자에숫자에 대해대해 작용하며작용하며,, 00이이 아닌아닌 숫자는숫자는 모두모두 참참(true)(true)으으로로 보며보며,, 00은은 거짓거짓(false)(false)이다이다..

논리연산자논리연산자 이름이름 예예

&& ANDAND >>>> AA && BB %% 둘둘 다다 11(true)(true)일일 때만때만 결과가결과가 11(true)(true)임임

|| OROR >>>> AA || BB %% 최소한최소한 둘둘 중중 하나라도하나라도 11이면이면 결과가결과가 11임임

~~ NOTNOT >>>> ~A~A %% AA의의 반대를반대를 돌려줌돌려줌.. 즉즉 11이면이면 00을을 줌줌

&&&& ShortShort--Circuit Circuit ((단축단축) AND) AND

>>>> AA &&&& BB %% 둘둘 다다 11일일 때만때만 결과가결과가 11임임.. 따라서따라서AA가가 00이면이면 BB를를 계산하지계산하지 않고않고 결과로결과로 00을을 돌려줌돌려줌

|||| ShortShort--Circuit Circuit ((단축단축) OR) OR

>>>> AA |||| BB %% 둘둘 중중 하나라도하나라도 11이면이면,, 결과가결과가 11임임.. 따라서따라서

AA가가 11이면이면 BB와와 상관없이상관없이 결과로결과로 11을을 돌려줌돌려줌

xor(x, y)xor(x, y) Exclusive ORExclusive OR >>>> xor(A,xor(A, B)B) %% A,A, BB 둘둘 중중 하나만하나만 11일일 때때 11을을 돌려줌돌려줌

MATLAB HCH

7장 MATLAB 프로그래밍 40/76

vv MATLABMATLAB의의 논리논리 연산자연산자

X Ynot(X) or(X, Y) xor(X, Y) and(X, Y)

~X X|YX|Y -- X & YX & Y

1 1 00 11 00 11

1 0 00 11 11 00

0 1 11 11 11 00

0 0 11 00 00 00

>>>> boolbool == 22 && --11boolbool == 11>>>> boolbool == 11 || 00boolbool == 11>>>> ~~55ansans == 00

>>>> x=[x=[55 --33 00 00]];; y=[y=[22 00 44 00]];;>>>> xx || yyansans == 11 11 11 00>>>> xor(xor( x,x, y)y)ansans == 00 11 11 00>>>> xx && yyansans == 11 00 00 00

%% 00<x<<x<77의의 MATLABMATLAB 표현표현

>>>> 00 << xx && xx << 88ansans ==

11 00 00 00>>>> ((00 << x)x) && (x(x << 88))ansans ==

11 00 00 00

논리연산자논리연산자 (2/4)(2/4)

MATLAB HCH

7장 MATLAB 프로그래밍 41/76

같은같은 우선순위를우선순위를 가진가진 연산자연산자가가 둘둘 이상이상 있는있는 경우경우,, 왼쪽에왼쪽에서서 오른쪽오른쪽 순서로순서로 연산을연산을 수행수행한다한다..

vv 논리연산자는논리연산자는 수학식수학식 안에서안에서 산술산술 연산자처럼연산자처럼 사용될사용될 수수 있으며있으며,, 결과결과

는는 다른다른 수학식이나수학식이나 배열의배열의 주소주소 지정에지정에 사용될사용될 수수 있고있고 MATLABMATLAB의의 다다

른른 명령어명령어((예를예를 들어들어 if)if)와와 함께함께 사용되어사용되어 프로그램의프로그램의 흐름을흐름을 제어할제어할 수수

있다있다..

vv 논리연산자는논리연산자는 스칼라와스칼라와 배열에배열에 사용될사용될 수수 있으며있으며 서로서로 섞어섞어 쓸쓸 수수 있다있다..

vv 논리연산자는논리연산자는 산술연산자산술연산자(+,(+, --,, *,*, /,/, \\ ))와와 관계연산자보다관계연산자보다 우선우선 순위순위

가가 낮다낮다.. 단단,, NOT(~)NOT(~) 연산자는연산자는 괄호와괄호와 거듭제곱거듭제곱(^)(^) 다음으로다음으로 우선우선 순위순위

가가 높음높음..

vv 연산자의연산자의 우선우선 순위순위

11순위순위 :: 괄호괄호((괄호가괄호가 중첩되어중첩되어 있는있는 경우경우,, 가장가장 안쪽안쪽 괄호가괄호가 최우선최우선 순위순위))

22순위순위 :: 거듭제곱거듭제곱(^)(^)

33순위순위 :: LogicalLogical NOT(~)NOT(~)

44순위순위 :: 곱하기곱하기,, 나누기나누기

55순위순위 :: 더하기더하기,, 빼기빼기

66순위순위 :: 관계연산자관계연산자(( >,>, <,<, >=,>=, <=,<=, ==,==, ~=~= ))

77순위순위 :: 논리연산자논리연산자 AND(&)AND(&)

논리연산자논리연산자 (3/4)(3/4)

MATLAB HCH

7장 MATLAB 프로그래밍 42/76

x==x==33의의 결과가결과가 00이므로이므로 (y(y <<44))와와 상관없이상관없이답이답이 00이므로이므로 (y<(y<44))는는 실행되지실행되지 않는다않는다..

x==x==22의의 결과가결과가 11이므로이므로 yy >> 44와와 상관없이상관없이결과가결과가 11이므로이므로 yy >> 44는는 실행되지실행되지 않는다않는다..

vv MATLABMATLAB버전버전 66 이전에는이전에는 우선순위에우선순위에 변동이변동이 있으므로있으므로 괄호를괄호를 사용하는사용하는 것이것이

안전하다안전하다..

>>>> xx == --22;; yy == 55;;>>>> 55 << xx && xx << --11ansans == 00

>>>> --55 << xx && xx << --11 %% --55 << xx →→ 11,, x<x<--11 →→ 11 이므로이므로 11 && 11 →→ 11이다이다..

ansans == 11>>>> ~(y~(y << 77)) %% yy << 77 →→ 11이므로이므로 ~~11 →→ 00ansans == 00

>>>> ~y~y << 77 %% ~y~y →→ 00이므로이므로 00 <<77 →→ 11ansans == 11

>>>> ~(~( (y>=(y>=88)) || (x(x <<--11)) )) %% y>=y>=88 →→00,, x<x<--11 →→ 11이므로이므로 ~(~(00||11))→→00

ansans == 00

>>>> x=x=22;; y=y=33;; x==x==33 &&&& yy << 44ansans == 00

>>>> x==x==22 |||| yy >> 44ansans == 11

논리연산자논리연산자 (4/4)(4/4)

MATLAB HCH

7장 MATLAB 프로그래밍 43/76

내장내장 논리함수논리함수 (1/4)(1/4)

vv and(A,and(A, B)B) ↔↔ AA && BB

vv or(A,or(A, B)B) ↔↔ AA || BB

vv not(A)not(A) ↔↔ ~A~A

vv xor(A,xor(A, B)B) :: AA와와 BB 둘둘 중중 하나만하나만 11일일 때때 11이다이다..

>>>> xor(xor(77,, 00))

ansans == 11

>>>> xor(xor(77,, --55))

ansans == 00

vv any(A),any(A), any(A,any(A, dim)dim) ::

AA가가 벡터인벡터인 경우경우 AA의의 원소중원소중 한한 개라도개라도 00이이 아니면아니면 11을을,, 모두모두 00이면이면 00을을 돌돌

려준다려준다.. 즉즉,, AA의의 원소중에원소중에 00이이 아닌아닌 원소가원소가 한한 개라도개라도 있는있는 지지 검사하는검사하는 함수함수

이다이다..

AA가가 행렬인행렬인 경우경우 AA의의 각각 열열(column)(column)을을 벡터로벡터로 취급하여취급하여 각각 벡터의벡터의 원소중원소중 한한

개라도개라도 00이이 아니면아니면 11을을 돌려준다돌려준다..

>>>> AA == [[11 00 00;; 00 00 33;; 00 00 22]];;

>>>> any(A)any(A)

ansans == 11 00 11

MATLAB HCH

7장 MATLAB 프로그래밍 44/76

vv ischar(A)ischar(A) :: AA가가 글자글자 배열이면배열이면 논리논리 11을을,, 아니면아니면 논리논리 00을을 돌려준돌려준

다다..>>>> x=[x=[11::33]];; s='characters='character array‘array‘;;>>>> ischar(x)ischar(x)ansans == 00>>>> ischar(s)ischar(s)

ansans == 11

vv isempty(A)isempty(A) :: AA가가 빈빈 행렬이면행렬이면 11을을,, 아니면아니면 00을을 돌려준다돌려준다..

>>>> A=[]A=[];;

>>>> isempty(A)isempty(A)

ansans == 11

>>>> A(A(11,,11)=)=55;; A(A(22,,22)=)=33

AA == 55 00

00 33

>>>> isempty(A)isempty(A)

ansans == 00

내장내장 논리함수논리함수 (2/4)(2/4)

MATLAB HCH

7장 MATLAB 프로그래밍 45/76

vv isinfisinf(A)(A) :: AA의의 원소가원소가 무한대이면무한대이면 해당해당 원소원소 자리에자리에 11을을,, 아니면아니면 00을을

가진가진,, AA와와 같은같은 크기의크기의 배열을배열을 돌려준다돌려준다..>>>> xx == [[--22 --11 00 11 22]];;>>>> isinfisinf((11../x)/x)

ansans == 00 00 11 00 00vv isnanisnan(A)(A) :: AA의의 원소가원소가 ‘‘NaNNaN’’이면이면 해당해당 원소원소 자리에자리에 11을을,, 아니면아니면 00을을

가진가진,, AA와와 같은같은 크기의크기의 행렬을행렬을 돌려준다돌려준다..>>>> xx == [[--22 --11 00 11 22]];;>>>> isnanisnan((00../x)/x)

ansans == 00 00 11 00 00vv logical(A)logical(A) :: 숫자배열숫자배열 AA를를 논리배열로논리배열로 바꾼다바꾼다..

>>>> x=[x=[44 55 66 77]];; boolbool=[=[11 00 00 11]];;>>>> x(bool)x(bool)?????? SubscriptSubscript indicesindices mustmust eithereither bebe realreal positivepositive integersintegers oror logicalslogicals..

>>>> k=logical(bool)k=logical(bool);; x(k)x(k)

x=x= 44 77

내장내장 논리함수논리함수 (3/4)(3/4)

MATLAB HCH

7장 MATLAB 프로그래밍 46/76

vv islogical(A)islogical(A) :: AA가가 논리배열이면논리배열이면 11을을,, 아니면아니면 00을을 돌려준다돌려준다..

>>>> x=[x=[44 22 88 11]];; y=[y=[33 55 66 77]];;

>>>> boolbool == xx >> yy

boolbool == 11 00 11 00

>>>> islogical(bool)islogical(bool)

ansans == 11

>>>> zz == [[ 11 00 11 00]];; islogical(z)islogical(z)

ansans == 00vv isnumeric(A)isnumeric(A) :: AA가가 숫자배열이면숫자배열이면 11을을,, 아니면아니면 00을을 돌려준다돌려준다..

>>>> isisnumericnumeric(bool)(bool)

ansans == 00

>>>> isnumeric(z)isnumeric(z)

ansans == 11

내장내장 논리함수논리함수 (4/4)(4/4)

MATLAB HCH

7장 MATLAB 프로그래밍 47/76

조건문조건문(Conditional statements)(Conditional statements)

vv 조건문조건문은은 MATLABMATLAB이이 조건문조건문 다음에다음에 오는오는 명령어명령어 그룹을그룹을 실행시킬실행시킬 지에지에

대한대한 결정을결정을 하도록하도록 하는하는 명령어이다명령어이다..

vv 조건문에는조건문에는 조건식조건식이이 기술된다기술된다.. 이이 조건식이조건식이 참이면참이면 조건문조건문 다음의다음의 명령명령

어어 그룹들이그룹들이 실행되며실행되며,, 거짓이면거짓이면 명령어명령어 그룹들을그룹들을 실행하지실행하지 않고않고 건너뛰건너뛰

게게 된다된다..

vv ifif –– endend 구조구조

……………………if 조건식조건식

…………

endend…………

MATLAB MATLAB 명령어명령어그룹그룹

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 프로그램프로그램

명령어

명령어 그룹

명령어

거짓

if 문

MATLAB HCH

7장 MATLAB 프로그래밍 48/76

ifif xx >=>=00,, yy == sqrt(x),sqrt(x), endend 와와

같이같이 한한 줄로줄로 쓸쓸 수도수도 있다있다..

ifif x>=0 & y>= 0, z=sqrt(x)+y, w=log(x)x>=0 & y>= 0, z=sqrt(x)+y, w=log(x)––log(y), log(y), end end 와와 같이같이 한한 줄로줄로 쓸쓸 수도수도 있다있다..

if if 문문 사용사용 예예 (1/2)(1/2)

vv ifif 조건문조건문 사용사용 예예 ::

ifif xx << 1010^̂--55

ifif nn ==== 1010

ifif xx ~=~= 00

ifif (n(n >> 1010)) && (( xx >> 100100))

vv xx ≥≥ 00일일 때때 √√xx 를를 계산하라계산하라..

ifif xx >=>=00

yy == sqrt(x)sqrt(x)

endend

vv xx ≥≥ 00,, yy ≥≥ 00일일 때때 z=√xz=√x ++ √y√y 와와 w=logw=log xx –– loglog yy를를 계산계산

하라하라..

ifif xx >=>=00 && yy >=>= 00

zz == sqrt(x)sqrt(x) ++ yy

w=w= log(x)log(x) –– log(y)log(y)

endend

MATLAB HCH

7장 MATLAB 프로그래밍 49/76

vv 사용자가사용자가 입력한입력한 숫자의숫자의 홀홀,, 짝수를짝수를 판정하는판정하는 프로그프로그

램램

if if 문문 사용사용 예예 (2/2)(2/2)

nn == input(input(‘‘홀수홀수,, 짝수를짝수를 판별할판별할 숫자를숫자를 입력하시오입력하시오 :: ’’));;ifif rem(n,rem(n, 22)) ==== 00

fprintf(fprintf( ‘‘%%dd는는((은은)) 짝수입니다짝수입니다..\\n’n’,, n)n);;endendifif rem(n,rem(n, 22)) ~=~= 00

fprintf(fprintf( ‘‘%%dd는는((은은)) 홀수입니다홀수입니다..\\n’n’,, n)n);;endend

v 벡터의 평균값을 구하는 프로그램

>>>> aveave데이터를데이터를 입력하시오입력하시오 :: [[11::1010]]평균값은평균값은 55..5050입니다입니다..>>>> aveave데이터를데이터를 입력하시오입력하시오 ::?????? ErrorError usingusing ==>==> aveave데이터가데이터가 입력되지입력되지 않았습니않았습니

다다..

xx == input(input( ''데이터를데이터를 입력하시오입력하시오 :: ''));;n=length(x)n=length(x);;ifif (~n)(~n)

error(error( ''데이터가데이터가 입력되지입력되지 않았습니다않았습니다..''))endendavgavg == sum(x)/nsum(x)/n;;fprintf(fprintf( ''평균값은평균값은 %%..22ff입니다입니다..\\n'n',, avg)avg)

MATLAB HCH

7장 MATLAB 프로그래밍 50/76

예제예제 7.2 7.2 노동자의노동자의 급료급료 계산계산

vv 어떤어떤 노동자가노동자가 기준기준 노동시간인노동시간인 4040시간까지는시간까지는 자신의자신의 시간당시간당 임금에임금에 따라따라

급료를급료를 받으며받으며,, 초과시간에초과시간에 대해서는대해서는 5050%%를를 더더 받는다받는다.. 이이 노동자의노동자의 급료를급료를

계산하는계산하는 프로그램을프로그램을 스크립트스크립트 파일로파일로 작성하라작성하라.. 프로그램프로그램 실행시실행시 사용자는사용자는

근로시간과근로시간과 시간당시간당 임금을임금을 입력하게입력하게 되며되며,, 프로그램은프로그램은 급료를급료를 출력한다출력한다..

>>>> WorkerpayWorkerpay근무한근무한 시간시간 수를수를 입력하시오입력하시오:: 3535시간당시간당 임금을임금을 달러로달러로 입력하시오입력하시오::88노동자의노동자의 임금은임금은 $$280280..0000입니다입니다..

t=input(t=input(''근무한근무한 시간시간 수를수를 입력하시오입력하시오:: ''));;h=input(h=input(''시간당시간당 임금을임금을 달러로달러로 입력하시오입력하시오::

''));;Pay=t*hPay=t*h;;ifif t>t>4040

Pay=Pay+(tPay=Pay+(t--4040)*)*00..55*h*h;;endendfprintf(fprintf(''노동자의노동자의 임금은임금은 $$%%55..22ff입니다입니다..\\n'n',,

Pay)Pay)

파일명파일명 : workerpay: workerpay

MATLAB HCH

7장 MATLAB 프로그래밍 51/76

if if –– else else –– end end 구조구조

vv 조건판단에조건판단에 따라따라 실행해야실행해야 할할 선택사항이선택사항이 서로서로 상반된상반된 두두 가지일가지일 경우경우

ifif--elseelse--endend 구조를구조를 사용한다사용한다.. 예를예를 들어들어 어떤어떤 수의수의 짝수짝수,, 홀수홀수 여부에여부에

따라따라 다른다른 명령을명령을 수행해야수행해야 할할 경우경우,, 짝수에짝수에 따른따른 명령과명령과 홀수에홀수에 따른따른

명령은명령은 서로서로 독립적이므로독립적이므로 두두 가지가지 조건문이조건문이 필요하게필요하게 된다된다..

……………………if 조건조건 식식

…………

elseelse…………

endend…………

MATLAB MATLAB 명령어명령어그룹그룹 11

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 프로그램프로그램

명령어

명령 그룹 1

명령어

거짓

if 문

명령 그룹 2MATLAB MATLAB 명령어명령어그룹그룹 22

MATLAB HCH

7장 MATLAB 프로그래밍 52/76

if if –– else else –– end end 사용사용 예예

vv 사용자가사용자가 입력한입력한 숫자의숫자의 홀홀,, 짝수를짝수를 판정하는판정하는 프로그램프로그램

vv 22 kgkg 이하이하 소포의소포의 등기배달등기배달 요금은요금은 44,,000000원원,, 보통배달보통배달 요금은요금은 22,,700700원이다원이다..배달배달 종류에종류에 따라따라 소포소포 세세 개의개의 요금을요금을 계산하는계산하는 프로그램을프로그램을 작성하라작성하라..

nn == input(input(''홀수홀수,, 짝수를짝수를 판별할판별할 숫자를숫자를 입력하시오입력하시오 :: ''));;ifif rem(n,rem(n, 22)) ==== 00

fprintf(fprintf(''%%dd는는((은은)) 짝수입니다짝수입니다..\\n'n',, n)n);;elseelse

fprintf(fprintf(''%%dd는는((은은)) 홀수입니다홀수입니다..\\n'n',, n)n);;endend

nn == input(input(''소포의소포의 개수를개수를 입력하시오입력하시오 :: ''));;typetype == input(input(''소포의소포의 배달배달 종류를종류를 선택하시오선택하시오((등기등기==11,, 보통보통==00)) ::''));;ifif typetype

charge=charge=40004000*n*n;;elseelse

charge=charge=27002700*n*n;;endendfprintf(fprintf(''총총 배달배달 요금은요금은 %%dd입니다입니다..\\n'n',, charge)charge);;

MATLAB HCH

7장 MATLAB 프로그래밍 53/76

예제예제 7.3 7.3 급수탑의급수탑의 물물 높이높이

vv 급수탑급수탑 탱크는탱크는 원통인원통인 밑부분과밑부분과 원뿔대원뿔대 모양의모양의 윗부분윗부분

으로으로 이루어져이루어져 있다있다.. 탱크탱크 안안 부표부표(float)(float)의의 위치위치 hh로부로부

터터 탱크탱크 안안 물의물의 체적을체적을 구하는구하는 사용자정의사용자정의 함수를함수를 작작

성하라성하라.. 입력은입력은 hh의의 값값((mm))이고이고,, 출력은출력은 물의물의 체적체적((mm33))

이다이다..탱크탱크 안안 물의물의 체적체적

0≤h≤19 m0≤h≤19 m일일 때때 : : V =V =pp(12.5(12.522)h)h19<h≤33 m19<h≤33 m일일 때때 :: ( ) ( )( ) ( )2 2 21 10.512.5 19 19 12.5 12.5 , 12.5 19

3 14= × + - + + = + -h h hV h r r r hp p

function v = watervol(h)% watervol은 급수탑의 물의 체적을 계산한다.% 입력: 물의 높이(m), 출력: 물의 체적(m^3).if h<=19

v=pi*12.5^2*h;else

rh=12.5+10.5*(h-19)/14;v=pi*12.5^2*19+pi*(h-19)*(12.5^2+12.5*rh+rh^2)/3;

end

>>>> watervol(watervol(88))ansans ==

33..92709270e+e+003003>>>> watervol(watervol(2525..77))ansans ==

11..41154115e+e+004004>>>>

MATLAB HCH

7장 MATLAB 프로그래밍 54/76

if if –– elseif elseif –– else else -- end end 구조구조

vv 서로서로 상반되는상반되는 조건이조건이 여러여러 개일개일 때때 사용하며사용하며,, 조건의조건의 개수에개수에 따라따라

elseifelseif를를 추가하면추가하면 된다된다.. elseelse 문은문은 옵션으로옵션으로 꼭꼭 필요하지는필요하지는 않다않다..

명령어

명령 그룹 1

명령어

거짓

if 문

명령 그룹 2

elseif 문

명령 그룹 3

거짓

……………………if 조건식조건식

…………

elseifelseif 조건식조건식

…………

elseelse…………

endend…………

MATLAB MATLAB 명령어명령어그룹그룹 11

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 명령어명령어그룹그룹 22

MATLAB MATLAB 명령어명령어그룹그룹 33

MATLAB HCH

7장 MATLAB 프로그래밍 55/76

if if -- elseif elseif -- else else -- end end 사용사용 예예

vv 22차방정식차방정식 axax22++bxbx++cc==00의의 근을근을 구하는구하는 함수함수 프로그램을프로그램을 작성하고작성하고,, 33xx22––

99xx++44 ==00과과 55xx22––1414xx++1313==00의의 해를해를 각각각각 구하라구하라..

vv rootroots(C)s(C) : 다항식다항식 aannxxnn++aann--11xxnn--11++……++aa11x+x+aa00==00의의 계수계수 C=[C=[aann aann--11 …… aa11 aa00]]를를 입력인입력인

자로자로 받아받아 해를해를 계산하여계산하여 벡터로벡터로 돌려준다돌려준다..

>> root2(3, -9, 4)ansans ==

22..45744574 00..54265426>> root2(5, -14, 13)ansans ==

11..40004000 ++ 00..80008000ii 11..40004000 --00..80008000ii>> roots([5, -14, 13]) % 내장함수 이

ansans ==11..40004000 ++ 00..80008000ii11..40004000 -- 00..80008000ii

>>>>

function x = root2(a, b, c)% root2는 2차 방정식의 근을 구한다.D = b^2 – 4*a*c;tmp1 = -b/(2*a);if ~D % 또는 D == 0

x = tmp1;elseif D > 0

tmp2 = sqrt(D)/(2*a);x(1)=tmp1+tmp2; x(2)=tmp1–tmp2;

elsetmp2 = sqrt(-1*D)/(2*a);x(1)=tmp1+tmp2*i; x(2)=tmp1-tmp2*i;

end

MATLAB HCH

7장 MATLAB 프로그래밍 56/76

문자열과문자열과 조건문조건문

vv 예를예를 들어들어 ‘‘Yes’Yes’나나 ‘‘No’No’와와 같은같은 사용자의사용자의 문자열문자열 입력에입력에 따라따라 프로그램프로그램

의의 흐름을흐름을 제어하고자제어하고자 하는하는 경우경우 ,, 조건문에서조건문에서 문자열과의문자열과의 비교가비교가 필요필요

하다하다..

vv 소포소포 요금요금 계산계산 프로그램프로그램 예제예제nn == input(input(''소포의소포의 개수를개수를 입력하시오입력하시오 :: ''));;typetype == input(input(''등기소포입니까등기소포입니까?? Y/N[Y]Y/N[Y] ::'',, 's''s'));;ifif (( isempty(type))isempty(type)) || (type(type ===='Y''Y')) || (type(type ==== 'y''y'))

typetype == 'Y''Y';;elseelse

typetype == 'N''N';;endendstrstr == ''등기등기'';; unit=unit=40004000;;ifif typetype =='N'=='N'

strstr == ''보통보통'';; unit=unit=27002700;;endendchargecharge == unit*nunit*n;;fprintf(fprintf(''%%ss소포소포 요금은요금은 총총 %%dd원원((%%dd원원´́%%dd개개))입니다입니다..\\n'n',, str,str, charge,charge, unit,unit, n)n)

비교비교) ) ifif type ==type ==‘Y’‘Y’

str = str = ''등기등기''; ; unit=4000;unit=4000;

elseelsestr = str = ''보통보통''; ; unit=2700;unit=2700;

endend

MATLAB HCH

7장 MATLAB 프로그래밍 57/76

if isempty(n), error('소포 개수를 입력하세요.'), endm= input('소포의 무게를 입력하시오(kg) : ');type = input('등기소포입니까? Y/N[Y] :', 's');if ( isempty(type) | (type =='Y') | (type == 'y') )

str = '등기';if m > 5, unit = 5500;elseif m > 2, unit = 4500;else unit = 4000;end

elsestr = '보통';if m > 5, unit = 4200;elseif m > 2, unit = 3200;else unit = 2700;end

endfprintf('\n소포 %d개의 %s 소포요금은 %d개x%d원=%d원입니

if if -- elseif elseif -- else else -- end end 사용사용 예예

vv소포소포 요금표를요금표를 이용하여이용하여 소포의소포의 요금을요금을 계산하는계산하는 프로그램을프로그램을 작성하라작성하라..

구분 ~2 kg ~5 kg 5kg이상

등기 4,000 4,500 5,500

보통 2,700 3,200 4,200