#!wiki style="display: inline; display: none;"
, }}}
[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]- [ 펼치기 · 접기 ]
- ||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 연구
및
기타논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록 | ||||
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all" {{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;" {{{#!folding [ IEEE Spectrum 2024 ] {{{#!wiki style="margin: -5px 0" | <rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 | 직업 부문 상위 10개 프로그래밍 언어 | ||
1 | Python | 1 | SQL | |
2 | Java | 2 | Python | |
3 | JavaScript | 3 | Java | |
4 | C++ | 4 | TypeScript | |
5 | TypeScript | 5 | SAS | |
6 | SQL | 6 | JavaScript | |
7 | C# | 7 | C# | |
8 | Go | 8 | HTML | |
9 | C | 9 | Shell | |
10 | HTML | 10 | C++ |
}}}
}}}
- [ Stack Overflow 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust 2 HTML, CSS 15 Kotlin 3 Python 16 Lua 4 SQL 17 Dart 5 TypeScript 18 어셈블리어 6 Bash 19 Ruby 7 Java 20 Swift 8 C# 21 R 9 C++ 22 Visual Basic 10 C 23 MATLAB 11 PHP 24 VBA 12 PowerShell 25 Groovy 13 Go
- [ TIOBE 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB 2 C++ 12 Delphi / Object Pascal 3 C 13 PHP 4 Java 14 Rust 5 C# 15 Ruby 6 JavaScript 16 Swift 7 SQL 17 Assembly language 8 Visual Basic 18 Kotlin 9 Go 19 R 10 Fortran 20 Scratch {{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"21 COBOL 36 Scala 22 Classic Visual Basic 37 Transact-SQL 23 LISP 38 PL/SQL 24 Prolog 39 ABAP 25 Perl 40 Solidity 26 (Visual) FoxPro 41 GAMS 27 SAS 42 PowerShell 28 Haskell 43 TypeScript 29 Dart 44 Logo 30 Ada 45 Wolfram 31 D 46 Awk 32 Julia 47 RPG 33 Objective-C 48 ML 34 VBScript 49 Bash 35 Lua 50 Elixir
- [ PYPL 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C 2 Java 12 Go 3 JavaScript 13 Kotlin 4 C# 14 MATLAB 5 C/C++ 15 PowerShell 6 R 16 VBA 7 PHP 17 Dart 8 TypeScript 18 Ruby 9 Swift 19 Ada 10 Rust 20 Lua
}}} ||
프로그래밍 언어 목록 · 분류 · 문법 |
MATLAB 매트랩 | |
<colbgcolor=#0076a8><colcolor=#ffffff> 버전 | MATLAB R2024b [1] |
링크 | 홈페이지 |
[clearfix]
1. 개요
disp( 'Hello, world!' )
'Hello, world!'
'Hello, world!'
보스턴에 본사를 두고 있는 MathWorks 社에서 개발한 공학용 애플리케이션 소프트웨어 패키지. 1984년에 출시되었다.
일부 사람들이 프로그래밍 언어로 이해하기도 하지만, 프로그래밍 언어라기 보다는 해당 소프트웨어의 스크립팅 인터페이스를 사람들이 언어로 받아들이는 것에 가깝다. 이 사실은 MATLAB의 수익구조가 컴파일러 자체의 판매가 아니라, 각종 툴박스/애플리케이션들의 판매에 기반하고 있는 것을 보면 알 수 있다. [2] R2014b까지는 1기가 램을 지원하며 그 이후는 최소 2기가 램이 필요하다. 이름의 MAT는 수학(mathematics)이 아니라 행렬(matrix)에서 따왔다. MATLAB 로고는 L자 모양의 Membrane을 진동시킬 때 나타나는 Eigenmode 중 하나를 시각화하면 만들 수 있으며, 공식 홈페이지에 만드는 방법이 나와있다.
대부분의 미국 공과대학에서 처음으로 프로그래밍에 입문하는 학생들이 제일 먼저 배우는 프로그램이다. 프로그래밍 언어라고 볼 수도 있고, 애플리케이션으로도 볼 수 있으나 [3], 쓰는 사람의 목적에 따라 두 가지 성격이 모두 나타나기도 한다. 하지만 이런 성격 때문에 장단점이 꽤나 극단적으로 나타나는, 빛과 어둠이 공존하는 프로그래밍 언어 겸 애플리케이션이라고 볼 수 있다. 하고자 하는 일에 따라서 편리할 때는 한없이 편리하지만, [4] 불편할 때는 한없이 불편하다. [5]
국내에서도 이공계열 대학생/영재학교, 과학고등학교 학생들이 제법 많이 사용하고 있다. 문법은 아주 간단하다. 대학 일부 공대는 MATLAB을 가르치지만 프로그래밍에 전문적이지 못한 학생들이 논문을 위한 시뮬레이션을 하기 위해 접하는 경우 등, 급작스럽게 필요하여 사용하는 경우가 많아서 정통한 사람이 많지 않다. [6] 그 때문인지 전공 지식이 부족해도 이 프로그램을 잘 다룬다면, 아니, 포기하지 않고 끈기 있게 붙잡고 늘어질 수만 있어도 대학원에 다니는 선배들이나 교수들로부터 굉장히 이쁨받는다.
어찌 보면 공과대학 학부/대학원 졸업 후엔 쓰기 힘든 프로그램이다. 라이센스가 비싸서 어지간한 회사에서 못 사주기 때문이다. 어지간한 연구소/회사에서는 MATLAB 라이센스를 사주는 대신에 기존에 보유하고 있는 C/C++/FORTRAN 등의 코드에 맞게 연구자가 코드를 개발하길 바란다. 가끔씩, 부유한 환경에서는 업체/기관에서 MATLAB을 제공하기는 한다. [7] 다만 이 때에도 최종 목표가 MATLAB 프로그램이라기 보다는, 프로토타이핑을 MATLAB으로 해서 성능을 검증하고 C++ 등으로 변환을 하거나, 시뮬링크 기반의 자동코드 생성기법을 활용하여 시뮬링크 블럭 다이어그램으로부터 embedded C 코드를 생산해 내기도 한다. 그리고 요즘은 MATLAB 못지 않게 간단한 문법을 가진 Python의 인기가 하늘 높은 줄 모르고 치솟는 중인데다가 공짜, 오픈소스라서 MATLAB 라이선스 비용을 못 내는 회사에서 대체용으로 많이 쓰인다. 파이썬이 공학을 노리고 만들어진 언어는 아니지만 matplotlib, numpy 등 유용한 라이브러리가 많기 때문에 잘 다룰 줄만 안다면 거의 웬만하면 MATLAB의 대용품으로 딱히 부족할 게 없다. 때문에 공대에서 매트랩 과목을 파이썬으로 개편해버리는 경우도 종종 있다.
참고로 MATLAB 툴박스는 대개 석사 수준의 알고리즘까지는 [8] 상당 부분 지원하고 있지만 Fortran, C 등에서는 Singular Value Decomposition(SVD) 같은 기초적인 수치해석 알고리즘만 수행하려고 해도 이런 저런 라이브러리들을 죄다 받거나 책을 보면서 직접 코딩해야 하기 때문에 굉장히 피곤해진다. 물론 박사급이면 없는 것을 만드는 게 당연하기 때문에 크게 문제가 되지 않는 분야도 넘쳐 난다. 다시 말하면 라이브러리 몇 개를 새로 짜는 셈이다.
2. 용도
공학용으로 개발된 만큼 공학계열 학과에서 주로 사용한다.MATLAB 자체적으로 여러 하드웨어(예를 들어 모터류)의 인터페이스, 이미지 프로세싱 등의 유용한 툴박스들을 제공하고 있어 학부 수준까지는 손쉽게 사용할 수 있다. 이런 점이 프로그래밍 언어 자체로 봤을 때는 다소 어정쩡한(그리고 문법도 안 좋은) MATLAB이 공학 관련 분야에서 널리 활용되고, 또 비싸게 팔아도 장사가 되는 비법이다.
예를 들어, 모터가 4개 달린 드론에 카메라를 달아서 시각 비행 알고리즘을 시험하고 싶다고 하자. 여기에는 모터 제어, 드론과의 통신, 이미지 프로세싱, 위치/자세 추정, 위치/자세 제어 알고리즘 등이 필요하다. 다른 개발 환경에서는 각각의 기능을 제공하는 환경은 있어도, 관련된 모든 라이브러리를 제공하는 경우는 MATLAB 말고는 드물다. [9] 하드웨어의 종류/구성에 따라, 인터페이스 구축의 난이도가 코드를 쓰는 난이도를 훨씬 상회할 수 있다.
다만 MATLAB이 유용하다고 만능은 아닌지라 상황에 따라 다른 언어와 병용해서 쓰기도 한다. 보통 공학용 수치해석을 위해서는 MATLAB, Python, Julia 등의 스크립팅 언어로 골격을 짠 다음에, 병목현상이 일어나는 부분만 C/FORTRAN 등으로 변환하여 포팅을 하는 것이 일반적이다. 예를 들어 GUI를 포함하는 hardware-in-loop 시뮬레이터를 만든다고 생각해보자. 하드웨어 제어를 위한 embedded C, GUI, 제어, 추정 알고리즘이 필요하다. 그 외에도 matrix exponential, convolution, 수치적분, root-finding, 수치 최적화, curve-fitting 등 수치해석이 필요하다.
2.1. 이공계
전기전자공학과에서는 C언어 기초를 먼저 배우고 전공과목 과제에 주로 MATLAB이 사용된다. 일부 흔한 과제의 예를 들자면, 공학수학에서는 푸리에 급수를 통해 sin과 cos만 가지고 어떻게 주기신호를 만들어내는지 시뮬레이션을 해보기도 하고, 신호 및 시스템에서는 DFT, FFT, Z변환, 샘플링을 직접 해보기도 한다. 통신시스템에서는 푸리에 변환을 이용해 AM, FM, ASK, FSK, PSK, QAM 등 각종 변조방법을 구현해보기도 하며, 제어공학에서는 라플라스 변환으로 시스템 모델링을 하기도 하고, 영상처리에서는 바코드인식, 얼굴인식, 필체인식 등 여러 실험을 해보기도 한다.기계공학과 출신들은 보통 MATLAB과 각자 속한 분야에 따라 embedded C, C++, FORTRAN 등의 언어를 혼용해서 사용한다. 기계공학 분야에서 중요한 것은 legacy 코드와 호환성, 하드웨어에 이식 및 실행할 때의 성능이지 코드를 편안하게 (혹은 우아하게) 개발하는 것이 아니다. MATLAB/C/FORTRAN 등 프로그래밍 언어 자체로만 판단했을 때 상대적으로 우아하지 못한 수치해석/과학/공학용 프로그래밍 언어들이 여전히 널리 쓰이는 것은, '레거시 코드에 손 대봤자 논문 쓰기는 힘드니 시간 아까운 짓 안 하는 거'거나 특정 하드웨어에 밀접하게 관련이 되어 있어서 바꾸는 데 엄청난 비용/시간이 들기 때문이다.
의료공학과에서는 생체신호처리 및 의학영상처리 [10]에 사용한다.
컴퓨터공학과의 경우는 수치해석 분야나 하드웨어, 신호처리 과목을 고르는 경우에 MATLAB을 접할 수 있을 것이다.
인공지능학과는 MATLAB을 잘 다루지 않는다. 이쪽은 파이썬이 주력이다.
자동차공학과는 완성차 업계에서는 안쓰는 회사가 없다. 방학 때 예습을 하고 개강하고 공부를 더 해서 A+받자. Python도 공부해두면 매트랩의 라이브러리로는 난해한 것도 병행하여 수행이 가능하니 여유가 있다면 배워두자.
2.1.1. 공대 대학원
MATLAB 툴박스가 잘 갖춰진 것은 사실이지만, 분명히 한계가 있다. MATLAB을 쓰더라도 알고리즘에 대해서는 대개 박사, 빠르면 석사 때부터 직접 코딩을 해야 한다. [11]MATLAB이 주로 사용되는 공대 대학원에서는 개발 환경이 연구자가 코드를 작성할 때 느끼는 편리함/효율성 보다는 외적인 요소에 크게 영향을 받는다. 대학원생의 목표는 코드를 더 좋게 만드는 것보다는, 새로 개발한 알고리즘을 기존 코드에 통합해서 성능을 검증하는 것이 중요한 경우가 많다. 마음만 먹으면 MATLAB보다 더 나은 프로그래밍 환경에서 개발할 수 있다는 말은, legacy 코드(과거로부터 내려오는 코드 결과물)가 없이 맨땅에 헤딩하는 경우인데 이는 석사과정이나 박사과정 초반에 해당하는 매우 초보적인 연구개발(혹은 연구개발 수준에도 못 미치는 대학교/대학원의 수업 과제 수준)일 때나 유효하다.
대개는 대학원 연구실 내에서 축적되오던 수만줄짜리 legacy 코드가 C, FORTRAN, MATLAB 등으로 작성되어 있다. 실제 업무에 투입된 대학원생은, 선배들의 코드를 100% 이해하고 다른 언어로 변환하는 위험한 짓을 하는 대신에, 구석기 시대의 컴파일러를 모시고 살거나, F2C, CMEX/FMEX 등의 가능한 모든 포팅 방법을 이용해서 어떻게든 코드 번역을 피하기 마련이다. for문 개념도 정확하게 정립이 안된 FORTRAN66(goto문이 난무하는 50년된 고대 유물)도 노려보면서 포팅 작업을 해야하는 경우도 있다.
공학 분야 학부 졸업생들이 처음 대학원에 왔을때, MATLAB 쓰는 걸 이해 하지 못하고 쓰고 싶은 언어를 쓰고자 하는 경우가 매우 많다. 보통 소프트웨어학과 등에서 C++를 중점으로 배웠고, 또 그러면서 MATLAB이 C++나 Python 등보다 열등하다고 생각하는 경우가 많은데, 프로그래밍 언어들의 기준으로 보기엔 MATLAB 스크립트는 공학 계산기 프로그램 수준으로 문법과 표현법이 제약이 많아 보이기 때문이다.
여러 불편함을 감수하는 것은, 작성된 코드 자체가 해당 연구 내용 및 논문 내용으로서 만들어진 경우가 많고 포팅시에는 파악하지 못할 수 있는 작성 당시 고려된 수학/물리/공학이론을 전제로서 포함하고 있기 때문이다. 전체 Set 이론에 대한 처음부터 끝까지의 이해가 없이, 부분적인 분석 후 직접 재해석하여 새로운 언어나 로직으로 포팅하는 경우 이를 정확하게 검증하는 것 또한 매우 어렵다는 위험성 역시 존재한다. 그나마 현대적인 수치해석 알고리즘들은 몰라도 50년 전의 수치해석 논문 속 알고리즘이 Reference되어 있다면, 포팅 좀 하겠다고 당장 써먹을 곳이 없는 과거의 연구를 전부 공부해서 검증하려는 생각은 접는 게 보통이기에 예전 코드와 연결시키는 것으로 내버려두는 경우가 많다. [12]
2.2. 상경 및 인문계
이공계에서만 사용할 것 같지만 인문사회계열 언어학과의 음성학수업이나, 경제학과의 거시경제학(대학원), 계량경제학(대학원) 같은 수업에서도 사용된다.우선 경제학과 대학원에서는 MATLAB을 쓰는 과제가 나가기 때문에 석박사 생각이 있다면 일찍부터 MATLAB을 배워둬야 한다.
언어학과의 경우에도, 석박사 생각이 있다면 프로그래밍은 상당히 중요시 되는 능력이기 때문에 익혀두어야 한다. 특히 자연어처리분야나 음성음운론 분야에서는 MATLAB과 파이썬은 점차 기본소양이 되어가는 추세이다.
2.3. 타 프로그래밍 언어 및 수치해석 소프트웨어와의 비교
- 엑셀: 프로그래밍에 익숙하지 않거나 계산이 간단하다면 당장 MATLAB 코드를 두드리기보다 엑셀을 여는 것이 더 빠를 것이다. 하지만 계산이 복잡해지면 엑셀로 코딩하는 것은 비효율적이고, 시각화 기능도 다양하지 못하다. 간혹 엑셀로 편미분방정식(!)을 푸는 고수들도 있기는 하지만, 이건 '내가 이렇게 엑셀을 잘 다룬다'고 뻐길 때나 잠깐 해보는거지 그냥 매트랩을 쓰는 게 낫다. 더군다나 계산해야 할 데이터가 너무 많다면 엑셀이 뻗어버릴 수 있다.
- C: 전자공학전공의 소프트웨어 개발의 주 언어인 만큼 많이 사용된다. 주로 MATLAB 프로토타입 코드를 기반으로 C언어 코드로 재구현하는 형태로 개발하게 된다. MATLAB으로 만든 프로토타입 알고리즘을 C로 자동 포팅하는 것은 거의 사용하지 않는다. C 함수를 MATLAB이나 SIMULINK에서 불러와 평가하는 방식으로 개발할 수도 있다.
- C++: 금융공학이나 상용 애플리케이션 개발처럼 빠른 속도가 요구되는 경우 C++이 낫다. C++도 간편한 라이브러리가 많이 나왔다. 하지만 C++은 기본적으로 번거롭기 때문에 [13] 다수의 인원이 투입되고 이미 검증된 알고리즘을 최적화하는 프로젝트에 자주 사용될지라도 개인이 어려운 공학 공부를 하면서 사용하는 경우에는, 메모리 관리까지 신경써야 하는 불편한 점을 감수하기 힘들다. 현업에서 MATLAB 라이브러리 및 MATLAB DLL을 사용하는 경우가 생각보다 많은데, MATLAB이 JVM 기반으로 개발되어 있기 때문에, 수많은 에러를 뚫고 개발을 진행하게 되며, C/C++로 옮기는 이유인 성능향상의 이유가 퇴색되어 버리는 경우가 많다. 또한 MATLAB의 경우 기본적으로 허수를 가지고 있기 때문에, 허수를 놓치는 경우가 많으므로 주의가 필요하다.
- Java: 딱히 비교/경쟁 대상이 아니다. 자바는 안드로이드 앱 개발, 웹 개발, 서버 사이드 프로그래밍 등 많은 곳에서 애용되지만 MATLAB와는 달리 공학, 과학적 계산을 목표로 할 때는 별로 쓰이지 않는다.
- 포트란: C/C++와 마찬가지로 오래된 언어라 코드 짜기가 번거로운 대신 속도가 빠르다. 전산유체역학 등 속도가 매우 중요한 분야에서는 아직도 현대화된 FORTRAN을 쓰는 경우도 있다.
- Python: 유명 라이브러리를 사용할 수 있다. SciPy, NumPy 등의 수치해석 패키지로 선형대수 계산을 할 수 있고, matplotlib으로 시각화를 할 수 있다. MATLAB이 주요 알고리즘을 다 바이너리로 만들고 m-file을 wrapper만 남겨놓는 등 속도 향상을 위한 노력을 많이 해서 Python보다 빠르다고 했지만, NumPy 패키지도 기본 루틴은 C로 짜여 있고, 속도는 지금도 앞으로도 꾸준히 논란거리일 것이다. 오픈소스 개발자들이 많은 함수명을 MATLAB과 비슷하게 작명하였기 때문에 둘 중 하나만 잘 배워도 나머지를 익히기는 쉽다.
- R: 가끔 MATLAB 대용으로 쓰인다. 다만 R은 아무래도 통계분석에 특화된 느낌이 강해서 완전히 MATLAB을 대체하기는 힘들다.
- Julia: Julia의 탄생 목적 중 하나가 과학, 공학을 위한 수치 해석용 언어이기 때문에 MATLAB의 좋은 대안이 될 수 있을 것이다. MIT에서 수행한 벤치마크에서 MATLAB을 성능으로 뛰어넘기도 하였다. 다만 2012년에 발표된 신생 언어이기 때문에 라이브러리가 모두 개발되고 성숙하기까진 시간이 걸릴 것이다.
- 매스매티카: 수식을 해석적 방법 [14]으로 풀 때 유용하므로 수학, 물리학 연구 및 학부생에게 유용하다. 대체로 계산 과학 관련 커뮤니티 에서 MATLAB은 부동소수점을 이용한 수치계산에서 매스매티카보다 더 빠른 속도를 보이고, 매스매티카는 부정적분 해석, 다항식 풀이 등 수식 해석에서 MATLAB보다 성능이 더 뛰어나, 일장일단이 있다고 동의하는 분위기이다.
시뮬레이션 코드를 실행하는 속도나, 제품의 실제 개발이 더 중요한 연구에서는 해석적 방법보다는 수치적 방법을 쓰게 되므로 MATLAB이 더 유용하다. 공대 연구나 기업에서는 대부분 이쪽이다.
다만 학부 수준에서는, 아무리 공과대학이라도 배우는 내용은 죄다 이론이나 수식 전개이고, 수치해석 용으로도 스케일이 큰 문제를 풀어야 할 일은 절대 없기 때문에 매스매티카나 메이플을 사용한다고 특별히 부족한 기능은 없을 것이다. 심지어 많은 공대 학부생들이 솔루션을 찾아 다닌다고 Wolfram Alpha를 쓰는 것을 보면, 매스매티카가 더 유용할 지도 모른다. 다만, 대부분의 대학교 공과 수업은 매스매티카보다 MATLAB을 선호하는 편이다.
속도 논란에 관해서는, 물론 매스매티카가 다중 적분식으로 가면 느려지긴 하는데, 그건 MATLAB이 정확도를 크게 요구하지 않다 보니 항을 100분할 정도 해서 그냥 사다리꼴 등으로 계산해버리는 편법을 써서 그렇다. 공학적인 측면에서는 다수의 경우에 수학적인 엄밀함을 지키는 것보다, 다소 어기면서 계산적인 효율성을 추구하는 것이 더 낫다. [15]
- 메이플: 매스매티카와 마찬가지로 수식 분석 기능이 필요할 때 대체할 수 있는 소프트웨어.
- GNU Octave: 비싼 라이센스 가격의 MATLAB을 대체하기 위해 가장 대표적인 언어. MATLAB과 문법 차이점이 적어 적응하는 데 시간이 많이 걸리지 않는다는 장점이 있다. 하지만 성능이 나쁘고 툴박스의 편리함을 누릴 수도 없으며 문법 역시 미묘하게 차이가 나서 완벽하게 이식 가능한 것도 아니라는 단점이 있다.
- SciLab: 신호 처리 등에 대체가능하다. 단 SciLab은 Octave에 비해 MATLAB 문법 호환성이 다소 낮다.
- Verilog, VHDL: MATLAB의 자동 코드 생성 기능을 사용해 Verilog나 VHDL 코드를 생성하는 경우도 있지만, MATLAB으로 시스템을 프로토타이핑한 후 직접 HDL 코드를 짜서 하드웨어를 구현하는 경우가 많다.
각종 오픈 소스를 사용하면 공짜로 MATLAB을 대체하는 것 자체는 가능하다. 다만, MATLAB의 철학 자체가 '돈은 얼마든지 낼테니 Mathworks가 최대한 유용한 기능을 많이 갖추어 놓아라'라는 식이라면, 오픈소스 진영에서는 공짜로 쓰는 대신에 사용자가 여러 라이브러리 사이의 버전 충돌이라던가 미비한 기능에 대한 보완 대책을 사용자 스스로 해야하는 등 불편한 점이 많다.
특히 라이센스가 GPL일 경우 상업적인 개발에 사용한다면 카피레프트에 주의해야 한다.
3. 역사
1970년대에 뉴멕시코 대학교의 컴퓨터공학과의 학장인 클리브 몰러의 주도 아래 개발이 시작되었다. 1984년 본격적으로 Mathworks 사를 세우고 개발하여 2000년대에 처음으로 일반 사용자에게 판매되기 시작하였다.4. 특징
일반적인 프로그래밍 언어에서 행렬은 그저 각 차원으로 이루어진 방식으로, 현실의 행렬 계산 방식과는 거리가 있다. 그에 따라 각 행렬에 대한 값을 구하려면 그 부분 역시 유저들이 직접 알고리즘을 짜서 계산해야 한다. 문제는 공학이 대부분이 행렬 계산 위에 성립된 학문이라 행렬 계산이 불편한 일반적인 프로그래밍 언어는 공학계열에서 사용하기 어렵다.C/C++나, 이후 개발된 Java도, 다목적 용도를 가지고 개발되었기에 공학용으로 디자인된 수식을 계산하기 위해선 공학도들이 알고리즘에 숙달될 필요가 있었다. 하지만 각 공학과의 현실상 가르치기 어려웠으며 커리큘럼도 만들어져있지 않았다. 또한 컴퓨팅 파워 역시 1990년 이전에는 부족하여 공학 계산과 시뮬레이션에 있어 필요성은 절대적이었으나 유용 방식은 한정되었다. 또한 포트란 등의 단순 계산에 적합한 언어들은 그 나름의 장점이 있었으나 병렬계산에 적합하지 못했다.
그러나 MATLAB은 공학과 시뮬레이션에 특화된 언어라는 목적을 가지고 개발되었다. 그에 따라 시간과 (자금적) 리소스를 크게 사용하지 않는 기존 언어와 다른 개념으로 개발된다. 그건 바로 쓰일 만한 명령어 세트는 죄다 컴파일러로 이루는, 비효율적이나 사용자 입장에선 쉬운 방법을 택한 것이다.
또한 기존 언어와의 차이점으로 모든 정의한 변수는 행렬 취급이 된다. 이는 공학계에서 수많은 변수들을 간편화하기 위해 행렬을 사용하기 때문이다. 심지어 문자열도 그저 문자(char)들의 행렬로 취급되었다.[17]
MATLAB이 처음 사용자용으로 발표된 2000년도에는 컴퓨팅 파워의 한계와 보급의 난항으로 주목받지 못했다. 그러나 곧 컴퓨터가 빠르게 보급되었고, 매트랩은 사용과 교육의 간편함에서 주목받아 공학도들이라면 한 번씩 만져본 프로그래밍 언어가 되었다.
4.1. 장점
- 설치가 쉽다. 리눅스나 각종 프로그래밍 언어의 패키지 관리 시스템에 익숙하지 않고도, MATLAB 설치 관리자만 실행시키면 알아서 다 해 준다. 이것은 상업적 솔루션의 장점이기도 하다.
- 문법이 쉽다. MATLAB 언어 자체는 사칙연산과 행렬연산, 행렬 인덱싱과 슬라이싱, 함수 사용, 기초적인 객체지향과 람다대수 지원 등이 프로그래밍 문법의 거의 전부로, 이후로는 각종 툴박스의 API 문서만 검색해서 읽어보면 다른 누군가가 작성한 MATLAB 코드를 이해하는 데 문제가 없다.
- 컴퓨팅 리소스는 많이 먹지만 컴파일러에 박혀있는 명령어 세트가 워낙 많아 개념 검증 시, 시간과 비용을 절약할 수 있다. 이는 복잡한 시스템 개발에 적용되는 공학적인 알고리즘 개발에서 프로토타이핑에 가장 유용한 특징이다. 복잡도가 높은 시스템은, 서드 파티 HW 및 SW가 매우 다양하게 함께 작동한다. 이러한 경우, 시스템의 복잡도 때문에 새로운 아이디어는 working-prototype을 구현 해보기 전에는 가능한지 아닌지 여부를 예단하기가 거의 불가능하다. [18] 이러한 GO/NO-GO 타입의 의사결정에서, 최소한의 시간과 노력으로 알고리즘을 구현하고 (코드가 얼마나 지저분하고 비효율적으로 만들어졌는가와는 별개로) 서드파티 HW/SW와 함께 새로운 알고리즘이 의도한 대로 작동하는 것을 보는 것은 매우 중요하다. 자동차/비행기/위성 개발과 같이 엄청나게 많은 숫자의 서드 파티 HW/SW가 함께 작동하는 경우에는 대부분은 특정 엔지니어가 코딩을 잘 하고 잘 못하는 것보다는 시스템 내의 여러 HW/SW와 내가 새롭게 개발한 알고리즘이 잘 어울리는 지가 우선적으로 중요하다. 개념이 외부 요소들과 잘 작동하는지를 검증한 이후에야 알고리즘 최적화가 의미가 있는 것이다. 학교 외에 비싼 MATLAB을 사서 제공한다면, 상기한 이유 때문에 프로토타이핑을 통한 개념 검증은 MATLAB으로, 개념 검증 후 실제 개발은 아마도 C/C++이나 Java로 하게 될 것이다.
- 작성한 코드를 m-file로 저장이 가능하며, 이 m-file은 명령창(command window)에서 바로 명령어(스크립트 파일의 경우)나 함수처럼 쓸 수 있다. 심지어 다른 m-file 내에서도 쓸 수 있어서 작업이 상당히 편해진다.
- 디버깅이 쉽다. 이는 인터프리터 언어의 특징으로 장점과 동시에 단점이 되기도 한다. 한 줄씩 코드를 읽어들이며 기계어로 번역하기에 에러가 발생하는 코드까지 진행해서 원인이 되는 줄을 찾을 수 있다.
- 공대 학부생의 프로젝트에서는 프로그램 짜기가 아니라 간단한 시뮬레이션의 결과를 내기가 목적이다. 이 때는 MATLAB을 쓰면 더 시간이 절약된다. 매스매티카는 정확한 결과를 내지만, 대부분의 공학 관련 문제는 순수수학에서 요구하는 정확도는 필요 없다. 무엇보다 교수들도 학부생들이 매스매티카를 만지는 것까진 기대도 안하고 매트랩만 좀 만져도 감지덕지인지라...
- 애플리케이션으로의 특징은, MATLAB용으로 개발된 여러 가지 패키지(프로그램 모음)를 이용하여 그래프 작업이나 미분방정식 계산, 또는 신호 처리 같은 계산을 수행할 수 있다는 것이다. 이런 작업들은 자신이 직접 프로그램 언어로 구현하려면 매우 어렵다.
- 또한 데이터 시각화(그래프를 그린다거나, 이미지를 띄운다거나 등등) 및 시각화 된 데이터를 검토하는 기능이 잘 구비되어 있다. 코드 몇 줄이면 논문에 넣을 퀄리티의 그림 정도는 뚝딱 그릴 수 있다. 물론 시각화 코드에 익숙하지 않으면 GUI 인터페이스를 통해 그림을 커스터마이즈할 수 있다.
- CMEX, FMEX 등의 함수로 C나 포트란으로 짜인 함수의 결과값을 불러 올 수 있다. 이를 이용해 기존에 있는 라이브러리를 활용할 수 있으며 MATLAB 스크립트의 병목구간을 mex로 구현하면 속도 문제를 상당히 개선할 수 있다. 신경을 조금만 쓰면, 아예 윈도우 MEX 인터페이스를 통해서 dll 파일들을 불러다 쓰는 것도 가능하다.
- MATLAB 코드를 C 파일로 컴파일할 수 있다. 이 바이너리를 매트랩에서 다시 불러올 수 있다. 따라서 최적화가 필요한 부분을 C 바이너리로 돌림으로써 웬만한 프로그래밍 언어 못지 않은 속도를 기대할 수 있다. MATLAB을 문제 해결 및 알고리즘 개발용으로 활용할 때 큰 이점이 된다.
- 모든 연산을 행렬 연산으로 프로그래밍할 수 있다면, MATLAB은 매우 강력하다. 행렬 연산에 LAPACK을 사용하기 때문인데, 장담컨대 생각 없이 C로 짠 행렬연산 루틴보다 몇 배는 빠르다. 그래서 MATLAB 입문자들에게는 튜토리얼 때 가능한 한 벡터화(vectorization)라는 테크닉을 사용하도록 가르친다. 이름은 거창해 보이지만, 단순히 for, if, while 대신 매트랩에서 자체 지원하는 함수들을 사용한다고 생각하면 편하다. for나 while 루프는 그 구조상 순차적(sequential)으로 처리할 수밖에 없지만, 매트랩의 행렬 관련 연산들은 병렬(parallel) 연산을 지원하기 때문. 효율이 몇 십 ~ 몇 백 배 이상 증가한다.
- 초보적인 수준의 객체 지향 프로그래밍을 지원한다.
- 기본 MATLAB 외에도 돈만 지불한다면 여러 확장 소프트웨어를 이용할 수 있다. 몇가지 예를 들면
- 시뮬링크 - 여러 블록을 사용해 시스템 모델링을 할 수 있다.
- 병렬 툴박스 - 병렬 처리를 구현할 수 있다.
- 영상처리 툴박스, 통신 툴박스 - 신호 처리나 이미지 처리를 비롯한 여러 공학적 문제 해결에 유용하다.
- 자동 C코드 생성 기능 - 임베디드 C 등 다른 언어로 변환하여 실행 속도를 높이거나 임베디드 기계에 직접 이식할 수 있다.
- HDL 코더 - 시뮬링크 모델을 HDL로 바꿔준다
- Simscape - 단순히 수치뿐만 아니라 유체, 전기, 기계 시스템 등을 모델링 할 수 있게 해주는 시뮬링크 확장 기능
- Stateflow - 유한 기계 장치 (finite state machine) 시뮬링크 확장 모델링 기능
- 많은 전공 서적과 논문들이 MATLAB 코드를 사용하며, 심지어 기본적인 튜토리얼까지 담고 있는 경우가 많다.
- 명령어 help를 통해 간편하게 사용법을 숙지할 수 있다.
사실 MATLAB을 잘 쓴다는 것은 help를 잘 쓴다는 것과 거의 같다.
- Mathworks 홈페이지의 문서가 굉장히 충실하다. 그리고 이는 MATLAB에 내장된 Documentation에도 그대로 반영되어 있어서 많은 도움이 된다. [19] 만약 어떤 기능을 하는 함수를 알고 싶은데 모르겠다 싶으면 일단 여기에 떠오르는 단어를 검색해보자. 그러면 조금이라도 연관있는 건 뭐든 뜬다. 만약 여기 없으면 진짜 없는 거니 더 찾느라 시간 낭비 할거 없이 원하는 기능을 만족하는 스크립트를 짜면 된다. 한국어 번역도 있다. [20]
- 1년에 두 번씩 꾸준히 신버전을 출시하며 지속적으로 기능을 향상시키고 있다.
- 가장 최신의 버전은 물론이고 구버전까지 다운로드 및 설치가 가능하다. 그것도 20년 전도 더 넘어가는 버전까지 지원한다!
4.2. 단점
- 느리다. 무지막지한 명령어 세트를 가지고 있는 인터프리터 언어이기 때문이다. 따라서 아무리 효율적으로 짜도 가상머신 위에서 돌아가는 Java보다 느리다. 많은 기능의 수를 감안하더라도 빠른 편은 아니다. [21]
- 재배포 패키지가 엄청나게 크다. (대략 1.8기가)
- 구버전의 경우 프로세스 및 서비스에 올라가서 웜바이러스 못지않은 컴퓨터 성능 하락을 보였었다.
- 명령어 세트가 그냥 무식하게 때려박힌 구조라 필요한 헤더만 선언하여 최적화를 할 수가 없다.
- 유료인 데다 가격도 비싸다.
- 객체 지향 프로그래밍을 지원하지만, 다른 객체지향 전문 언어들에 비해 매우 기초적인 패러다임만 지원한다.
- 간단한 행렬 연산을 루프, 즉 for, if, while문으로 써서 만든다면, 무지막지하게 시간이 걸린다. 일단 R2015b 버전 이후로는 엔진 최적화에 신경을 쓰었는지, 스크립트를 실행하는 과정에서 Just-In-Time 컴파일을 도입하여 루프를 사용한 행렬 연산의 속도가 많이 개선된 편이다. 다만 MATLAB에서 슬라이싱이나 arrayfun등의 기능을 쓰지 않고 반복문을 쓰는 경우는 꼭 필요하다기보단, 좋지 않은 코드일 확률이 높다. 특히 C 같은 다른 프로그래밍 언어를 대충 배우고 MATLAB에 입문해 언어마다 적용되는 고유의 패러다임을 잘 이해하지 못할 때 하기 쉬운 실수이다.
- 코드 파일 하나에 함수를 하나씩만 만들 수 있다. 간단한 함수조차 죄다 새로운 파일에 선언해야 해서 번거로워진다. 람다식이나 클래스를 이용해 잡다한 함수들을 정리할 수 있지만, 한계가 있다.
- 위의 단점들 때문에 쉽게 초보자가 조금만 복잡한 프로그램을 짜면 쉽게 스파게티 코드가 된다.
- 기본 함수들의 이름이 너무 짧고, 직관적이지 못하다. 함수명만 보고 eye가 단위행렬을 생성하는 함수인지, angle이 복소수의 phase angle인지 등등 수학적인 의미를 추론하기 힘들다. 그리고 fft가 1차원 고속 푸리에 변환이면 fft2가 2차원 고속 푸리에 변환인 것을 보면 마치 공대생 센스로 대충 이름을 지은 듯하다. 다만 이런 문제는 LAPACK 같은 라이브러리들보단 덜 심하다. 그리고, NumPy 등 최신 라이브러리들도 MATLAB식 작명법을 따라가는 중이라, 오히려 이것이 정석이 될지도 모른다.
- 오픈 소스가 아니고, 소스 코드가 기업 비밀이라 MATLAB의 거의 모든 함수들의 코드를 뜯어볼 수 없고, 이는 MATLAB으로 작성된 코드는 과학의 기본 중 하나인 재현 가능한 연구에 어긋날 수 있다. 전 세계에서 많은 사람들이 개발 과정을 부분적으로나마 주시하는 오픈소스 과학 라이브러리들도 신기능 개발이나 혹은 리팩토링 과정 중에 실수를 하는 경우가 종종 있는데, MATLAB의 개발진이 아무리 전문성을 가지고, 또한 돈을 받고 개발하는 의무를 가지고 개발한다 할지라도 사람인 한 실수를 할 수 있다는 의심을 해야 한다. 그래서 언제든 소스 코드를 확인할 수 있는 오픈 소스 라이브러리 사용에 비해 불투명하다. 이는 매스매티카도 가진 문제이다.
- 위와 같은 맥락에서, 파이썬처럼 깃헙을 통한 개인 개발자들간의 활발한 교류가 전혀 이루어지지 않는다. 매트랩 기반의 확장자인 .mat 형태의 '데이터'는 간혹 보이지만 .m 형태의 '코드'는 사실상 없는 수준이다.
- 오픈 소스를 통해 프로그래밍 언어의 본질을 계속 탐구하려는 컴퓨터 공학도에게는 그리 좋은 선택이 아닐 수 있다.
- 다른 범용 프로그래밍 언어를 배우는 것에 비해 취업에 도움이 되지 않는다. MATLAB 프로그래밍 능력을 요구하는 경우 대부분 동시에 석박사 학위를 요구하며, 학부 졸업생이 취업할 수 있는 일반적인 Software Developer 직무에서 요구되는 코딩 테스트 언어로 MATLAB이 채택되는 경우는 거의 없다. 그래서 대학원 진학에 진지한 생각이 없다면 MATLAB을 깊이 파는 것은 그렇게 추천하기 힘들다.
- 신버전을 꾸준히 출시하는 것은 좋지만, 새로운 기능들을 제대로 누리려면 이전 버전을 지우고 새로 깔아야 하는 번거로움이 있다. 툴박스를 깔았다면 툴박스까지 전부 다 제거하고 새로 깔아야 한다.
- 기능 업데이트가 될 때마다 시스템 최소 및 권장 요구 사항이 계속 올라가기 때문에 최신 버전일수록 프로그램이 무겁다. 데스크탑(특히 조립 컴퓨터)에서는 그리 부각되는 단점이 아니지만 랩톱에서는 주의할 필요가 있다.
- 파이썬처럼 코랩이나 온라인 서버를 통한 네트워크 기반 GPU 가속의 편의성을 누릴 수 없다. 별도의 툴박스 구매를 통한 GPU 가속 자체는 지원하나 로컬 컴퓨터로만 한정된다. 본인 컴퓨터가 RTX 4090이라도 쓰지 않는 이상 이 사항은 머신러닝 개발자에게 상당한 제약이 되기 때문에 이들은 MATLAB을 잘 사용하지 않는다 [22].
5. 비싼 가격
- Standard License: 상업 버전. MATLAB을 이용한 이윤이나 수익 창출에 제한이 없다. 한 명만 인증되며 최대 PC 네 대에 설치할 수 있다. 영구 보유에 280만원이나 한다. 거기에다 툴박스는 또 따로 사야하고 하나당 백만원이 넘어간다.
- Education: 학술기관(대학/대학원) 직원이나 연구자가 보유할 수 있는 라이센스. 영구보유에 50만원이다. 물론 툴박스 별도.
- Student: 보통 학생용은 기능을 제한하는 대신 싸게 판다. 상업 버전이 툴박스 하나에 1,000불인 것이 함정. 2019년 1월 현재 학생용은 툴박스 10개가 포함된 MATLAB and Simulink Student Suite가 $59이고 애드온 및 툴박스는 최초에 같이 구매할 때 한정으로 개당 $5에 판매하고 있다. 별도로 구매할 때는 개당 $18. 거기에다 무기한 유효라는 모양.
당장 사야해옛날에는 한화 15만원, 미국에서는 50불에 툴박스 10불에 팔았다.
- Total Academic Headcount: 공대생이나 공대 대학원생이라면 학교 내지는 연구실에서 라이센스를 사줬을 경우 재학 및 휴학중에는 무료로 사용이 가능하다. 단 졸업하면 권한이 없어진다.
- Home License: 미국에서는 저런 제약 없이 영구적으로 사용 가능하고 가격도 비교적 저렴한 홈 라이센스가 존재하지만 한국에서는 판매하지 않았다가 R2020b 버전부터 usd 99 가격으로 판매하고 있다. 링크 설치는 컴퓨터 두 대까지만 가능하다.
- MatLab Online: 본인에게 유효한 라이센스가 있으며 컴퓨터가 인터넷에 연결된 상태여야만 실행이 가능하다. 거기에 일정 시간 입력이 없으면 자동 로그아웃이 되는 등 불편한 점이 많다.
- MATLAB Mobile: 안드로이드, iOS를 지원하고 MathWorks 계정만 만들면 무료로 깔아서 쓸 수 있다. 하지만 툴박스를 지원하지 않는 등 기능이 꽤 제한적이다. 본인에게 유효한 라이센스(Total Academic Headcount도 해당됨)가 없을 시에는 센서를 이용한 데이터 입력 및 애드온이 지원되지 않는다.
과거의 경우 학생이나 대학 연구소가 아닌 일반 상업적인 용도로 쓰기에는 라이센스 비용이 지나치게 비쌌다. 아무리 MATLAB이 쓰기 쉽다 한들 프로그래밍 언어를 다루는 것 자체에도 전문적인 노동력이 필요한데, 돈까지 내라고 하는 것에 못마땅하게 생각하는 사람들이 많았다. 특히 Python처럼 언어나 구현체부터 오픈 소스로 나오거나 무료인 경우가 널려 있는 현 시점에선 말이다. 이는 매스매티카나 메이플도 공유하는 문제이기도 하다. 더욱이 당시는 한국의 이용자들에게 비상업적/비영리적인 용도로 쓸 수 있는 Home License를 판매하지 않았기 때문에 개인 사용자가 쓸 수 있는 라이센스는 Standard License밖에 없었다. 200만원이 넘는 해당 라이센스의 가격은 개인 사용자에게 큰 진입장벽이었다.
그나마 2020년 하반기에 출시된 R2020b 버전부터 한국에서도 개인 사용자도 usd 99 가격으로 비상업적/비영리적 용도로 쓸 수 있는 가정용 라이센스의 구입이 가능해졌다. 참고로 매트랩 라이센스 정책상 학생용 라이센스를 쓰는 것은 재학 중 기간이므로 학교를 졸업하고 나서도 사용하는 것은 위반이다. 그래서 학교를 졸업하고 매트랩을 사용하려면 260만원 정도 하는 상업적/영리적 용도로 사용할 수 있는 Standard License를 사거나 십만원 남짓하는 비상업적/비영리적인 용도로 사용할 수 있는 Home License를 사지 않는 한, 공대 재학 중에 작성한 MATLAB 코드는 모두 Octave로 이식해야 하고, 아니면 휴지조각이다. 이런 점은 개인 이용자들이 MATLAB을 배우거나, 공학 관련 지식을 공부하는 데 주저하게 만드는 요인이기도 하다.
MATLAB 라이센스는 무척 비싸기 때문에 회사나 연구소 컴퓨터에 크랙 버전을 설치하거나, 설치된 개인 노트북을 들고 오지 말아야 한다. 불법은 물론 Home License 같은 비상업적 라이센스까지 포함이다. 링크와 같이 한번 걸리면 큰일난다. 굳이 MATLAB이 꼭 필요하다면 Standard License가 수백만원이라 비싸다 해도 1 copy정도는 회사에서 보유하는 것이 맞다. 아니면 MATLAB 없이 C++로 개발하는 것이 맞다. 특히 크랙 버전의 경우 각종 툴박스를 모두 깔아버린다면 무시무시한 배상금을 물게 된다. 수억대의 벌금을 귀책근로자가 물어야 한다. 농담이 아니다. 소송까지 평생 쫒아다닌다. Mathworks는 한국 지사도 가지고 있으므로, 특히 더 조심하자. 알다시피 외국계 엔지니어링 기업이 한국에 지사를 가지는 이유 중 하나가, 이런 단속이나 법적 분쟁을 통해 이익을 남기기 위해서이다.
DRM이 깔려 있는 걸로 추정된다. 불법 설치던 Trial Version이던 설치를 하면 귀신같이 불편한 내용이 없는지 확인 메일이 날라오고, 전화도 온다. 또한 최악의 경우 소프트웨어 감사가 온다.
최근에는 월 20시간 한도 내에서 MATLAB Online을 무료로 사용할 수 있다. MATLAB DRIVE 용량과 연산 시간에도 제약이 있지만, 이게거슬릴 수준이라면 정식으로 라이센스를 구입해서 써야될만한 일일 것이다. 많이 쓰이는 툴박스도 몇개 들어가있으니 유용하게 활용해보자.
6. 기타
MATLAB 계산 엔진도 나날이 발전하는 중이어서, 코드만 효율적으로 짠다면 아주 답답하지 않을 정도로는 최적화할 수 있다. 어떻게 코드를 효율적으로 바꿀 수 있는지도 가이드하는 기능도 있다.MATLAB 자격증도 있다. 2017년 자격증 시험 기준 응시료는 45만원. 자격증 응시료가 비싼데 ## 실제로 비용에 비해 얼마나 효용적인 자격증인지는 의문이다.
컴퓨터공학 쪽에서 많이 사용하는 각종 프로그래밍 언어가 유행을 탄다는 것은, 프로그램의 인터페이스 대상(유저, 핸드폰, 인터넷 하드웨어)이 끊임없이 변한다는 속성을 가지고 있기 때문이다. 그렇기 때문에 여러 가지 시도가 이루어지고 또 프로그래밍 언어 자체가 발전할 수 있는 계기가 된다.
2020년 전까지는 라이젠 등 AMD에서 만든 CPU를 쓴다면 동급의 인텔 CPU에 비해 매우 낮은 속도를 경험해야 했었다. 이 이유는 매트랩에서 사용하는 인텔 MKL 라이브러리에 있는데, 인텔 CPU가 아닌 CPU에서는 빠른 최신형 명령어가 아닌 가장 느린 구식 명령어를 쓰도록 만들었기 때문이다. [23] MKL의 비공식 플래그를 사용해 이를 우회하는 방법이 2019년 12월에 매트랩 레딧에서 알려졌다.(레딧 링크, 한국어 소개) 적게는 20%에서 많게는 300%까지 성능 향상이 있는 것으로 알려지고 있으며, 이 간단한 패치를 적용할 경우 벤치마크 상으로 스레드리퍼는 인텔 i9-10980XE보다 전반적으로 나은 성능을 보여준다. [24]
결국 MATLAB R2020a로 넘어가면서 Ryzen 시리즈에서도 기본적으로 AVX2를 쓰도록 개선이 이루어졌고, 추가적인 최적화 또한 이루어져서 동코어 기준 AMD Zen2 기반 CPU가 인텔을 앞서는 결과를 뽑아내게 되었다. (다만 최신 11세대 에서는 뒤엎어진 듯 하다.)
7. 관련 문서
[1] 2024년 09월 업데이트[2] 적지 않은 숫자의 컴퓨터공학과 학부생들이 애플리케이션 SW로서의 MATLAB 특성을 이해하지 못하고 MATLAB의 스크립트 인터페이스에 대한 불만을 가지고 있다.[3] 프로그래밍 기능이 있는 공학용 계산기를 떠올리면 비슷하다.[4] 행렬 계산, 그래프 만들기, 여러 공학적 알고리즘 사용하기 등이 있다.[5] 객체 지향 프로그래밍, 프로그래머가 여러가지 함수 만들기 등 있다.[6] 사실 이는 대학 측에서도 MATLAB을 한 학기동안 가르치는 과정을 마련하지도 않아 놓고는, 이것쯤은 할 수 있겠지 하면서 교수 재량으로 과제를 진행시키는 문제가 있다.[7] 항공우주연구원, NASA, 한국개발연구원(KDI), 현대자동차 등에서 MATLAB을 정식 구매하여 사용하는 것은 확인됨. 특히, 전 세계 자동차 업계에서는 Simulink의 자동 C코드 생성에 많이 의존하고 있다.[8] 물론 전공 분야와 연구 분야에 따라 다르다.[9] 다른 언어는 서드 파티 라이브러리 정도나 있는 수준이다.[10] MATLAB이 발달하지 않았던 시절에는 C++을 사용하기도 했으며, 현재는 딥러닝의 성장세에 힘입어 Python을 많이 사용하는 추세이다.[11] 물론, 몇몇 기초적인 프로토콜에 대한 알고리즘은 이미 나와 있는 경우가 많아 살짝 손만 봐서 쓰면 되니까 잘 찾아보자.[12] 단적으로 이러한 것은 거의 모든 분야의 레거시 시스템에 동일하게 적용된다. 오래 전 구축된 서구권 도시들의 인프라 설비나 발전/대중교통 제어장치의 경우 섣부르게 새로 만들어서 연결된 사회권 전체를 새롭게 '테스트' 하는것보다는 이전 소프트웨어를 그대로 돌릴 수 있는 호환시스템을 만들어서 신규 장비와 연결시키는 것이 훨씬 리스크에서 안전하다. 핵발전소나 군사시설에 플로피디스크를 사용하는 장비를 남겨두는 이유도 이것이고, 미국과 유럽의 오래된 은행들이 첫 금융전산화 때 도입한 IBM 메인프레임과 그 전산화 소프트웨어를 그대로 유지하기 위해 메인프레임 컴퓨터와 당시의 OS를 통째로 에뮬레이션하는 시스템을 만들어서까지 당시 자료들을 고스란히 유지하면서 운영하는 것 역시 이 때문이다.[13] 그나마 선형대수 정도만 필요하다면, 표준 라이브러리에 가까운 BOOST/Ublas를 사용하면 되니, 할 만하다. 하지만, 본격적인 수치해석을 제공하는 신뢰할만한 오픈소스 C++ 라이브러리는 없다.[14] 4차 방정식의 일반해를 계수에 대한 표현으로 나타내거나 다항식, 부정적분 등을 수식적으로 푸는 것.[15] 기계공학 분야에서는 일차적인 정확도가 확보된다면(ex. 80%) 그 이후에는 실행 속도가 더 중요한 경우가 대다수이다. 예를 들어 자동차 내부에 들어가는 전자 제어기는 제어기 특성에 따라 느려도 0.01초, 보통 0.001초마다 제어 결과 값을 산출하는 것이 제한 조건으로 적용되어 있다. 차체 내부의 제어기가 주어진 제어 주기를 만족하지 못하면, 엔진 사이클이 흐트러지거나, 차가 울컹거리는 거나, 조향이 이상하게 되는 것을 느끼게 된다.[16] 한/영 입력을 한글로 한 상태에서는 키보드의 어떠한 자음, 모음 키를 누른다 해도 아무것도 입력되지 않는다.[17] 다만 2017년부터는 객체지향이 가미된 진짜 string 형식이 도입되었다. s= 'Hello, world!'의 경우 기존에 존재하던 문자의 행렬(character array)을 선언하고, s= "Hello, world!" 는 새로 도입된 문자열(string)을 선언한다.[18] 즉, 내가 코딩을 잘 하고 잘 못하고는 별로 중요하지 않다. 내가 짠 코딩 방식이 다른 HW/SW와 잘 어울리는지 여부가 문제인 것이다. 하지만 몇 가지 규격 문서 정도만 받은 엔지니어 입장에서는 여러 HW/SW의 작동 방식을 로우 레벨에서 전부 이해하면서 개발하게 되는 경우는 거의 전무하다.[19] 위에서 언급한 help 또는 툴바의 도움말로 들어갈 수 있다.[20] 단, 기본적이거나 사용 빈도가 높은 함수 및 명령어 위주로 번역이 있어서 그 외의 기능을 원한다면 영어로 된 설명을 읽어야 한다.[21] MIT에서 수행한 Julia 벤치마크 정보 참고.[22] 물론 matlab이 오픈소스가 아니라는 점도 또 다른 이유이다.[23] 이 문제는 무려 10 ~ 20년간 지속되어 온 문제로 이와 관련해 시정명령을 받았음에도 불구하고 이어지고 있다.[24] legitreview 벤치마크 및 ExtremeTech 벤치마크를 보면 패치 적용 전에는 9개 주요 연산 중 8개가 인텔의 우위로 나오나 패치 적용 후에는 7개에서 AMD의 우위로 나오며 전반적인 소요 시간에서는 기존 벤치마크가 3960X < 10980XE < 3970X였던 반면 패치 이후에는 10980XE를 3960X로도 넉넉하게 이기는 것으로 나온다. (10980XE보다 실행시간 약 35% 단축됨).