MATLAB 함수 곱 - MATLAB hamsu gob

MATLAB

MATLAB 행렬 연산 (1) - 더하기, 빼기, 곱하기, 제곱, 나누기

■ 행렬 간 덧셈과 뺄셈

    더하거나 빼려고 하는 두 행렬의 행과 열의 개수가 일치해야 계산이 가능해요

     (차원이 다른 행렬 간 계산 시에는 E와 같은 오류가 발생해요)

     행렬 모든 원소에 같은 수의 덧셈과 뺄셈


■ 행렬의 곱

     행렬 A, B의 곱셈시, 앞 행렬 열의 개수와 뒤 행렬 행의 개수가 같아야 하는 거 알고 계시죠?

     A*B = (l X m 행렬) X (m X q 행렬) = (l X q 행렬)

     만약 앞 행렬 열의 개수와 뒤 행렬 행의 개수가 다르다면 연산이 되지 않아요

      행렬 모든 원소에 같은 수의 곱

     행렬 내부 원소별 각기 다른 수의 값을 곱해주고 싶으면 .* 를 사용하면 돼요

     각각 A, B의 같은 lxm 의 원소끼리 곱이 됐죠??

■ 행렬의 N제곱

    행렬의 곱에서 본 것과 같이, N제곱을 하기 위해서는 정사각행렬이어야 가능하겠죠??

   

  정사각행렬이 아닐 시에는 제곱이 되지 않아요

   만약, 행렬 내부 원소의 N제곱을 하고 싶으면 .^ 를 사용해요.

   각각의 원소별로 제곱이 됐어요.

■ 행렬의 나눗셈

    행렬의 나눗셈에는 'right division(/)'과 'left division(\)' 두 가지가 존재해요

    간단하게 스칼라로 표현해서 알아보기 쉽게 해보면

    - right division  : 왼쪽의 값을 오른쪽의 값으로 나누어 줘요

    -left division : 오른쪽의 값을 왼쪽의 값으로 나누어 줘요

    행렬의 나눗셈에서도 곱셈에서처럼  ./  와  .\ 이용하여 내부 원소를 따로 나눗셈을 해 줄 수 있어요

    A행렬의 1x1의 원소를 B행렬의 1x1의 원소로 나누어주고, 각각 원소별로 시행하죠

    그렇기 때문에 A행렬과 B행렬의 차원이 같지 않으면 실행 오류가 발생해요

 여기에서는 이전 포스트에 이어서 계속 plot()함수에 대해서 설명하도록 하겠다. 만약 sin(x)cos(x)함수를 그리고자 한다면 다음과 같이 하면 될 것이다.

>> x = 0:0.1:2*pi;
>> y = sin(x).*cos(x);
>> plot(x,y)

두 번째 줄에서 sin(x)와 cos(x)두 벡터의 곱에 (.*)연산자를 사용했음에 주의해야 한다. 계산하고자 하는 것이 두 벡터의 요소들 사이의 곱이기 때문이다.

MATLAB 함수 곱 - MATLAB hamsu gob

[그림 1] 실행 결과 (gnu octave 에서 캡쳐)

또 다른 예로 x2+xsinx+1 이라는 함수를 도시하고자 한다면 다음과 같이 입력하면 된다.

>> x = -10:0.1:10;
>> y = x.^2 + x .*sin(x) + 1;
>> plot(x,y)

여기에서도 두 번째 줄에 (.^)연산자와 (.*)연산자가 쓰였음을 주의해서 보기 바란다. 요소간 연산을 수행해야 하기 때문이다.

MATLAB 함수 곱 - MATLAB hamsu gob

[그림 2] 실행 결과 (gnu octave 에서 캡쳐)

두 번째 입력 파라메터가 행렬인 경우는 각각의 행을 서로 다른 그래프로 보여주게 된다. 다음 예를 보자.

>> x=linspace(0,2*pi,30);
>> y1=sin(x);
>> y2=cos(x);
>> Y=[y1;y2];
>> plot(x,Y)

의 예에서 linspace()함수는 0부터 까지 30개의 등간격 점을 생성하여 반환해주는 함수이다. plot()함수의 두 번째 파라메터 Y는 행렬이다. 아래  결과를 보면 각각의 행에 해당하는 그래프가 따로 도시됨을 알 수 있다.

MATLAB 함수 곱 - MATLAB hamsu gob

[그림 3] 실행 결과 (gnu octave 에서 캡쳐)

또는 다음과 같이 따로따로 입력해도 같은 결과를 얻을 수 있다.

>> plot(x,y1,x,y2)

다음과 같이 x와 y값을 바꾸어서 입력하면 90도 회전시킨 그림을 도시하게 된다.

>> plot(Y,x)

MATLAB 함수 곱 - MATLAB hamsu gob

[그림 4] 실행 결과 (gnu octave 에서 캡쳐)

이제까지 예제에서 그래프의 모양은 기본형이 실선으로 되어 있기 때문에 실선으로 그려졌으나 사용자가 임의로 지정할 수도 있다. 즉 선의 색상, 선의 모양 그리고 선의 종류를 사용자가 직접 지정할 수도 있다. 이것에 대해서는 다음 포스트에서 자세히 알아보도록 하겠다.

↓2021/03/05 - [Computer Language/Matlab] - MATLAB 기초 2. 벡터와 행렬 생성과 슬라이싱

MATLAB 기초 2. 벡터와 행렬 생성과 슬라이싱

앞선글에서는 MATLAB의 기초적인 변수와 내장함수에 대해서 다루었다. 2021/03/05 - [Computer Language/Matlab] - 1. MATLAB 의 기초 - 변수, 내장 함수, 관계 및 논리 연산자 1. MATLAB 의 기초 - 변수, 내장 함..

supermemi.tistory.com

MATLAB 함수 곱 - MATLAB hamsu gob

3-1 행렬의 전치(Transpose)

MATLAB 에서는 행렬의 전치를 위하여 프라임(')을 사용한다.

MATLAB 함수 곱 - MATLAB hamsu gob

3-2 행렬의 덧셈과 뺄셈

+, - 연산자를 이용하여 연산이 가능하며, 두 행렬의 크기가 같아야 연산이 가능하다.

MATLAB 함수 곱 - MATLAB hamsu gob

3-3 행렬의 곱셈

 * 연산자를 사용하며, 앞 행렬의 열의 크기와 뒷 행렬의 행의 크기가 동일해야 한다.

다시말해 m x n 행렬과 n x p 행렬의 순서 곱은 가능하지만, 반대 순서는 불가능하다.

MATLAB 함수 곱 - MATLAB hamsu gob

3-4 행렬의 나눗셈

MATLAB에서는 행렬의 나눗셈을 위해 좌측 연산자 \(역슬레시)와 우측연산자 /를 제공한다.

행렬 A가 역행렬을 갖는 정방 행렬이면 선형 방정식 Ax=b 의 해 x를 구하기 위해 좌측 나눗셈(\)을 사용하며, 우측 나눗셈(/)xA = b 의 해를 구하기 위해 사용한다.

A * x = b  →  x = A \ b
x * A = b  →  x = b / A

예를 들어, 아래의 연립방정식의 해를 구한다고 생각해 보자.

a+2b = 5

3a+4b = 11

행렬 A = [1 2;3 4] 가 될 것이고, 결과 벡터 b = [5;11]이 될 것이다.

이때 x = [a;b]를 구해야 하는데 식으로 나타내면,

A*x = b

x = A\b 를 통해 구할 수 있다.

MATLAB 함수 곱 - MATLAB hamsu gob

x = [1;2] 라는 결과가 나왔다. 대입해보면 사실임을 알 수 있을 것이다.


그냥 실수에 좌즉나눗셈(\)을 사용한다면, 어떻게 연산이 될까?

MATLAB 함수 곱 - MATLAB hamsu gob

1/2 는 우측나눗셈(/)을 사용하여 뒤쪽 숫자분모가 되어 나눗셈이 진행된다.

반대로 1\2는 좌측나숫셈(\)을 사용하여 앞쪽 숫자분모가 된다.


3-5 element 연산

각 원소(element)끼리 곱하거나 나누기 또는 거듭제곱을 하고자 할 경우에는 사용하고자 하는 연산자 앞에 . 연산자를 붙여야 한다.

MATLAB 함수 곱 - MATLAB hamsu gob

이때, element 거듭제곱(A.^2) 행렬 거듭제곱(A^2) 을 구분할 필요가 있다!!

element 거듭제곱(A.^2) 은 각 요소들을 제곱하는 것을 말한다.

반대로 행렬 거듭제곱(A^2) 은 정사각 행렬일때 똑같은 행렬을 곱하는 것을 말한다.

MATLAB 함수 곱 - MATLAB hamsu gob

3-6 기타 행렬 연산 함수 (size, length, reshape)

size(A) : 행렬(A)의 크기를 반환한다.

length(A) : 행렬(A)의 행 수와 열 수를 비교하여 큰 값을 출력한다.

reshape(A, n, m) : 행렬(A)을 n x m 행렬로 변환시킨다. 이때 열우선 순서로 반환된다.

MATLAB 함수 곱 - MATLAB hamsu gob
MATLAB 함수 곱 - MATLAB hamsu gob

이때 주의할 점은 행렬이 reshape을 통해 바뀔때, 기존의 원소들이 열 우선 순으로 바뀐다는 것이다.


열 우선 순이라는 말이 무엇인지 생각해보자.

위의 예시에서 2 x 3 행렬 A는

첫째 행이 1 2 3, 둘째 행이 4 5 6 인 원소로 구성되어 있다.

이를 열을 기준으로 생각해보면,

첫째 열이 1 4, 둘째 열이 2 5, 셋째 열이 3 6으로 구성되어 있다.

이를 reshape함수를 사용하여 6 x 1 행렬로 바꾸면 어떻게 될까?

열을 기준으로 생각했을때 첫째 열의 원소 부터 순서대로 열에 채워진다.

1 4 2 5 3 6

MATLAB 함수 곱 - MATLAB hamsu gob

위의 예시들을 바탕으로 다시 한번 생각해보거나 직접 몇번만 해보면 어떤 의미인지 이해 할 수 있을 것이다.


2021/03/08 - [Computer Language/Matlab] - MATLAB 기초 4. 입출력 ( disp( ), fprintf( ), fscanf( ) )

MATLAB 기초 4. 입출력 ( disp( ), fprintf( ), fscanf( ) )

2021/03/08 - [Computer Language/Matlab] - MATLAB 기초 3. 벡터 및 행렬 연산 ( \ , / , .*, .^ , size(), reshape(), length() ) MATLAB 기초 3. 벡터 및 행렬 연산 ( \ , / , .*, .^ , size(), reshape(), len..

supermemi.tistory.com

MATLAB 함수 곱 - MATLAB hamsu gob

참고도서

MATLAB을 이용한 알기 쉬운 수치해석. 박태희 지음. 생능출판