MATLAB 행렬 곱셈 - MATLAB haenglyeol gobsem

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행렬의 차원이 같지 않으면 실행 오류가 발생해요

매트랩에서 두 행렬을 성분별로 연산하는 방법

📂매트랩

매트랩에서 두 행렬을 성분별로 연산하는 방법

elementwise operation of matrix in matlab

곱셈

  • times() , .*: 두 행렬의 각 성분을 곱해서 그 결과를 반환한다.

두 행렬의 크기가 완전히 같거나, 한 쪽이 스칼라이거나, 행의 크기가 같은 행벡터, 열의 크기가 같은 열벡터일 경우에만 연산이 가능하다. 크기가 다른 경우에 작은 행렬이 큰 행렬과 같은 크기의 행렬인 것 처럼 계산되는데 이 때 빈 자리는 똑같은 값으로 채워진다. 예를 들어 스칼라는 모든 성분이 같은 값을 가지게 되고, 행벡터의 경우 모든 행이 같은 행렬이 된다. 잘 이해가 안된다면 아래의 식을 참고하자. .*는 점과 곱셈 기호가 합쳐졌으니 점별 곱셈 이라고 이해하면 된다. 다른 성분별 연산의 기호도 이런식으로 만들어져있다.

$$ A=\begin{pmatrix} a_1 & a_2 & a_3 \end{pmatrix},\quad B=\begin{pmatrix} b_1 \\ b_2 \\ b_3 \\ b_4 \end{pmatrix} \quad \implies \quad \begin{align*} A.B&=\begin{pmatrix} a_1 & a_2 & a_3 \\ a_1 & a_2 & a_3 \\ a_1 & a_2 & a_3 \\ a_1 & a_2 & a_3 \end{pmatrix} \begin{pmatrix} b_1 & b_1 & b_1 \\ b_2 & b_2 & b_2 \\ b_3 & b_3 & b_3 \\ b_4 & b_4 & b_4 \end{pmatrix} \\ &= \begin{pmatrix} a_1b_1 & a_2b_1 & a_3b_1 \\ a_1b_2 & a_2b_2 & a_3 b_2 \\ a_1b_3 & a_2 b_3 & a_3 b_3 \\ a_1b_4 & a_2 b_4 & a_3 b_4 \end{pmatrix} \end{align} $$

예제 코드와 출력 결과는 아래와 같다.

A=[2 1 -3; 4 0 3] B=[1 2 3] C=[3; 1] a=A.*B b=A.*C c=B.*C d=3.*A

나눗셈

  • rdivide() , ./: 두 행렬의 각 성분을 나눠서 그 결과를 반환한다.

행렬의 크기에 대한 내용은 .*과 같다. 이를 이용하면 성분이 역수인 행렬을 쉽게 구할 수 있다. 행렬 A의 각 성분의 역수를 성분으로 가지는 행렬은 1./A로 구할 수 있다.예제 코드와 출력 결과는 아래와 같다.

A=[2 1 -3; 4 0 3] B=[1 2 3] C=[3; 1] a=rdivide(A,B) b=A./C c=B./C d=1./A

거듭제곱

  • power() , ./: A.^B인 경우 A의 각 성분을 밑, B의 각 성분을 지수로 두고 계산한 결과를 반환한다.

예제 코드와 출력 결과는 아래와 같다.

A=[2 1 -3; 4 0 3] B=[1 2 3] C=[3; 1] a=power(A,B) b=A.^C c=B.^C d=3.^A

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

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

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

supermemi.tistory.com

3-1 행렬의 전치(Transpose)

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

3-2 행렬의 덧셈과 뺄셈

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

3-3 행렬의 곱셈

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

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

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 를 통해 구할 수 있다.

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

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

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

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

3-5 element 연산

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

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

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

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

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

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

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

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

이때 주의할 점은 행렬이 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

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

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을 이용한 알기 쉬운 수치해석. 박태희 지음. 생능출판

Toplist

최신 우편물

태그