matlab 2 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
MATLAB 개요와 응용 2 장 배열 생성 PowerPoint Presentation
Download Presentation
MATLAB 개요와 응용 2 장 배열 생성

Loading in 2 Seconds...

play fullscreen
1 / 48

MATLAB 개요와 응용 2 장 배열 생성 - PowerPoint PPT Presentation


  • 178 Views
  • Uploaded on

MATLAB 개요와 응용 2 장 배열 생성. 강의 내용. 1 차원 배열 ( 벡터 ) 의 생성 2 차원 배열 ( 행렬 ) 의 생성 전치 연산자 배열 주소지정 콜론의 사용 배열 원소의 추가 및 삭제 배열 처리를 위한 내장함수 문자열과 문자열 변수 예제. 배열은 MATLAB 이 데이터를 저장하고 다루기 위해 사용하는 기본적인 형태로서 , 행 (row) 이나 열 (column), 또는 행과 열로 정렬된 수들의 나열이다 . 1 차원 배열 ( 벡터 ) 로 나타낼 수 있는 예 :

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'MATLAB 개요와 응용 2 장 배열 생성' - caraf


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
강의 내용
  • 1차원 배열(벡터)의 생성
  • 2차원 배열(행렬)의 생성
  • 전치 연산자
  • 배열 주소지정
  • 콜론의 사용
  • 배열 원소의 추가 및 삭제
  • 배열 처리를 위한 내장함수
  • 문자열과 문자열 변수
  • 예제

2장 배열과 행렬

1 1 2

배열은 MATLAB이 데이터를 저장하고 다루기 위해 사용하는 기본적인 형태로서, 행(row)이나 열(column), 또는 행과 열로 정렬된 수들의 나열이다.

  • 1차원 배열(벡터)로 나타낼 수 있는 예 :
    • 3차원 공간의 한 점 P의 좌표가 (2, 5, 6)일 때 이 좌표를

배열 [2 5 6]또는 [2, 5, 6]으로 나타낼 수 있다.

  • 어떤 수들의 집합도 벡터로 나타낼 수 있다.

예) 어느 도시의 연도별 인구수에 대한 표에서

연도와 인구수를 벡터로 표시할 수 있다.

>> year = [1984 1986 1988 1990 1992 1994 1996]

>> pop = [127 130 136 145 158 178 211];

z

P (2,5, 6)

y

x

1차원 배열의 생성 (1/2)

2장 배열과 행렬

1 2 2

알려진 수 집합을 행벡터(row vector)로 만들기

    • 꺾은 괄호 [ ] 안에 알려진 원소들을 기입하며, 원소와 원소는 공백이나 콤마(,)로 구분한다.

variable_name = [벡터 원소들의 나열]

>> t = [5, 7, 2, 4 10 29] % 공백이나 콤마로 원소를 구분한다

>> t = [0, 0.4*pi, 0.8*pi, 1.2*pi, 1.5*pi, 2*pi]; % 수식표현도 가능하다

>> t = [0 0.4 0.8 1.2 1.5 2]*pi % 위의 결과와 같다

1차원 배열의 생성 (2/2)
  • 배열의 생성 방법
    • 꺾은 괄호 [ ] 안에 배열의 원소들을 직접 입력함
    • 외부 데이터 파일로부터 행렬을 읽어 들임
    • MATLAB 명령어나 자신이 만든 m 파일을 이용하여 행렬을 생성시킴
  • 벡터의 각 원소는 수, 또는 미리 정의된 변수들, 함수들이 포함된 수학식 등이 될 수 있다.

2장 배열과 행렬

column vector

>> v = [3; 4; 5]

v = 3

4

5

>> v = [3

4

5]

v = 3

4

5

>> v = [3 4 5]'

v = 3

4

5

열벡터(Column vector)의 생성
  • 열벡터(Column vector)를 생성하는 세 가지 방법
    • 꺾은 괄호 속에서 원소 뒤에 세미콜론(;)을 입력하면 줄이 바뀐다.
    • 각 원소 뒤에서 Enter 키를 눌러 바뀐 줄에 새로운 원소를 입력한다.
    • 행벡터 입력을 마친 후 꺾은 괄호 뒤에 따옴표(' )를 입력하여 행벡터를 전치(transpose)시킨다.

2장 배열과 행렬

slide6
일정한 간격으로 커지는 행벡터의 생성
  • 일정한 간격으로 커지는 원소들을 가진 벡터는 콜론(:)을 사용하여 생성한다.

variable_name = [m : q : n] or variable_name = m : q : n

or variable_name = (m : q : n)

    • m은 첫번째 원소이며, m+q, m+2q, … 와 같이 q씩 커지면서 원소가 생성되고, 최종 원소는 n을 초과할 수 없다.
    • m-n이 q의 정수배이면 최종원소는 n이지만, 그렇지 않으면 n보다 작은 값이 된다. n이 생략되면 원소는 1씩 커진다. q가 음수인 경우 m은 반드시 n보다 커야 한다.

>> x = [1:2:8] >> x=(0:0.5:1)*pi

x=1 3 5 7 x=0 1.5708 3.1416

>> x=15:-3:8 >> t= -1:0.5:1

x=15 12 9 t=-1.0000 -0.5000 0 0.5000 1.0000

2장 배열과 행렬

slide7
원소의 개수를 지정하여 행벡터 생성하기
  • 시작원소 xi와 최종원소 xf, 원소의 개수 n이 정해져 있을 때, 일정한 간격을 가진 벡터의 생성은 linspace명령을 이용한다.

variable_name = linspace(xi, xf, n)

    • 콜론에 의한 벡터 생성과 달리 최종원소의 값은 항상 xf 이다.
    • 원소는 (xf – xi)/(n-1)만큼씩 증가한다.
    • 원소 개수 n을 생략하면, 기본적으로 100개의 원소를 생성한다.

>> x = linspace(2, 14, 6) % 2부터 14까지 6개의 원소를 생성

x = 2.0000 4.4000 6.8000 9.2000 11.6000 14.0000

>> delta_x = (14-2)/5

delta_x = 2.4

>> t = 2:delta_x:14

t = 2.0000 4.4000 6.8000 9.2000 11.6000 14.0000

>> y = linspace( 0.1, 10) % 개수를 지정하지 않으면 무조건 100개 생성

y = 0.1000 0.2000 0.3000 … 9.8000 9.9000 10.0000

2장 배열과 행렬

logspace

1

1

1

>> t = logspace(0, 3, 4)

t =

1 10 100 1000

>> x= logspace(1, 5, 3)

x =

10 1000 100000

>> y=logspace(1, 2, 4)

y =

10.0000 21.5443 46.4159 100.0000

log10100

( = 0 )

log10101

( = 1 )

log10102

( = 2 )

log10103

( = 3 )

logspace명령어에 의한 벡터 생성
  • 로그적으로 같은 간격을 가진 행벡터(row vector)를 생성한다.

y = logspace(a, b, n)

    • a와 b 사이가 아니라 10a와 10b사이에 n개의 로그적으로 같은 간격의 행벡터를 생성한다.
    • n이 생략되면 50개의 원소를 생성한다.

2장 배열과 행렬

slide9

2차원 배열은 행렬(matrix)로도 불리며 다수의 행과 열을 갖는다. 세미콜론(;)이나 엔터(Enter)키는 새로운 열(row)을 만드는 역할을 하므로 원소들 끝에 세미콜론을 입력하거나 엔터 키를 누름으로써 원하는 행렬을 만들 수 있다.

Enter 키

>> A=[2 4 10

16 3 7

8 12 35]

A =

2 4 10

16 3 7

8 12 35

세미콜론

2차원 배열(행렬)의 생성

>> A=[2 4 10; 16 3 7; 8 12 35]

A =

2 4 10

16 3 7

8 12 35

의 입력

2장 배열과 행렬

slide10

행렬 원소는 숫자 뿐만 아니라 계산이 가능한 수식, 변수도 가능하다. 또 linspace나 콜론(:)을 이용하여 원소를 자동으로 생성하는 것도 가능하다.

>> A=[2 4 10;linspace(8, -2, 3)]

A =

2 4 10

8 3 -2

>> A=[2 4 10; 8: -5: -2 ]

A =

2 4 10

8 3 -2

>> A=[A; 10 20 30]

A =

2 4 10

8 3 -2

10 20 30

행렬 생성의 다양한 방법 (1/2)

>> x=4; y=2; z=8; % 세 변수의 정의

>> A=[x y z; sin(x/z) x^2 x+y]

A =

4.0000 2.0000 8.0000

0.4794 16.0000 6.0000

>> A=[1:2:11; 0:5:25;

linspace(10, 60, 6);67 2 43 68 4 13]

A=

1 3 5 7 9 11

0 5 10 15 20 25

10 20 30 40 50 60

67 2 43 68 4 13

2장 배열과 행렬

slide11

>> r1=[2, 4, 10]; r2=[16, 3, 7];

>> A=[r1; r2]

A = 2 4 10

16 3 7

>> A=[[2, 4, 10]; [16, 3, 7]] % A=[2, 4, 10; 16, 3, 7]과 같다.

A =

2 4 10

16 3 7

>> v=[r1 r2]

v = 2 4 10 16 3 7

>> cd=6; h=4;

>> Mat=[3, cd*h, cos(pi/3) ; h^2, sqrt(h*h/cd), 14]

Mat=

3.0000 24.0000 0.5000

16.0000 1.6330 14.0000

행렬 생성의 다양한 방법 (2/2)

2장 배열과 행렬

zeros ones eye

>> Z = zeros(2 : 3)

Z =

0 0 0

0 0 0

>> O = ones(2, 2)

O =

1 1

1 1

>> I = eye(3)

I =

1 0 0

0 1 0

0 0 1

>> B = ones(size(Z))

B =

1 1 1

1 1 1

행렬 명령어 – zeros, ones, eye
  • zeros(m, n), ones(m, n), eye(n) 명령들은 특수한 원소들을 갖는 행렬을 만드는 데 사용된다.
    • zeros(m, n) : 원소가 모두 0인 m  n 크기의 행렬
    • ones(m, n) : 원소가 모두 1인 m  n 크기의 행렬
    • eye(n) : 대각선 원소만 1이고 나머지 원소들은 모두 0인 n  n 의 행렬

2장 배열과 행렬

matlab
MATLAB 변수에 대한 유의사항
  • MATLAB의 모든 변수들은 배열이다.스칼라는 원소가 하나인 배열이고, 벡터는 원소들의 행이나 열이 하나인 배열이며, 행렬은 원소들이 행과 열로 되어 있는 배열이다.
  • 변수(스칼라, 벡터, 행렬)는 변수가 할당될 때의 입력에 의해 정의된다. 원소를 할당하기 전에 배열의 크기를 정의할 필요는 없다.
  • 변수가 스칼라나 벡터, 또는 행렬로서 존재하면, 이 변수의 크기나 유형은 마음대로 변경할 수 있다.
    • 스칼라 ⇒ 벡터, 또는 행렬
    • 벡터 ⇒ 스칼라, 다른 크기의 벡터, 또는 행렬
    • 행렬의 크기를 바꾸거나 벡터나 스칼라로 축소시킬 수도 있다.

2장 배열과 행렬

transpose

>> A=[1 2 3; 10 20 30]

A =

1 2 3

10 20 30

>> B=A’

B=

1 10

2 20

3 30

전치(transpose) 연산자

>> v=[10; 20; 30];

>> vt = v’

vt =

10 20 30

>> x=[10 20 30]; xt = x’

xt =

10

20

30

  • 행벡터를 열벡터로, 열벡터를 행벡터로 변환하거나, 행렬의 행과 열을 바꾸는 전치 연산은 벡터나 행렬 뒤에 따옴표(')를 붙이면 된다.

2장 배열과 행렬

array addressing
벡터 원소의 주소 지정(Array addressing)
  • 행렬이나 배열에서 한 개 또는 여러 개의 원소의 위치를 찾거나 접근할 수 있다. 이것은 행렬이나 배열의 일부 원소들의 값을 갱신하거나 계산에서 특정 원소를 이용하려고 할 때, 또는 일부 원소들을 새 변수에 할당하고자 할 때 유용하게 사용될 수 있다.
  • 벡터에서 원소의 주소는 첫번째 원소로부터 해당 원소의 순서이다.벡터 v에서 v(k)는 k번째의 벡터 v의 원소를 나타낸다.

즉, 벡터 v=[12 8 9 6 28]에서v(1)=12, v(3)=9, v(5)=28이다. 벡터의 한 원소를 나타내는 v(k)는 변수처럼 사용할 수 있으므로 수학식에도 사용할 수 있다.

>> v(3)

ans = 9

>> v(3)=80; % 세 번째 원소의 값 변경

>> v(4)=v(3)/8+3 % 수학식을 이용한 네 번째 원소의 변경

v =

12 8 8013 28

2장 배열과 행렬

slide16
벡터 원소의 주소 지정 예

>> VCT=[35 46 78 23 5 14 81 3 55]

VCT =

35 46 78 23 5 14 81 3 55

>> VCT(4) % 네 번째 원소를 출력함

ans =

23

>> VCT(6)=273 % 6 번째 원소에 새로운 값을 할당함

VCT=

35 46 78 23 5 273 81 3 55

>> VCT(2)+VCT(8) % 수학식에 벡터 원소를 사용함

ans =

49

>> VCT(5)^VCT(8)+sqrt(VCT(7))

ans =

134

2장 배열과 행렬

slide17

>> A = [5 10 9 8; 18 1 7 11; 29 14 3 6]; % 3x4 행렬을 생성함

>> A(3,1)=13 % 위치 (3,1)의 원소에 새로운 값을 할당함

A = 5 10 9 8

18 1 7 11

13 14 3 6

>> A(2,1) = A(2,1)-A(2,4) % 수학식에 원소를 사용함

A = 5 10 9 8

7 1 7 11

13 14 3 6

행렬 원소의 주소 지정
  • 행렬원소의 주소는 원소가 있는 행(row)과 열(column)의 위치이다. 행렬 A에서 A(r, c)는 행렬 A의 r번째 열과 c번째 행에 위치한 원소를 나타낸다.
  • 행렬 A가 이면, A(1,1)=5, A(2,2)=1, A(3,3)=3이다.

2장 배열과 행렬

slide18

>> v=[10 20 30 40 50];

>> x=v(2:end)

x = 20 30 40 50

>> y=v(2: length(v))

y = 20 30 40 50

>> v(3:end)=0

v =

10 20 0 0 0

>> v=[10 20 30 40 50];

>> v(3)

ans =30

>> w=v(2:4)

w =

20 30 40

>> length(v)

ans = 5

콜론(:)을 이용한 벡터의 주소 지정(1/1)
  • 콜론을 이용하여 벡터나 행렬의 일정 범위의 원소들을 지정할 수 있다.
  • 벡터 v의 경우

v(:) : 벡터 v의 모든 원소를 열벡터로 나타낸다.

v(m:n) : 벡터 v의 m 번째 원소에서 n 번째 원소까지의 원소들을 나타낸다.

end는 벡터나 행렬의 마지막 원소의 주소를 나타내는 데 사용되며, 벡터의 경우 end는 명령어 length(벡터)의 실행 결과와 같은 값을 갖는다.

2장 배열과 행렬

slide19

>> A =[2 4 13 9;16 3 7 11;8 21 6 5];

>> C = A(2:3, 1:3)

C = 16 3 7

8 21 6

>> D=A(: , 2) >> E=A(1:2, :)

D = 4 E =

3 2 4 13 9

21 16 3 7 11

콜론을 이용한 행렬의 주소 지정 (1/2)
  • 콜론을 이용하여 행렬 A의 일부 행이나 열을 지정할 수 있다.

A( :, n)행렬 A의 n번째 열(column)의 모든 원소를 가리킴

A(n, : )행렬 A의 n번째 행(row)의 모든 원소를 가리킴

A(:, m:n)행렬 A의 m ~ n번째 열(column)의 모든 원소를 가리킴

A(m:n, :)행렬 A의 m ~ n번째 행(row)의 모든 원소를 가리킴

A(m:n, p:q)m ~ n번째 행과 p~q번째 열에 해당하는 원소를 가리킴

2장 배열과 행렬

slide20

행렬의 벡터 변환

>> B=[ 9:-2:1; zeros(1, 3) 1 2; ones(2, 5)*2 ]

B =

975 3 1

0 0 0 1 2

2 2 2 2 2

2 2 2 2 2

>> B(:, end) = 1

B =

975 3 1

0 0 0 1 1

2 2 2 2 1

2 2 2 2 1

>> C= B( [1 3], [1, 3:4] )

C =

9 5 3

2 2 2

>> D=[11 12 13;21 22 23]

D =

11 12 13

21 22 23

>> v =D(:)

v =

11

21

12

22

13

23

>> v=v’

v =

11 21 12 22 13 23

콜른을 이용한 행렬의 주소 지정 (2/2)

2장 배열과 행렬

slide21

>> A=[2 4 10 13; 16 3 7 1;8 4 9 21]

A =

2 4 10 13

16 3 7 1

8 4 9 21

>> indx = [1 2];

>> B = A(indx, indx)

B =

2 4

16 3

>> v=[ A(3), A(4), A(7) ]

v =

8 4 10

>> size(A), length(A)

ans = 3 4

ans = 4

A(7)=A(1,3)

A(10)=A(1,4)

A(4)=A(1,2)

length(A)는 max(size(A))와 같다.

행렬의 주소 지정

2장 배열과 행렬

slide22

>> DF=1:4% 벡터 DF를 4개의 원소로 정의함

DF =

1 2 3 4

>> DF(5:10)=10:5:35% 5 번째부터 시작하여 6개의 원소를 추가함

DF =

1 2 3 4 10 15 20 25 30 35

>> AD=[5 7 2]% 3개의 원소를 가진 벡터 AD를 정의함

AD =

5 7 2

>> AD(8)=4% 4 ~ 7 번째 원소가 0으로 자동 채워짐

AD =

5 7 2 0 0 0 0 4

>> v(4)=5 % 4번째 원소까지 0이 자동으로 채워짐

v = 0 0 0 0 5

벡터의 확장 및 축소 (1/2)
  • MATLAB에서는 변수를 벡터나 행렬로 미리 선언해 줄 필요가 없다. 즉, 스칼라 변수일지라도 벡터나 행렬로 확장할 수 있으며, 이미 만들어진 벡터나 행렬의 크기도 바꿀 수 있다.

2장 배열과 행렬

slide23

>> RE=[3 8 1 24];

>> GT=4:3:16;

>> KNH = [RE GT] % RE와 GT를 붙여서 새로운 벡터 KNH를 정의함.

KNH =

3 8 1 24 4 7 10 13 16

>> v=10 % v를 스칼라 변수로 지정

v = 10

>> v(end+1) = 20 % 스칼라 변수를 두 원소 벡터 변수로 확장

v =

10 20

>> v(end+1 : length(v)+3)=[3 4 5] % 5원소 벡터로 확장

v =

10 20 34 5

>> n = length(v) % 벡터의 길이(원소의 개수)를 확인한다

n= 5

>> v(n)=50 % 벡터의 마지막 원소를 50으로 대체한다.

ans = 10 20 3 4 50

벡터의 확장 및 축소 (2/2)

2장 배열과 행렬

slide24

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

E = 1 2 3 4

5 6 7 8

>> E(3, : )=[10:4:22]

E = 1 2 3 4

5 6 7 8

10 14 18 22

>> K=eye(3);

K = 1 0 0

0 1 0

0 0 1

>> G=[E K] % 행렬K를 행렬 E에 추가함.

G =

1 2 3 4 1 0 0

5 6 7 8 0 1 0

10 14 18 22 0 0 1

벡터 [10 14 18 22]를 E의 셋째 행으로 추가함

>> E(3, 4)=1

E = 1 2 3 4

5 6 7 8

10 14 18 1

>> H(3,4)=8

H =

     0    0    0    0

     0    0    0    0

     0    0    0   8

행렬의 확장 (1/2)
  • 기존 행렬에 새로운 행이나 열을 추가할 수 있는데, 이때 추가되는 행(열)의 길이는 기존 행렬과 맞아야 한다.

2장 배열과 행렬

slide25

(계속)

>> A(:, 3:end)=[ ] % 원소 삭제

A =

11 12

21 22

31 32

>> A(2, 4) = 50

A =

11 12 0 0

21 22 0 50

31 32 0 0

>> clear; % 모든 변수 삭제

>> B(2,3) = 5

B =

0 0 0

0 0 5

>> A=[11 12 13 14;21 22 23 24]

A =

11 12 13 14

21 22 23 24

>> A(3, :) = 31:34

A =

11 12 13 14

21 22 23 24

31 32 33 34

>> B=ones(3, 1);

>> A=[A B]

A =

11 12 13 14 1

21 22 23 24 1

31 32 33 34 1

행렬 크기를 벗어난 주소에 원소값을 지정하면 새 원소를 수용하기 위해 자동으로 행렬이 커지고 나머지 원소는 0으로 채워진다.

행렬의 확장 (2/2)

2장 배열과 행렬

slide26

>> v=[ ] % v를 공벡터로 지정

v = [ ]

>> length(v) % 벡터 v의 원소 개수는?

ans = 0

>> v=[1 3 100 5 7 200 300 400];

>> v(3)=[ ]

v =

1 3 5 7 200 300 400

>> v( 5 : end)=[ ]

v =

1 3 5 7

>> A=[5  11  4  9; 4  0  26  10;

56  1  5  89]

A =

5  11  4  9

4  0  26  10

56  1  5  89

>> A(:, 2:3) = []

A =

5 9

4 10

56 89

벡터의 축소
  • 공벡터(empty vector, null vector)는 원소가 없으며 [ ]로 표시한다. 벡터의 일부 원소에 공벡터를 할당하면 해당 원소가 삭제되는 효과를 갖는다. 이런 방법을 통해 벡터의 크기를 축소시킬 수 있다.

2장 배열과 행렬

slide27

이미 A가 22 행렬로 정의되어 있으므로 첫 번째 행의 원소를 13의row2로 대체하려고 하므로 크기가 다르다는 에러 발생.

행렬 정의시 주의할 점
  • 스칼라 변수의 값을 정의하는 경우에는 이전에 변수가 미리 정의되어 있었더라도 새로운 값으로 대체가 되므로 문제가 없지만, 배열 변수의 경우에는 다음의 예와 같이 예기치 못한 문제가 생길 수 있으므로 이미 생성되어 있는 배열변수인지 확인하거나 clear 명령을 이용해서 이전의 모든 변수를 삭제하는 것이 좋다.

>> A=[20, 30; 40, 50];

……

>> row1=11:14;

>> A(1, :) =row1

Subscripted assignment dimension mismatch.

>> clear A % 작업공간에 있는 A를 삭제한다.

>> A(1, :) =row1

A = 11 12 13 14

2장 배열과 행렬

array editor 1 2

변수이름을 더블 클릭하면 Array Editor창이 열린다.

변수 이름을 바꿀 수도 있다.

배열 편집기(Array Editor) (1/2)
  • MATLAB의 Workspace Browser를 이용하여 작업공간내의 변수들을 쉽게 다룰 수 있다. Desktop 환경에서 Workspace Browser가 보이지 않으면, 명령창에서 >> workspace라고 입력하거나 Desktop의 Workspace 메뉴를 체크하면 된다. Workspace Browser에서 특정 변수의 이름을 바꾸거나 삭제할 수 있다.

2장 배열과 행렬

array editor 2 2
배열 편집기(Array Editor) (2/2)
  • Workspace Browser에서 변수를 더블 클릭하거나 메인 메뉴의 Array Editor를 체크하면 Array Editor 창이 열리며, 이 창에서 엑셀처럼 원소를 추가 입력함으로써 스칼라 변수를 배열로 변환시키거나, 배열 변수의 크기를 바꿀 수 있다.

2장 배열과 행렬

slide30

column

page

row

다차원 배열
  • MATLAB 7은 다차원 배열을 지원한다. 예를 들어, mnq의 3차원의 배열을 다룰 수 있다. 3차원 배열은 각 페이지에 m n의 2차원 배열이 있는 것으로 생각할 수 있다.첫 페이지의 배열은 A(:, :, 1)로, 둘째 페이지의 배열은 A(:, :, 2), … 이런 식으로 모든 페이지의 배열을 볼 수 있다. 다차원 배열의 생성은 각 페이지별로 2차원 행렬을 입력하면 된다.

>> A=[ 5 3 7; 2 9 4; 3 0 6];

>> A(:, :, 2)=[ 4 0 1; 9 2 8; 5 6 4]

ansA(:,:,1) =

5 3 7

2 9 4

3 0 6

A(:,:,2) =

4 0 1

9 2 8

5 6 4

2장 배열과 행렬

slide31
다차원 배열의 주소 지정

>> P1=[ 5, 1, 7, -3; -1, 2, 6, 0; 8, 12, -4, 9];

>> P2=[ 4, 17, -1, 3; -9, 2, 8, 12; -6, 5, 7, 9];

>> A(:, :, 1)=P1; A(:, :, 2)=P2;

>> A = cat(3, P1, P2);

A(:,:,1) =

5 1 7 -3

-1 2 6 0

8 12 -4 9

A(:,:,2) =

4 17 -1 3

-9 2 8 12

-6 5 7 9

>> A(2, 2, 1)

ans = 2

>> A(1, 2, 2)+A(2,4, 2)

ans = 29

2장 배열과 행렬

slide32
벡터의 길이와 크기, 절대값
  • length(v)는 벡터 v의 원소의 개수를 구해주며, 벡터의 크기(길이)는 로 sqrt(v*v')에 의해 구한다. abs(v)는 벡터 v의 각 원소의 절대값을 구해준다.
    • 예) v=[x1, x2, x3]일 때, length(v)=3, abs(v) = [ |x1|, |x2|, |x3| ], v의 크기는 sqrt(v*v’)로 구한다.
  • length(v)v가 벡터인 경우 벡터의 길이(원소의 개수)를 돌려준다.

v가 mn의 행렬인 경우 m과 n 중에서 큰 값을 돌려준다.

>> v=[2, -5, 4, -3]; n=length(v)

ans = 4

>> A=[ 11 12 13 14; 21 22 23 24]; length(A)

ans = 4

>> mag = sqrt(v*v’), abs_v= abs(v)

ans = 7.3485

abs_v = 2 5 4 3

2장 배열과 행렬

slide33

cat(2, A, B)

cat(3, A, B)

cat(1, A, B)

행렬에 사용되는 내장함수 (1/8)
  • cat(dim, A, B, C, …) : 지정한 차원(dim)에 따라 배열을 연결한다.

dim=1이면, 배열들을 밑으로 붙이고, dim=2이면 옆으로 붙인다. dim=3이면 3차원 방향으로 붙인다.

cat(1, A, B)는 [A; B]와 같고, cat(2, A, B)는 [A, B]와 같다.

  • size(A)행렬 A의 크기가 mn이면, 행벡터로 [m, n]을 돌려준다.

사용법 : x=size(A), [m, n]=size(A), size(A, dimension)

>> A=[11:14; 21:24; 31:34]; x=size(A)

x = 3 4

>> [m, n]=size(A)

m = 3

n = 4

2장 배열과 행렬

slide34
행렬에 사용되는 내장함수 (2/8)
  • diag(v) v가 벡터이면, v의 원소들을 대각선 원소로 갖는 정방행렬 (square matrix)을 생성한다.

diag(A)A가 행렬이면, v의 대각선 원소로 구성된 벡터를 생성한다.

>> v=[2, 5, 9]; A=diag(v)% 벡터가 대각선 원소인 행렬 생성

A =

2 0 0

0 5 0

0 0 9

>> diag(A) % 행렬 A의 대각선 원소를 뽑아 벡터로 생성

ans = 2

5

9

  • sum(v)벡터 v의 모든 원소들의 합을 돌려준다.

>> v=[5 3 9 2]; sum(v)

ans = 19

2장 배열과 행렬

slide35
행렬에 사용되는 내장함수 (3/8)
  • sum(A) A가 행렬이면, A의 각 열(column)들을 벡터로 취급하여 합을 구하고 결과를 행벡터로 돌려준다.

>> A=[1:2:5; 11:2:15; 21:2:25]; S=sum(A)

A =

1 3 5

11 13 15

21 23 25

S =

33 39 45

>> sum(A, 1) % 각 열별로 원소를 더한다. sum(A)와 동일

ans =

33 39 45

>> sum(A, 2) % 각 행(row)별로 원소를 더한다.

ans = 9

39

69

2장 배열과 행렬

slide36

행렬 A로부터 열을 따라 3개씩 취하여 새로운 크기의 행렬 C를 만들 때 열의 개수를 미리 계산할 필요없이 [ ] 표시를 입력하면 자동으로 계산된다.

행렬에 사용되는 내장함수 (4/8)
  • reshape(A, m, n)

행렬 A로부터 열(column)을 따라 원소를 취하여 mn의 행렬을 새로 만든다. A의 원소개수 가 mn 과 같지 않으면 에러가 발생한다.

>> A=[1:3:10; 2:3:11; 3:3:12]

A =

1 4 7 10

2 5 8 11

3 6 9 12

>> B = reshape(A, 2, 6)

ans = 1 3 5 7 9 11

2 4 6 8 10 12 >> C = reshape(A, 3, [ ] )

C = 1 4 7 10

2 5 8 11

3 6 9 12

2장 배열과 행렬

slide37
행렬에 사용되는 내장함수 (5/8)
  • max(v) v가 벡터이면, v의 원소중에서 가장 큰 값을 돌려준다.
  • min(v)v가 벡터이면, v의 원소중에서 가장 작은 값을 돌려준다.

>> v=randperm(5)

v =

2 1 3 4 5

>> max(v)

ans = 5

  • max(A) 행렬 A의 각 열(column)에서의 최대값을 행벡터로 돌려줌.

>> A = [6 2; -4 8; 3 10]

A =

6 2

-4 8

3 10

>> max(A)

ans =

6 10

2장 배열과 행렬

slide38
행렬에 사용되는 내장함수 (6/8)
  • sort(v) 벡터 v의 원소를 크기가 커지는 순으로 정렬하여 돌려준다.

>> v=randperm(5)

v =

5 4 1 2 3

>> sort(v)

ans =

1 2 3 4 5

  • sort(A) 행렬 A의 각 열(column)별로 크기가 커지는 순으로 정렬함.
  • sort(A, ‘descend’)A의 각 열별로 크기가 작아지는 순으로 정렬함.

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

>> sort(A) >> sort(A, ‘descend’)

ans = ans =

3 4 1 4 8 5 9 7

5 7 3 5 5 7 3 5

8 9 6 7 3 4 1 4

2장 배열과 행렬

slide39
행렬에 사용되는 내장함수 (7/8)
  • find(v) 벡터 v의 원소 중에서 0이 아닌 원소들의 주소를 돌려준다.

>> x = [9 0 4 0 -3 0 2];

>> indx=find(x)

indx =

1 3 5 7

  • find(논리식)논리식을 만족시키는 원소들의 주소를 돌려준다.

>> find(x > 2)

ans =

1 3

>> x = [11 0 33 0 55]'; find(x) % find 결과도 열벡터

ans =

1

3

5

2장 배열과 행렬

2 1 4x5

첫 번째 방법

>> A(1:2,:)=zeros(2,5)

A =

0 0 0 0 0

0 0 0 0 0

>> A(3:4,:)=ones(2,5)

A =

0 0 0 0 0

0 0 0 0 0

1 1 1 1 1

1 1 1 1 1

  • 두 번째 방법

>> A=[zeros(2,5); ones(2,5)]

A =

0 0 0 0 0

0 0 0 0 0

1 1 1 1 1

1 1 1 1 1

예제 2.1 4x5의 행렬 생성
  • ones 명령어와 zeros 명령어를 이용하여 첫 두 행은 0이고 다음 두 행은 1인 4×5 행렬을 생성하라.

2장 배열과 행렬

2 2 6x6

>> AR=zeros(6,6)

AR =

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

>> AR(3:4,:)=ones(2,6)

AR =

0 0 0 0 0 0

0 0 0 0 0 0

1 1 1 1 1 1

1 1 1 1 1 1

0 0 0 0 0 0

0 0 0 0 0 0

>> AR(:,3:4)=ones(6,2)

AR =

0 0 1 1 0 0

0 0 1 1 0 0

1 1 1 1 1 1

1 1 1 1 1 1

0 0 1 1 0 0

0 0 1 1 0 0

예제 2.2 6x6의 행렬 생성
  • 6×6 행렬에서 가운데 두 행과 가운데 두 열의 원소가 1이고 나머지 원소는 모두 0인 행렬을 생성하라.

2장 배열과 행렬

2 3 1 2

>> A=[ 2:3:17; 3:3:18; 4:3:19; 5:3:20; 6:3:21 ]

A =

2 5 8 11 14 17

3 6 9 12 15 18

4 7 10 13 16 19

5 8 11 14 17 20

6 9 12 15 18 21

예제 2.3 행렬의 조작 (1/2)
  • 명령어 창에서 다음 세 배열A, B, v를 만들고, 명령어 한 개로A의 1번째 행과 3번째 행의 마지막 4개의 열을 B의 첫 두 행의 첫 네 열로 대체하라. 또 A의 4번째 행의 마지막 4개의 열을 v의 5~8번째 원소로 대체하라.

2장 배열과 행렬

2 3 2 2

>> B=[5:5:30; 30:5:55; 55:5:80 ]

B=

5 10 15 20 25 30

30 35 40 45 50 55

55 60 65 70 75 80

>> v=[99:-1:91]

v =

99 98 97 96 95 94 93 92 91

>> A([1 3 4 5], 3:6)=[ B([1 2], 1:4; v(5:8); B(3,2:5)]

A =

2 5 5 10 15 20

3 6 9 12 15 18

4 7 30 35 40 45

5 8 95 94 93 92

6 9 60 65 70 75

>>

예제 2.3 행렬의 조작 (2/2)

2장 배열과 행렬

string
문자열(String)
  • 문자열은 따옴표로 묶은 문자들의 배열로서, 글자, 숫자, 기호와 공백 등을 포함할 수 있다. 예) 'class', 'te st', 'math%1', '{mech:05!}'
  • 작은따옴표를 문자열에 포함시키려면, 작은따옴표를 두 번 연달아 표시한다. 예) 'Mr. Hwang''s office'
  • 문자열을 입력을 위해 작은따옴표를 처음 표시하면 글자 색이 적갈색(maroon)으로 변하며, 마지막으로 작은따옴표를 입력하면 글자 색이 모두 자주색으로 변한다.
  • 문자열을 변수에 저장하면 각 글자에 해당하는 2바이트 코드가 숫자 배열처럼 저장되므로, 한 줄로 된 문자열은 글자(공백도 포함) 개수와 같은 원소 개수를 가진 행벡터처럼 취급된다.
  • MATLAB에서 문자열의 용도 예 :
    • 출력명령어(4장)에서 텍스트 메시지를 표시할 때 , plot 명령어에서 출력할 그래프의 형식을 지정할 때(5장), 함수의 입력인자(6장)에.
    • 그래프의 형식을 지정(축의 라벨, 제목, 설명문)할 때, 문자열 내의 문자들이 특정 폰트와 크기, 위치, 색을 갖도록 형식 지정을 할 수 있다.

2장 배열과 행렬

slide45
문자열 변수 (1/3)
  • 문자열은 문자열의 글자 개수와 같은 개수의 원소를 갖는 행벡터이며, 벡터의 주소 지정을 이용하여 각 원소에 접근할 수 있다.

>> str='MATLAB is a high-performance language.‘

str = MATLAB is a high-performance language.

>> size(str) % str은 공백을 포함하여 모두 38개의 글자를 가진 문자열임

ans = 1 38

>> name = str(1:6) % 수치 벡터처럼 다룰 수 있다.

name = MATLAB

>> str(1:6)= 'C++'

??? In an assignment A(:) = B, the number of elements in A and B

must be the same.

>> str(4:6)=[ ]; str(1:3)='C++'

str =

C++ is a high-performance language.

2장 배열과 행렬

slide46
문자열 변수 (2/3)

>> str

str =

C++ is a high-performance language.

>> str(1:3)=‘MAT’

str =

MAT is a high-performance language.

>> str=[str(1:3), 'LAB ', str(4:end)]

str =

MATLAB is a high-performance language.

>> whos

Name Size Bytes Class Attributes

str 1x38 76 char

>> str(end:-1:30)

ans= .egaugnal % language.의 역순

2장 배열과 행렬

slide47
문자열 변수 (3/3)
  • 문자열도 행렬처럼 여러 행을 가질 수 있다. 단, 각 행의 길이는 모두 같아야 하므로 글자 수가 다른 경우 공백을 넣어 같도록 해야 한다.

>> S= [‘My’; ‘name’; ‘is Jina.’]

??? Error using ==> vertcat

All rows in the bracketed expression must have the same number

of columns.

>> length(S(3, :))

ans = 8

>> S = ['My '; 'name '; 'is Jina.'] % 공백으로 행의 길이 맞춤

S = My

name

is Jina.

>> char(‘My’, ‘name’, ‘is Jina.’) % char가 자동으로 행의 길이 맞춤

S = My

name

is Jina.

2장 배열과 행렬

slide48

2장 끝

2장 강의록 끝

2장 배열과 행렬