SturdyCobble's Study Note

[MATLAB] 06. 벡터화와 사전할당 본문

프로그래밍/MATLAB

[MATLAB] 06. 벡터화와 사전할당

StudyingCobble 2019. 8. 13. 11:55

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/

 

공식 문서

왼쪽에 있는 목차에서 원하는 범례를 찾아 둘러볼 수도 있고, 아니면 상단 우측의 검색을 통해 다음과 같이 함수를 찾아볼 수도 있습니다. 

 

pseudoinverse에 대한 검색 결과

그외 기본적인 함수를 탐색하기 위해 다음과 같은 명령어를 활용할 수 있습니다. (아래 예시는 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

 

 

Comments