SturdyCobble's Study Note

[MATLAB] 10. 기초 연산 & 특수문자 본문

프로그래밍/MATLAB

[MATLAB] 10. 기초 연산 & 특수문자

StudyingCobble 2019. 9. 8. 21:37

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


※ 이 글은 최소한 Python과 같은 프로그래밍 언어를 한 번 이상 접한 사람을 독자로 가정하여 작성되었습니다. 사용버전은 R2019a기준입니다. 또한 기본적인 프로그램 조작보다는 프로그래밍에 초점을 맞추어 작성하였습니다.

이번 글은 다음 글들을 바탕으로 작성되었습니다. 이번 글에선 이미 다룬 연산을 제외하고 기초적인 연산을 진행하는 연산자, 함수에 대해 다루고 그 외 유용한 특수 문자들을 다룹니다.

 

https://kr.mathworks.com/help/matlab/matlab_prog/matlab-operators-and-special-characters.html

 

MATLAB 연산자와 특수 문자 - MATLAB & Simulink - MathWorks 한국

아래 MATLAB 명령에 해당하는 링크를 클릭하셨습니다. 이 명령을 MATLAB 명령 창에 입력해 실행하십시오. 웹 브라우저에서는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

https://kr.mathworks.com/help/matlab/operators-and-elementary-operations.html

 

연산자와 기초 연산 - MATLAB & Simulink - MathWorks 한국

아래 MATLAB 명령에 해당하는 링크를 클릭하셨습니다. 이 명령을 MATLAB 명령 창에 입력해 실행하십시오. 웹 브라우저에서는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

 

1. 산술 연산

https://kr.mathworks.com/help/matlab/arithmetic-operators.html

사실 산술 연산에 속한 많은 함수들이 연산자와 대응됩니다. 예를 들면, mpower는 ^에, times는 .*에 대응되는 것처럼 말이죠. 그렇지 않은 함수 중에 자주 쓰이는 함수만을 골라보면 다음과 같습니다.

함수 설명 예시 ( A = [1 2 3 ; 4 5 6 ; 7 8 9]; )
prod

각 열마다의 수를 모두 곱함. 두번째 인자로 곱할 차원(dimension)이나 방향(direction) 지정 가능

>> prod(A)
ans =
    28    80   162
>> prod(A,2)
ans =
     6
   120
   504

sum

각 열마다의 수를 모두 더함. 두번째 인자로 더할 차원(dimension)이나 방향(direction) 지정 가능

>> sum(A)
ans =
    12    15    18
>> sum(A,2)
ans =
     6
    15
    24

cumprod

각 열마다의 수를 누적하여 곱함. 두번째 인자로 곱할 차원(dimension)이나 방향(direction) 지정 가능

>> cumprod(A)
ans =
     1     2     3
     4    10    18
    28    80   162

cumsum

각 열마다의 수를 누적하여 더함. 두번째 인자로 더할 차원(dimension)이나 방향(direction) 지정 가능

>> cumsum(A)

ans =

     1     2     3

     5     7     9

    12    15    18

movsum

Frame을 옮겨가며 내부의 수를 모두 더함. 프레임의 사이즈는 인자 여러개로 전달하거나 행벡터로 전달. 프레임의 중앙은 홀수 개일때 중심에, 짝수 개일때 중앙 2개 중 인덱스가 낮은쪽을 기준으로.

>> movsum(A,2,2)

ans =

     1     3     5

     4     9    11

     7    15    17

ceil

올림. 두번째 인자로 소수점 자리수 지정 가능.

B = [ 0.12    0.35    0.75    0.678   -0.4   -0.67 ];

>> round(B,1)

ans =

    0.1000    0.4000    0.8000    0.7000   -0.4000   -0.7000

>> round(B)

ans =

     0     0     1     1     0    -1

>> fix(B)

ans =

     0     0     0     0     0     0

floor

내림. 두번째 인자로 소수점 자리수 지정 가능.

round

반올림. 두번째 인자로 소수점 자리수 지정 가능.

fix

0의 방향으로 반올림. 

2. 논리 연산

https://kr.mathworks.com/help/matlab/logical-operations.html

제어문 글에서 다루었으므로 제외합니다.

 

3. 집합 연산

https://kr.mathworks.com/help/matlab/set-operations.html

기본적으로 다음과 같은 함수들이 있습니다.

설명을 위한 집합

함수 설명
union(A, B)
setxor(A, B)
setdiff(A, B)
A - B
intersect(A, B)

 

그외 다음과 같은 함수들이 대표적입니다.

함수 설명 예시 ( A = [1 2 3 ; 4 5 6 ; 7 8 9]; )
ismember(A, B) A에 B가 있는지 논리 행렬로 반환. >> ismember(A,[2 4])
ans =
  3×3 logical 배열
   0   1   0
   1   0   0
   0   0   0
ismembertol(A, B, tol) 오차 범위(tol*max(abs([A(:);B(:)])) 내에서 ismember 함수 실행 >> ismembertol(A,[2 3],0.5)
ans =
  3×3 logical 배열
   1   1   1
   1   1   1
   1   0   0
C = unique(A) 중복 멤버 제거 >> uniquetol(A,0.2)
ans =
     1
     3
     5
     7
     9
C = uniquetol(A,tol) 중복 멤버를 허용 오차(tol*max(abs(A)) 내에서 제거 
sort(A) 정렬  
issorted(A) 정렬 여부  

 

한편, 가끔씩 테이블 형을 사용할 때가 있습니다. 이 테이블은 다음과 같이 생성합니다. ('VariableName'다음에 오는 행렬의 내용이 변수 명이 되므로 변수명 작명 규칙을 따라야 함에 유의하세요!)

>> table([0.1;0.2;0.3;0.4;0.5],[1.6;2.4;3.6;4.2;5.4],...
    'VariableNames',{'time' 'var1'})

ans =

  5×2 table

    time    var1
    ____    ____

    0.1     1.6 
    0.2     2.4 
    0.3     3.6 
    0.4     4.2 
    0.5     5.4 
    
>> A =  table([156;184;165;174;178],[56;65;66;72;75],...
    'VariableNames',{'height' 'weight'}, ...
    'RowNames', {'James', 'Peter', 'Mike', 'Lewis', 'Lang'})


A =

  5×2 table

             height    weight
             ______    ______

    James     156        56  
    Peter     184        65  
    Mike      165        66  
    Lewis     174        72  
    Lang      178        75  

>> A.height

ans =

   156
   184
   165
   174
   178

 

이러한 테이블을 결합하는 함수들도 존재합니다.

함수 설명
join(A,B) 테이블을 공통된 key를 기준으로 병합. (열이 서로 뒤바뀌어 있어도 상관없음)
innerjoin(A,B) 테이블을 공통된 key를 기준으로 내부 결합(키 값이 일치하는 것만). (열이 서로 뒤바뀌어 있어도 상관없음)
outerjoin(A,B) 테이블을 공통된 key를 기준으로 외부 결합(키 값이 달라도 포함). (열이 서로 뒤바뀌어 있어도 상관없음)

 

예시를 들어보겠습니다.

>> A = [1 13 32;2 13 23;3 12 42]

A =

     1    13    32
     2    13    23
     3    12    42

>> B = table(A(:,1),A(:,2),A(:,3),'VariableNames',{'Time','Var1','Var2'})

B =

  3×3 table

    Time    Var1    Var2
    ____    ____    ____

     1       13      32 
     2       13      23 
     3       12      42 

>> C = table([43;23;43],[1;2;3],'VariableNames',{'Var3','Time'})

C =

  3×2 table

    Var3    Time
    ____    ____

     43      1  
     23      2  
     43      3  

>> join(B,C)

ans =

  3×4 table

    Time    Var1    Var2    Var3
    ____    ____    ____    ____

     1       13      32      43 
     2       13      23      23 
     3       12      42      43 
>> C = table([43;23;43;67],[1;2;3;4],'VariableNames',{'Var3','Time'})

C =

  4×2 table

    Var3    Time
    ____    ____

     43      1  
     23      2  
     43      3  
     67      4  

>> innerjoin(B,C)

ans =

  3×4 table

    Time    Var1    Var2    Var3
    ____    ____    ____    ____

     1       13      32      43 
     2       13      23      23 
     3       12      42      43 

>> outerjoin(B,C)

ans =

  4×5 table

    Time_B    Var1    Var2    Var3    Time_C
    ______    ____    ____    ____    ______

       1       13      32      43       1   
       2       13      23      23       2   
       3       12      42      43       3   
     NaN      NaN     NaN      67       4   

 

3. 비트 연산

https://kr.mathworks.com/help/matlab/bit-wise-operations.html

C언어 등과는 다르게 비트 연산에 대한 연산자가 따로 있는 것 같진 않습니다.

함수 설명
bitand(A,B) 비트별 AND
bitor(A,B) 비트별 OR
bitcmp(A) 비트별 보수(1의 보수)
bitxor 비트별 XOR
bitshift(A,k) 비트 이동(k만큼 왼쪽으로)
bitget(A,k) 비트 가져오기(k번째)
bitset(A,k) 비트 설정

 

 

그 외 자주 사용되는 특수 문자들은 다음과 같습니다.

https://kr.mathworks.com/help/matlab/matlab_prog/matlab-operators-and-special-characters.html

 

연산자 우선순위는 아래를 참고하시면 됩니다.

https://kr.mathworks.com/help/matlab/matlab_prog/operator-precedence.html 

 

Comments