나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-12-02 21:38:49

MATLAB

파일:하위 문서 아이콘.svg   하위 문서: MATLAB/문법
,
,
,
,
,
#!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
매트랩
파일:external/his.cuahsi.org/matlablogo.jpg
<colbgcolor=#0076a8><colcolor=#ffffff> 버전 MATLAB R2024b [1]
링크 홈페이지

1. 개요2. 용도
2.1. 이공계
2.1.1. 공대 대학원
2.2. 상경 및 인문계2.3. 타 프로그래밍 언어 및 수치해석 소프트웨어와의 비교
3. 역사4. 특징
4.1. 장점4.2. 단점
5. 비싼 가격6. 기타7. 관련 문서

[clearfix]

1. 개요

disp( '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을 대체하는 것 자체는 가능하다. 다만, MATLAB의 철학 자체가 '돈은 얼마든지 낼테니 Mathworks가 최대한 유용한 기능을 많이 갖추어 놓아라'라는 식이라면, 오픈소스 진영에서는 공짜로 쓰는 대신에 사용자가 여러 라이브러리 사이의 버전 충돌이라던가 미비한 기능에 대한 보완 대책을 사용자 스스로 해야하는 등 불편한 점이 많다.
특히 라이센스가 GPL일 경우 상업적인 개발에 사용한다면 카피레프트에 주의해야 한다.

3. 역사

1970년대에 뉴멕시코 대학교의 컴퓨터공학과의 학장인 클리브 몰러의 주도 아래 개발이 시작되었다. 1984년 본격적으로 Mathworks 사를 세우고 개발하여 2000년대에 처음으로 일반 사용자에게 판매되기 시작하였다.

4. 특징

일반적인 프로그래밍 언어에서 행렬은 그저 각 차원으로 이루어진 방식으로, 현실의 행렬 계산 방식과는 거리가 있다. 그에 따라 각 행렬에 대한 값을 구하려면 그 부분 역시 유저들이 직접 알고리즘을 짜서 계산해야 한다. 문제는 공학이 대부분이 행렬 계산 위에 성립된 학문이라 행렬 계산이 불편한 일반적인 프로그래밍 언어는 공학계열에서 사용하기 어렵다.

C/C++나, 이후 개발된 Java도, 다목적 용도를 가지고 개발되었기에 공학용으로 디자인된 수식을 계산하기 위해선 공학도들이 알고리즘에 숙달될 필요가 있었다. 하지만 각 공학과의 현실상 가르치기 어려웠으며 커리큘럼도 만들어져있지 않았다. 또한 컴퓨팅 파워 역시 1990년 이전에는 부족하여 공학 계산과 시뮬레이션에 있어 필요성은 절대적이었으나 유용 방식은 한정되었다. 또한 포트란 등의 단순 계산에 적합한 언어들은 그 나름의 장점이 있었으나 병렬계산에 적합하지 못했다.

그러나 MATLAB은 공학과 시뮬레이션에 특화된 언어라는 목적을 가지고 개발되었다. 그에 따라 시간과 (자금적) 리소스를 크게 사용하지 않는 기존 언어와 다른 개념으로 개발된다. 그건 바로 쓰일 만한 명령어 세트는 죄다 컴파일러로 이루는, 비효율적이나 사용자 입장에선 쉬운 방법을 택한 것이다.

또한 기존 언어와의 차이점으로 모든 정의한 변수는 행렬 취급이 된다. 이는 공학계에서 수많은 변수들을 간편화하기 위해 행렬을 사용하기 때문이다. 심지어 문자열도 그저 문자(char)들의 행렬로 취급되었다.[17]

MATLAB이 처음 사용자용으로 발표된 2000년도에는 컴퓨팅 파워의 한계와 보급의 난항으로 주목받지 못했다. 그러나 곧 컴퓨터가 빠르게 보급되었고, 매트랩은 사용과 교육의 간편함에서 주목받아 공학도들이라면 한 번씩 만져본 프로그래밍 언어가 되었다.

4.1. 장점

4.2. 단점

5. 비싼 가격


과거의 경우 학생이나 대학 연구소가 아닌 일반 상업적인 용도로 쓰기에는 라이센스 비용이 지나치게 비쌌다. 아무리 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이던 설치를 하면 귀신같이 불편한 내용이 없는지 확인 메일이 날라오고, 전화도 온다. 또한 최악의 경우 소프트웨어 감사가 온다.

어지간하면, 가난한 학생의 세계를 벗어나면, 자기가 밥 벌어 먹고사는 직장에서는 불법적인 행동을 하지 않도록 하자. 한국은 유독 관대한 측면이 있지만, MATLAB 말고도, STK, Solid Works 등 주요 공학 SW의 경우, 대학원생이 불법적인 SW로 학회 발표 등을 하고, 불법적인 경로로 자사 SW를 사용한 것이 확인되면, 해당 연구실/학과에 페널티를 먹이는 경우도 많다.

최근에는 월 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% 단축됨).