獨斷論

산술 연산자들, 행렬의 곱셈 나눗셈 덧셈 연립방정식 등등 (Matlab 사용법 6) 본문

과학과 기술/Matlab

산술 연산자들, 행렬의 곱셈 나눗셈 덧셈 연립방정식 등등 (Matlab 사용법 6)

부르칸 2015. 5. 26. 09:22

Matlab에서 사용되는 기본적인 산술연산자들을 알아보자.


덧셈 +

그냥 '+'를 사용하는데 행렬에도 사용가능하다.

>> A = [1 2; 3 4];
>> b = 2;
>> A + b
ans =
     3     4
     5     6

위의 예를 보면, 행렬에 스칼라를 더할때도 그냥 '+'를 사용하였다. 행렬의 모든 원소에 b의 값을 더했다.


행렬끼리의 덧셈에도 사용한다.

>> A = [1 2; 3 4];
>> B = [10 20; 30 40];
>> C = A + B
C =
    11    22
    33    44


뺄셈 -

위 덧셈의 예에서 '+' 대신에 '-'를 사용하면 된다.


원소끼리 곱셈  .*

행렬의 곱셈이 아니라 행렬의 원소끼리 곱하는 것을 말한다.

>> A = [1 2 3];
>> B = [100 0 2];
>> A .* B
ans =
   100     0     6


원소끼리 나눗셈  ./

행렬의 원소끼리 나누는 것을 말한다.

>> A = [2 4 6 8; 3 5 7 9];
>> B = 10 * ones(2,4)
B =
    10    10    10    10
    10    10    10    10
>> x = A ./ B
x =

    0.2000    0.4000    0.6000    0.8000
    0.3000    0.5000    0.7000    0.9000


>> c = 5;
>> D = magic(4);
>> x = c ./ D
x =
    0.3125    2.5000    1.6667    0.3846
    1.0000    0.4545    0.5000    0.6250
    0.5556    0.7143    0.8333    0.4167
    1.2500    0.3571    0.3333    5.0000

위 예에서 A의 각 원소를 B의 각 원소로 나누었다. B의 모든 원소가 10이므로 모든 원소를 10으로 나눈 꼴이 된다.

c는 스칼라 5인데 여기에 magic(4)로 4x4의 행렬을 만든 후, 5를 D의 각 원소로 나눈 값을 각각 행렬로 저장했다.


원소끼리 왼쪽나눔 .\

보통 연산은 왼쪽수를 오른쪽수로 나누는데 이건 반대로 오른쪽 수를 왼쪽수로 나누는 것이다.

예를 들어 위에 ./의 연산을 반대로 해보자. 

>> B .\ A
ans =
    0.2000    0.4000    0.6000    0.8000
    0.3000    0.5000    0.7000    0.9000

>> D .\ c
ans =
    0.3125    2.5000    1.6667    0.3846
    1.0000    0.4545    0.5000    0.6250
    0.5556    0.7143    0.8333    0.4167
    1.2500    0.3571    0.3333    5.0000

결과가 같다.


제곱 .^

행렬의 각 원소에 3 제곱을 해보자.

>> A
A =
     2     4     6     8
     3     5     7     9

>> A .^ 3
ans =
     8    64   216   512
    27   125   343   729

행렬 각각의 원소의 역수를 구하는데도 사용할수 있다.

>> A .^ -1
ans =
    0.5000    0.2500    0.1667    0.1250
    0.3333    0.2000    0.1429    0.1111


행렬의 곱셈 *

벡터의 곱셈과 행렬의 곱셈에 이용된다.

>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = [1 0 -1; 5 6 3; 0 0 1];
>> A * B
ans =
    11    12     8
    29    30    17
    47    48    26

>> B * inv(B)
ans =

     1     0     0
     0     1     0
     0     0     1

다 알다시피 역행렬을 곱하면 단위행렬이 나온다.


선형연립방정식 풀기 mrdivide 또는 /

xA = B의 연립방정식을 푸는데 사용된다. 

사용하는 방법은 아래와 같다.

x = B/A

x = mrdivide(B, A)

연립방정식을 푸는 예를 들어보면

>> A = [1 1 3; 2 0 4; -1 6 -1];
>> B = [2 19 8];
>> x = B/A;

>> x
x =
    1.0000    2.0000    3.0000

Underdetermined system의 최소자승법(least squares)에도 사용될수 있다.

>> C = [1 0; 2 0; 1 0];
>> D = [1 2];
>> x = D / C;
Warning: Rank deficient, rank = 1, tol =  1.332268e-15.
>> x
x =
         0    0.5000         0


선형연립방정식 풀기 mldivide 또는 \

Ax = B의 연립방정식을 푸는데 이용된다.

사용방법은 아래와 같다. 위 xA = B와 다른점을 주의해야만 한다.

x = A\B

x = mldivide(A, B)

사용예를 들어보자.

우선 연립방정식의 예를 들어보면

>> A = [1 2 -1; 1 0 6; 3 4 -1];
>> B = [2; 19; 8];
>> x = A \ B;
>> x
x =
    1.0000
    2.0000
    3.0000


Underdetermined system의 최소자승법(least sqaures)에 사용된다. 

>> A = [1 2 0; 0 4 3];
>> b = [8; 18];
>> x = A \ b
x =
         0
    4.0000
    0.6667


행렬 원소의 합

sum()을 이용하면 쉽다.

열방향으로 더하고 싶을땐 아래와 같이 한다.

>> A
A =
     1     2     0
     0     4     3
>> sum(A)
ans =
     1     6     3

행방향으로 더하고 싶을땐 아래와 같이 한다.

>> sum(A, 2)
ans =
     3
     7


Comments