matlabtutorial

피드

포스팅 대표 그림
(번역) 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 행렬 소프...
일 년 전
포스팅 대표 그림
(번역) UI편 - MATLAB -> C++ -> WebAssembly 자동 변환을 사용한 비선형 최적화 on JavaScript
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다. UI編:MATLAB -> C++ -> WebAssembly の自動変換を使った非線形最適化 on JavaScript 0. 소개 이전에 웹 어셈블리(WebAssembly)를 생성하고 MATLAB의 fmincon을 브라우저에서 실행하는 방법에 대해 설명한 적이 있습니다. 이번에는 UI 부분을 만들어보았으니 소개하겠습니다. 이 코드는 공개용으로 충분히 사용할 수 있는 것은 아니지만, 차차 개선해 나갈 예정이므로 힌트나 의견이 있다면 언제든지 주시면 감사하겠습니다. 감사합니다. 실행 페이지는 다음 위치에서 확인할 수 있습니다: Github Pages: Rebalance Portfolio 코드는 다음 위치에서 확인할 수 있습니다: GitHub: minoue-xx/rebalance_portfolio MATLAB에서 WebAssembly로의 자동 변환 부분은 다음의 게시물을 참조하십시오. Qiita: MATLAB -> C++ -> WebAssembly の自動変換を使った非線形最適化 on JavaScript 1. 용도와 사용 방법 목표는 항상 다음과 같습니다. “균형을 잃은 보유 비율을 목표 비율에 가깝게 조정하기 위해 각 주식을 몇 주 구매해야 하는가” 하지만 선택은 “구매”만 가능합니다. 리밸런싱이지만 판매는 고려하지 않습니다. 투자 계획용인가요? 다음은 조작 화면(GIF)입니다. 이런 느낌입니다. Step 1: 현재 포트폴리오 표시 보유 주식 및 수량은 csv 파일에서 읽어옵니다. 테스트로 샘플 데이터를 시작으로 해도 됩니다. 현재 가격, 소계, 총액, 비율은 자동으로 계산됩니다. 필요에 따라 주식, 보유 수량 등을 변경해보세요. csv 파일의 형식은 다음과 같이 구성되어야 합니다. [티커],[보유 수량],[목표 보유 비율] 순서로 입력하세요. Step 2: 예산 금액 입력 사용 가능한 예산 금액을 입력하고 [Rebalance] 버튼을 클릭하세요....
일 년 전
포스팅 대표 그림
(번역) 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 Too...
일 년 전
포스팅 대표 그림
(번역) 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 JavaScript WebAssembly에 대해서는 다음 두 가지 글을 참고하였습니다. Qiita: WebAssembly란 Qiita: WebAssembly란?~실제로 C 언어를 브라우저에서 실행하기~[2019년 6월판] WebAssembly는 프로그램을 브라우저에서 빠르게 실행하기 위한 이진 형식으로, JavaScript에서 호출하는 형태로 사용된다고 합니다. 일부 처리의 가속화, 기존 C/C++ 등의 다른 언어로 작성된 애플리케이션을 이식하는 데 유용할 것으로 보입니다. 수행한 작업 이전에도 Qiita에 게시한 내용1입니다. “균형이 깨진 보유 비율을 목표 비율에 가깝게 만들기 위해 각 종목을 몇 주 구매해야 하는가”입니다. 이전 글에서는 이 계산을 MATLAB의 fmincon과 Google Sheets + Python을 사용하여 수행했습니다. 하지만 이번에는 브라우저에서 완료하려는 것이 최종 목표이지만, 일단은 MATLAB의 fmincon 비선형 최적화 계산을 JavaScript에서 실행하는 부분을 정리하겠습니다. UI는 좀 더 공부해야 할 것 같으므로 나중에 다시 ...
일 년 전
포스팅 대표 그림
(번역) 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.6 pip 19....
일 년 전
포스팅 대표 그림
(번역) 꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다 - 구현편
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은 여기에도 있습니다.) importData Step 2: 데이터 정리 시계열 데이터를 timetable 형식으로 정리하는 것이 편리합니다. 주의: 오키나와는 데이터가 크게 누락되어 있으므로 제외합니다. % k55에서 필요한 부분을 추출합니다. years = [k55{1,3:end}]'; % 연도 names = string(...
일 년 전
포스팅 대표 그림
(번역) 꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다 - 준비편
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다. ぬめぬめ動く棒グラフ Bar Chart Race を描いてみよう: 準備編 서론 최근에 자주 보이는 이런 플롯: 각 데이터의 시계열 변화를 등수와 함께 표현하는 플롯입니다. 시간이 지남에 따라 등수가 변경되기 때문에 Bar Chart Race라고 불리는 것 같고, 검색하면 다양한 데이터의 시각화를 볼 수 있습니다. 이것을 MATLAB에서 작성할 수 없을까..라는 의견이 들어와서 해보았습니다. MATLAB 코드는 여기 GitHub: BarChartRaceAnimation 이번에는 준비 편으로 그리기에 필요한 요소가 갖추어져 있는지 확인합니다. barh 함수의 기능을 확인해보겠습니다. 계속해서 이어지는 부분은 여기에서 확인해주세요: 꿈틀 꿈틀 움직이는 막대 그래프 Bar Chart Race 그리기: 구현 편 가로 막대 그래프 플롯 먼저 barh 함수를 사용하여 막대 그래프를 그려보겠습니다. clear; close all x = 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을 교환해보...
일 년 전
포스팅 대표 그림
(번역) plot 창에 보조 확대창을 달아주는 ZoomPlot 함수 소개
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다. 【MATLAB】プロットにサクッと拡大図を追加する ZoomPlot 소개 Kepeng Qiu님이 만든 ZoomPlot 함수를 사용하면 손쉽게 확대 그림을 삽입할 수 있습니다. 사용 방법은 기본 플롯을 그린 후에 다음 2줄을 실행합니다. zp = BaseZoom(); zp.plot; 개인적으로 올해 가장 감동받은 File Exchange 함수이므로, 이 함수가 어떻게 구현되었는지 내부 처리를 간단히 소개하겠습니다. 설치 방법: 애드온 얻기 MATLAB의 File Exchange에서 공개된 ZoomPlot을 직접 다운로드하는 것도 좋지만, 추천하는 방법은 “애드온 얻기”에서 설치하는 것입니다. “애드온 얻기”를 클릭하면 “애드온 탐색기”가 열리고, “zoomPlot”을 검색하여 “추가”를 클릭하면 됩니다! Note: 경로 설정 등도 자동으로 처리해주므로 편리합니다. 요구되는 환경 버전은 R2014b 이상이면 됩니다. 확대 영역을 선택하기 위해 Image Processing Toolbox의 drawrectangle 함수(R2018a 이전의 경우 imrect 함수)를 사용하므로, Image Processing Toolbox가 필요합니다. 코드 설명 코드를 열면 약 500줄 정도인 BaseZoom 클래스가 작성되어 있는 것을 볼 수 있습니다. 버전에 따라 drawrectangle 함수 또는 imrect 함수를 사용하기 위해 R2018a 이전의 버전을 지원하기 위한 세부적인 처리가 되어 있습니다. version_ = version('-release') version_ = '2021b' 이런식으로 version 함수를 사용하여 환경(버전)을 확인합니다. 확대 그림은 어떻게 삽입되나요? 가장 중요한 부분은 다음과 같습니다. 그러나 매우 간단합니다. 새로운 axes 객체를 생성합니다. 원래의 axes 객체에서 요소를 복사합니다. 확대하고 싶은...
일 년 전
포스팅 대표 그림
inline 함수에서 if-else문을 쓸 수 있을까? (a.k.a. 삼항 연산자 만들기)
matlabtutorial
시작하면서 제목에서 보았겠지만 inline 함수를 이용해 최대한 압축적으로 if-else문을 를 만들 수 있다. 결과부터 보자면 아래와 같다. ternary = @(varargin) varargin{end - varargin{1}}; ternary(true,'yes','no') % 결과는 'yes'가 나온다. ternary(false,'yes','no') % 결과는 'no'가 나온다. 이 사례는 아래의 MATLAB Answers(링크)에서도 답변해준 바 있다. 원하는 바가 충실히 작동함을 알 수 있다. 참고로 ternary는 항(項)이 세 개라는 뜻이다. 여기서는 condition, true일때의 출력물, false일 때의 출력물을 의미한다. inline 함수를 최대한 펼쳐보자 사실 위의 inline 함수를 한번에 이해하는 것은 어렵다.또, inline 함수는 디버깅이 어렵기 때문에 내용물을 잘 이해하기 위해서 일단 inline 함수를 일반적인 m-file 함수로 펼쳐놓고 각각의 내용물이 의미하는 바를 살펴보도록 하자. function out = func_ternary(varargin) out = varargin{end - varargin{1}}; 한 줄이 두줄 되었을 뿐 별 차이가 없어 보이지만 디버깅을 수행할 수 있게 되었다는 사실을 최대한 이용해봅시다. 커맨드 라인에서 아래의 명령어들으 수행해서 두 번째 라인에 디버깅 포인트를 걸고 func_ternary를 실행시켜보자. >> dbstop in func_ternary at 2; % func_ternary.m 파일에 들어가서 2번 라인에 breakpoint를 직접 걸어줘도 괜찮다. >> func_ternary(true, 'yes', 'no'); 그러면 func_ternary 함수에 대한 디버깅을 시작할 수 있게 된다. 여기서 핵심 포인트는 varargin이 무엇인지 이해하는 것이다. varargin 이란? varargin은 여러개의 입력을 받으려고 하지면 총 몇 개의 입력이 들어올지 예...
일 년 전
포스팅 대표 그림
(번역) MATLAB의 과거와 오늘 - 처리 능력의 진화를 시각화 해보았다.
matlabtutorial
본 포스트의 원문은 아래의 URL에서 확인하실 수 있습니다. 본 포스트는 원작자에게 동의를 구한 뒤 한국어로 번역하였습니다. 【MATLAB今昔】その処理能力の進化のほどを可視化してみた 1. 시작하기 Windows 3.1 시대에 숫자 계산을 하던 BASIC에서 갑자기 MATLAB의 놀라움을 보여주는 순간을 절대 잊지 못합니다. 그 이후로 계속 MATLAB에 의지하고 있지만, 잊을 수 없는 것은 감동뿐만이 아닙니다. 그 때 혼자서 깨달았던 “사용상의 지침”도 기억에 남아, 아직도 그 영향에서 벗어나지 못하고 있습니다. 그 지침 중 하나는 “실용적인 행렬의 크기 제한은 최대 250행 × 250열 정도“라는 것입니다. 다른 누구에게 감화된 것도 아니고, 이 정도 크기의 행렬을 다루면서, 계산 결과가 쉽게 나오지 않아서 체념하면서 느낀 노하우입니다. 그 이후로 큰 행렬을 다루는 기회가 많이 오지 않아, 이 선입견을 바로잡을 기회가 없었고 현재까지 이런 생각에 갇혀있습니다. 그런데 최신 버전인 (비교적 오래된) R2019a를 사용하여 아래 명령을 실행해 본 결과, 3000행 × 3000열의 대규모 행렬 연산이 2초도 걸리지 않고 완료되었으며, $|A^{-1}||A|{=}1$을 증명하는 고정밀이고 타당한 답을 제공해주었습니다. 계산 자체는 간단하게 공식집을 참고하여 답을 얻은 것 아니냐고 의심할 정도의 속도입니다. 그러나 약간의 오차가 포함되어 있다는 점을 보면, 하나하나의 요소를 귀중히 여기고 철저히 계산한 결과임은 분명합니다. 언제부터 이렇게까지 처리 능력이 향상된 걸까요? >> tic; A=rand(3000)/10; [det(inv(A))*det(A) toc] ans = 1.000000000002983e+00 1.415134600000000e+00 …그래서, 신규 및 이전 버전의 처리 능력(실행 시간 및 처리 가능한 크기 등)을 비교해보기로 결심하고, 다양한 실험을 해보았습니다. 2. 평가 방법 2.1 사용한 MATLAB 버전 다음 4가지 버전을 사용했습니다. W...
일 년 전