matlabtutorial

피드

포스팅 대표 그림
모델 예측 제어(MPC)를 이용해 로켓을 수직착륙 시켜보았습니다 (2탄)
matlabtutorial
본 포스트의 원문은 아래의 링크에서 확인할 수 있습니다.👉非線形モデル予測制御によるロケットの着陸制御🚀 第2弾시작하며일론 머스크가 이끄는 SpaceX에서는 화성 및 달 비행을 위한 로켓 개발을 추진하고 있습니다.특히 Starship은 현존하는 로켓 중에서도 최대급의 로켓 엔진을 탑재하고 있으며, Falcon 9 로켓과 같은 부분 재사용이 아닌 완전 재사용 가능한 RLV(Reusable Launch Vehicle)를 목표로 개발이 진행되고 있습니다.또한 Falcon 9과 마찬가지로 자율적인 착륙 제어 기술을 통해 기체의 자세를 유지하고, 정해진 궤도 및 착륙 지점까지 비행할 수 있는 시스템으로 구성되어 있는 것으로 알려져 있습니다.이전 글 (모델 예측 제어(MPC)를 이용해 로켓을 수직착륙 시켜보았습니다) 에서 SpaceX의 로켓 제어에는 모델 예측 제어(MPC)가 사용되고 있다는 점을 바탕으로, 실제로 간단한 로켓의 비선형 운동 모델을 기반으로 시뮬레이션을 수행했습니다.이번에는 이전 내용에서 조금 더 심화된 시뮬레이션을 진행해 보고자 합니다.6자유도 비선형 운동방정식이번 검토에 사용할 로켓의 운동 모델은 X, Y, Z의 3차원 공간 내 위치 및 자세를 고려한 강체 운동으로 가정하여, 6자유도 비선형 운동방정식을 구성합니다.여기서 로켓은 엔진에서 연료를 연소시켜 추력을 얻지만, 연료를 소비함에 따라 기체의 질량이 시시각각 변화하는 강한 비선형성을 가진 대상으로 알려져 있습니다.이에 더해, 행성의 대기 중을 항행할 때는 기체에 가해지는 저항 등의 공기력, 바람 등 다양한 불확정 외력이 발생하므로 예측이 어려운 복잡한 제어 대상이 됩니다.따라서 MPC를 설계하기 위해서는 먼저 위의 요소들을 포함한 운동 모델을 수식으로 준비하는 것이 전제 조건입니다.그러므로 아래 그림과 같이 질량 변화 및 공기력을 고려한 6자유도 비선형 운동방정식을 정의합니다.[!WARNING]본 모델은 실제 로켓 제어에 사용되는 엄밀한 모델이 아닙니다.본 글 내에서만 유효한 모델임을 양해 바랍니다...
9일 전
포스팅 대표 그림
모델 예측 제어(MPC)를 이용해 로켓을 수직착륙 시켜보았습니다
matlabtutorial
본 포스트의 원문은 아래의 링크에서 확인할 수 있습니다.👉モデル予測制御を使ってロケットを垂直着陸させてみた서론요즘은 민간 우주 개발이 활발해지면서 SpaceX나 Blue Origin처럼 획기적인 우주 수송 시스템을 개발하는 기업들이 크게 떠오르고 있죠. 이러한 기업들이 개발하는 로켓의 가장 큰 특징은 뭐니 뭐니 해도 재사용이 가능하다는 점입니다!!기존 로켓은 대부분 일회용이었던 반면, 재사용 로켓은 발사에 사용한 1단 로켓이나 2단 로켓을 제어를 통해 지구로 귀환시켜 다시 사용합니다. 처음 영상을 봤을 때는 제어 기술로 이런 것까지 가능한가 싶어 정말 깜짝 놀랐습니다.https://youtu.be/GrP3jHuLQ9o인용: SpaceX Channel 영상사실 이 로켓 제어에는 최적화 기술이 사용되고 있다는 이야기가 있습니다. 아래는 SpaceX에서 로켓 착륙 제어를 담당하는 엔지니어가 작성한 기사로, 본문 중에 CVXGEN을 이용하여 실시간 볼록 최적화(Convex Optimization)를 풀고 있다는 내용이 언급되어 있습니다.Autonomous precision landing of space rockets논문으로는 아래가 해당 정보에 가까울 것 같습니다. (2차 추 계획 문제(Second-Order Cone Problem, SOCP)를 풀게 한다는 점이 흥미롭습니다.)Minimum-Landing-Error Powered-Descent Guidance for Mars Landing Using Convex Optimization또한, 일본 국내에서도 JAXA가 재사용 로켓 연구에 힘쓰고 있으며, 착륙 제어에 MPC를 이용하고 있다는 문헌이 있었습니다.1단 재사용 비행 실험(CALLISTO) 프로젝트비선형 모델 예측 제어를 이용한 재사용 로켓 착륙 유도 검토서론이 길어졌습니다만, “로켓을 제어로 날려보고 싶다(책상 위에서)!”라는 순수한 탐구심으로, 최근 유행하는 MPC(모델 예측 제어)를 사용해 보고자 합니다.모델 예측 제어모델 예측 제어(MPC: Model P...
24일 전
포스팅 대표 그림
MATLAB Copilot에게 상담 받으면서 공학 문제를 설계해보았다
matlabtutorial
본 포스팅은 아래 필자가 MATLAB Community Blog에 투고한 일본어 포스팅의 한국어 버전입니다.👉MATLAB Copilotに相談しながら工学問題を設計してみた안녕하세요. 매스웍스의 여동훈입니다. 저는 대학교 교수님들, 연구원 분들, 학생분들이 수업과 연구에서 MATLAB, Simulink를 잘 쓸 수 있게 기술적으로 지원하는 업무를 담당하고 있습니다. 오늘은 수업의 평가 과정에서 교육자분들이 도움 받을 수 있을만한 내용을 소개해드리고자 합니다. 특히, 최근 교육 분야에서 실질적인 도구로 자리매김하고 있는 생성형 AI를 이용하여 MATLAB 코드를 활용한 공학 문제를 설계하는 방법을 알아보도록 하겠습니다.평가를 위한 문제나 과제를 만드는 과정의 어려움학습 코스를 설계할 때, 개념 설명만큼 중요한 요소는 바로 평가입니다. 그런데 평가용 문제나 과제를 만드는 건 생각보다 쉽지 않아요. 시간도 많이 들고, 시행착오도 많습니다. 대부분의 교육자분들은 어떤 학생을 대상으로 할지, 어떤 주제를 다룰지, 어떤 데이터를 쓸지에 대한 큰 그림은 갖고 있지만, 그걸 실제 문제로 구현하는 과정에서는 예상보다 많은 고민이 필요합니다. 최근에는 생성형 AI를 활용해 문제를 만들어보려는 시도가 많아졌지만, 내가 원하는 형태의 문제에 잘 맞추어진 프롬프트를 찾아내야 하는 또 다른 과제가 생깁니다.한편 공학 교육에서는 학생들이 논리적 흐름을 제대로 이해하고 있는지 평가하는 것이 중요합니다. 프로그램을 활용한 문제는 이런 점에서 큰 장점이 있어요. 로직이 하나라도 빠지면 흐름이 끊기고 원하는 결과를 얻기 어렵기 때문에, 학생이 문제 해결 과정을 얼마나 정확히 이해했는지 명확하게 드러납니다. 이런 맥락에서 MATLAB은 좋은 선택입니다. 하이레벨 언어라서 복잡한 문법에 매달리지 않고 문제의 본질과 논리에 집중할 수 있게 해주거든요.오늘 소개할 방법은, 단순히 정해진 프롬프트를 쓰는 방식이 아닙니다. MATLAB Copilot을 이용하면 생성형 AI와 “상담”하듯 대화하면서, 교육자가...
4달 전
포스팅 대표 그림
(번역) MATLAB의 역사 (A history of MATLAB)
matlabtutorial
Important: 원문의 첫 페이지에서 다음과 같이 확인할 수 있는 문구를 바탕으로 본 페이지의 번역물을 디지털 방식으로 작성하여 공개하는 것임을 알려드리며 본 페이지에서는 어떠한 상업적 이익도 발생하지 않는다는 것을 알려드립니다.Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for third-party components of this work must be honored. For all other uses, contact the owner/author(s).본 게시글의 원문은 Cleve Moler & Jack Little의 A history of MATLAB(2020) 이며 공식 citation은 아래와 같습니다.Cleve Moler and Jack Litle. 2020. A History of MATLAB. Proc. ACM Program. Lang. 4, HOPL, Article 81 (June 2020), 67 pages. https://doi.org/10.1145/3386331본 포스팅에는 원문의 부록이나 참고 문헌은 포함하지 않았습니다. 따라서, 부록 혹은 참고 문헌에 대한 정보는 원문에서 확인하여 주십시오.Abstract첫 번째 MATLAB® (이름은 “Matrix Laboratory”의 줄임말)은 프로그래밍 언어가 아니었습니다. 1970년대 후반에 Fortran으로 작성되었으며, 약 열두 개의 서브루틴으로 구성된 LINPACK 및 EISPACK 행렬 소프트웨어 라이브러리를 기
3년 전
포스팅 대표 그림
(번역) UI편 - MATLAB -> C++ -> WebAssembly 자동 변환을 사용한 비선형 최적화 on JavaScript
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.UI編:MATLAB -> C++ -> WebAssembly の自動変換を使った非線形最適化 on JavaScript0. 소개이전에 웹 어셈블리(WebAssembly)를 생성하고 MATLAB의 fmincon을 브라우저에서 실행하는 방법에 대해 설명한 적이 있습니다. 이번에는 UI 부분을 만들어보았으니 소개하겠습니다.이 코드는 공개용으로 충분히 사용할 수 있는 것은 아니지만, 차차 개선해 나갈 예정이므로 힌트나 의견이 있다면 언제든지 주시면 감사하겠습니다. 감사합니다.실행 페이지는 다음 위치에서 확인할 수 있습니다: Github Pages: Rebalance Portfolio코드는 다음 위치에서 확인할 수 있습니다: GitHub: minoue-xx/rebalance_portfolioMATLAB에서 WebAssembly로의 자동 변환 부분은 다음의 게시물을 참조하십시오.Qiita: MATLAB -> C++ -> WebAssembly の自動変換を使った非線形最適化 on JavaScript1. 용도와 사용 방법목표는 항상 다음과 같습니다.“균형을 잃은 보유 비율을 목표 비율에 가깝게 조정하기 위해 각 주식을 몇 주 구매해야 하는가”하지만 선택은 “구매”만 가능합니다. 리밸런싱이지만 판매는 고려하지 않습니다. 투자 계획용인가요?다음은 조작 화면(GIF)입니다.이런 느낌입니다.Step 1: 현재 포트폴리오 표시보유 주식 및 수량은 csv 파일에서 읽어옵니다. 테스트로 샘플 데이터를 시작으로 해도 됩니다.현재 가격, 소계, 총액, 비율은 자동으로 계산됩니다. 필요에 따라 주식, 보유 수량 등을 변경해보세요. csv 파일의 형식은 다음과 같이 구성되어야 합니다. [티커],[보유 수량],[목표 보유 비율] 순서로 입력하세요.Step 2: 예산 금액 입력사용 가능한 예산 금액을 입력하고 [Rebalance] 버튼을 클릭하세요.Step 3: 필요 구매 수량 계산 및
3년 전
포스팅 대표 그림
(번역) MATLAB의 뉴럴넷을 웹 브라우저에 구동시키기 - MATLAB> C++ > WebAssembly 자동 변환
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.MATLAB のニューラルネットをブラウザで動かす: MATLAB > C++ > WebAssembly の自動変換0. 소개MATLAB을 브라우저에서 구현하면 재미있는 것이 있지 않을까 생각하다가 멋진 글을 발견하여 따라해보았습니다.TensorFlow.js로 MNIST 학습된 모델을 불러와 브라우저에서 손글씨 숫자 인식하기이 글에서는 TensorFlow.js를 사용하여 웹 브라우저에서 작성한 숫자가 0에서 9 중 어떤 숫자인지 예측합니다. 그리고 이 예측 부분에 MATLAB의 신경망을 사용해보았다는 이야기입니다.수행한 작업코드는 여기에서 확인할 수 있습니다: GitHub: minoue-xx/handwritten-digit-prediction-on-browser실행 페이지는 여기에서 확인할 수 있습니다: Github Pages: Hand-written Digit Prediction on Browser정확도는 의심스럽지만, 일단 동작하는 것을 먼저 구현했습니다. 간단한 신경망을 학습하고 GitHub Pages에 구현하는 과정을 설명하는 글입니다.WebAssembly 변환?MATLAB -> C++ -> WebAssembly를 사용한 JavaScript에서의 비선형 최적화에서는 fmincon 함수를 사용하여 최적화를 브라우저에서 구현했습니다. 이와 같은 방법을 사용합니다.File Exchange에 공개된 Generate JavaScript Using MATLAB Coder라는 도구를 사용하여 MATLAB Coder를 사용하여 MATLAB에서 WebAssembly로 변환하여 구현합니다.기본적으로 Generate JavaScript Using MATLAB Coder에서 제공하는 예제: Pass Data to a Library의 흐름을 따라 작업합니다.환경MATLAB (R2019b Update 5)Deep Learning ToolboxMATLAB CoderIm
3년 전
포스팅 대표 그림
(번역) MATLAB -> C++ -> WebAssembly 자동 변환을 사용한 비선형 최적화 on JavaScript
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.MATLAB -> C++ -> WebAssembly の自動変換を使った非線形最適化 on JavaScript 0. 소개MATLAB Central에서 Generate JavaScript Using MATLAB Coder라는 도구를 발견했습니다. MATLAB Coder를 사용하여 MATLAB에서 C++로 변환한 후에 WebAssembly로까지 변환하는 도구로 보입니다. 이전에는 JavaScript를 다루지 않았지만, 자동으로 변환할 수 있다면 해보기로 결정하여 놀아보았습니다.여기에서는 변환 부분에 대해서만 소개하겠습니다. UI 부분에 대해서는 다음 글을 참조하십시오.UI 편: MATLAB -> C++ -> WebAssembly의 자동 변환을 사용한 비선형 최적화 on JavaScriptWebAssembly에 대해서는 다음 두 가지 글을 참고하였습니다.Qiita: WebAssembly란Qiita: WebAssembly란?~실제로 C 언어를 브라우저에서 실행하기~[2019년 6월판]WebAssembly는 프로그램을 브라우저에서 빠르게 실행하기 위한 이진 형식으로, JavaScript에서 호출하는 형태로 사용된다고 합니다. 일부 처리의 가속화, 기존 C/C++ 등의 다른 언어로 작성된 애플리케이션을 이식하는 데 유용할 것으로 보입니다.수행한 작업이전에도 Qiita에 게시한 내용1입니다.“균형이 깨진 보유 비율을 목표 비율에 가깝게 만들기 위해 각 종목을 몇 주 구매해야 하는가”입니다. 이전 글에서는 이 계산을 MATLAB의 fmincon과 Google Sheets + Python을 사용하여 수행했습니다. 하지만 이번에는 브라우저에서 완료하려는 것이 최종 목표이지만, 일단은 MATLAB의 fmincon 비선형 최적화 계산을 JavaScript에서 실행하는 부분을 정리하겠습니다. UI는 좀 더 공부해야 할 것 같으므로 나중에 다시 다루도록 하겠습니다.기본
3년 전
포스팅 대표 그림
(번역) MATLAB & Python - 최적화 계산 및 Google Sheets 읽기/쓰기
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.【MATLAB & Python】最適化計算と Google Sheets の読み書き수행해본 것MATLAB에서 Python을 불러보았습니다. 구체적으로는 아래와 같습니다.Google Sheets에서 데이터를 불러온다 (by Python)최적화 계산 (by MATLAB)Google Sheets로 결과를 써넣는다. (by Python)MATLAB에서 하기에는 시간이 많이 들뻔 했던 Google Sheets를 이용한 작업(1과 3)을 이번에는 MATLAB에서 Python 모듈을 불러오는 방법으로 수고를 덜었습니다.예를들면pyOut = py.gspread_sample.getValues();이런 식입니다.누구를 위한 내용인가?조금 Python을 배워둬볼까… 하는 MATLAB 유저사용하고 싶은 Python의 모듈이 있는 MATLAB 유저사용하고 싶은 MATLAB의 함수가 있는 Python 유저를 위한 내용이라고 생각합니다.Python과 MATLAB의 연동에 대한 공식 페이지는 여기에 있으니 참고하여 주십시오: MATLAB에서 Python 호출하기왜 MATLAB과 Python을 함께 쓰는거지?전부 MATLAB으로, 혹은 Python으로 작업을 수행하는 방법도 있겠습니다만,Google Sheets를 읽어들이는 Python코드를 발견했다.MATLAB이 특기라는 개인적 사정 (하하..)의 두가지 이유때문에 MATLAB을 베이스로 해보게 되었습니다. Python은 평소에 잘 만지지 않기 때문에 부족한 점이 있다고 생각합니다만, 만약 개선할 수 있는 점이 있다면 지적 부탁드립니다.보충) File Exchange에 공개되어 있는 MATLAB 함수 GetGoogleSpreadsheet 를 쓰면 더 쉬울지도 모르겠습니다.환경MATLAB R2019a (+ Optimization Toolbox)Python 3.6pip 19.2.3gspread 3.1.0 → GitHub: gs
3년 전
포스팅 대표 그림
(번역) 꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다 - 구현편
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.ぬめぬめ動く棒グラフ Bar Chart Race を描いてみよう: 実装編시작하기각 데이터의 시계열 변화를 순위와 함께 표현하는 Bar Chart Race. 이전에는 barh 함수를 사용하여 Bar Chart Race를 구현할 수 있는지 확인해보았습니다. BarWidth 속성의 사용법이 중요했죠.자세한 내용은 (번역) 꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다 - 준비편에서 확인할 수 있습니다.이번에는 구현 편으로서 실제로 이 동영상(GIF)을 만드는 과정까지 설명하겠습니다.이미 함수를 minoue-xx/BarChartRaceAnimation에서 공개하였으므로, 사용 예 및 주요 포인트만 간략히 소개하겠습니다.실행 환경R2019b에서 작성되었습니다. 설명하는 Arguments와 관련된 부분을 제외하면 R2017b에서도 작동할 것으로 생각됩니다. 확인은 하지 않았습니다.사용 예시: 각 도·부·현의 추정 인구 변동 (타이쇼 9년 ~ 헤이세이 12년1)먼저 e-Stat의 페이지에서 해당 데이터를 다운로드하고, 05k5-5.xlsx라는 파일이 이 스크립트와 동일한 폴더에 다운로드되었다고 가정합니다.Step 1: 데이터 읽기간단하게 임포트 도구에서 읽는 스크립트를 작성했습니다.“현재 폴더”에 표시되는 05k5-5.xlsx를 더블 클릭하여, 읽을 범위를 지정하고 “스크립트 생성”을 클릭합니다. 출력 유형은: 셀 배열입니다.생성된 스크립트를 실행하면 변수 k55로 읽어와집니다. (importData.m은 여기에도 있습니다.)importDataStep 2: 데이터 정리시계열 데이터를 timetable 형식으로 정리하는 것이 편리합니다. 주의: 오키나와는 데이터가 크게 누락되어 있으므로 제외합니다.% k55에서 필요한 부분을 추출합니다.years = [k55{1,3:end}]'; % 연도names = string(k55(4:end-1,1)); % 도·부·현 이
3년 전
포스팅 대표 그림
(번역) 꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다 - 준비편
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다.ぬめぬめ動く棒グラフ Bar Chart Race を描いてみよう: 準備編서론최근에 자주 보이는 이런 플롯: 각 데이터의 시계열 변화를 등수와 함께 표현하는 플롯입니다. 시간이 지남에 따라 등수가 변경되기 때문에 Bar Chart Race라고 불리는 것 같고, 검색하면 다양한 데이터의 시각화를 볼 수 있습니다.이것을 MATLAB에서 작성할 수 없을까..라는 의견이 들어와서 해보았습니다.MATLAB 코드는 여기 GitHub: BarChartRaceAnimation이번에는 준비 편으로 그리기에 필요한 요소가 갖추어져 있는지 확인합니다. barh 함수의 기능을 확인해보겠습니다.계속해서 이어지는 부분은 여기에서 확인해주세요: 꿈틀 꿈틀 움직이는 막대 그래프 Bar Chart Race 그리기: 구현 편가로 막대 그래프 플롯먼저 barh 함수를 사용하여 막대 그래프를 그려보겠습니다.clear; close allx = 1:5;y = (1:5)/10;handle_bar = barh(x,y);간단합니다. x는 세로 위치를, y는 막대의 길이를 결정합니다.barh 함수의 약간 혼동스러운 점은 x가 세로축 상의 위치, y가 해당하는 막대의 길이라는 점입니다. 직관적으로 x와 y가 반전되어 있는 것처럼 느껴집니다.막대 그래프의 막대 위치 지정 (정수)속성을 살펴보겠습니다.handle_bar = Bar의 속성: BarLayout: 'grouped' BarWidth: 0.8000 FaceColor: [0 0.4470 0.7410] EdgeColor: [0 0 0] BaseValue: 0 XData: [1 2 3 4 5] YData: [0.1000 0.2000 0.3000 0.4000 0.5000]막대 그래프의 위치(세로 방향)는 XData 속성을 변경할 수 있을 것 같습니다. 예를 들어 2와 3을 교환해보겠습니다.handle_bar.XData = [1,3,2,4,5];
3년 전