MATLAB 행렬 빼기 - MATLAB haenglyeol ppaegi

Matlab에 행렬을 입력하는 방법은 간단합니다. [] 괄호를 이용하면 행렬을 표시한다는 뜻이고, 콤마(,)는 같은 행의 원소를 나열할 때, 세미콜론(;)은 다음 행으로 넘어갈 때 사용합니다.

>> A=[1, 2, 3, 4; 5, 6, 7, 8]
A =
  1   2   3   4
  5   6   7   8

>> B=[9; 10; 11; 12]
B =
   9
  10
  11
  12

행렬 안에 꼭 숫자만 들어갈 필요는 없습니다. 변수나 함수가 들어가도 됩니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416

벡터 데이터 생성[편집]

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.

a:step:b 콜론 연산자(:)[편집]

"a부터 step 간격으로 b까지"

1  시작 범위(a)와 간격(step), 마지막 범위(b)를 입력해서 행렬을 생성할 수도 있습니다.

>> C= 0:2:10
C =
   0    2    4    6    8   10

2  가운데 입력하는 간격을 생략할 수도 있습니다. 이때 자동으로 1 간격으로 생성됩니다.

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10

3  대괄호과 섞어서도 사용할 수 있습니다.

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
>> N = [ 1:2:9 ; 2:2:10 ]
N =
   1    3    5    7    9
   2    4    6    8   10

linspace() 함수[편집]

1  linspace(a,b,n)을 이용해 a부터 b까지 범위를 n개 값으로 자동으로 균일한 간격으로 나누어 표시할 수도 있습니다.

>> linspace(0,10,5)
ans =
   0.00000    2.50000    5.00000    7.50000   10.00000

2  linespace(a, b)만 입력하면 100개 값으로 나누어 표시해 줍니다.

>> linspace(1,10)
ans =
Columns 1 through 12:
   1.0000    1.0909    1.1818    1.2727    1.3636    1.4545    1.5455    1.6364    1.7273    1.8182    1.9091    2.0000
... (중략)
Columns 97 through 100:
   9.7273    9.8182    9.9091   10.0000

영행렬, 단위행렬, 1행렬[편집]

영행렬[편집]

1  영행렬인 정방행렬(정사각행렬)은 zeros(n)에 변수를 한 개만 입력하면 됩니다.

2  i행, j열의 영행렬은 zeros(m, n)를 이용해 생성합니다.

>> zeros(3,4)
ans =
0 0 0 0 0 0 0 0 0 0 0 0

3  모든 원소가 a인 m×n 사이즈 행렬은 zeros(m, n)에 덧셈을 이용해 생성합니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
0

단위 행렬[편집]

1  정방의 단위 행렬은 eye(n)을 이용해 생성합니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
1

2  m×n 크기의 단위행렬은 eye(m, n)을 이용해 생성합니다.

행렬의 축에 있는 원소가 1이고 다른 원소는 0인 행렬이 생성됩니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
2

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
3

1행렬[편집]

1  1로만 이루어진 정방행렬은 ones(x)로 생성합니다.

2  1로만 이루어진 i행, j열의 행렬은 ones(i, j)로 생성합니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
4

3  모든 원소가 a인 정방행렬을 만들 때, ones(m, n) * a 형태를 사용하기도 합니다.

단, 성능은 zeros(m, n) + a 형태가 일반적으로 더 유리하다고 판단합니다. 컴퓨터는 곱셈보다는 덧셈을 훨씬 빨리 수행할 수 있기 때문입니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
5

1  전치(transpose)를 사용하면 i행 j열의 행렬을 j행 i열의 행렬로 뒤집을 수 있습니다. 전치하고자 하는 행렬에 작은 따옴표(')를 붙여주면 됩니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
6

2  함수를 사용해서 만드는 행렬도 간단히 전치할 수 있습니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
7

3  연산 결과를 전치할 때는 괄호를 사용할 수 있습니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
8

행렬의 원소 선택[편집]

인덱싱(indexing)[편집]

원소 번호를 '첨자 인덱스(-index)'라고 하고, 원소를 하나 선택하는 것을 인덱싱이라고 합니다.

1  위에서 정의한 행렬 D의 i행 j열 원소는 D(i,j)로 인덱싱 하여 불러낼 수 있습니다.

>> a=pi
a =  3.1416
>> D=[linspace(1,3,3); 2, 4, 5; 5:1:7; exp(1), pi, a]  % linspace는 곧 배웁니다.
D =
1.0000 2.0000 3.0000 2.0000 4.0000 5.0000 5.0000 6.0000 7.0000 2.7183 3.1416 3.1416
9

또한 해당 원소의 자리에 새 값을 덮어쓰기 할 수도 있습니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
0

2  linspace로 만든 행렬에 바로 적용할 수도 있습니다. 이때 행 벡터나 열 벡터의 원소를 출력할 때, 괄호 안의 숫자는 한개만 넣습니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
1

앞서 정의한 C 행렬의 네번째 원소를 불러와 봅니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
2

슬라이싱(slicing)[편집]

콜론(:)의 사용[편집]

1  행 벡터나 열 벡터의 경우 m번째에서 n번째 원소를 선택할 수도 있습니다. 앞서 정의한 B에서 두번째부터 네번째까지의 원소로 행렬을 만들면,

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
3

2  콜론(:)을 이용해 특정한 열이나 행 전체를 선택할 수도 있습니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
4

3  eye(5) 행렬의 2행부터 4행, 1열부터 4열까지의 원소로 행렬을 만들어 봅니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
5

불연속적인 행과 열 선택[편집]

연속되지 않은 행과 열을 선택할 수도 있습니다. 이때는 행과 열을 선택할 때 [] 괄호를 사용해주어야 합니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
6

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
7

기존 행렬에 원소 추가하기[편집]

벡터에 원소 추가하기[편집]

행벡터 혹은 열벡터의 경우 원소를 추가해 보겠습니다.

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
8

Matlab에서는...
스칼라: 1×1 사이즈 행렬, 즉 단일값으로 되어있는 데이터를 '스칼라'라고 하고
벡터: 1×n 사이즈 행렬(n≥2), 즉 가로 한 줄로 되어있는 데이터를 '행 벡터'라고 하고
벡터: m×1 사이즈 행렬(m≥2), 즉 세로 한 줄로 되어있는 데이터를 '열 벡터'라고 하고
행렬: m×n 사이즈 행렬(m≥2, n≥2)을 좁은 의미에서 '행렬(Matrix)'이라고 구분하여 부릅니다.
물론 넓은 의미에서 매트랩의 모든 데이터는 행렬로 볼 수 있습니다.
9

>> C= 0:2:10
C =
   0    2    4    6    8   10
0

행렬에 원소 추가하기[편집]

>> C= 0:2:10
C =
   0    2    4    6    8   10
1

이미 원소가 있는 주소에 다른 수를 지정하면, 원소가 교체됩니다.

>> C= 0:2:10
C =
   0    2    4    6    8   10
2

이어붙이기[편집]

벡터끼리 이어붙이기[편집]

벡터끼리도 이어붙일 수 있습니다.

>> C= 0:2:10
C =
   0    2    4    6    8   10
3

2차원 행렬 이어붙이기[편집]

2차원 행렬에도 원소 추가를 할 수 있습니다. 이미 있는 행렬에 이미 있는 행렬을 붙여서 새로운 행렬을 만드는 것도 가능합니다.

>> C= 0:2:10
C =
   0    2    4    6    8   10
4

예제 1) ones, zeros를 이용해 첫 두 행은 0, 다음 두 행은 1인 4X4 행렬을 만들어보자.

>> C= 0:2:10
C =
   0    2    4    6    8   10
5

예제 2) 모두 0으로 채워진 6X6 행렬에서, 3, 4열 그리고 3, 4행에 1을 추가해서 중앙에 십자 표시를 만들어보자.

>> C= 0:2:10
C =
   0    2    4    6    8   10
6

예제 3) 예제 2에서 만든 C 행렬의 1행, 2행 그리고 3 ~ 6열에 해당하는 부분에, D=[510152025302025303540450510152025]{\displaystyle D={\begin{bmatrix}5&10&15&20&25&30\\20&25&30&35&40&45\\0&5&10&15&20&25\end{bmatrix}}}

MATLAB 행렬 빼기 - MATLAB haenglyeol ppaegi
행렬의 2, 3행 그리고 3 ~ 6열에 해당하는 원소를 대입해보자.

>> C= 0:2:10
C =
   0    2    4    6    8   10
7

원소 제거하기[편집]

제거할 원소를 지정하고 [] 괄호로 덮어쓰기 해주면 원소를 제거할 수 있습니다. 0으로 치환하는 것이 아니라 해당 부분을 제거하고 나머지 부분을 이어붙여서 더 작은 행렬을 만들어줍니다.

>> C= 0:2:10
C =
   0    2    4    6    8   10
8

>> C= 0:2:10
C =
   0    2    4    6    8   10
9

행렬의 조작을 위한 함수[편집]

함수설명예시length(A)원소 개수를 알려준다. 스크립트 작성 시, 특히 반복문을 만들 때, length함수를 쓰면 임의 길이의 벡터나 행렬에 대해 반복문을 쉽게 작동시킬 수 있다.

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
0

size(A)해당 행렬의 행과 열 수를 알려준다

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
1

reshape(A, m, n)크기가 iXj인 행렬을 mXn 행렬로 만들어준다
이때 ij=mn이어야 한다
생성되는 행렬은 1열의 위에서부터 아래로, 2열의 위에서부터 아래로 (...) 순서로 원소가 입력된다

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
2

diag(v)v 벡터의 원소를 대각 성분으로 갖는 대각행렬을 만든다

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
3

diag([넣을 원소들], 중심으로부터의 변위)를 사용하면 오른쪽과 같이 중심에서 떨어진 곳에 대각 성분을 넣은 행렬을 만들 수 있다.

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
4

diag(A)A행렬의 대각 성분을 추출하여 열 벡터를 만든다
위의 명령어와 동일하지만 입력값에 행렬이 입력되는 것이 차이점이다

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
5

문자열[편집]

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
6

문자형 배열[편집]

문자형 배열은 작은 따옴표(') 사이에 입력합니다. 문자형 배열도 일종의 행렬로 저장되며 문자 하나하나를 원소로 갖습니다. 알파벳, 한글, 특수문자, 이모지, 띄어쓰기, 숫자 역시 작은 따옴표 안에 입력할 경우 문자로 취급합니다. 문자형 배열에도 행렬에서 사용하는 연산자와 함수 등을 사용할 수 있습니다. 예를 들어 어느 문자형 배열을 변수에 저장했을 때, 문자형 배열의 일부분을 수정하고 싶다면 슬라이싱과 인덱싱을 통해 편집할 수도 있습니다.

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
7

(문자형 배열의 부분 수정이 통째로 입력보다 불편하다는 설명은 잠시 삭제하였습니다.) Letsdev (토론) 2020년 9월 30일 (수) 00:27 (KST)

문자형은 숫자처럼 다룰 수도 있습니다. 참고로 소문자 'a'는 값으로 97과 같습니다.

자세한 내용은 아스키코드표, 유니코드표 등을 참고하십시오. Matlab은 유니코드 인코딩 방식의 하나인 UTF-8을 기본으로 합니다.

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
8

문자열(Matlab 2016 b 및 이후)[편집]

>> C1= 0:10
C1 =
   0    1    2    3    4    5    6    7    8    9   10
9

문자열은 큰따옴표(") 사이에 입력한다는 점이 문자형 배열 작성과 차이점입니다.

큰따옴표 사이에 입력함으로써 몇 가지 동작에 차이가 발생합니다. 문자열 자체에서 인덱싱을 하는 것은 불가능해지지만, 서로 길이가 다른 여러 문자열로 배열을 만드는 것이 가능해졌습니다.

문자형 배열만 지원하는 버전에서는 문자열의 길이가 다를 경우 부족한 칸을 공백 문자로 채우거나 cell 타입이라는 것으로 객체화하여야 했습니다. 이제 문자열을 본격적으로 지원하면서 일반 배열을 생성하는 것과 같은 모양으로 다룰 수 있게 되었습니다.

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
0

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
1

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
2

행렬의 연산[편집]

덧셈과 뺄셈은 특별한 거 없이 그냥 행렬의 크기가 동일하면 서로 더하고 뺄 수 있습니다. 하나의 행렬에서 스칼라 양을 빼면 행렬의 모든 원소에서 연산이 실행됩니다.

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
3

행렬의 곱셈은 수학에서의 행렬의 곱셈과 동일합니다. aXb 행렬과 cXd 행렬을 서로 곱해주기 위해서는 b=c이어야 하며, 결과값은 aXd행렬이 됩니다.

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
4

덧셈, 뺄셈과 마찬가지로 하나의 행렬에 스칼라 양을 곱해주면 해당 형렬의 모든 원소에 곱셈이 실행됩니다.

>> V = [ 1, 3, 1:2:9 ]
V =
   1    3    1    3    5    7    9
5

행렬을 이용한 연립방정식의 풀이[편집]

행렬을 이용해 연립 방정식을 풀기 위해선 우선 연립 방정식을 행렬의 곱으로 바꾼 다음, 왼쪽 나눗셈(\)을 이용하거나 역행렬을 구하는 명령(inv(A)), 행렬의 형태를 바꾸어 구하는 방법을 이용하면 됩니다.