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

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

play fullscreen
1 / 53
Download Presentation
139 Views
Download Presentation

MATLAB 개요와 응용 2 장 배열 생성

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. MATLAB개요와 응용2장 배열 생성

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

  3. 2장 배열과 행렬 1차원 배열의 생성(1/2) • 배열은 MATLAB이 데이터를 저장하고 다루기 위해 사용하는 기본적인 형태로서, 행(row)이나 열(column), 또는 행과 열로 정렬된 수들의 나열이다. • 1차원 배열(벡터)로 나타낼 수 있는 예 : • 3차원 공간의 한 점 P의 좌표가 (2, 5, 6)일 때 이 좌표를 배열 [2 5 6]또는 [2, 5, 6]으로 나타낼 수 있다. z P (2,5, 6) y x • 어떤 수들의 집합도 벡터로 나타낼 수 있다. 예) 어느 도시의 연도별 인구수에 대한 표에서 연도와 인구수를 벡터로 표시할 수 있다. >> year = [1984 1986 1988 1990 1992 1994 1996] >> pop = [127 130 136 145 158 178 211];

  4. 2장 배열과 행렬 1차원 배열의 생성(2/2) 배열의 생성 방법 꺾은 괄호 [ ] 안에 배열의 원소들을 직접 입력함 외부 데이터 파일로부터 행렬을 읽어 들임 MATLAB 명령어나 자신이 만든 m 파일을 이용하여 행렬을 생성시킴 벡터의 각 원소는 수, 또는 미리 정의된 변수들, 함수들이 포함된 수학식 등이 될 수 있다. • 알려진 수 집합을 행벡터(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 % 위의 결과와 같다

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


  6. 2장 배열과 행렬 일정한 간격으로 커지는 행벡터의 생성 일정한 간격으로 커지는 원소들을 가진 벡터는 콜론(:)을 사용하여 생성한다. 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

  7. 2장 배열과 행렬 원소의 개수를 지정하여 행벡터 생성하기 시작원소 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

  8. 2장 배열과 행렬 logspace명령어에 의한 벡터 생성 로그적으로 같은 간격을 가진 행벡터(row vector)를 생성한다. y = logspace(a, b, n) a와 b 사이가 아니라 10a와 10b사이에 n개의 로그적으로 같은 간격의 행벡터를 생성한다. n이 생략되면 50개의 원소를 생성한다. >> 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 1 1 1 log10100 ( = 0 ) log10101 ( = 1 ) log10102 ( = 2 ) log10103 ( = 3 )

  9. 2장 배열과 행렬 복소수 벡터 복소수를 벡터의 원소로 입력할 때 복소수에는 어떠한 공백도 있어서는 안 된다.예를 들어 복소수 1-2i 를 벡터의 원소로 입력할 때 모든 글자는 공백 없이 붙여 써야 한다. 만일 1 -2i와 같이 1과 -2i를 띄어 쓰면 두 개의 원소로 인식하게 된다. >> c1 = [1-2i 3 5+6i] % 세 개의 원소를 가진 벡터 c1 = 1.0000 - 2.0000i 3.0000 5.0000 + 6.0000i >> c2 = [1-2i 3 5+6i] % 복소수의 공백으로 4개의 원소로 인식 % 그러나 5+ 다음의 공백은 +연산자로 인해 무시된다. c2 = 1.0000 0 - 2.0000i 3.0000 5.0000 + 6.0000i >> c3 = [(1-2i) 3 ( 5+ 6i)] % 괄호로 인해 공백이 무시된다. c2 = 1.0000 - 2.0000i 3.0000 5.0000 + 6.0000i ‘’ 표시는 공백을 의미함

  10. 2장 배열과 행렬 2차원 배열(행렬)의 생성 >> A=[2 4 10; 16 3 7; 8 12 35] A = 2 4 10 16 3 7 8 12 35 • 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 세미콜론 의 입력

  11. 2장 배열과 행렬 행렬 생성의 다양한 방법 (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 • 행렬 원소는 숫자 뿐만 아니라 계산이 가능한 수식, 변수도 가능하다. 또 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

  12. 2장 배열과 행렬 행렬 생성의 다양한 방법 (2/2) >> 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

  13. 2장 배열과 행렬 행렬 명령어 – 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 의 행렬 >> 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

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

  15. 2장 배열과 행렬 전치(transpose) 연산자 >> v=[10; 20; 30]; >> vt = v’ vt = 10 20 30 >> x=[10 20 30]; xt = x’ xt = 10 20 30 >> A=[1 2 3; 10 20 30] A = 1 2 3 10 20 30 >> B=A’ B= 1 10 2 20 3 30 • 행벡터를 열벡터로, 열벡터를 행벡터로 변환하거나, 행렬의 행과 열을 바꾸는 전치 연산은 벡터나 행렬 뒤에 따옴표(')를 붙이면 된다.

  16. 2장 배열과 행렬 복소수 행렬의 전치(transpose) (1/2) >> v=[1+2i 3+4i] v = 1.0000+2.0000i 3.0000+4.0000i >> w=v' w = 1.0000 - 2.0000i 3.0000 - 4.0000i >> x=v.' x = 1.0000 + 2.0000i 3.0000 + 4.0000i >> C=[1 3+4i; 2-3i 4] C = 1 3+4i 2-3i 4 >> C ' ans = 1 2+3i 3-4i 4 >> C. ' ans = 1 2-3i 3+4i 4 • 복소수 벡터나 복소수 행렬을 전치시키면, 복소수 원소는 모두 공액복소수로 바뀐 다음에 전치(complex conjugate transpose)된다는 점에 주의. • 복소수 벡터나 복소수 행렬을 공액복소수 변환없이 단순히 전치만 시키고자 하는 경우에는 .' 와 같이 마침표와 따옴표를 같이 사용한다.

  17. 2장 배열과 행렬 복소수 행렬의 전치(transpose) (2/2) >> r = 1 : 3; >> C = r + r*i C = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i >> Ct = C' Ct = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i >> Cdt=C.' Cdt = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i

  18. 2장 배열과 행렬 벡터 원소의 주소 지정(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

  19. 2장 배열과 행렬 벡터 원소의 주소 지정 예 >> 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

  20. 2장 배열과 행렬 행렬 원소의 주소 지정 행렬원소의 주소는 원소가 있는 행(row)과 열(column)의 위치이다. 행렬 A에서 A(r, c)는 행렬 A의 r번째 열과 c번째 행에 위치한 원소를 나타낸다. 행렬 A가 이면, A(1,1)=5, A(2,2)=1, A(3,3)=3이다. >> 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

  21. 2장 배열과 행렬 콜론(:)을 이용한 벡터의 주소 지정 (1/2) 콜론을 이용하여 벡터나 행렬의 일정 범위의 원소들을 지정할 수 있다. 벡터 v의 경우 v(:) : 벡터 v의 모든 원소를 열벡터로 나타낸다. v(m:n) : 벡터 v의 m 번째 원소에서 n 번째 원소까지의 원소들을 나타낸다. end는 벡터나 행렬의 마지막 원소의 주소를 나타내는 데 사용되며, 벡터의 경우 end는 명령어 length(벡터)의 실행 결과와 같은 값을 갖는다. >> 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

  22. 2장 배열과 행렬 콜론(:)을 이용한 벡터의 주소 지정 (2/2) >> v=[10 20 30 40 50]; >> w = v(3 :-1 : 1) % v(3), v(2), v(1) 원소를 가진 벡터 생성 w = 30 20 10 >> y=v(2:3:5) % v(2), v(5) 원소를 가진 벡터 생성 y = 20 50 >> z =v( [1 3 4] ) % v(1), v(3), v(4) 원소를 가진 벡터 생성 z = 10 30 40 >> vt=z( :) % 콜론에 의한 전체 원소의 선택은 전치와 동일 효과 vt = 10 30 40

  23. 2장 배열과 행렬 콜론을 이용한 행렬의 주소 지정 (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번째 열에 해당하는 원소를 가리킴 >> 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

  24. 2장 배열과 행렬 콜른을 이용한 행렬의 주소 지정 (2/2) • 행렬의 벡터 변환 >> B=[ 9:-2:1; zeros(1, 3) 1 2; ones(2, 5)*2 ] B = 9 7 5 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

  25. 2장 배열과 행렬 행렬의 주소 지정 >> 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))와 같다.

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

  27. 2장 배열과 행렬 벡터의 확장 및 축소(2/2) >> 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

  28. 2장 배열과 행렬 행렬의 확장(1/2) >> 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 0 0 0 1 >> H(3,4)=8 H =      0    0    0    0      0    0    0    0      0    0    0   8 • 기존 행렬에 새로운 행이나 열을 추가할 수 있는데, 이때 추가되는 행(열)의 길이는 기존 행렬과 맞아야 한다.

  29. 2장 배열과 행렬 행렬의 확장 (2/2) (계속) >> 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으로 채워진다.

  30. 2장 배열과 행렬 벡터의 축소 >> 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)는 원소가 없으며 [ ]로 표시한다. 벡터의 일부 원소에 공벡터를 할당하면 해당 원소가 삭제되는 효과를 갖는다. 이런 방법을 통해 벡터의 크기를 축소시킬 수 있다.

  31. 2장 배열과 행렬 행렬 정의시 주의할 점 스칼라 변수의 값을 정의하는 경우에는 이전에 변수가 미리 정의되어 있었더라도 새로운 값으로 대체가 되므로 문제가 없지만, 배열 변수의 경우에는 다음의 예와 같이 예기치 못한 문제가 생길 수 있으므로 이미 생성되어 있는 배열변수인지 확인하거나 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 이미 A가 22 행렬로 정의되어 있으므로 첫 번째 행의 원소를 13의row2로 대체하려고 하므로 크기가 다르다는 에러 발생.

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

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

  34. 2장 배열과 행렬 다차원 배열 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 column page row

  35. 2장 배열과 행렬 다차원 배열의 주소 지정 >> 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

  36. 2장 배열과 행렬 벡터의 길이와 크기, 절대값 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

  37. 2장 배열과 행렬 행렬에 사용되는 내장함수(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 cat(2, A, B) cat(3, A, B) cat(1, A, B)

  38. 2장 배열과 행렬 행렬에 사용되는 내장함수(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

  39. 2장 배열과 행렬 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 행렬에 사용되는 내장함수(3/8)

  40. 2장 배열과 행렬 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 행렬에 사용되는 내장함수(4/8) 행렬 A로부터 열을 따라 3개씩 취하여 새로운 크기의 행렬 C를 만들 때 열의 개수를 미리 계산할 필요없이 [ ] 표시를 입력하면 자동으로 계산된다.

  41. 2장 배열과 행렬 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 행렬에 사용되는 내장함수(5/8)

  42. 2장 배열과 행렬 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 행렬에 사용되는 내장함수(6/8)

  43. 2장 배열과 행렬 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 행렬에 사용되는 내장함수(7/8)

  44. 2장 배열과 행렬 [r, c, v]=find(A) 행렬 A의 원소중에서 0이 아닌 원소들의 값은 v에, 주소는 행은 r에, 열은 c에 저장한다. >> A=[8 0 6; 0 2 4;3 7 0] A = 8 0 6 0 2 4 3 7 0 >> [r, c, v] = find(A); r=r’, c=c’, v= v’ r = 1 3 2 3 1 2 c = 1 1 2 2 3 3 v = 8 3 2 7 6 4 행렬에 사용되는 내장함수(8/8)

  45. 2장 배열과 행렬 ones 명령어와 zeros명령어를 이용하여 첫 두 행은 0이고 다음 두 행은 1인 4×5 행렬을 생성하라. 예제 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

  46. 2장 배열과 행렬 6×6 행렬에서 가운데 두 행과 가운데 두 열의 원소가 1이고 나머지 원소는 모두 0인 행렬을 생성하라. 예제 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

  47. 2장 배열과 행렬 명령어 창에서 다음 세 배열 A, B, v를 만들고, 명령어 한 개로 A의 1번째 행과 3번째 행의 마지막 4개의 열을 B의 첫 두 행의 첫 네 열로 대체하라. 또 A의 4번째 행의 마지막 4개의 열을 v의 5~8번째 원소로 대체하라. 예제 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

  48. 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 >>

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

  50. 2장 배열과 행렬 문자열은 문자열의 글자 개수와 같은 개수의 원소를 갖는 행벡터이며, 벡터의 주소 지정을 이용하여 각 원소에 접근할 수 있다. >> 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. 문자열 변수(1/3)