ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [매트랩(MATLAB) 혼자서기 강좌 #6] Control Structure 제어 구조의 이해 대박
    카테고리 없음 2020. 2. 14. 17:28

    >


    안녕하세요, 본래 MATLAB 및 프로그래밍은 복잡하고 반복적인 계산을 위해 만들어졌습니다.효율적으로 반복되는 컴퓨팅 때문에 단순한 계산은 할 수 있지만 딱히 효율적이지 않습니다.누구도 그와쵸쯔의 상점에서 그와쵸쯔을 구입, 나쁘지 않고 붕어빵을 첫 2개 값을 계산할 때 컴퓨터를 열고 메토우레프을 할 수 없습니다.지금까지는 기초 중의 기초로 하고 매트 랩의 언어나 변수의 비결, 그리고 1개나 2개 중심의 계산만 하고 왔습니다.그럼 오늘은 반복적인 계산을 위한, 그리고 매트랩에서 가장 중요하다고 할 수 있는 늗Control Structure로 배워보겠습니다.Control Structure는 우선 제어구조 즉 뭔가 식이 나쁘지 않고 프로그램을 제어하기 위해 사용되는 구조입니다.'처음이 아니어도, 처음이 아니어도'씩 배워요.먼저. For Loopfor의 문은 아마 매트랩에서 가장 많이 사용하는 기능 중에 첫 번째 것은 나쁘지 않습니다.단순하게 반복하는데 아주 좋고, 몇 번 어떻게 반복하는지에 대해 순수하지 않은 벡터(즉 list)가 들어갑니다.예시를보면서설명해드릴게요.list=[]:for i=첫:3 list=[list i]endfor는 함수가 아니기 때문에 for(변수) 그러다가는 식으로 입력하지 않습니다.우선 for와 입력한 뒤 1매스 스페이스 바에서 비우고 반복 사이에 바뀐 변수의 "처음은 아니다"를 정합니다.위의 예에서는 i가 바変わ니다.그리고 변수=벡터 형태로 입력합니다.이 경우에 어떤 최초가 처음이 나쁘잖아 그 바꾸기로 한 변수가 매개체의 첫번째 요소로 정의된 뒤 for문의 중국의 기능을 수행하고 그 뒤 2번째 요소가 된 뒤 종업원 및 실행합니다.앞선 강의에서 벡터를 정의하는 법으로 첫:3를 할 때[최초의 2 3]과 같다는 것을 배운 거죠 i=첫:3는 i=[최초의 2 3]이라고 생각합니다.그럼 위의 예시에서 어떤 첫 번째가 맛이 없을지 한 줄씩 생각해보도록 하겠습니다.먼저, list라는 변수가 [ ]에서 정의됩니다. 이것은 비어있는 행렬에 아무것도 들어있지 않습니다.2.for i=첫:3에서 for loop(for문)이 개시됩니다. 우선 i=처음에는 됩니다 2.list=[list i]에서 새 list변수를 정의합니다. 벡터이며 이전 list에 i를 옆에 붙입니다.3.end는 for문의처를 가르쳐서 줍니다. 여기서 또 for가 쓰고 있다고 다시 i=2에 됩니다.4. 반복해서 5.i=3이 된 후에 list=[list i]까지 계산하고 마치겠습니다.즉, 위의 예와 4줄을 실행하면 이후그와게 나쁘지 않고 오겠습니다.list = 최초--> 여기서 i = 최초라고 정의된 후 [listi] 로 했습니다. list=첫 2->i=2첫 때[list i]을 하면 된 첫]2] 이렇게 된 것이다.  list=첫 2 3마지막으로 중요한 것은 반드시 첫:3 그러다가게 i가 반복되는 필요 없어요 for i=[첫 65 2 4]이처럼 아무런 벡터 괜찮다 넣어도 i=최초의 i=65, i=2, i=4 이렇게 반복됩니다.아내의 소리에는 아주 생소한 개념으로 혼란스러울 수 있지만, 몇 번 다른 방식으로 까불다 보면 조금 더 이해하기 쉬울지도 모릅니다.여기서 이해가 안되면 다시 읽어보시길 권합니다.2.Double(Nested)For Loop, 이중으로 된 for문은 행렬 계산에서 많이 쓰입니다.for글안에for글을넣는개념입니다.예시로 설명하겠습니다.function [mat]=double_forloop(r,c)fori=초:rforj=초:comat(i,j)=i+j;endend, 이것은 대체 무엇인가.지난번에 가끔 배운 함수를 정의했어요.상기의 함수를 정의한 뒤 Editor에 적어. m파에서 최초로 보존을 쟀습니다만 처음의 1행으로 함수를 정의합니다.function--> 함수라는 것을 알려줍니다.[mat] 이것은 출력되는 변수입니다. 행렬이 줄을 통째로 출력합니다 double_forloop(r, c)함수 이름은 double_forloop이며 2개의 변수 r와 c가 들어요.r는 row(행), c는 column(줄)이라는 의미로 제 기분대로 r과 c라고 부르기로 했습니다.그러면 여기까지 "double_forloop이라는 함수가 있는데 r과 c가 들어가서 탈 mat이라고 하는 변수가 나쁘지 않아"라고 정의했습니다.그 이후의 행에서는 바로 for문장이 들어갑니다.for i=첫:r이것은 i=[최초의 2 3... r] 뾰족하고 한바퀴 돌때마다 i가 최초의 2,3,... 이렇게 바뀌고 r될 때까지 반복됩니다.그리고 그 안에 다시 forj=초:c가 있습니다.여기에서는 j가 최초의 2,3,..., c까지 계속 반복됩니다.그럼 어떤 처음이 제일 나쁘잖아시작하면 순서대로 i=처음이 됩니다.그렇게 j=최초가 되어 안에 있는 for문을 실행합니다.그 후에 j=2로 되어 j가 3,... c까지 계속 반복됩니다.만약에 이게 다 끝나서 괜찮으면 바깥쪽 for 문이 한 바퀴 돌았죠.그럼 i=2로 되어 j는 다시 하나 되어 c까지 반복되고 그의 뒤 i=3, j=쵸쯔에소 c까지 이렇게 반복됩니다.총수를 해보면 r*c 회차 반복됩니다.그럼 제가 정의한 함수에 돌아가고, 2번째 for문의 중국 mat(i, j)=i+j를 봅시다.이것은 mat라고 하는 행렬의 i행 j열을 i+j라고 정의합니다라는 뜻입니다.즉 i=최초의 j=2첫 때 mat의 쵸쯔헹 2열은 첫+2=3이 됩니다.이해가 안 가면 함수에(3,4)을 넣고 돌리고 보겠습니다.>>double_forloop(3,4)ans=2 3 4 5 3 4 5 6 4 5 6 7우선 r=3 c=4를 넣고 돌리셨습니다.첫단 츄루료은도에은의 행렬이 3행 4열로 나쁘지 않아서 왔지만 원하는 대로 나쁘지 않고 왔습니다.그리고 각 행과 열별로 보면 숫자가 줄 번호+열 번호로 되어 있습니다.그러면 지금까지 무엇을 했냐면 "총행의 갯수와 열의 수를 넣으면 각 요소가 줄 번호+열 번호로 되어 있는 행렬을 만드는 함수를 정의했다"라고 요약할 수 있습니다.처소리가복잡하지만천천히생각하면서내가여러번쓰는습관을갖게되면이해는어렵지않을것같습니다.for 문장과 이 nested for loop 구조는 상당히 중요하기 때문에 반드시 이해하고 넘어갑니다.3.If Statement(If문)if statement는 for뭉보은 이해가 용이합니다.그대로 if 이후에 오는 문장이 사실이라면 실행하거나 다음으로 넘어갑니다.사용법은 if(문장) 이렇게 합니다.예컨대 if첫+첫==2 A=3end이는 말에 풀면"만약 첫+첫 이 2라면 A을 3이라 정의합니다"입니다.첫+첫 이 2임과 A가 3으로 정의되는 것이 무슨 상관이 없지만 메토우레프은 첫단 들은 문장이 사실인지만 확인하고 사실이라면 이후에 적힌 것은 무엇이든 그대로 실행합니다.만약 if뒤에 오는 문장이 거짓이라면, 마트랩은 if문을 통째로 무시하고 날려버립니다.첫+첫==2가 뭔가 이해 못하면 전전 강 위, 부울 연산자(Boolean Operator)을 복습하고 돌아갔으면 좋겠다요 이 때 사용하기 위해서 배웠습니다.4.Elseif and else statement(else문 elseif문)if문이 너무도 대등한 elseif와 else문은 여러가지 조건을 고려하고 싶을 때에 사용합니다.어려운개념이아니기때문에어려운예시를보도록하겠습니다.function[price]=room_price(ppl)if ppl==첫 price=첫 0;elseif ppl==2 price=첫 5;elseif ppl>=3 price=20;else error('Check number of people!')endend또한 함수를 정의했습니다.지금 빨리 읽을 수 있을 거예요.함수명은 room_price, 입력변수는 ppl(people이라는 의미로 정하였습니다) 출력변수는 price 즉 가격입니다.인원수에 따라 방값을 출력하는 터무니없이 간단한 함수라고 생각하시면 됩니다.함수에서 조 썰매 타기에 if ppl==쵸쯔에송 만약 ppl가 최초의 이면 price=첫 0으로 정의합니다 만약 ppl이 2면 if ppl==쵸쯔을 건너 히토우이코 elseif에 걸립니다. 그래서 price=첫 5에 정의가 됩니다.그런데 만약 ppl가 최초의 0입니다 그래서는 if ppl==쵸쯔을 건너 히토우이코(사실이 아니니까요)elseif ppl==2번 건너 히토우이코 elseif ppl>=3이 성립하기 때문에 그 바로 밑에 price=20이 됩니다.만약에 이상한 숫자를 넣은 예를 들면 ppl=-초라면 위에 if와 elseif에 전체 진이 아닙니다.이럴 때 else를 넣으면 전체 참이 아닐 때 이것을 하라는 뜻으로 명령어를 입력할 수 있습니다.저는 error라는 함수를 사용했습니다.error(변수)라고 하는 함수는 변수에 텍스트를 입력합니다.(string이라고 부릅니다)그러면 오류가 표시되면서 입력한 텍스트가 표시됩니다.여기서는 인원을 확인하라는 뜻으로 Check number of people이라고 썼습니다.그러면 이 함수를 실행하면 어떻게 되는지 살펴보겠습니다. 오 room_price(〃)ans=첫 0~room_price(2)ans=첫 5>>room_price(4)ans=20~room_price(0)Error using room_price(line 9)Check number of people!딱 예상한 대로 나쁘지 않아서 오나요?여기서도 한 번 멈춰서 곰곰이 생각해 보면 좋을 것 같습니다.다시 약하면 구조는 이렇게 쓰입니다.if조건 명령 elseif조건 2명령 2elseif조건 3명령 3...else전체가 해당하지 않을 때 하는 명령 end입니다.메토우레프은 위에서 차례차례부터 나쁘지 않으며, 만약 조건 2과 조건 3가 모두 통과되면 차례로 조건 만 보고 명령 2를 실행시킨 뒤 if, elseif, else문을 종료시킵니다 즉 조건 3은 점검도 없이 명령 3은 실행되지도 않아요.이 점 주의하지 않으면 기스푸니다.4.while loop(while문)while는 한국에 '~ 하는 동안'이라는 뜻입니다.그럼 매트랩은 무엇일까요? 네, 어떤 조건이 성립하는 동안이라는 뜻입니다.구조는 이렇게 됩니다.while조건 명령 endwhile뒤에 있는 조건이 성립하는 1명령을 반복합니다.명령을 마치고 end로 돌아가면 조건이 아직 성립하는지 확인 후 성립되면 다시 명령을 실행하고 다시 확인하고 반복합니다.예시로 확인합니다.val=0;power=0;while val<최초의 000 power=power+첫;val=2^power;endvalpower, 이번에는 함수가 아닌 그냥 한줄 한줄 명령어를 넣게 된 첫 두줄로는 초단 val을 0, power를 0으로 정의했습니다.그 후, while의 문이 나쁘지 않기 때문에 나타납니다.while val<최초의 000이는 val가 최초의 000보다 작은 사이 하명령을 반복 하라라는 뜻입니다.power=power+첫 val=2^power가 두줄은 power는 power+쵸쯔로 정의 즉 한바퀴 돌때마다 power는 0에서 시작, 최초의 2,3... 이렇게 처음씩 증가합니다.그리고 val은 매번 2^power에 갑니다.따지고 보면 한바퀴 돌때마다 val은 2^0,2^최초의 2^2... 이렇게 계속 올라가요.이렇게 해서 while문이 끝나고 valpower의 2개는 val이 무엇인지, power가 무엇인지를 출력합니다.이쯤에서 실행해 보는 것보다 어떤 결과가 나쁘지 않은지 생각해 보는 것이 습관에 좋습니다.우선 쵸소리우에 while에 들어 power=첫 val=2이 좋겠죠?그러면 while 글 안의 명령이 모두 실행되었으므로 다시 한 번 이전으로 돌아가서 조건을 확인합니다.2<최초의 000이니까 아직 성립합니다.명령을 다시 실행, power=2, val=2^2=4입니다.그리고 또 val가 최초의 000보다 작은가 체크, 이렇게 반복됩니다 그 power=첫 0, val=2^첫 0=첫 024입니다.그럼 마지막으로 val<최초의 000을 체크할 때 첫 024이 첫 000보다 큰 것으로 성립하지 않습니다.이때 드디어 while문으로 탈출하고 val과 power를 출력하면 val=첫 024power=첫 0이라는 결과가 나쁘지 않고 오겠습니다.while 글을 쓸 때 주의할 점은 명령을 이상하게 쓰면 영원히 반복될 수도있습니다...영원히 조건이 성립되게 하면 이렇게 됩니다만, 이 경우, Ctrl+c를 눌러 주시면 매트랩이 계산 실행을 멈추므로 고쳐주세요. --습관 사건이 이번에는 매우 어려웠지만, 습관 사건은 비교적 간단하게 적었습니다.꼭 풀어보시길 권합니다. 첫회. 섭씨온도를 화씨온도로 바꾸는 함수를 사용하세요. 교환은 인터넷으로 찾아보세요. 경험상 대학의 수업에서 많은 과제는 친절하게 가르치기보다는 직접 찾아갔으면 좋겠습니다)function fahrenheit=f_to_c(celsius)fahrenheit=celsius*최초.8+32;end 2. 어떤 변수를 입력하면 그 변수의 절대 값을 출력하는 함수를 쓰시오. (abs라는 메투렙 기본함수가 있는데, 이것을 사용하지 말고, if글을 써보세요... 아주 기초적이지만 중요한 사건입니다)function y=absval(x)PercentConsider two cases where x is either nonnegative or negativeif x>=0 y=x;else y=-x;endend 3. 벡터를 입력하면 그 벡터에서 첫 0보다 큰 요소만 가진 벡터를 출력하는 함수를 쓰시오.(예를 들어[최초의 42 4 9첫 3]을 입력하면,[42첫 3]이 나쁘지 않는 함수입니다.)힌트:조 썰매 타기에 비어 있는 벡터를 정의하고 for문 안에 if문을 넣는 것이 죠쯔스프입니다.function새_list=over_ten(list)PercentFirst define an empty새 list새_list=[];PercentDecide number of iterations for loopl=length(list);for i=첫:l if list(i)>첫 0새로_list=[새로_list list(i)];endendend4. 이후 명령어를 입력했을 때 마지막으로 출력된다'result'벡터는 뭐 쵸쯔카요?('help mod'를 입력하면 mod이 무엇을 하는 함수인지 알렸으면이다.영어로 나쁘지 않다.하지만 MATLAB를 사용하기 위해서는 영어설명정도는 읽을 수 있는 능력을 갖추는 것이 매우 중요합니다. 울음)result=[]:for i=첫:20 if mod(i, 2)==0&&mod(i, 3)==0 result=[result i];endend[6최초의 2첫 8]오늘의 습관 사건에서는 난이도가 급상승한 어렵지만 매우 중요한 개념이므로 반드시 숙지해야 합니다.프로그래밍 초반에 부딪치는 벽인데, 이를 넘어 나빠지면 한층 발전된 실력을 갖추게 되는 겁니다.감사합니다


    댓글

Designed by Tistory.