'프로그래밍/MathWorks Products'에 해당되는 글 10건

  1. 2010/05/11 게으른 엔지니어 MathWorks Technology Conference 2010
  2. 2010/03/30 게으른 엔지니어 매스웍스 제품군 (2) (2)
  3. 2010/03/25 게으른 엔지니어 매스웍스 제품군 (1)
  4. 2010/02/24 게으른 엔지니어 드뎌 Simulink 관련 제 1 호 책 출판... (1)
  5. 2009/09/07 게으른 엔지니어 Physical Modeling Tool에 대한 세미나가 열린다.
  6. 2009/09/07 게으른 엔지니어 MATLAB R2009b 가 나왔당
  7. 2009/05/23 게으른 엔지니어 IplImage에서 RGB 데이타 뽑아 내기 (1)
  8. 2009/05/08 게으른 엔지니어 The MathWorks Technology Conference 2009 가 열린다...
  9. 2009/04/13 게으른 엔지니어 Symbolic Math Toolbox의 MATLAB 인터페이스를 써보자 1 (2)
  10. 2009/03/25 게으른 엔지니어 Symbolic Math 를 보고 있는데~~~
해마다 열렸던 MathWorks Technology Conference가 올해도 6월8일에 작년과 같은 장소인 코엑스 인터컨티넨탈호텔 하모니볼룸(B1)에서 열린다. 홈페이지는 http://www.mathworks2010.net/이다. 홈페이지뿐만 아니라 트위터를 이용해서 정보를 제공하는 것을 시도하고 있다.
올해도 작년과 같이 다양한 형태로 매스웍스 제품이 사용되는 것들을 보여 주며, 역시나 약 10개 정도의 파트너 부스도 있어서 참석해서 다양한 데모등을 볼 수 있을 것으로 생각된다.

특히 요즘 많은 화두가 되는 Green Energy에 관해서도 풍력, 태양열, 전기자동차, 그리드 기술등과 같은 다양한 분야를 데모와 함께 외국 엔지니어로부터 많은 정보를 얻을 수가 있을것으로 보인다. Green Energy 트랙의 경우 동시 통역으로 진행되므로 영어의 부담은 안가져도 될 것 같다.

또 하나의 트랙은 임베디드 시스템 개발시에 초기 검증의 중요성과 함께, 다양한 검증 방법과 함께 C 코드 검증에 사용되는 Static Analysis Tool인 Polyspace까지 소개한다.

C/C++을 사용해서 개발하는 고객들이 항상 하는 얘기가 MATLAB이나 Simulink가 느리다는 얘기를 하는데, 생각해보면 어쩔 수 없는 부분이 있을 수 밖에 없다. 하지만 항상 단편적으로 수행 시간이 느리다는 얘기만을 하지만 실제적인 ROI 측면을 생각해 보지 않을 수가 없다. 실행 시간이 느리다는 얘기는 알고리즘이 다 개발된 상태에서 실행했을때 느리다는 얘기이지만, 실제 개발은 실행 시간이 좌우 하는 것보다 훨씬 많은 시간이 개발 도중에 걸리는 시간이다. 개발 과정에서 얼마나 쉽게, 검증을 하면서 빠르게 개발할 수 있는지가 관건이다. 마지막 트랙은 MATLAB과 Simulink로 개발한 알고리즘의 수행 시간을 조금이라도 빠르게 할 수 있는 다양한 방법들에 대해서 알려 주는 트랙이므로 속도에 대한 고민을 하는 경우 생각지 못했던 팁을 얻어 갈 수 있을 것으로 본다.
또한, 이미지 및 영상 처리 시스템 개발에 관한 매스웍스의 솔루션도 소개하므로 이미지 관련 사용자나 혹은 개발 업체는 새로운 방법을 알 수 있을 것 같다.

트랙내에 각 세션을 보면 MATLAB이나 Simulink 초보자에게는 좀 힘든 내용일 수 있으므로 이런 경우는 "MATLAB & Simulink 워크샵"을 듣는 것도 도움이 될 것으로 보인다. 물론 워크샵의 경우 인원 제한이 있어서 일찍 선택 하신 분들에게 우선권을 주므로 잘 선택해서 필요한 세션과 중복되지 않게 들으면 도움이 될듯 하다.

사용자 삽입 이미지

많은 사람들이 참석해서 많은 것을 얻어 갔으면 한다. 더 자세한 내용은 맨 앞에 소개한 홈페이지로 가면 자세한 내용을 알 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/211

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/211

매스웍스 제품군 (2)

프로그래밍/MathWorks Products 2010/03/30 19:31 게으른 엔지니어
앞에서 다 쓰지 못한 나머지 세 개의 플랫폼에 대해서 얘기해 보도록 하겠다.

5. 코드 생성 플랫폼
매스웍스 제품의 완결되는 플랫폼으로 Simulin로 만든 모델과 Embedded MATLAB 으로 만든 MATLAB 함수를 C/C++, HDL, PLC 형태의 코드로 만들어 주는 플랫폼이다. 매스웍스에서 얘기하는 모델 기반 설계(Model-Based Design)의 마지막을 장식하는 플랫폼으로 생성된 코드를 기존의 코드나 혹은 운영체제에 쉽게 접목 시킬 수 있도록 해주는 플랫폼이다. 초기 시작은 C 코드만을 생성하다가 C++로 확장되더니, HDL까지도 코드를 생성해 주며, 이번에 새로 나온 R2010a에는 Simulink PLC Coder가 포함되어서 훨씬 다양한 형태로 모델로부터 구현까지 지원을 하게 되었다. HDL Code와 함께 PLC Coder의 경우에도 아직 지원 안되는 블록셋이나 기능이 있긴 하지만 점차 버전 업이 되면서 이런 문제들도 해소될 거라고 보고 있다.

6. Verification 와 Validation을 위한 플랫폼
점차적으로 소프트웨어의 중요성이 커지고, 자동 생성 코드의 중요성이 커지면서 점점 중요해 지고 있는 분야가 테스팅 분야이다. 소프트웨어의 검증은 C/C++ 코드를 컴파일과 링크 과정을 통해서 오브젝트 코드를 만들어서 테스트를 하는 동적 테스팅과 소스 코드 자체를 검사하는 정적 테스팅이 있다.
동적 테스팅의 경우 코드가 완성되어서 직접 보드에 다운로드해서 테스팅해야 하는 번거로움과 함께, 테스팅이 거의 마지막 단계에서 완성되기 때문에 문제가 발생하게되면 많은 과정을 거쳐서 수정을 하게 된다. 매스웍스 제품은 컴파일러와 같이 오브젝트 코드를 만드는 제품이 없으며, 모델(Simulink로 만들어진 모델을 말한다.)을 만들어서 지속적으로 인풋을 만들어서 테스트를 하기 때문에 동적 테스팅과 같은 개념의 작업을 모델을 개발(알고리즘 개발) 하면서 하게 된다. 물론 오브젝트 코드로 바뀌고 나서 다시 테스트해봐야 하지만, 이미 모델을 테스트하면서 개발한 테스트 케이스가 있으므로 좀 더 편리하게 동적 테스팅을 할 수 있다. 이와 같이 모델 상에서 단순히 테스트 케이스로 테스트하는 것에서 더 나아가 모델 상에서의 커버리지를 보는 것과 같이 다양하게 Verification과 Validation을 하기 위한 제품을 제공한다.

7. 코드 검증 분야
정적 테스팅의 경우 C/C++과 ADA 의 소스 코드를 검증하기 위한 PolySpace라는 제품군을 제공한다. 일반적인 정적 테스팅의 경우 코드를 분석하여 오류가 발생할 만한 부분들을 표시해 주는 것이지만, PolySpace의 경우 Formal Method 중에서 Abstract Interpretation 이라는 기법을 사용하여 오류가 발생하지 않음을 검증하는 제품이다. 처음 들으면 기존의 정적 분석 툴과 다를게 없어 보이지만, 실제로는 개념상 완전히 다르게 봐야 한다. PolySpace의 경우 코드를 분석하여 현재 코드 상에서 발생할 수 있는 모든 경우의 수에 대해서 수학적으로 검증을 하게 되므로 동작중에 가장 많이 나타나는 배열 첨자가 지정된 범위 바깥을 나타낸다던지, 혹은 0으로 나누기 등과 같은 다양한 에러에 대해서 발생하지 않음을 검증하는 제품이다. 이 제품도 얘기하자면 무지 길므로 다음에 기회가 있으면 자세하게 설명을 하도록 하겠다.

이상과 같이 매스웍스의 제품군은 자세히 보면 엔지니어링 전반에 걸쳐서 사용할 수 있으며, 서로 잘 연결된 전체 제품군으로 동작하므로 간단한 시스템에서 부터 다양한 분야가 접목된 상태에서 같은 제품을 사용할 수 있는 큰 장점이 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/210

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/210

매스웍스 제품군 (1)

프로그래밍/MathWorks Products 2010/03/25 07:47 게으른 엔지니어

3월 첫주 금요일에 R2010a 버전이 새롭게 나왔다. 벌써 몇 년째 1년에 두번씩 업데이트된 버전을 내고 있는데, 이번 버전에서 가장 크게 추가된 기능은 System Object 라는 것이다.
조만간 이것에 대해서 자세하게 언급할 경우가 있겠지만, 실제 이쪽 분야 담당자와 얘기해 본 결과 상당히 좋아진 기능이라서 많은 사람들이 알았으면 하는 기능이라는 것이다.

지금 MathWorks 제품은 크게 보면 7개 정도의 큰 분야로 분리를 할 수 있다.

1. MATLAB 플랫폼
가장 기본적인 플랫폼으로 수학적인 알고리즘 계산등을 하기에 편리하며, 다른 프로그래밍 언어처럼 처리가 가능하다. MATLAB 플랫폼은 일종의 interpreter 언어로 볼 수 있으며, 기본적인 모든 연산은 행렬 연산을 기준으로 하고 있다. 덕분에 엔지니어링쪽에서 필요로 하는 계산을 사용자가 코딩할 때도 많이 생략되며, 또한 거의 최강이다 시피한 Data Visualization 을 손 쉽게 할 수 있다.

사용자 삽입 이미지


2. Distributed Computing 플랫폼
MATLAB 환경하에서 Parallel Computing을 하는 방법이 몇 년전부터 추가 되어서 다양하게 활용되고 있는 중이다. 한 컴퓨터 내에서 멀티 코어가 있을때 이를 직접적으로 활용하기 위해서는 Parallel Computing Toolbox를 사용할 수 있으며, 물리적으로 따로 떨어진 여러 대의 컴퓨터를 연결해서 알고리즘 전체를 여러번 반복해서 돌릴때 스케쥴러가 이런것을 이용해서 할때 사용하는 제품이 MATLAB Distributed Computing Server(MDCS)이다.

3. Simulink 플랫폼
또 다른 플랫폼처럼 얘기하긴 했지만, 더 바닥에는 MATLAB이 있어야만 실행이 가능하다. MATLAB과는 다르게 블록 다이어그램으로 필요한 프로그래밍을 하게 된다. MATLAB 플랫폼과 같이 일반적인 프로그래밍 언어로 알고리즘을 개발하던 엔지니어에게는 좀 생소할 수 있지만, 약간 익숙해 지면 대단히 편리하게 엔지니어링 일을 할 수 있다. 게다가 State Machine 알고리즘을 개발할 때는 Stateflow라는 제품을 활용해서 그래픽과 텍스트가 혼용된 형태로 모델링하여 훨씬 효과적으로 알고리즘을 개발할 수 있다. 또한 기존의 C코드가 있는 경우 Simulink에서 사용 가능한 형태의 블록으로 만들어서 Legacy Code와도 같이 사용하기 쉽게 되어 있으며, C로 블록을 만드는 방법 자체가 공개되어 있기 때문에 대부분 다른 툴과 연동이 쉽게 되어 있다.
사용자 삽입 이미지


사용자 삽입 이미지

4. Physical Modeling 플랫폼
Simulink를 이용해서 제어기 설계나 시물레이션을 하다보면 항상 문제가 될 수 있는 부분이 플랜트이다. 플랜트란 제어 하고자 하는 대상체를 통상적으로 지칭하는 말로서, 예전에는 수식을 특정 대상체에 대한 시간에 대한 특성을 수식으로 만들어서 Simulink로 수식을 구현하던가, Adams와 같은 Dynamic System의 모델링을 전문적으로 하는 툴에서 만들어서 Simulink로 가져 오는 방법등을 사용했었다. 하지만, 이런 경우 기계적인 시스템과 전기적인 시스템, 그리고 유압 시스템까지 같이 있는 플랜트의 경우는 한꺼번에 시물레이션을 하기가 매우 힘들다.

Physical Modeling 플랫폼의 경우 물론 Simulink 위에서 블록처럼 존재하지만, 실제로는 Simulink 에서 제공하는 다른 블록들과는 다르게 동작하며, 다양한 도메인을 위한 라이브러리가 존재한다. Physical Modeling 플랫폼의 경우 특정 시스템을 모델링할 때 시스템의 수식을 만들어서 이를 Simulink로 구현하는게 아니라 실제 존재하는 각 컴포넌트를 연결함으로써 시스템의 수식은 내부적으로 만들어 진다. 예를 들어 SimElectronics 라는 Physical Modeling 플랫폼의 제품중에 하나는 일반적으로 많이 사용하는 모터가 블록으로 존재해서 실제 모터의 스펙 값을 입력하는 것으로 모터에 대한 모델링을 끝낼 수가 있다.

R2010a를 기준으로 현재 제공하는 다양한 도메인을 제공하는데, 예를 들어 비행기의 랜딩 기어를 설계할 경우, 엑츄에이터로 유압 모터가 좋을지 일반적인 전기 모터가 좋은지를 비교해야 할 경우를 생각해 보자. Physical Modeling 플랫폼에는 SimHydraulics라는 라이브러리가 있어서 유압 모터가 블록으로 존재하며, SimElectronics에 있는 전기 모터를 Simulink 환경에서 쉽게 블록을 변경하면서 테스트 할 수 있다.

또한 Physical Modeling 플랫폼에서 제공하지 않는 컴포넌트는 Simscape Language를 활용하여 직접 손 쉽게 만들 수 있다.

이 부분은 얘기하자면 무지 길어 지니 다음 천천히 시간을 내서 설명을 하도록 하겠다. 지금은 매스웍스 홈페이지의 소개하는 http://www.mathworks.com/physical-modeling/를 참조 하자.

사용자 삽입 이미지


나머지 세 개의 플랫폼은 5. 코드 생성 플랫폼, 6. Verification과 Validation을 위한 플랫폼, 7. 코드 검증 분야 플랫폼 으로 나누어 지는데, 다음에 올리 도록 하겠다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/209

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/209

드뎌 몇년간 마음속에서 여유를 없게 만들었던 책이 출판된다. 매스웍스 제품 전문 출판사인 아진 출판사(http://ajin.to)를 통해서 출판한다.

Simulink를 잘 모르지만 써야 하는 사람들을 위해서 쓴 책이다. 가능한 자세히 선수 지식이 없어도 따라 할 수 있도록 최선을 다해서 썼지만, 항상 이런 작업을 하고 조금만 더 라는 유혹에 빠지게 된다. 더 이상 미룰 수 없어서 현재 가장 괜찮다는 생각에 출판을 하게 되었다.

몇 년간 마음속에 여유를 없게 했던 일중에 하나를 끝내서 시원 섭섭하며, 벌써 다음 책을 구상하고 쓸 계획을 하는 것을 보면 어쩔 수 없이 또 마음 속에 짐을 하나 가지고 다닐것 같다.

책은 아직까지는 일반 서점에 까지는 안 풀린것 같고, 아마 이번주에 인쇄를 마치고 빨라도 다음주는 되어야 일반 서점에 풀릴것 같다. 책 표지를 궁금해 할 사람(?)을 위해서 아진 출판사로부터 여기에서 볼 수 있다.

클릭을 귀찮아 하는 사람(?)을 위해서 표지 이미지를 여기에 넣어 둔다.

사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/208

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/208

매스웍스사에서는 일반적으로 플랜트 모델링을 쉽게 수식을 유도하지 않고, 모델링 할 수 있는 다양한 툴을 제공하고 있다. 국내에는 툴에 대해서 다양하게 알려져 있지 않기 때문에 사용하지 않지만, 사용법을 본다면 그 쉬운 방법에 반할 수 밖에 없을 것이다.

국내에서 최초로 이런 Physical Modeling 툴만을 위한 세미나를 모레(9월9일) 삼성동에 있는 섬유센타에서 개최한다.
자세한 내용은 아래 주소에 가서 확인하고 등록해서 참석했으면 한다.
http://www.mathworks.co.kr/company/even ··· 222.html


또한 대전에서 Green Energy의 기반이 되는 Window Power Generation과 Solar Power에 대해서 Physical Modeling Tool 뿐만 아니라 매스웍스사의 다른 툴인 제어기 개발과 연계하여, 어떤 식으로 사용하실 수 있는지에 대한 Case Study를 볼 수 있으니 많이 와서 보고 배워 갔으면 한다.

http://www.mathworks.co.kr/company/even ··· 378.html

국내에서 처음으로 시도되는 Physical Modeling 관련 행사 이므로 많은 것을 배울 수 있을 거라고 생각한다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/205

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/205

MATLAB R2009b 가 나왔당

프로그래밍/MathWorks Products 2009/09/07 14:22 게으른 엔지니어
벌써 MATLAB R2009b가 나왔다. 2007년부터인가 1년에 두 번씩 업그레이드를 약속하더니, 지금까지 계속해서 1년에 두 번씩 업그레이드가 나오고 있다. 지난번 버전부터인가, 실제로 고객들에게 DVD를 보내지 않고, 가능한 웹으로 다운 로드 받아서 설치하기를 유도하고 있다. 물론 고객이 원하는 경우에 요청을 하면 DVD는 보내 주기는 하지만 말이다.

일단 새 버전을 인스톨 했으니, 뭐가 바뀌었나 부터 봐야 겠당... Pre-release 부터 사용을 해서 UI가 좀 바뀐것을 알긴 하지만, 뭐... 예전과 그리 많이 바뀐거 같지는 않다.

몇가지 크게 바뀐건 예전에 TASKING, VisualDSP++, Green Hills MULTI, TI's Code Composer Studio등에 대한 각각의 Link 제품이 있었는데, 이번에 하나로 통합된게 외향적으로 아주 크게 바뀐것으로 보인다.

Simulink에서 사용자에게 가장 크게 바뀐 부분은 PID Controller를 위한 새로운 블록이 추가 되었다. Simulink Control Design과도 연계되는 블록으로 PID 설계를 좀더 쉽게 할 수 있게 되었다고 볼 수 있다.
사용자 삽입 이미지


또 하나의 바뀐 내용은 Simulink를 사용하다 보면 자주 사용하는 블록들이 생기게 되는데, Simulink Library Browser에 "Most Frequently Used Blocks"라는 탭이 생겨서 자동으로 추가 시켜 주게 된다.
사용자 삽입 이미지

Simulink Library Browser에 생길 뿐만 아니라  마우스 오른버튼을 눌렀을때 나오는 컨텍스트 메뉴에도 생겨서 블록의 추가를 쉽게 할 수 있게 되었다.

사용자 삽입 이미지


그리고 Help 윈도우에 따로 존재 하던 Demo 탭이 각 제품의 밑에 Demos라는 항목으로 추가 되었다. 모양도 좀 더 예뻐지고....
사용자 삽입 이미지

 실제 내부를 사용하다 보면 훨씬 많은 것들이 바뀌었겠지만, 현재 보이는 건 이 정도이다.
담에 기회되면 몇 가지 더 알리도록 하겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/204

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/204

6월에 있을 큰 행사에서 사용할 데모 때문에 하드웨어 연동 부분을 Simulink에서 사용 가능하도록 하고 있는 중이다. 하드웨어는 http://www.varram.com에 있는 DRC 카메라와 홈페이지에서 동영상으로 보이는 로봇이다. 뭐 카메라에 대한 자세한 내용은 홈페이지를 참조하면 되겠다.

카메라의 특징중에 하나가 RF를 이용해서 이미지가 전송되고 이를 PC상에서 처리해서 결과를 보내 주면 카메라는 다른 보드들과는 시리얼로 통신이 가능하다는 개념이다.  카메라가 DRC Station이라고 USB로 PC와 연결되어 있는 보드로 RF로 이미지를 보내 주면 PC에서는 이를 OpenCV를 이용해서 이미지 처리를 하도록 되어 있다.

Simulink나 MATLAB에서 이를 쓰게 할려면 몇 가지 작업을 거쳐야 한다. 첫 번째 문제점은 OpenCV를 활용해서 PC로 넘어 오는 이미지의 포맷이 IplImage 라는 점이다. MATLAB이나 Video and Image Processing Blockset에서 사용하기 위해서는 RGB 형태가 제일 좋다.

지금 진행된 작업은 DRC Station에서 가져온 데이타를 Simulink에서 사용 가능하도록 블록을 만들었다. 이제 할 일은 IplImage 포맷을 RGB로 변환해서 넘겨 주도록만 하면 될것 같다.

구글신께 상황을 물어 보니 여러 가지 답이 나오는데, 이것 저것을 직접 본 결과 제대로 답을 주는 코드가 없어서 오히려 더 헷갈리기만 해서 직접 IplImage의 포맷을 확인한 결과 의외로 배열을 잘 핸들링만 하면 특별히 어려울게 없다는 것을 알았다. 아래의 내용은 채널수가 3인 경우에 해당된다. Gray Scale로 오는 경우는 3을 곱할 필요도 억고, 당은연히 RGB로 뽑아 낼 수도 없다.

IplImage 구조에 있는 필드 중에 imageData라는 필드가 실제로 RGB 데이타를 가지고 있는데, 1차원 배열로 저장이 BGR 순서로 되어 있다. 즉 아래 그림과 갈이 있는다는 것을 알 수 있다. RGB의 각각의 처음이 (1, 1)부터 시작된다고 하면, 아래와 같이 imageData의 첫번째가 바로 Blue 데이타이고, 그 다음이 Green 데이타의 처음, 그 다음이 Red 테이타의 처음이다. 이런식으로 위치에 대한 데이타가 1차원으로 주욱 나열 되어 있다.
사용자 삽입 이미지

실제 MATLAB이나 Simulink에 있는 Video and Image Processing Blockset에서 사용하기 쉽게 하기 위해서는 아래 그림과 같이 각각의 데이타를 가진 배열로 만들어서 3차원 배열로 만들면 된다.

사용자 삽입 이미지


이를 위해서 IplImage의 필드 중에서 필요한 필드를 이용하여 직접 만들어야 한다. 아래에 코드가 이를 하기 위한 코드이다.  월요일에 사무실에 가서 실제 하드웨어에서 값을 받아서 해봐야 겠다.

img를 IplImage의 포인터 타입이라고 생각하자. 그러면 IplImage의 구조를 보면 img->width, img->height, img->widthStep 등을 활용해서 필요한 RGB를 뽑아 낼 수 있다.

[code]
for ( i = 0; i < img->height; i++ )
{
  for ( j = 0; j < img->width; j++ )
  {
     b[i][j] = img->imageData[i*img->widthStep + j*3];
     g[i][j] = img->imageData[i*img->widthStep + j*3 + 1];
     r[i][j] = img->imageData[i*img->widthStep + j*3 + 2];
  }
}
[/code]
로 코드를 뽑으면 된다. 현재 하드웨어가 없어서 되는지를 MATLAB에서 확인해 봤다. 월요일날 실제로 적용해서 되는지를 적도록 하겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 하나가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/194

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/194

2006년부터 해마다 매스웍스 코리아에서는 정기적으로 큰 행사를 진행하고 있다. 국내 엔지니어뿐만 아니라 본사 엔지니어들과 매스웍스 제품을 사용하고 있는 고객들까지 참여해서 하는 행사이다. 올해도 코엑스 인터컨티넨탈 호텔에서 행사를 진행한다. 행사의 이름은
The MathWorks Technology Conference 2009

행사 세부 일정을 보면 하루 종이 행사이며, 매스웍스 제품군을 대부분 다 다루는 행사이다. 또한 다양한 마스터 클래스로 참석자들에게 필요한 내용을 전달하기도 하며, 다양한 분야의 데모도 준비하고 있다. 또한 "임베디드 제어 시스템 설계 및 검증" 트랙은 동시통역까지 하므로 들을때도 많은 도움이 될거라고 생각한다.

특히나 국내 임베디드 소프트웨어 담당자들은 주로 커널 포팅이나 디바이스 드라이버 작성을 많이 생각하는데, 실제로는 알고리즘이 더 중요하다. 이런 알고리즘의 중요성을 인식하게 되면 시물레이션을 하지 않을 수가 없으며, C/C++ 같은 경우는 시물레이션을 하기에는 사용자에게 너무 많은 시간과 노력을 요구한다. 임베디드 소프트웨어 제어 시물레이션을 위한 툴 중에는 거의 독보적인 위치에 있는 Simulink 플랫폼에 대한 비전을 충분히 느낄 수 있을거라고 생각한다.

이미 선진국인 미국, 유럽, 일본등은 시물레이션하는 단계를 벗어나서 어떻게 하면 Verification과 Validation을 시물레이션 단계에서 할 수 있는지에 대한 고민을 하고 있으며, 매스웍스 제품군이 이런 사용자의 요구를 어떻게 수용해서 제품으로 도움을 주는지 세미나에 참석하면 알 수 있을듯 하다.

많은 사용자가 사전 등록해서 보러 왔으면 한다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/200

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/200

아래 내용은 본인이 직접 MATLAB 메뉴얼을 참조하여 적고 있으며, 저작권 문제가 있을 수 있으므로, 복사하시지는 말고 링크만 걸어 주시기 바랍니다.


 

MATLAB에서의 Symbolic Math 1

Contents


1. Symbolic 계산이란?
2. MATLAB 커맨드상의 Symbolic Math Toolbox
  2.1. Symbolic 변수
  2.2. Symbolic 상수

__________________________________________________________________________________


MATLAB은 기본적으로 수치해석적으로 모든 연산을 계산하며, 그 연산의 정확도는 IEEE에서 지정하는 double precision을 만족시킨다. MATLAB이 기본적으로 제공하는 함수 이외에도 산업 분야나 특별한 학문 분야에 관련된 함수는 Toolbox라는 이름으로 제공한다. 다양한 종류의 Toolbox를 제공하며, 이런 Toolbox도 마찬가지로 수치해석적인 방법을 이용한다. 하지만 유일한 예외가 있으니, 바로 Symbolic Math Toolbox이다.

1 Symbolic 계산이란?


MATLAB에서의 Symbolic Math Toolbox를 설명하기 전에 먼저 알아야 할게 Symbolic 계산이 어떤것인지 알아 보자.

Symbolic 계산은 고등학교때 배웠던 식 (1a)와 같은 이차 함수의 근을 구하는 공식을 생각하면 쉽게 이해할 수 있다. 식 (1a)의 근을 구하는 공식은 식 (1b)처럼 구할 수 있으며, 이와 같이 미지수를 포함해서 식으로 계산하는 것을 Symbolic 계산이라고 한다.

사용자 삽입 이미지


식 (1a)를 MATLAB에서 계산하기 위해서는 MATLAB이 이해할 수 있는 형태로 입력하고 함수를 이용해서 근을 구해야 한다. MATLAB에서는 식 (1b)1b와 같은 수식을 구할 수가 없다. 즉 미지수를 이용해서 계산할 수 없기 때문에, a,b,c의 값을 입력해야 한다. 즉 a = 1,b = 2,c = 3의 경우의 근을 구한다고 하면, 아래와 같이 한다.

>> p1 = [1, 2, 3];

>> roots(p1) 
 
ans = 
 
  -1.0000 + 1.4142i 
  -1.0000 - 1.4142i


위와 같이 수치적으로 값을 계산하는 것이 MATLAB의 기본 기능이며, 이를 Symbolic 계산으로 확장해 주는 것이 Symbolic Math Toolbox의 기능이다.


 

2 MATLAB 커맨드상의 Symbolic Math Toolbox


2.1 Symbolic 변수


MATLAB에서 식 (1a)1a를 Symbolic Math Toolbox를 쓰면 다음과 같이 할 수 있다. 아래에 보이는 것처럼 syms를 사용한다. 일반적으로 MATLAB 커맨드상에서 변수들을 설정하면 값을 대입하는 변수가 되어야 한다. 하지만, syms 명령어로 변수를 설정하면 Symbolic 변수로 설정되어서 값이 대입되지 않아도 되는 변수가 된다. 그리고 solve() 함수를 이용하여 실제 이차방정식을 x에 대해서 풀게 되면 Symbolic으로 계산을 하게 된다. 이렇게 되면 나온 결과도 Symbolic 변수에 대입된다. MATLAB의 Workspace에서 a,b,c,x를 보면 sym 이라는 데이타 타입임을 알 수있다. 여기에 값을 대입해서 계산하기 위해서는 subs()를 이용한다. 아래에 보이는 것처럼 Symbolic 변수인 x를 a,b,c에 각각 값을 1, 2, 3을 대입하여 계산하라는 함수이다. 그 결과를 보면 앞에서 수치적인 연산을 했던 것과 같은 결과 임을 알 수 있다.

>> syms a b c 
>> x = solve(’a*x^2 + b*x + c = 0’) 
 
x = 
 
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a) 
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a) 
 
>> subs(x, {a, b, c}, {1, 2, 3}) 
 
ans = 
 
  -1.0000 - 1.4142i 
  -1.0000 + 1.4142i

 
2.2 Symbolic 상수


(2.1)를 보면 변수를 Symbolic 변수로 만든 내용인데, 숫자까지 Symbolic 상수로 만들수 있다. 숫자를 Symbolic 상수로 만들었을때는 어떤 잇점이 있냐면 정확도에서 수치적인 값보다는 유리하다는 것을 알 수 있다. 식 (2)2를 보면 당연한 것이라고 생각하겠지만, MATLAB에서는 실제로 그렇지 않다.

사용자 삽입 이미지

아래를 보면 식 (2)를 보면 제대로 6으로 답이 나온것 같지만, 실제로는 그렇지 않다는것을 바로 그 아래에 있는 format long으로 하고 결과를 보면 알 수 있다. 이는 sqrt()함수의 결과를 먼저 계산하고, 그 계산 값을 다시 제곱하는 것으므로 ∘ - (6) 의 경우 무리수이므로 결과값이 딱 떨어지지 않기 때문에 어느 정도의 소숫점 자리수에서 자르게 된다. 그 잘리 결과에 대해서 다시 제곱을 하므로 결과가 정확하게 맞지 않게 된다. 하지만 워낙에 낮은 소숫점 자리수에서 잘리기 때문에 거의 영향을 안 주는 경우가 사실이다. 하지만 이를 sym() 함수를 써서 Symbolic 상수로 만들어서 사용하게 되면 정확하게 계산하는 것을 볼 수 있다.

>> sqrt(6)^2 
 
ans = 
 
    6.0000 
 
>> format long 
>> sqrt(6)^2 
 
ans = 
 
   5.999999999999999

 
 
>> sqrt(sym(’6’))^2 
 
ans = 
 
6

아래 예를 보면 2∕3 + 1∕5를 일반적인 MATLAB에서 계산하는 형태로 계산하면 아래와 같이 소수점을 가진 숫자로 나오는데, sym() 명령어로 Symbolic 상수로 만들어서 계산할 경우 정확하게 소숫점이 떨어지지 않는 경우 정확도를 위해서 분수 형태로 보여 준다. 이를 MATLAB 처럼 숫자로 표현하기 위해서는 double() 함수를 써서 할 수 있다.

>> 2/3 + 1/5 
 
ans = 
 
   0.866666666666667 
 
>> sym(’2/3’) + sym(’1/5’) 
 
ans = 
 
13/15 
 
>> double(ans) 
 
ans = 
 
   0.866666666666667

Symbolic 변수를 써서 행렬의 역행렬과 행렬의 determinant를 공식형태로도 구할 수 있다.


>> syms a b c 
>> A = [a, b, c;c, b, a;b, a, c] 
 
A = 
 
[ a, b, c] 
[ c, b, a] 
[ b, a, c] 
 
>> inv(A) 
 
ans = 
 
[ -(b*c - a^2)/((a - b)*(a - c)*(a + b + c)),      -c/((a - c)*(a + b + c)),      -b/((a - b)*(a + b + c))] 
[ -(a*b - c^2)/((a - b)*(a - c)*(a + b + c)),      -c/((a - c)*(a + b + c)), (a + c)/((a - b)*(a + b + c))] 
[ -(a*c - b^2)/((a - b)*(a - c)*(a + b + c)), (a + b)/((a - c)*(a + b + c)),      -b/((a - b)*(a + b + c))] 
 
>> det(A) 
 
ans = 
 
a*b^2 - a^3 + a*b*c + a*c^2 - b^2*c - b*c^2
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/191

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/191

요즘 회사에서 일이 생겨서 Symbolic Math 라는 쪽을 공부 하고 있다. 내가 뭐 수학적으로 아주 뛰어나서 이걸 보는건 아니고, 이쪽 관련 툴을 소개해야 할 필요가 있어서 메뉴얼과 튜토리얼을 열심히 보면서 공부하고 있는 중이다.

일반적으로 프로그래머는 Symbolic Math라는 말을 못 들어 봤을지도 모르겠다. 공학적인 문제를 풀기 위해서는, 쉽게 생각하면 동역학 시스템이다, 어떤 형태로든 미분 방정식이라는 것을 풀어야 한다. 보통은 속도나 쉽게 구현하기 위해서 수치해석적인 방법으로 문제를 풀게 되는데, 이렇게 푸는 수치해석적인 방법은 정확한 해를 구할 수가 없다. 항상 수치해석적인 오류를 가지고 있으니까... Symbolic Math는 수치해석적으로 풀지 않고, 사람이 손으로 식을 풀듯이 푸는 것이다.

실제로 (x-1)(x+1) 의 식을 푼다고 보면, 프로그래밍적으로 이 식을 푼다고 생각하면, 간단하게

double cal1(double x)
{
  return (x-1)*(x+1);
}

과 같이 프로그래밍을 하고, 값을 얻기 위해서는 cal1(5) 이런 식으로 실제 숫자를 넣어 줘야 한다. 이를 Symbolic Math를 지원하는 툴에서 쓴다면 아래와 같이 된다.
사용자 삽입 이미지

즉 수식의 형태로 값을 가지고 되고, 여기에 필요할때 값을 넣으면 결과를 얻을 수 있다. 이게 무슨 장점이 있냐고 할지 모르지만, 실제로 수식을 보게 되면 경향성이라던지 여러 가지 얻을 수 있는 장점이 많이 있다. 특히나 미분 방정식을 푼다고 생각해 보면 훨씬 큰 차이를 얻을 수 있다.

물론 이런 Symbolic Math의 경우 컴퓨터의 리소스를 무지 많이 잡아 먹는다는 단점이 있으며, 수식을 계산하는데 많은 시간이 걸린다는 단점이 있다.

Symbolic Math로 유명한 프로그램은 Mathmatica와 Maple이 있으며, 공학에서 대표적인 툴로 사용되는 MATLAB에도 Symbolic Math Toolbox가 있다. 작년초 까지만해도 MATLAB에서의 Symbolic Math Toolbox는 Maple의 엔진을 이용해서 계산했지만, 작년에 MuPAD라고 하는 Symbolic Math를 전문으로 하는 소프트웨어 회사를 합병하고 나서는 자체적인 MuPAD 엔진을 사용한다. 덕분에 예전에 없었던, 리포팅 기능이 쉽게 포함되었으며, 훨씬 좋아 졌다.

차분히 시간을 내서 Symbolic Math Toolbox에 대해서 설명을 해볼 생각이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.cipher.pe.kr/tt/cipher/rss/response/181

댓글+트랙백 ATOM :: http://www.cipher.pe.kr/tt/cipher/atom/response/181