일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 리브레위키
- python
- javascript
- IT
- matlab
- 선형대수학
- 수학
- 오늘의 문제
- 물리학
- 위키
- CSS
- C언어
- ┌─┐
- html
- C
- Java
- Nemeth Braille
- Inkscape
- 나무위키
- css3
- 글이_점점_짧아지고_있습니다.
- 프로그래밍
- 확률
- 점자
- C++
- LaTeX
- 자바스크립트
- 프로그래밍 언어
- HTML5.
- html5
- Today
- Total
SturdyCobble's Study Note
[MATLAB] 06. 벡터화와 사전할당 본문
NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.
더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.
※ 이 글은 최소한 Python과 같은 프로그래밍 언어를 한 번 이상 접한 사람을 독자로 가정하여 작성되었습니다. 사용버전은 R2019a기준입니다. 또한 기본적인 프로그램 조작보다는 프로그래밍에 초점을 맞추어 작성하였습니다.
MATLAB은 다양한 연산을 행렬로 처리할 수 있습니다. 알고리즘을 반복문 대신 벡터나 행렬 연산으로 나타내는 과정을 벡터화라고 합니다. 이 과정을 통하면, 알고리즘을 좀 더 직관적이고 빠르게 실행 될 수 있게 표현할 수 있습니다.
아래 예시를 참고해봅시다.
x = 0;
for k = 1:101
y(k) = x^2;
x = x + 1;
end
disp(y)
위 예시는 0부터 100까지 수의 제곱수를 담은 배열을 생성합니다. 하지만, 이는 아래와 같이 MATLAB의 행렬 연산으로 다음과 같이 바꿔볼 수 있습니다.
y = (0:100).^2;
disp(y)
직관적이기도 하고, 식이 매우 간단해졌습니다. 이처럼 MATLAB에서는 다양한 알고리즘을 벡터화라는 과정을 통해 표현합니다.
다음은 사전 할당에 대해 알아보겠습니다. 이는 벡터화가 힘들어 반복문을 사용해 긴 벡터를 생성해야하는 경우 사용할 수 있습니다. 벡터를 반복문을 실행하며 길이를 늘려나가는 것이 아니라 미리 벡터를 생성해두는 것입니다. 위 예시는 사전 할당을 통해 다음의 코드로 나타낼 수 있습니다.
x = 0;
y = zeros(101,1);
for k = 1:101
y(k) = x^2;
x = x + 1;
end
disp(y)
이렇게 사전할당을 통해 실행 속도를 향상시킬 수 있습니다. 이는 벡터를 확장하는 번거로운 과정이 불필요하기 때문입니다.
마지막으로 도움말과 여러 문서들을 활용하는 방법을 알아보겠습니다. 이는 help와 doc명령어로 접근할 수 있습니다. 예를 들어 log10이라는 함수에 대해 알고싶다고 해봅시다. 그러면 아래의 과정을 통해 도움을 얻을 수 있습니다.
≫help log10
log10 - 상용 로그(밑 10)
배열 X의 각 요소에 대한 상용 로그를 반환합니다.
Y = log10(X)
참고 항목 exp, log, log1p, log2, loglog, logm, reallog, semilogx, semilogy
log10에 대한 함수 도움말 페이지
이름이 log10인 다른 함수
≫doc log10
마지막 명령어는 아래처럼 생긴 도움말 창을 띄웁니다.
또한, 여러가지 작업을 하다보면 다양한 함수들이 필요하게 되는데요, 이에 대한 도움은 공식 문서에서 찾을 수 있습니다.
https://kr.mathworks.com/help/matlab/
왼쪽에 있는 목차에서 원하는 범례를 찾아 둘러볼 수도 있고, 아니면 상단 우측의 검색을 통해 다음과 같이 함수를 찾아볼 수도 있습니다.
그외 기본적인 함수를 탐색하기 위해 다음과 같은 명령어를 활용할 수 있습니다. (아래 예시는 more on 명령어로 --more--표시를 킨 상태입니다.)
>> help elfun
Elementary math functions.
Trigonometric.
sin - Sine.
sind - Sine of argument in degrees.
sinh - Hyperbolic sine.
asin - Inverse sine.
--more--
>> help specfun
Specialized math functions.
Specialized math functions.
airy - Airy functions.
besselj - Bessel function of the first kind.
bessely - Bessel function of the second kind.
besselh - Bessel functions of the third kind (Hankel function).
--more--
>> help elmat
Elementary matrices and matrix manipulation.
Elementary matrices.
zeros - Zeros array.
ones - Ones array.
eye - Identity matrix.
repmat - Replicate and tile array.
--more--
다 영어이긴 하지만, MATLAB을 배우는 정도의 분들이라면 충분히 읽으실 수 있을 겁니다. 위에서부터 차례로 기본 수학 함수들, 좀 더 전문적인 수학 함수들, 기본적인 행렬과 행렬 조작에 관한 함수들을 표시합니다.
만약 이 글이 도저히 이해가 안된다거나, 재미가 없어서 도저히 보지 못하겠다면, 공식 문서의 튜토리얼을 따라하는 것도 좋은 방법입니다.
https://kr.mathworks.com/help/matlab/getting-started-with-matlab.html
'프로그래밍 > MATLAB' 카테고리의 다른 글
MATLAB으로 Newton's Method 구현하기 (0) | 2019.08.26 |
---|---|
[MATLAB] 07. 다차원 배열 (0) | 2019.08.26 |
[MATLAB] 05. 제어식과 논리 첨자 (0) | 2019.08.12 |
[MATLAB] 04. 2D, 3D 그래프 (0) | 2019.08.04 |
[MATLAB] 03. 행렬 인덱싱과 문자열 (0) | 2019.08.04 |