31
MATLAB HCH 7MATLAB 프로그래밍 1/76 switch switch- -case case 문 v switch switch – case case문은 문은 switch switch 다음의 다음의 표현식의 표현식의 값에 값에 따라 따라 여러 여러 명령그룹들중에서 명령그룹들중에서 한 그룹을 그룹을 골라 골라 실행시킬 실행시킬 때 때 사용한다 사용한다. switch switch-case case문은 문은 if if문을 문을 사용하여 사용하여 똑 같이 같이 실행시킬 실행시킬 수 수 있지만 있지만, switch switch문이 문이 프로그램을 프로그램을 이해하기가 이해하기가 더 더 쉽다 쉽다. v switch switch문의 문의 구조 구조 ………… switch 표현식 표현식 case case 1 …… …… case case 2 …… …… otherwise otherwise …… …… end end ………… MATLAB MATLAB 명령어 명령어 그룹 그룹 1 MATLAB MATLAB 프로그램 프로그램 MATLAB MATLAB 프로그램 프로그램 MATLAB MATLAB 명령어 명령어 그룹 그룹 2 MATLAB MATLAB 명령어 명령어 그룹 그룹 n 명령어 명령 그룹 1 명령어 그외 1 switch 명령 그룹 2 명령 그룹 n 2

10-5수치해석(조교수업)[1] [호환 모드]isdl.cau.ac.kr/education.data/numerical.analysis/prac4.pdf · 2010-10-12 · MATLAB HCH 7장MATLAB 프로그래밍 1/76 switch-case

  • Upload
    vuhanh

  • View
    227

  • Download
    1

Embed Size (px)

Citation preview

MATLAB HCH

7장 MATLAB 프로그래밍 1/76

switchswitch--case case 문문

vv switchswitch –– casecase문은문은 switchswitch 다음의다음의 표현식의표현식의 값에값에 따라따라 여러여러 명령그룹들중에서명령그룹들중에서

한한 그룹을그룹을 골라골라 실행시킬실행시킬 때때 사용한다사용한다.. switchswitch문문--casecase문은문은 ifif문을문을 사용하여사용하여 똑똑

같이같이 실행시킬실행시킬 수수 있지만있지만,, switchswitch문이문이 프로그램을프로그램을 이해하기가이해하기가 더더 쉽다쉽다..vv switchswitch문의문의 구조구조

…………switch 표현식표현식

casecase 값값11…………casecase 값값22…………otherwiseotherwise…………

endend…………

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

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 프로그램프로그램

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

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

명령어

명령 그룹 1

명령어

그그 외외

값값11

switch 문

명령 그룹 2

명령 그룹 n

값값22

MATLAB HCH

7장 MATLAB 프로그래밍 2/76

switchswitch--casecase문의문의 사용사용 방법방법

vv 다음다음 예제를예제를 통해통해 switchswitch--casecase문의문의 사용방법에사용방법에 대해대해 알아보자알아보자..routeroute == input(input(''원하는원하는 노선을노선을 선택하세요선택하세요 :: ''));;switchswitch routeroute

casecase 11farefare == 10001000;;

casecase 22farefare == 11001100;;

casecase {{33,, 44,, 55}}farefare == 12001200;;

casecase 22farefare == 13001300;;

otherwiseotherwisedisp(disp( [int[int22str(route),str(route), ''번은번은 없는없는 노선입니다노선입니다..'']] ))farefare == 00;;

endendifif farefare

fprintf(fprintf(''%%dd번번 노선노선 요금은요금은 %%dd원입니다원입니다..\\n'n',, route,route, fare)fare)endend

ll switchswitch 다음의다음의 표현식은표현식은 스칼라나스칼라나 문자열문자열,, 값값

이이 미리미리 정의된정의된 변수나변수나 정수정수 결과를결과를 갖는갖는 수수

학식이학식이 될될 수수 있다있다..ll routeroute값이값이 22이면이면 casecase 22에에 해당하는해당하는 명령어명령어 그그

룹이룹이 실행된다실행된다.. 만일만일 casecase 22가가 한한 개개 이상인이상인 경경

우에는우에는 처음처음 만나는만나는 casecase문만문만 실행된다실행된다..ll casecase 문은문은 22개개 이상의이상의 값을값을 가질가질 수수 있으며있으며,, 이이

경우경우 벡터벡터 표시와표시와 달리달리 ‘‘{{ }}’’ 표시를표시를 사용한다사용한다..

MATLAB HCH

7장 MATLAB 프로그래밍 3/76

switchswitch--casecase문의문의 사용사용 예예

vv 주어진주어진 단위의단위의 길이를길이를 cmcm 단위로단위로 변환하는변환하는 프로그램을프로그램을 작성해보자작성해보자..

unitunit == input('input('변환할변환할 현재현재 단위는단위는[in/ft/m/cm][in/ft/m/cm] ?? :: ',', 's')'s');;x=x= input('input('현재현재 길이는길이는?? :: ')');;

switchswitch unitunitcasecase {'in',{'in', 'inch'}'inch'}

lcmlcm == xx ** 22..5454;;casecase {'ft',{'ft', 'feet'}'feet'}

lcmlcm == xx ** 22..5454**1212;;casecase {'m',{'m', 'meter'}'meter'}

lcmlcm == xx ** 100100;;casecase {'cm',{'cm', 'centimeter'}'centimeter'}

lcmlcm == xx;;otherwiseotherwise

disp(disp( ['unknown['unknown unitunit :: ',', unit]unit] ))lcmlcm == NaNNaN;;

endend

fprintf('fprintf('%%dd %%ss는는 %%dd cmcm입니다입니다..\\n',n', x,x, unit,unit, lcm)lcm)

MATLAB HCH

7장 MATLAB 프로그래밍 4/76

예제예제 7.4 7.4 에너지의에너지의 단위단위 변환변환 (1/2)(1/2)

vv Joule,Joule, ftft--lb,lb, cal,cal, eVeV 단위단위의의 에너지에너지를를 다른다른 단위로단위로 변환하는변환하는 스크립트스크립트 파일파일을을 작성하작성하

라라.. 실행시에실행시에 에너지의에너지의 양과양과 현재현재 단위단위,, 원하는원하는 단위단위를를 입력해야입력해야 하며하며,, 변환된변환된 에너에너

지지 양을양을 출력한다출력한다.. 11 J=J=00..738738 ftft--lb=lb=00..239239 calcal ==66..2424××10181018 eVeV이다이다.. 또한또한 프로그램프로그램으으

로로 다음을다음을 변환변환하라하라.. a)a) 150150 JJ을을 ftft--lblb로로,, b)b) 28002800 calcal를를 JouleJoule로로,, c)c) 22..77 eVeV를를 calcal로로..

Ein=input('변환할 에너지(일)의 값을 입력하시오: ');EinUnits=input('현재 단위를 입력하시오(J, ft-lb, cal, or eV): ', 's');EoutUnits=input('새 단위를 입력하시오(J, ft-lb, cal, or eV): ', 's');error=0;switch EinUnits

case 'J'EJ=Ein;

case 'ft-lb'EJ=Ein/0.738;

case 'cal'EJ=Ein/0.239;

case 'eV'EJ=Ein/6.24e18;

otherwiseerror=1;

end

파일명 : EnergyConversion

MATLAB HCH

7장 MATLAB 프로그래밍 5/76

switch EoutUnitscase 'J'

Eout=EJ;case 'ft-lb'Eout=EJ*0.738;

case 'cal'Eout=EJ*0.239;

case 'eV'Eout=EJ*6.24e18;

otherwiseerror=1;

endif error

disp('ERROR current or new units are typed incorrectly.')else

fprintf('E = %g %s',Eout,EoutUnits)end

>> >> EnergyConversion변환할 에너지(일)의 값을 입력하시오: 2800현재 단위를 입력하시오(J, ft-lb, cal, or eV): cal새 단위를 입력하시오(J, ft-lb, cal, or eV): JE = 11715.5 J

명령창에서의명령창에서의 실행결과실행결과

예제예제 7.4 7.4 (2/2)(2/2)

MATLAB HCH

7장 MATLAB 프로그래밍 6/76

Loop : forLoop : for--end loopend loop (1/2)(1/2)

vv 루프는루프는 명령어명령어 그룹을그룹을 어떤어떤 횟수만큼횟수만큼 반복반복 수행하며수행하며,, 매회매회 반복시반복시 적어도적어도 11개개

이상의이상의 변수가변수가 루프루프 내에서내에서 새새 값을값을 할당받는다할당받는다.. 루프에는루프에는 반복횟수가반복횟수가 지정된지정된

forfor--endend looploop와와 지정지정 조건이조건이 만족될만족될 때까지때까지 반복되는반복되는 whilewhile--endend looploop가가 있다있다..vv forfor--endend looploop

forfor kk == ff :: ss :: tt명령어명령어 그룹그룹

endend

명령어

명령 그룹

거짓거짓k ≤ 최종값

k 값 수정

명령 그룹 n

참참§§LoopLoop의의 인덱스인덱스 변수변수 kk는는 아무아무 변수변수 이름이나이름이나 상관없상관없

지만지만,, 주로주로 i,i, j,j, k,k, m,m, nn 등이등이 사용된다사용된다.. MATLABMATLAB에서에서

는는 i,i, jj가가 복소수복소수 표현에표현에 사용되므로사용되므로 복소수를복소수를 사용할사용할

때는때는 사용하지사용하지 않도록않도록 한다한다..§§처음처음 실행할실행할 때때 kk==ff이며이며 명령어명령어 그룹을그룹을 실행한실행한 후후 두두

번째번째 실행에서는실행에서는 kk==ff++ss이이 된다된다.. kk가가 최종값최종값 tt를를 초과초과

하게하게 되면되면 명령어명령어 그룹을그룹을 실행하지실행하지 않고않고 endend 다음의다음의

명령어로명령어로 넘어간다넘어간다..예예)) k=k=11::22::44일일 때때 루프는루프는 k=k=11,, 33에에 대해대해 22번번 실행된다실행된다..

MATLAB HCH

7장 MATLAB 프로그래밍 7/76

forfor kk == ff :: ss :: tt명령어명령어 그룹그룹

endend

Loop : forLoop : for--end loopend loop (2/2)(2/2)

§§ 증감값증감값 ss가가 11과과 같으면같으면,, 생략해도생략해도 된다된다.. 예예)) forfor m=m=11::44 ↔↔ forfor m=m=11::11::44§§ 증감값증감값 ss는는 음수가음수가 될될 수수 있다있다.. 예예)) kk==88::--33::11은은 k=k=88,, 55,, 33으로으로 세세 번번 반복하게반복하게 된다된다..§§ 시작값인시작값인 vivi가가 최종값인최종값인 vfvf와와 같으면같으면,, 단단 한번만한번만 실행하게실행하게 된다된다..§§ ff >> tt와와 ss >> 00,, 또는또는 ff << tt와와 ss << 00이면이면 루프는루프는 실행되지실행되지 않으며않으며,, ff=t=t이면이면 11번번 실행된다실행된다..§§ 루프루프 인덱스인덱스 kk는는 ff 부터부터 시작해서시작해서 루프를루프를 돌돌 때마다때마다 ss씩씩 증가하며증가하며,, 그그 때마다때마다 최종최종

값값 tt 보다보다 큰큰 지지 검사해서검사해서 kk가가 tt보다보다 크면크면 루프를루프를 종료한다종료한다.. 마지막으로마지막으로 실행할실행할 때때

의의 kk 값은값은 tt와와 같거나같거나 tt보다보다 작다작다..

§§ forfor 문에서문에서 kk 값에값에 벡터로벡터로 지정된지정된 특정특정 값을값을 할당할할당할 수도수도 있다있다..예예)) forfor k=[k=[55 33 88 --22 44]],, disp(disp(kk),), endend

§§ kk 값이값이 루프루프 내에서내에서 다시다시 정의되어서는정의되어서는 안안 된다된다..§§ 루프가루프가 끝나면끝나면,, 루프루프 인덱스인덱스 변수변수 kk의의 값은값은 마지막으로마지막으로 할당받은할당받은 값이다값이다.. forfor 문에문에

서서 최종값과최종값과 비교할비교할 때의때의 값이값이 아니라는아니라는 점에점에 주의하라주의하라..

MATLAB HCH

7장 MATLAB 프로그래밍 8/76

forfor--end end 루프의루프의 사용사용 예예 11

vv 11,, 44,, 77,, 1010의의 네네 수의수의 제곱값을제곱값을 차례대로차례대로 구하여구하여 출력하라출력하라..

>>>> forfor k=k=11::33::1010,, x=k^x=k^22,, endendxx ==

11xx ==

1616xx ==

4949xx ==

100100

forfor k=k=11:: 33:: 1010xx == k^k^22

endend

MATLAB HCH

7장 MATLAB 프로그래밍 9/76

forfor--end end 루프의루프의 사용사용 예예 22

vv 11부터부터 사용자가사용자가 입력한입력한 NN 까지의까지의 모든모든 홀수들의홀수들의 합과합과 곱을곱을 구하는구하는 프로프로

그램을그램을 작성하라작성하라..

예를예를 들어들어 NN==66인인 경우경우,, ii 는는 11부터부터 22씩씩 증가하증가하

므로므로 세세 번번 루프를루프를 돌며돌며,, ii는는 각각 루프에서루프에서 11,, 33,,55의의 값을값을 갖는다갖는다.. ii==77은은 최종값최종값 66을을 초과하므초과하므

로로 i=i=55가가 최종값이최종값이 된다된다..

N=input(N=input(''최종최종 숫자를숫자를 입력하시오입력하시오 :: ''));;sumsum == 00;; productproduct == 11;;

forfor ii==11:: 22:: NNsumsum == sumsum ++ ii;;productproduct == productproduct ** ii;;

endend

fprintffprintf((''11부터부터 %%dd까지의까지의 모든모든 홀수들의홀수들의 합은합은 %%dd 이다이다..\\n'n',, N,N, sum)sum)fprintffprintf((''11부터부터 %%dd까지의까지의 모든모든 홀수들의홀수들의 곱은곱은 %%dd 이다이다..\\n'n',, N,N, product)product)fprintffprintf((''마지막으로마지막으로 더해진더해진 홀수는홀수는 %%dd 이다이다..\\n'n',, ii))

MATLAB HCH

7장 MATLAB 프로그래밍 10/76

>>>> factofacto계승계승(factorial)(factorial)을을 구할구할 수를수를 입력하시오입력하시오 :: 5555!! == 120120

forfor--end end 루프의루프의 사용사용 예예 33

N=input(N=input(''계승계승(factorial)(factorial)을을 구할구할 수를수를 입력하시오입력하시오 :: ''));;ifif (N(N >=>=00 ))

ff == 11;;forfor i=i=11::NN

ff == f*if*i;;endendfprintf(fprintf(''%%d!d! == %%dd\\n'n',, N,N, f)f);;

elseelsefprintf(fprintf(''음수음수 %%dd을을((를를)) 입력했습니다입력했습니다.. 양수를양수를 입력하세요입력하세요..\\n'n',, N)N)

endend

vv 사용자가사용자가 입력한입력한 수수 NN의의 계승계승(factorial)(factorial)을을 계산하는계산하는 프로그램을프로그램을 작성하라작성하라..

MATLAB HCH

7장 MATLAB 프로그래밍 11/76

forfor--end end 루프루프 사용사용 예예 44

vv forfor--endend 루프를루프를 사용한사용한 결과와결과와 원소별원소별 연산을연산을 사용한사용한 결과가결과가 같은같은 경우가경우가

있는데있는데,, 일반적으로일반적으로 원소별원소별 연산이연산이 루프보다루프보다 더더 빠르며빠르며 두두 방법방법 모두모두 사사

용용 가능한가능한 경우라면경우라면 원소별원소별 원소원소 연산방법이연산방법이 더더 바람직바람직하다하다..vv 예제예제

forfor x=x=11::22::99yy == sqrt(x)sqrt(x);;

endend

for x=[1 3 5 7 9]yy = sqrt(x);

endend

vv forfor 명령어에서명령어에서 인덱스에인덱스에 배열이배열이 주어진주어진 경우경우,, 열벡터의열벡터의 원소가원소가 모두모두 수행수행

될될 때까지때까지 열벡터가열벡터가 순서대로순서대로 인덱스인덱스 변수에변수에 대입되어대입되어 루프를루프를 반복한다반복한다..

úúú

û

ù

êêê

ë

é=

1189758642

Afor n=A

fprintf('n=fprintf('n=%%d,d, ',', n)n)x=(n(x=(n(33))--n(n(22))*n())*n(11));;fprintf('x=fprintf('x=%%dd\\n',n', x)x)

endend

n=n=22,, n=n=88,, n=n=99,, x=x=22n=n=44,, n=n=55,, n=n=88,, x=x=1212n=n=66,, n=n=77,, n=n=1111,, x=x=2424

명령창에서의명령창에서의 실행결과실행결과

x=[1 3 5 7 9]yy = sqrt(x)vs.vs.

MATLAB HCH

7장 MATLAB 프로그래밍 12/76

forfor--end end 루프루프 사용사용 예예 55

vv forfor 명령어의명령어의 루프루프 인덱스인덱스 변수에변수에 실수도실수도 사용사용될될 수수 있다있다..

vv 벡터벡터 vv의의 원소원소 중에서중에서 양의양의 원소의원소의 주소를주소를 알려알려 주는주는 프로그램프로그램

v=[3 -2 0 8 -7];n=0;for m=1:length(v)

if v(m)>0n=n+1;y(n)=m

endend

looploop NoNo ==11,, i=i= 22..11looploop NoNo ==22,, i=i= 44..33looploop NoNo ==33,, i=i= 77..55looploop NoNo ==44,, i=i=--66..88

실행결과실행결과

>>>> find_forfind_fory=y=11 44>>>> find(x>find(x>00))ans=ans=11 44

실행결과실행결과

loop=loop=11;;forfor ii=[=[22..11 44..33 77..55 --66..88]]

fprintf(fprintf('loop'loop NoNo ==%%d,d, i=i=%%44..11ff\\n'n',, loop,loop, i)i)loop=loop+loop=loop+11;;

endend

MATLAB HCH

7장 MATLAB 프로그래밍 13/76

예제예제 7.5 7.5 급수의급수의 합합 (1/2)(1/2)

aa)) forfor--endend 루프를루프를 이용하여이용하여 급수의급수의 첫첫 nn항의항의 합합 을을 계산하는계산하는 프로그램프로그램을을 작작

성하고성하고,, nn==44와와 nn==2020에에 대해대해 합을합을 구하라구하라..bb)) TaylorTaylor 급수를급수를 이용하여이용하여 sin(sin(xx))를를 계산하는계산하는 사용자정의사용자정의 함수함수 파일을파일을 작성하라작성하라.. 함수함수

이름과이름과 인자는인자는 y=Tsin(x,n)y=Tsin(x,n)으로으로 한다한다.. 입력인자는입력인자는 각도각도((°°))인인 xx와와 급수의급수의 항의항의 개수인개수인

nn이다이다.. 이이 함수로함수로 항의항의 개수가개수가 33과과 77일일 때때 sin(sin(150150°°))를를 계산하라계산하라..

(a)(a) 루프를루프를 반복할반복할 때마다때마다 급수의급수의 각각 항을항을 계산하고계산하고 이전이전 항들의항들의 합에합에 더한다더한다..

n=input('n=input('항의항의 개수를개수를 입력하시오입력하시오:: ')');;s=s=00;;forfor k=k=11::nn

s=s+(s=s+(--11)^k*k/)^k*k/22^k^k;;endendfprintf(fprintf(''급수의급수의 합은합은 %%ff 이다이다..\\n'n',, s)s)

>>>> ExpExp77__44aa항의항의 개수를개수를 입력하시오입력하시오:: 44급수의급수의 합은합은 --00..125000125000 이다이다..>>>> ExpExp77__44aa항의항의 개수를개수를 입력하시오입력하시오:: 2020급수의급수의 합은합은 --00..222216222216 이다이다..

실행결과실행결과

1

( 1)2=

-åkn

kk

k

( )2 1

0

( 1)sin 2 1 !

k k

k

xxk

=

-=

MATLAB HCH

7장 MATLAB 프로그래밍 14/76

functionfunction yy == Tsin(x,Tsin(x, n)n)%% TsinTsin 은은 TaylorTaylor 공식에공식에 의해의해 sinsin을을 계산한다계산한다..%% 입력인자입력인자 ::%% xx는는 각도각도%% nn은은 항의항의 개수개수

xrxr == x*pi/x*pi/180180;;yy == 00;;forfor kk== 00:: nn--11

yy == yy ++ ((--11)^k*xr^()^k*xr^(22*k+*k+11)/factorial()/factorial(22*k+*k+11));;endend

>>>> Tsin(Tsin(150150,, 33))ansans ==

00..65236523>>>> Tsin(Tsin(150150,, 77))ansans ==

00..50005000

명령창명령창

(b)(b) TaylorTaylor 공식의공식의 nn개의개의 항을항을 더하여더하여 sin(x)sin(x)를를 계산하는계산하는 사용자정의사용자정의 함수함수 파일파일..첫첫 번째번째 항은항은 k=k=00에에 해당하므로해당하므로,, 마지막마지막 루프루프 인덱스는인덱스는 k=nk=n--11이이 되어야되어야 nn개개

의의 항을항을 더한더한 셈이셈이 된된다다..

예제예제 7.5 7.5 (2/2)(2/2)

MATLAB HCH

7장 MATLAB 프로그래밍 15/76

예제예제 7.6 7.6 벡터벡터 원소의원소의 수정수정

vv 벡터벡터 V=[V=[55,, 1717,, --33,, 88,, 00,, --77,, 1212,, 1515,, 2020,, --66,, 66,, 44,, --22,, 1616]]의의 원소원소 중에서중에서 양수이면양수이면

서서 33이나이나 55,, 또는또는 33과과 55로로 나누어나누어 떨어지는떨어지는 원소는원소는 22를를 곱하고곱하고,, 음수이면서음수이면서 --55보다보다 큰큰 원소는원소는 세제곱을세제곱을 하는하는 프로그램을프로그램을 스크립트스크립트 파일로파일로 작성하라작성하라..

V=[V=[55,, 1717,, --33,, 88,, 00,, --77,, 1212,, 1515,, 2020,, --66,, 66,, 44,, --22,, 1616]];;n=length(V)n=length(V);;forfor k=k=11::nn

ifif V(k)>V(k)>00 && (( rem(V(k),rem(V(k), 33)==)==00 || rem(V(k),rem(V(k), 55)==)==00 ))V(k)=V(k)=22*V(k)*V(k);;

elseifelseif V(k)V(k) << 00 && V(k)V(k) >> --55V(k)=V(k)^V(k)=V(k)^33;;

endendendendVV

>>>> ExpExp77__55VV ==

1010 1717 --2727 88 00 --77 2424 3030 4040 --66 1212 44 --88 1616

forfor--endend 루프에서루프에서 반복횟수는반복횟수는 벡터의벡터의 원소원소 개개수와수와 같다같다.. 매회매회 반복할반복할 때마다때마다 조건문에서조건문에서 한한원소씩원소씩 체크한다체크한다.. 원소가원소가 문제의문제의 조건을조건을 만족만족하면하면,, 새로새로 계산한계산한 값으로값으로 원소를원소를 대체한다대체한다..

MATLAB HCH

7장 MATLAB 프로그래밍 16/76

whilewhile--end end 루프루프 (1/3)(1/3)

vv whilewhile--endend 루프는루프는 반복실행이반복실행이 필요하지만필요하지만 반복횟수를반복횟수를 미리미리 모르는모르는 경우경우

에에 사용된다사용된다.. 따라서따라서 whilewhile 루프에서는루프에서는 루프가루프가 시작될시작될 때때 반복회수가반복회수가 지지

정되지정되지 않는않는 대신대신 whilewhile 문의문의 조건식이조건식이 만족될만족될 때까지때까지 루프가루프가 반복된다반복된다..vv whilewhile--endend 루프루프 구조구조

명령어

명령 그룹

거짓거짓조건식

명령 그룹 n

참참

…………………………………………whilewhile 조건식조건식

……………………

endend……………………

명령어명령어 그룹그룹

MATLAB MATLAB 프로그램프로그램

MATLAB MATLAB 프로그램프로그램

vv whilewhile의의 조건식이조건식이 만족만족((참참))되면되면,, whilewhile과과 endend 사이의사이의

명령어명령어 그룹을그룹을 수행시킨수행시킨 후후 조건식으로조건식으로 돌아가서돌아가서 조조

건식의건식의 만족여부를만족여부를 다시다시 체크한다체크한다.. 조건식이조건식이 만족되만족되

지지 않으면않으면((거짓거짓),), endend로로 건너뛰어건너뛰어 루프를루프를 종료한다종료한다..

MATLAB HCH

7장 MATLAB 프로그래밍 17/76

vv whilewhile--endend 루프가루프가 정상적으로정상적으로 수행되기수행되기 위해서는위해서는

§§whilewhile의의 조건식은조건식은 적어도적어도 하나의하나의 변수를변수를 반드시반드시 포함해야포함해야 한다한다..

§§처음으로처음으로 whilewhile 명령어를명령어를 수행할수행할 때때 조건식에조건식에 포함된포함된 변수는변수는 whilewhile 명령어명령어

이전에이전에 미리미리 값을값을 할당받은할당받은 상태이어야상태이어야 한다한다..

§§조건식의조건식의 변수들변수들 중에서중에서 적어도적어도 하나는하나는 whilewhile과과 endend 사이의사이의 명령어에서명령어에서 새새

로운로운 값을값을 할당받아서할당받아서 whilewhile 명령어의명령어의 조건식이조건식이 거짓이거짓이 되도록되도록 만들어야만들어야 한한

다다.. 그렇지그렇지 않으면않으면,, 루프는루프는 조건식을조건식을 거짓으로거짓으로 만들수가만들수가 없으므로없으므로 무한무한 루프루프

를를 돌게돌게 되어되어 루프를루프를 빠져빠져 나올나올 수수 없게없게 된다된다..

vv whilewhile 루프의루프의 적용적용 예예

m =m =22

m =m =44

m = m = 88

m=m=11;;whilewhile mm <=<= 77

mm == 22*m*mendend

명령어명령어 창창 실행실행

whilewhile--end end 루프루프 (2/3)(2/3)

MATLAB HCH

7장 MATLAB 프로그래밍 18/76

vv 무한무한 루프의루프의 예예 ::

vv whilewhile 루프는루프는 어떤어떤 조건이조건이 만족되는만족되는 동안동안 명령어명령어 그룹을그룹을 반복반복 수행하고자수행하고자 할할

때때 주로주로 사용된다사용된다.. 일반적으로일반적으로 whilewhile 루프를루프를 forfor 루프로루프로 수행할수행할 수수 있지만있지만,, 이이

런런 경우에는경우에는 forfor 루프로루프로 구현하기가구현하기가 좀좀 더더 까다로운까다로운 경우가경우가 많다많다..

m=8;whilewhile m ~= 0

m = m – 3;endend

mm이이 88,, 55,, 22,, --11,, …… 과과 같이같이 변하게변하게 되어되어 정확히정확히

00과과 같은같은 값을값을 갖지갖지 못하므로못하므로 조건식을조건식을 거짓으거짓으

로로 만들만들 수수 없다없다.. 따라서따라서 무한무한 루프를루프를 돌게돌게 된다된다..

n=1;while n ~= 5

disp(n)n=n+1;

end

for n=1:4disp(n)

end

whilewhile--end end 루프루프 (3/3)(3/3)

MATLAB HCH

7장 MATLAB 프로그래밍 19/76

while while 루프와루프와 for for 루프루프 (1/2)(1/2)

vv eps(eps(ee))의의 크기를크기를 추정하는추정하는 프로그램프로그램

EPS=EPS=11;; n=n=00;;whilewhile 11+EPS+EPS >> 11

EPSEPS == EPS/EPS/22;;nn == nn ++ 11;;

endendEPSEPS == EPS*EPS*22

EPS=EPS=11;;forfor n=n=11 :: 10001000

EPSEPS == EPS/EPS/22;;ifif ((11+EPS)==+EPS)==11

EPSEPS == EPS*EPS*22breakbreak;;

endendendend

vv 프로그램이프로그램이 무한무한 루프에루프에 빠지게빠지게 된된 경우경우,, 키보드의키보드의 CtrlCtrl ++ CC 또는또는 CtrlCtrl ++BreakBreak 키키 조합을조합을 누름으로써누름으로써 프로그램의프로그램의 수행을수행을 중지시킬중지시킬 수수 있다있다..

MATLAB HCH

vv 11부터부터 NN까지의까지의 정수의정수의 합을합을 구하는구하는 프로그램프로그램

7장 MATLAB 프로그래밍 20/76

MATLAB HCH

7장 MATLAB 프로그래밍 21/76

vv n!n! ≤≤ 100100 을을 만족하는만족하는 가장가장 큰큰 정수정수 nn을을 구하는구하는 프로그램을프로그램을 작성하라작성하라..

n=n=11;;whilewhile prod(prod(11::n)n) << 100100

nn == nn ++ 11;;endendnn == nn -- 11

vv 11부터부터 NN까지의까지의 정수의정수의 합을합을 구하는구하는 프로그램프로그램

N=N=100100;; sumsum == 00;;forfor ii == 11 :: NN

sumsum == sumsum ++ ii;;endendsumsum

N=N=100100;; sumsum == 00;;kk == 11;;whilewhile kk <=<= NN

sumsum == sumsum ++ kk;;kk == kk ++ 11;;

endendsumsum

while while 루프와루프와 for for 루프루프 (2/2)(2/2)

MATLAB HCH

7장 MATLAB 프로그래밍 22/76

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

vv 루프와루프와 조건문은조건문은 또또 다른다른 루프나루프나 조건문조건문 속에속에 중첩될중첩될 수수 있으며있으며,, 중첩될중첩될 수수

있는있는 루프와루프와 조건문의조건문의 수에는수에는 제한이제한이 없다없다.. 그러나그러나 if,if, case,case, for,for, whilewhile 문문 각각

각에각에 해당하는해당하는 endend 문을문을 잊지잊지 않도록않도록 해야해야 한다한다..

forfor k=k=11::nnforfor h=h=11::mm

……………………

endend…………

endend……………………

중첩중첩((된된) ) 루프루프루프루프

예예))forfor k=k=11::33

forfor h=h=11::44명령어명령어 그룹그룹

endendendend

§§ k=k=11로로 시작하여시작하여 중첩중첩 루프를루프를 h=h=11,, 22,, 33,, 44에에 대해대해 44번번 실행한다실행한다.. 다음다음,, k=k=22에서에서 중첩중첩 루프는루프는 다시다시 h=h=11,, 22,, 33,, 44로로 44번번 실행한다실행한다.. 결국결국 모두모두 33 xx 44 == 1212번번 명령어명령어 그룹을그룹을 실행한다실행한다..

MATLAB HCH

7장 MATLAB 프로그래밍 23/76

예제예제 7.8 7.8 루프에루프에 의한의한 행렬행렬 생성생성

vv 다음다음 조건의조건의 원소원소들을들을 갖는갖는 nn××mm 행렬을행렬을 생성하는생성하는 스크립트스크립트 파일파일을을 작성하라작성하라..첫째첫째 행의행의 원소원소는는 해당해당 원소가원소가 속한속한 열의열의 번호와번호와 같다같다.. 첫째첫째 열의열의 원소원소들은들은 해당해당원소원소의의 행의행의 번호와번호와 같다같다.. 나머지나머지 원소들은원소들은 자기자기 바로바로 위의위의 원소와원소와 자기자기 왼쪽왼쪽 원원소를소를 더한더한 값과값과 같다같다.. nn과과 mm의의 값은값은 프로그램이프로그램이 실행실행될될 때때 입력되도록입력되도록 작성작성한다한다..

n=input(n=input(''행의행의 개수를개수를 입력하시오입력하시오:: ''));;m=input(m=input(''열의열의 개수를개수를 입력하시오입력하시오:: ''));;A=[]A=[];;forfor k=k=11::nn

forfor h=h=11::mmifif k==k==11

A(k,A(k, h)=hh)=h;;elseifelseif h==h==11

A(k,A(k, h)=kh)=k;;elseelse

A(k,A(k, h)=A(k,h)=A(k, hh--11)) ++ A(kA(k--11,, h)h);;endend

endendendendAA

§§ 첫째첫째 루프의루프의 인덱스인덱스 변수변수 kk는는

행의행의 주소이며주소이며,, 둘째둘째 루프의루프의 인인

덱스덱스 변수변수 hh는는 열의열의 주소이다주소이다..

>>>> ChapChap77_exp_exp77행의행의 개수를개수를 입력하시오입력하시오:: 44열의열의 개수를개수를 입력하시오입력하시오:: 55AA ==

11 22 33 44 5522 44 77 1111 161633 77 1414 2525 414144 1111 2525 5050 9191

MATLAB HCH

7장 MATLAB 프로그래밍 24/76

>> whileloop>> whileloop반복반복 회수를회수를 입력하시오입력하시오( < 100) : 5( < 100) : 5------------------------------------------번호번호 = 5= 555번번 반복하였습니다반복하였습니다..------------------------------------------

반복반복 회수를회수를 입력하시오입력하시오( < 100) : 0( < 100) : 0

vv 사용자가사용자가 어떤어떤 수를수를 입력하면입력하면,, 11부터부터 그그 수까지수까지 센센 후후 다시다시 반복회수를반복회수를 묻는묻는

프로그램을프로그램을 작성하라작성하라.. 00을을 입력하면입력하면 프로그램은프로그램은 종료된다종료된다..

예제예제 looploop와와 breakbreak

whilewhile 11nn == input(input(''반복반복 회수를회수를 입력하시오입력하시오(( << 100100)) :: ''));;ifif nn <=<= 00

fprintf(fprintf(''\\n'n'),), breakbreak;;endendfprintf(fprintf(''------------------------------------------\\n'n'),), fprintf(fprintf(''번호번호 == ''))forfor ii ==11 :: nn

fprintf(fprintf( ''%%22d'd' ,, i)i)ifif ii << n,n, pause(pause(00..66),), fprintf(fprintf(''\\bb\\b'b'),), endend

endendfprintf(fprintf(''\\nn%%dd번번 반복하였습니다반복하였습니다..\\n'n',, n)n)fprintf(fprintf(''------------------------------------------\\nn\\n'n'))

endend

MATLAB HCH

7장 MATLAB 프로그래밍 25/76

>> Chap7_exp9>> Chap7_exp9year = 0 1year = 0 1W = 0 25000W = 0 25000AB = 300000 290000AB = 300000 290000

year = 0 1 year = 0 1 22W = 0 25000 25500W = 0 25000 25500AB = 300000 290000 279000AB = 300000 290000 279000

year = 0 1 2 3year = 0 1 2 3W = 0 25000 25500 26010W = 0 25000 25500 26010AB = 300000 290000 279000 266940AB = 300000 290000 279000 266940……..……..

계좌의계좌의 잔고는잔고는 1515년년 동안동안 유지된다유지된다..

-5 0 5 10 15 200

0.5

1

1.5

2

2.5

3x 105

계좌잔고인출금액

…………..

fprintf(fprintf(''계좌의계좌의 잔고는잔고는 %%dd년년 동안동안 유지된다유지된다..\\n'n',, year(nyear(n--11)) ))bar(year,bar(year, [AB'[AB' W'],W'], 22..00))

파일명 : Chap7_exp9

예제예제 7.9 7.9 (3/3)(3/3)

MATLAB HCH

7장 MATLAB 프로그래밍 26/76

예제예제 7.11 7.11 로켓모델의로켓모델의 비행비행 (1/4)(1/4)

vv 로켓이로켓이 처음처음 00..1515 ss 동안동안 엔진에엔진에 의해의해 1616 NN의의 힘힘으로으로 위로위로 추진되며추진되며,, 이후에는이후에는

중력중력 때문에때문에 점점점점 느려진다느려진다.. 정점에정점에 도달한도달한 후후,, 로켓로켓이이 아래로아래로 떨어지기떨어지기 시작해시작해

서서 속도가속도가 2020 m/sm/s에에 도달하면도달하면,, 낙하산이낙하산이 펴지며펴지며 이후이후 땅에땅에 닿을닿을 때까지때까지 2020 m/sm/s의의 일정한일정한 속도로속도로 계속계속 내려온내려온다다.. 로켓이로켓이 비행하는비행하는 동안동안,, 로켓의로켓의 속도와속도와 고도를고도를

시간의시간의 함수로함수로 계산계산하고하고 그래프로그래프로 출력출력하는하는 프로그램을프로그램을 작성하라작성하라..

vv 풀이풀이

구간구간 11 :: 엔진이엔진이 켜진켜진 처음처음 00..1515 ss 동안의동안의 운동운동

2 , 1( ) ( ) 2

EE v t atF mgF F mg ma a h

mt at-

= - = Þ = = =\å이이 구간구간 끝끝 tt ==00..1515 ss에서의에서의 시간시간,, 속도속도,, 높이를높이를 tt11,, vv11,, hh11이라고이라고 하자하자..

구간구간 22 :: 엔진이엔진이 멈춘멈춘 뒤부터뒤부터 낙하산이낙하산이 펴질펴질 때까지의때까지의 운동운동

( ) ( ) ( )21 1 1 1 1 1, 1( ) ( )

2v t v g t t h t h v t t g t t= - - = + - - -

이이 구간은구간은 일정한일정한 감속도감속도 gg로로 움직이며움직이며,, 로켓로켓 속도가속도가 --2020 m/s(m/s(아래아래 방향방향))가가 될될

때까지때까지 계속되며계속되며,, 구간구간 끝에서의끝에서의 시간과시간과 높이는높이는 tt22,, vv22,, hh22라고라고 한다한다..

MATLAB HCH

7장 MATLAB 프로그래밍 27/76

구간구간 33 :: 낙하산이낙하산이 펴진펴진 때부터때부터 로켓이로켓이 땅에땅에 닿을닿을 때까지의때까지의 운동운동

이이 구간에서는구간에서는 로켓로켓 속도가속도가 --2020 m/sm/s로로 일정하며일정하며,, 로켓로켓 높이가높이가 00이이 될될 때까지이다때까지이다..

( )2 2( ) chuteh t h v t t= - -

예제예제 7.11 7.11 (2/4)(2/4)

MATLAB HCH

7장 MATLAB 프로그래밍 28/76

m=m=00..0505;; g=g=99..8181;; tEngine=tEngine=00..1515;; Force=Force=1616;; vChute=vChute=--2020;; Dt=Dt=00..0101;;clearclear tt vv hhn=n=11;;t(n)=t(n)=00;; v(n)=v(n)=00;; h(n)=h(n)=00;;

%% 구간구간 llaa11=(Force=(Force--m*g)/mm*g)/m;;whilewhile t(n)t(n) << tEnginetEngine && nn << 5000050000

n=n+n=n+11;;t(n)=t(nt(n)=t(n--11)) ++ DtDt;;v(n)=av(n)=a11*t(n)*t(n);;h(n)=h(n)=00..55*a*a11*t(n)^*t(n)^22;;

endendvv11=v(n)=v(n);; hh11=h(n)=h(n);; tt11=t(n)=t(n);; %% 11구간구간 끝에서의끝에서의 속도속도,, 높이높이,, 시간시간

2, 1( ) ( )2

= =v t at h t at

-= EF mga

m

MATLAB HCH

7장 MATLAB 프로그래밍 29/76

%% 구간구간 22whilewhile v(n)v(n) >=>= vChutevChute && nn << 5000050000

n=n+n=n+11;;t(n)=t(nt(n)=t(n--11)+Dt)+Dt;;v(n)=vv(n)=v11--g*(t(n)g*(t(n)--tt11));;h(n)=hh(n)=h11+v+v11*(t(n)*(t(n)--tt11))--00..55*g*(t(n)*g*(t(n)--tt11)^)^22;;

endendvv22=v(n)=v(n);; hh22=h(n)=h(n);; tt22=t(n)=t(n);;

%% 구간구간 33whilewhile h(n)h(n) >> 00 && nn << 5000050000

n=n+n=n+11;;t(n)=t(nt(n)=t(n--11)+Dt)+Dt;;v(n)=vChutev(n)=vChute;;h(n)=hh(n)=h22+vChute*(t(n)+vChute*(t(n)--tt22));;

endendsubplot(subplot(11,,22,,11),), plot(t,h,tplot(t,h,t22,h,h22,'o'),'o')subplot(subplot(11,,22,,22),), plot(t,v,tplot(t,v,t22,v,v22,'o'),'o')

( )

( ) ( )

1 1

21 1 1 1

( )1( )2

= - -

= + - - -

v t v g t t

h t h v t t g t t

( )2 2( ) = - -chuteh t h v t t

예제예제 7.11 7.11 (3/4)(3/4)

MATLAB HCH

7장 MATLAB 프로그래밍 30/76

vv 결과의결과의 정확도는정확도는 시간시간 증분증분 DtDt의의 크기에크기에 따라따라 좌우된다좌우된다.. DtDt==00..0101초의초의 설정설정이이

좋은좋은 결과를결과를 준준 것으로것으로 보인다보인다..vv whilewhile 명령어의명령어의 조건식은조건식은 nn이이 5050,,000000보다보다 크면크면 루프를루프를 멈추도록멈추도록 nn에에 대한대한 조건조건

도도 포함하고포함하고 있는데있는데,, 이것은이것은 루프루프 내의내의 명령문에명령문에 에러가에러가 있을있을 경우경우 무한루프를무한루프를

피하기피하기 위한위한 예방책이다예방책이다..vv 이이 문제는문제는 여러여러 방법으로방법으로 프로그래밍할프로그래밍할 수수 있다있다.. 예를예를 들어들어,, 낙하산이낙하산이 펴지는펴지는

시간과시간과 로켓이로켓이 땅에땅에 닿는닿는 시간을시간을 먼저먼저 계산하여계산하여,, whilewhile 루프루프 대신대신 forfor--endend 루프루프

를를 사용할사용할 수도수도 있다있다.. 시간이시간이 처음처음 결정되면결정되면,, 루프루프 대신대신 원소별원소별 계산을계산을 이용할이용할

수도수도 있다있다..

0 5 10 15-20

0

20

40

60

80

100

120

0 5 10 15-30

-20

-10

0

10

20

30

40

50

낙하산 펴짐

낙하산 펴짐

예제예제 7.11 7.11 (4/4)(4/4)

MATLAB HCH

7장 MATLAB 프로그래밍 31/76

7장 강의록 끝