메카트로닉스설계(04분반)-목차-Ⅰ. statechart diagram의 주요요소와 활용법 ???????????????????????11) statechart diagram이란????????????????????????????????????????????????????????12) statechart의 주요요소 ??????????????????????????????????????????????????????????13) statechart의 활용법??????????????????????????????????????????????????????????????1Ⅱ. state machine design pattern의 특징 ???????????????????????????2Ⅲ. producer/consumer design pattern의 특징??????????????????3Ⅳ. 상태 머신, 생산자/소비자 설계패턴을 활용한 “콜라 자판기” ????????41) 상태 머신 설계패턴을 활용한 “콜라 자판기” 코드의 실행과정??????????????????????????????42) 생산자/소비자 설계패턴을 활용한 “콜라 자판기” 코드??????????????????????????????????????7Ⅴ. 생산자/소비자 설계패턴을 활용한 자판기 code의 확장????12※ Reference ????????????????????????????????????????????????????????????????????????191. statechart diagram의 주요요소와 활용법을 요약하시오.1) statechart diagram이란?- 시스템에 일어나는 변화 표현 → 사건이나 시간에 따라 시스템 내의 객체들의 상태를 바꿈.ㆍ시스템의 변화를 잡아냄ㆍ객체의 상태 전이와 상태 전이의 시작점과 종료점 표시ㆍ“단일 객체”의 상태2) statechart의 주요요소□ (모서리 둥근 사각형) : 상태표시? (화살표 머리가 달린 실선) : 상태 전이 표시, (화살표 머리) : 상태 tatechart의 활용법- 객체의 상태변화를 상세히 분석합니다.statechart diagram은 객체 하나를 대상으로 생성-소멸 기간 중 다양하게 가질 수 있는 상태를 분석하는 목적으로 작성됩니다. 정보시스템에서 많은 객체는 생성되어 소멸될 때까지 간단한 상태를 가지지만 일부는 매우 복잡한 상태로 변화하면서 존재합니다. statechart diagram은 이러한 객체의 동적 상태변화를 정의하고 분석하는 목적으로 사용합니다.- event에 의한 객체의 반응을 분석합니다.statechart diagram은 객체 상태변화를 유발하는 event를 정의하고 분석하는 목적으로도 작성됩니다. 객체의 상태는 그냥 변하는 것이 아니라 event에 의해 변화합니다. 이러한 객체의 상태변화를 유발하는 event를 식별하고 상세히 정의합니다.- 객체의 속성이나 연산을 검증합니다.statechart diagram은 객체가 가지는 속성과 연산을 검증하는 목적으로 작성되기도 합니다. statechart diagram에서 분석 대상인 객체의 상태는 속성의 값으로 정의되고, 이벤트는 대부분 객체의 연산으로 정의됩니다. 따라서 다른 diagram에서 정의된 객체의 속성과 연산의 적합성을 검증할 수 있습니다.112. state machine design pattern의 주요 nodes 및 특징에 대해 요약 및 정리하시오.랩뷰에 기본 탑재된 state machine design pattern의 기본 형태를 보며 정리를 해보겠습니다.위의 ‘Standard State Machine’의 구조에서 발생하는 메커니즘을 순서에 따라 설명하겠습니다.1) while 루프에 타입 정의된 ‘Enum’의 초깃값인 ‘initialize’가 들어간다.2) 통과된 ‘Enum’의 초깃값에 따라 case 구조 내에서 ‘initialize’가 실행된다.3) ‘initialize’에 의해 다음 상태인 ‘stop’이 shift register를 따라 전달된다.4) 전달된 ‘stop’과 정지 조건의 ‘stop’이 일치하기 때문이 쓰인다.타입 정의를 하지 않고 ‘Enum’이 쓰이게 되면, case가 많아지면 많아질수록 그에 대해 쓰여야 하는 ‘Enum’이 많아진다. 이 경우에, 기존에 ‘Enum’에 수정이 필요한 경우 일일이 제거하고 다시 삽입하는 과정을 겪어야 한다. 하지만, 타입 정의를 하게 되면 그럴 필요 없이 자동으로 업데이트가 되기 때문에 귀찮은 과정을 줄이고 효율적인 코딩을 할 수 있게 된다.이 외에 event 구조를 case 구조 안에 넣어 사용하게 되면, case의 특정 상태 내에서의 각각의 사건에 대한 다음의 상태를 정의하여 더욱 정밀한 코딩을 손쉽게 할 수 있게 된다.이러한 state machine design pattern을 사용하게 되면 자칫 복잡한 알고리즘이 될 수 있는 일련의 사건들을 case 구조, while 루프, shift register, 타입 정의된 Enum, 그리고 event를 사용하여 단순화할 수 있다. 또한, 수정에 용이하므로 순간순간 달라지는 상황에 대비할 수 있다.3. producer/consumer design pattern의 주요 nodes 및 특징에 대해 요약 및 정리하시오.2번의 state machine design pattern은 단일루프 디자인 패턴이고, producer/consumer design pattern은 멀티루프 디자인 패턴이다. 생산자 루프에서 데이터를 생성하고, 소비자 루프에서 이 데이터를 소비한다. 또한, producer/consumer design pattern은 ‘큐’가 사용되는데 이것이 상태 머신 디자인 패턴과의 가장 큰 차이점이다.위와 마찬가지로 랩뷰에 기본 탑재된 producer/consumer design pattern을 살펴보며 정리해보겠다.위의 event가 사용된 ‘producer/consumer design pattern’의 구조에서 발생하는 메커니즘을 순서에 따라 설명하겠습니다.1) 어떤 타입이든 가능한 데이터가 큐의 형태로 위의 생산자 루프에 들어가게 된다.2) 큐의 형태로 이벤트 구조 안에 들가 방출되면서 밑의 소비자 루프에 들어간다.5) 큐 안의 성분이 문자의 형태로 밑의 case에 들어가며 저장된다.(혹시 위에서 error가 있었거나 정지 버튼을 눌렀다면 루프가 정지된다.)2번에서의 state machine design pattern과는 다르게 위의 생산자 루프에서 event가 처리된 뒤 밑에 있는 소비자 루프에 들어가며 case가 처리되는 멀티루프 디자인 패턴이다. 또한, shift register를 사용하여 상태의 성분이 전달되는 상태 머신 디자인 패턴과는 달리, 큐를 이용하여 상태의 성분이 전달되는 것을 확인할 수 있다.고로, ‘큐’를 얼마나 잘 활용하는가에 의해 이 producer/consumer design pattern의 효율성이 결정될 것이다.4. 학습자료에 제시된 상태머신 설계패턴을 활용한 “콜라 자판기” 코드의 실행과정을 상세히 설명하고, 생산자/소비자 설계패턴이 활용된 코드를 개발하시오.1) 상태 머신 설계패턴을 활용한 “콜라 자판기” 코드의 실행과정설명의 원할함을 위하여 while 루프 밖을 [1]번으로, while 루프 안이자 case 구조 밖을 [2]번으로, case 구조 안을 [3]번으로 정의하였습니다.1) [1]번에서 ‘Enum’으로 타입 정의된 열거형 데이터의 ‘초기화’ 상태와 0이라는 숫자형 데이터, 그리고 빈칸의 문자형 데이터가 초깃값으로 터미널을 타고 case 구조 안으로 들어가게 된다.(여기서 타입 정의된 열거형 데이터를 쓰는 이유는 하나의 데이터를 수정했을 때 자동으로 다른 데이터들도 업데이트되어서 수정에 용이하기 때문이다.)2) 초깃값인 ‘초기화’ 상태가 “초기화” case를 열게 된다.3) 이 “초기화” case에서 ‘대기’ 상태와 ‘0’, 그리고 빈칸이 shift register를 통해 전달된다.4) 전달된 ‘대기’ 상태에 의해 “대기” case가 열린다.(이 “대기” case가 이 콜라 자판기 코드의 핵심인 것 같다. “종료” case를 제외한 모든 case에서 ‘대기’ 상태라는 데이터를 전달하고 “ister를 따라 전달되고, 열거형 데이터는 각각의 event마다 해당된 상태들이 shift register를 따라 전달된다.(boolean data로 설정된 버튼들을 source로 만든 event이기 때문에 버튼의 push 여부에 의하여 event가 실행된다.)6) 위 사진은 해당 코드의 “100원 투입” case이다. 대기 상태에서 ‘100원 투입’ 버튼을 누르게 되면다음과 같은 “100원 투입” case가 실행된다. 기존의 숫자형 데이터에 100을 더한 값이 전달되고 현재 잔액이 100원 만큼 늘어나게 된다. 500원 투입과 50원 투입도 위와 같은 메커니즘으로 실행된다. 실행된 뒤 다시 대기 상태에 들어간다.7) 위 사진들은 해당 코드의 “판매” case이다. 기존에 있던 숫자형 데이터와 500원을 비교하여 500원 이상이면 “true” case가 실행되고 현재 잔액에서 500원을 뺀 숫자형 데이터와 ‘콜라 구매가 진행되었습니다.’라는 문자형 데이터를 전달한다. 각각은 현재 잔액과 결과에 표시된다.반대로 500원 미만이면 기존의 잔액이 그대로 전달되고 ‘잔액이 부족합니다.’란 메시지가 결과에 표시된다.8) 위 사진은 해당 코드의 “환불” case이다. 기존의 현재 잔액으로 표시된 숫자형 데이터가 문자형 데이터로 변환된 뒤 ‘xxx원이 환불되었습니다’라는 메시지를 결과에서 표시한다. 또한, ‘0’이라는 숫자형 데이터가 현재 잔액에 표시됨으로써 환불됨을 보여준다.9) 위 사진은 해당 코드의 “종료” case이다. 종료 버튼을 누르게 되면 기존의 숫자값, 그리고 빈칸의 문자가 전달된 뒤 해당 코드가 종료된다.2) 생산자/소비자 설계패턴을 활용한 “콜라 자판기” 코드(이 코드를 이용하여 5번의 콜라-사이다-환타 자판기를 만들었기 때문에, 코드에 대한 상세 설명은 5번에서 진행하겠습니다.)5. 위의 생산자/소비자 설계패턴이 활용된 코드를 확장하여 콜라(500원), 사이다(700원) 과 환타(1000원)를 판매하는 자판기 code의 개발과 실행과정을 설명하시오.위
학 과:학 번:이 름:과 목 명:교 수:제 출 일:- 목 차 -※ Abstract ??????????????????????????????????????????????????????????????????????1Ⅰ.Introduction ???????????????????????????????????????????????????????????????1Ⅱ. Problem Statements ???????????????????????????????????????????????21) 문제 소개 ????????????????????????????????????????????????????????????????22) 문제의 근을 구하기 위한 방정식 ?????????????????????????????????2Ⅲ. Numerical Method Comparison and Evaluation???31) bisection method & false-postion method ????????????????32) Newton-Raphson method 초깃값 설정과 미분한 함숫값?43) Newton-Raphson method???????????????????????????????????????5,64) secant method ????????????????????????????????????????????????????????75) 비교 및 평가 ?????????????????????????????????????????????????????????8,9Ⅳ. Conclusions ????????????????????????????????????????????????????????????9※ Reference ????????????????????????????????????????????????????????????????10※ Abstract강의 중 소개된 번지 점프 관련 비선형방정식의 근을 MATLAB을 이용한 bisection method, false-position metho한다. 각 방식의 m파일을 편집하여 최대 반복 횟수를 지정하고, 반복 동안에 나온 근삿값들을 이용하여 참 상대오차를 비교한다.구간법인 bisection method, false-position method는 주어진 횟수 안에서 수렴을 하지 못한다. 하지만 개방법인 Newton-Raphson method, secant method는 정해진 횟수 안에서 수렴한다. 결과적으로 개방법은 수렴하게 되고 구간법은 수렴을 하지 못했고 각각 비슷한 수렴 속도를 보였다. 개방법 중에서 Newton-Raphson method가 가장 빠른 수렴 속도를 보여줬고 secant method가 두 번째로 빠른 수렴 속도를 보여줬다. 각 방식의 구간이나 초깃값을 더 알맞은 값으로 잡아주면 더 향상된 속도를 보인다.Ⅰ. Introduction강의 중 소개된 번지 점프 관련 비선형방정식의 근을 각각의 수치 해법을 사용하여 구한다. MATLAB을 이용한 bisection method, false-position method, Newton-Raphson method, secant method를 사용하여 최대 반복 횟수를 지정하고 참 상대오차의 정확성을 판단하여 각 수치 해법의 수렴 속도를 비교한다. 최종적으로 반복 횟수가 x축에 오고 참 상대오차가 y축에 오는 그래프를 만들어 각각을 비교하고 평가한다.-1-Ⅱ. Problem Statements1) 문제 소개※ 번지 점프 시 (척추손상의 방지를 위해서) 항력계수가 0.25[kg/s]로 주어질 때, 자유낙하 4초 후에 낙하 속도가 36[m/s]을 초과하는 질량은 얼마인가?(단, 초기 질량은 xl = x(i) = 50[kg], xu = x(i+1) = 200[kg]이다.)2) 문제의 근을 구하기 위한 방정식운동방정식(Newton의 제 2 법칙)은v(t)`=` sqrt {{gm} over {c _{d}}} tanh( sqrt {{gc _{d}} over {m}} t) 이다.이 식의 해석해는 다음과 같다.{dv} over {dt} =g- {c _{d}}게 된다.f(m)`=` sqrt {{gm} over {c _{d}}} tanh( sqrt {{gc _{d}} over {m}} t)-v(t)f(m)`=`0 을 만족하면 자유낙하 4초 후에 낙하 속도가 36[m/s]을 초과하는 질량을 구할 수 있다.위의 식에서 g는 중력가속도로 9.81[m/s ^{2}]이고,c _{d}는 문제에서 주어진 항력계수이므로 0.25[kg/s]이다. 낙하 속도 v(t)가 36[m/s]이라고 주어져 모르는 변수는 m밖에 없다.따라서 계산을 통하여 답을 도출해 낼 수 있다.-2-Ⅲ. Numerical Method Comparison and Evaluation1) bisection method & false-postion method대표적인 구간법인 이분법(bisection method)과 가위치법(false-position method)을 사용하여 근을 구하였다. 이분법과 가위치법은 대체로 비슷한 수치 해법이며 두 해법의 유일한 차이점은 근삿값을 구하는 방식에 있다.· 이분법의 근삿값xr`= {xl+xu} over {2}· 가위치법의 근삿값xr`=`xu`-` {f(xu) TIMES (xl-xu)} over {f(xl)-f(xu)}다음과 같은 차이를 가진 두 수치 해법을 사용하여 같은 횟수 동안에 같은구간을 가지고 참 상대오차를 두고 서로 비교하면 다음의 그래프와 같은 과정을 보인다.· 반복 횟수 20번 동안의 이분법과 가위치법위의 그래프를 통하여 초반에는 비슷한 경향을 보이다 갈수록 이분법이 미세한 차이로 참 상대오차가 낮아지는 것을 볼 수 있다. 두 방식 모두 구간을 정해놓고 반복하는 구간법이기 때문에 개방법에 비하면 속도가 현저히 떨어진다. 그러나 두 해법 모두 종료 조건을 잘 잡아주면 원하는 근을 얻을 수 있는 우수한 해법이다.-3-2) Newton-Raphson method 초깃값 설정과 미분한 함숫값Newton-Raphson method는 초깃값의 설정이 중요하기 때문에 MATLAB을 활용한 그래프를 통해서 초깃값을 설정하였다.다에는 미분한 식이 필요하므로 함수의 미분이 필요하다.f(m)`=` sqrt {{gm} over {c _{d}}} tanh( sqrt {{gc _{d}} over {m}} t)-v(t) 을 미분하면f'(m) = {sqrt {g} sqrt {m} tanh( {sqrt {c _{d}} sqrt {g} t} over {sqrt {m}} )- sqrt {c _{d}} gt(sech( {sqrt {c _{d}} sqrt {g} t} over {sqrt {m}} )) ^{2}} over {2 sqrt {c _{d}} m} 다음과 같은 식이 나온다.-4-3) Newton-Raphson methodNewton-Raphson법은 근을 구하는 공식 중 가장 많이 사용되는 효율적인수치 해법이다. Newton-Raphson법이 사용하는 근삿값의 공식은 다음과 같다.· Newton-Raphson법의 근삿값x _{i+1} `=`x _{i`} - {f(x _{i} )} over {f'(x _{i} )} 이러한 Newton-Raphson법이 가지는 단점은 모든 개방법이 그러하듯 알맞은 초깃값을 잡아주지 않는다면 해를 구하는 데 어려움을 겪을 수 있다는 것이다.그러므로 2)에서 진행한 것과 같이 초깃값을 잡고 주어진 문제에서의 초깃값과 비교를 하면 다음과 같다.·초깃값에 147을 넣은 경우·초깃값에 50을 넣은 경우-5-·Newton-Raphson법의 각 초깃값 비교위의 표에서 2)의 그래프를 이용하여 구한 초깃값이 147, 주어진 번지 점프 문제에서의 초깃값이 50이다. 그래프를 활용하여 정한 초깃값의 경우 4번의 시도에 수렴하여 함수가 종료되는 것을 볼 수 있다. 50이라는 초깃값도 7번의 시도에 수렴한다.위의 결과를 통해 초깃값 설정으로 인해 반복 횟수가 줄어들었음을 알 수 있다.또한, 언급한 내용을 제외하고도 Newton-Raphson법이 수렴하지 않는 경우가 있다는 것을 보았을 때 초깃값을 설정하는 것이 결과값을 도출하는 데에 있어서 굉장히 중요하다고 볼 수 있다.-6-4) seca도함수의 계산을 위해후진 차분(backward finite difference)으로 근사화를 하였다.· 도함수의 대체(할선법)f prime (x _{i} )` CONG ` {f(x _{i-1} )-f(x _{i} )} over {x _{i-1} -x _{i}} `` RARROW ``x _{i+1} ` CONG x _{i} `-` {f(x _{i} )} over {f prime (x _{i} )} `다음과 같은 대체를 통해 유도한 할선법의 근삿값 공식은 다음과 같다.· 할선법의 근삿값x _{i+1``} =`x _{i`} - {f(x _{i} )(x _{i-1} -x _{i} )} over {f(x _{i-1} )-f(x _{i} )}다음과 같은 할선법과 Newton-Raphson법의 차이는 도함수를 쓰지 않는 것이 끝이 아니다. 할선법은 Newton-Raphson법과 달리 초깃값이x _{i}와x _{i-1}이다.즉, 할선법은 두 개의 초깃값을 선정해야 한다. 이러한 두 개의 초깃값을 선정하는 것이 1)에서 진행한 구간법과 유사하다. 하지만 구간법과 달리 할선법에는 부호 변화 조건이 없다.-7-5) 비교 및 평가-8-위의 그래프를 보면 같은 조건에서, Newton-Raphson법이 압도적으로 빠르게 참 상대오차가 줄어드는 것을 볼 수 있다. 또한, 주어진 허용오차보다 식의 허용오차가 작아져서 7번째에 식이 종료되는 것을 확인할 수 있다.위에 Newton-Raphson법의 m파일을 볼 때도 언급했듯이 초깃값을 147로 잡고 이와 같은 그래프를 실행하게 되면 Newton-Raphson법이 4번째에 참 상대오차가 엄청나게 낮아지고 종료되는 것을 확인할 수 있다.이분법과 가위치법이 그리는 선을 보면 참 상대오차가 들쭉날쭉하게 되는데 그에 대한 이유는 구간 내의 어느 점이나 참 근이 될 수 있기 때문이다.그래프를 보면 개방법들은 점점 수렴하는 그래프의 형태를 보이며 수렴하게 된다. 그러나 구간법은 주어진 반복 횟수 안에서 참 상대오차가 그래프상에서는 움직임의 변화가 거의 .