예제 1.1 ( 행벡터만들기 ) >> a=[1 2 3 4 5] % a 는 1 에서 5 까지 a = 1 2 3 4 5 >> b=1:2:9 % b 는 1 에서 2 씩증가시켜 9 까지 b = 1 3 5 7 9 >> c=[b a] c = 1 3 5 7 9 1 2 3 4 5 >> d=[1 0 1 b(3) a(1:2:5)] d = 1 0 1 5 1 3 5 예제 1.2 ( 복소수사용하기 ) >> [1-2i 3 4 5+6i] % contains 5 elements 1.0000 0-2.0000i 3.0000 4.0000 5.0000 + 6.0000i >> [(1-2i) 3 4 5+6i] % contains 4 elements 1.0000-2.0000i 3.0000 4.0000 5.0000 + 6.0000i >> [1-2i 3 4 5+6i] % contains 4 elements 1.0000-2.0000i 3.0000 4.0000 5.0000 + 6.0000i 예제 1.3 ( 열벡터만들기 ) >> c=[1;2;3;4;5] c = 1 2
3 4 5 예제 1.4 ( 행렬만들기 ) >> g=[1 2 3 4; 5 6 7 8] % g는 2 by 4 matrix g = 1 2 3 4 5 6 7 8 >> g=[g, g; 9:12, 9:12] % g는 6행 4열로확장됨 g = 1 2 3 4 1 2 3 4 5 6 7 8 5 6 7 8 9 10 11 12 9 10 11 12 >> h=[1 2 3; 4 5 6 7] % 모든 row 가같은수의 column 을가져야만한다.??? All rows in the bracketed expression must have the same number of column π π πππ
π π π π π π π π π π 예제 1.5 (Sampling) >> x=[0.1*pi.2*pi.3*pi.4*pi.5*pi.6*pi.7*pi.8*pi.9*pi pi] x = Column 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Column 8 through 11 2.1991 2.5133 2.8274 3.1416 >> y=sin(x) y = Column 1 through 7 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Column 8 through 11 0.8090 0.5878 0.3090 0.0000 >> plot(x,y) % y = sin(x) 의그래프 예제 1.6 (linspace 혹은 logspace 이용하기 ) >> x=(0:0.1:1)*pi % 0 에서 0.1*pi 씩증가하여 1*pi 까지 11 개의원소 x = Column 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Column 8 through 11 2.1991 2.5133 2.8274 3.1416 >> x=linspace(0,pi,11) % 0 에서 pi 까지 11 개의원소를표현 x = Column 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Column 8 through 11 2.1991 2.5133 2.8274 3.1416 >> logspace(0,2,11) % 10^0 부터 10^2 까지 11 개의점이포함되도록만듬 Column 1 through 7 1.0000 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489 Column 8 through 11 25.1189 39.8107 63.0957 100.0000
예제 2.1 ( 저장된변수명과변수의크기와길이 ) >> whos Name Size Elements Bytes Density Complex a 1 by 5 5 40 Full No b 5 by 1 5 40 Full No c 1 by 5 5 40 Full No d 1 by 5 5 80 Full Yes e 5 by 1 5 80 Full Yes f 5 by 1 5 80 Full Yes g 3 by 4 12 96 Full No Grand total is 42 elements using 456 bytes leaving 2316084 bytes of memory free. >> A=[1 2 3 4; 5 6 7 8] A = 1 2 3 4 5 6 7 8 >> s=size(a) % size 함수는행의개수와열의개수를알려줌 s = 2 4 >> [r,c]=size(a) r = 2 c = 4 >> r=size(a,1), c=size(a,2) % 두개이상의명령어를쓰려면, 혹은 ; 를사용 r = 2 c = 4 >> length(a) % length 함수는행의개수와열의개수중더큰값을준다 4 >> size([]) 0 0
예제 2.2 ( 특수행렬만들기 ) >> zeros(2) % a 2-by-2 matrix of zeros 0 0 0 0 >> ones(2,4)*pi % a 2-by-4 matrix of ones * pi 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 >> A=[1 2 3; 4 5 6]; % 명령문마지막에 ; 를사용하면결과가출력안됨 >> ones(size(a)) 1 1 1 1 1 1 >> eye(3) 1 0 0 0 1 0 0 0 1 >> eye(3,2) 1 0 0 1 0 0
>> rand(3,1) % 0 과 1 사이의균일하게분포된임의의수들의 3 by 1 행렬 0.2190 0.0470 0.6789 >> randn(2) % 평균 (mean) 이 0 이고표준편차 (variance) 가 1 인 % 정규분포를가진수들의 2 by 2 행렬 1.1650 0.0751 0.6268 0.3516 >> a=[1 2 3;4 5 6]; >> b=find(a>10) b = [ ]
예제 3.1 ( 열벡터만들기 ) >> a=1:5 a = 1 2 3 4 5 >> b=a' b = 1 2 3 4 5 >> c=b' c = 1 2 3 4 5 예제 3.2 ( 전치행렬만들기 ) >> c=a.' % 실수데이터에서는 와. 는서로동일하다. c = 1 2 3 4 5
>> d=a+i*a % 여기서 i=sqrt(-1) d = Columns 1 through 4 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 +4.0000i Columns 5 5.0000 + 5.0000i >> e=d' % complex conjugate transpose of d e = 1.0000-1.0000i 2.0000-2.0000i 3.0000-3.0000i 4.0000-4.0000i 5.0000-5.0000i >> f=d.' % noncomplex conjugate transpose of d f = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i 예제 3.3 ( 대칭행렬과반대칭행렬 ) >> a = rand(3), S = (a+a')/2, K = (a-a')/2, sum = S+K a = 0.7564 0.2470 0.7534 0.9910 0.9826 0.6515 0.3653 0.7227 0.0727 S = 0.7564 0.6190 0.5593 0.6190 0.9826 0.6871 0.5593 0.6871 0.0727 K = 0-0.3720 0.1940 0.3720 0-0.0356
-0.1940 0.0356 0 sum = 0.7564 0.2470 0.7534 0.9910 0.9826 0.6515 0.3653 0.7227 0.0727 예제 4.1 ( 뎃셈과상수연산 ) >> g, h % recall previous array g = 1 2 3 4 5 6 7 8 9 10 11 12 h = 1 1 1 1 2 2 2 2 3 3 3 3 >> g+ones(3,3)??? Error using ==> + Matrix dimensions must agree. >> g+h % add h to g on an element-by-element basis 2 3 4 5 7 8 9 10 12 13 14 15 >> ans-h % subtract h from the previous answer to get g back 1 2 3 4
5 6 7 8 9 10 11 12 >> g-2 % g의모든원소에서 2를뺀경우 -1 0 1 2 3 4 5 6 7 8 9 10 >> 2*g-1 1 3 5 7 9 11 13 15 17 19 21 23 >> 2*g-h % multiplies g by 2 and subtracts h from the result 1 3 5 7 8 10 12 14 15 17 19 21 예제 4.2 ( 원소끼리의곱셈과나눗셈 ) >> g.*h 1 2 3 4 10 12 14 16 27 30 33 36 >> g./h 1.0000 2.0000 3.0000 4.0000 2.5000 3.0000 3.5000 4.0000 3.0000 3.3333 3.6667 4.0000 >> h.\g % 슬래쉬 (slash) 나백슬래쉬 (back slash) 모두나눗셈을정의할때, % 슬래쉬아래쪽이슬래쉬위쪽을나눈다.
1.0000 2.0000 3.0000 4.0000 2.5000 3.0000 3.5000 4.0000 3.0000 3.3333 3.6667 4.0000 >> g*h % 행렬의곱셈은매우특별한방식으로정의되어있다.??? Error using ==> * Inner matrix dimensions must agree. >> g/h Warning: Rank deficient, rank = 1 tol = 0 0 0.8333 0 0 2.1667 0 0 3.5000 5.3291e-15 >> h\g % 행렬의두나눗셈이서로다른결과를가지고있다. Warning: Rank deficient, rank = 1 tol = 3.3233e-15 2.7143 3.1429 3.5714 4.0000 0 0 0 0 0 0 0 0 0 0 0 0 예제 4.3 ( 원소끼리의지수승 ) >> g,h g = 1 2 3 4 5 6 7 8 9 10 11 12 h = 1 1 1 1 2 2 2 2 3 3 3 3 >> g.^2 1 4 9 16 25 36 49 64 81 100 121 144 >> g.^-1 % MATLAB doesn't like this syntax
??? g.^- Missing variable or function >> g.^(-1) % However, with parentheses it works! 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 >> 2.^g 2 4 8 16 32 64 128 256 512 1024 2048 4096 >> g.^h 1 2 3 4 25 36 49 64 729 1000 1331 1728 >> g.^(h-1) 1 1 1 1 5 6 7 8 81 100 121 144
예제 5.1 ( 행렬의곱와내적을이용한사이각구하기 ) >> A=[2 1 5; 1 3 2], B=[3 4; -1 2; 2 1] A = 2 1 5 1 3 2 B = 3 4-1 2 2 1 >> A*B
15 15 4 12 >> x = 1:4, y=2:2:8 x = 1 2 3 4 y = 2 4 6 8 >> x * y??? Error using ==> * Inner matrix dimensions must agree. >> x * y' 60 >> a=[-1 2 4]; b=[1.5 2-1]; % angle between vectors a and b >> theta = acos( a*b' / sqrt(a*a'*b*b') ) 5.2 ( 행렬곱연산의교환법칙 ) >> C=[1 3; -1-1] C = 1 3-1 -1 >> C*ones(2,2) % 행렬의곱셈에대한교환법칙은성립하지않는다. 4 4-2 -2 >> ones(2,2)*c 0 2
0 2 >> AB=A*B, AB*C % 행렬의곱셈에대한결합법칙은성립한다. AB = 15 15 4 12 0 30-8 0 >> BC=B*C, A*BC BC = -1 5-3 -5 1 5 0 30-8 0 예제 5.3 ( 행렬의나눗셈 ) >> A=[2 1 5; 1 3 2], B=[3 4; -1 2; 2 1] % 정방행렬이아닌경우의나눗셈 A = 2 1 5 1 3 2 B = 3 4-1 2 2 1 >> (A*B)/B 4.5000-1.5000 0 2.0000 2.0000 0 >> A\(A*B)
0 0-0.7692 2.3077 3.1538 2.5385 >> A=rand(3,3), B=rand(3,3) % 일반적정방행렬의나눗셈 A = 0.2190 0.6793 0.5194 0.0470 0.9347 0.8310 0.6789 0.3835 0.0346 B = 0.0535 0.0077 0.4175 0.5297 0.3834 0.6868 0.6711 0.0668 0.5890 >> (A*B)/B 0.2190 0.6793 0.5194 0.0470 0.9347 0.8310 0.6789 0.3835 0.0346 >> A\(A*B) 0.0535 0.0077 0.4175 0.5297 0.3834 0.6868 0.6711 0.0668 0.5890 예제 6.1 (1 차원배열의주소할당 ) >> x=(0:0.1:1)*pi; % 0 에서 0.1*pi 씩증가하여 1*pi 까지 11 개의원소 >> y=sin(x); >> x(3) % The third element of x 0.6283 >> y(5) % The fifth element of y 0.9511 >> x(1:5) % 첫번째에서다섯번째원소까지나타냄
0 0.3142 0.6283 0.9425 1.2566 >> y(3:-1:1) 0.5878 0.3090 0 >> x(2:2:7) % 두번째, 네번째, 여섯번째원소. % 즉, 두번째원소부터 7보다작은원소까지 2씩증가시킴. 0.3142 0.9425 1.5708 >> y([8 2 9 1]) % [8 2 9 1] 자체가 y의원소들의주소의배열이다 0.8090 0.3090 0.5878 0 예제 6.2 (2차원배열의주소할당 ) >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A(2,3)=0 % A(2,3) 의원소 [2nd row, 3rd column] 가 0으로바뀜 A = 1 2 3 4 5 0 7 8 9 >> A(2,6)=1 % 원래 A가 6개의열을가지지않음으로 0을채워서늘려놓았다. A = 1 2 3 0 0 0 4 5 0 0 0 1 7 8 9 0 0 0 >> A=[1 2 3; 4 5 6; 7 8 9]; % restore original data >> B=A(3:-1:1,1:3) % row의순서를거꾸로쓰는법 B = 7 8 9 4 5 6 1 2 3 >> B=A(3:-1:1,:) % 마지막의싱글콜론 (single colon) 은모든열을가지는 % 것을의미한다. 즉, : 은 1:3 을짧게줄여쓴것이다.
B = 7 8 9 4 5 6 1 2 3 >> C=[A B(:,[1 3])] C = 1 2 3 7 9 4 5 6 4 6 7 8 9 1 3 >> B=A(1:2,2:3) B = 2 3 5 6 >> C=[1 3] C = 1 3 >> B=A(C,C) % 여기서는배열 C 가 A 의인덱스 (index) 로사용되어진다. B = 1 3 7 9 예제 6.3 (2 차원배열의조작 ) >> A = [1 2 3; 4 5 6; 7 8 9] >> sum(a) % 합을구하는함수들은열단위로연산한다.
12 15 18 >> sum(sum(a)) 45 >> A(1:9) % A 를행벡터로바꿈 A = 1 4 7 2 5 8 3 6 9 >> B=A(:) % A 의열들을하나의열로펼쳐놓음 B = 1 4 7 2 5 8 3 6 9 >> B=B.' % dot-transpose operation 을이용하여 row 로바꿈 B = 1 4 7 2 5 8 3 6 9 >> B=[1 2 3; 4 5 6; 7 8 9]; >> B(:,2)=[] % [](empty matrix) 는앞의 B 의모든행의두번째열을 % 삭제하라는의미이다 B = 1 3 4 6 7 9 >> B=B.' B = 1 4 7 3 6 9 >> B(2,:)=[] B = 1 4 7 >> A(2,:)=B % 두번째열의모든행원소를 B로대체 A = 1 2 3 1 4 7 7 8 9
>> B=A(:, [2 2 2 2]) % 모든행을두번째열에의해네번반복. % 이런것을 Tony's Trick 이라고함 B = 2 2 2 2 4 4 4 4 8 8 8 8 예제 6.4 ( 배열조작시행렬의크기 ) >> A=[1 2 3; 4 5 6; 7 8 9]; >> A(2,2)=[]??? In an assignment A(matrix,matrix) = B, the number of rows in B and the number of elements in the A row index matrix must be the same. >> B B = 1 4 7 >> B=A(4,:) % A 가네번째 row 를가지고있지않기때문에 % MATLAB 은어떻게하라는건지알지못한다.??? Index exceeds matrix dimensions >> B(1:2,:)=A % 두행렬의크기 (size) 가다른경우 error 가생긴다??? In an assignment A(matrix,:) = B, the number of columns in A and B must be the same.
>> B(3:4,:)=A(2:3,:) % B의크기는 1 by 3이지만, B의 3과 4 행을 % 행렬 A의 2-3 행으로정의함으로서 B의크기가 4 by 3으로바뀐다. % 그러나두번째행에대해서는아무런조건이없으므로 0이대입된다. B = 1 4 7 0 0 0 4 5 6 7 8 9 >> G(1:6)=A(:,2:3) % A 의 2 와 3 열을한행에여섯열로늘어뜨림 G = 2 5 8 3 6 9 >> D=[1 2 3 4; 5 6 7 8; 9 10 11 12], v=[2; 4; 8] D = 1 2 3 4 5 6 7 8 9 10 11 12 v = 2 4 8 >> E=[D(:,1)-v D(:,2)-v D(:,3)-v D(:,4)-v] E = -1 0 1 2 1 2 3 4 1 2 3 4 >> E=D-[v v v v] % 바로위의방법보다더빠르게구할수있다. E = -1 0 1 2 1 2 3 4 1 2 3 4 >> % 그러나 D의열의수를모르는경우 Tony's Trick 을사용하는것이좋다. >> c=size(d,2); % 여기서 c는 D의 column 수를나타낸다. >> E=D-v(:,ones(1,c)) % ones(1,c) 는원소가모두 1인 1-by-4 vector 를만든다. E = -1 0 1 2 1 2 3 4 1 2 3 4
예제 7.1 ( 논리배열 ) >> x=-3:3 % Create data x = -3-2 -1 0 1 2 3 >> abs(x)>1 % x 의절대값이 1 보다크면 1( 참 ) 을, 아니면 0( 거짓 ) 을돌려준다 1 1 0 0 0 1 1 >> y=x(abs(x)>1) % x 의절대값이 1 보다큰경우의 x 값을돌려준다 y = -3-2 2 3
예제 7.2 ( 배열인덱스 ) >> y=x([1 0 1 0]) % [1 0 1 0] 은 x 와같은크기가아니므로배열의 % 인덱스로서 0 을인식하지못한다??? Index into matrix is negative or zero. >> x(abs(x)>1)=[] % abs(x)>1 인경우의값들을제외한나머지 x 의원소만나타냄 x = -1 0 1 예제 7.3 ( 행렬의관계연산 ) >> B=[5-3;2-4] B = 5-3 2-4 >> x=abs(b)>2 % 행렬에대한관계연산자의적용 x = 1 1 0 1 >> y=b(abs(b)>2) y = 5-3 -4 예제 7.4 (find 함수 ) >> x=-3:3 x = -3-2 -1 0 1 2 3 >> k=find(abs(x)>1) % find 함수를이용해서절대값이 1 보다큰경우의 % 배열 x 의인덱스를찾음 k = 1 2 6 7 >> A=[1 2 3; 4 5 6; 7 8 9]
A = 1 2 3 4 5 6 7 8 9 >> [i,j]=find(a>5) % 인덱스 i와 j에각각행과열의인덱스가저장된다 i = 3 3 2 3 j = 1 2 3 3 예제 8.1 ( 성긴행렬 ) >> As=sparse(1:5,1:5,ones(1,5)) As = (1,1) 1 (2,2) 1 (3,3) 1
(4,4) 1 (5,5) 1 >> As=sparse(eye(5)) As = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 >> A=full(As) % 성긴행렬의전체적인형태를 full 함수를이용하여볼수있다. A = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 >> clear % 모든변수들을지움 >> B=eye(200) % FULL 200-by-200 identity matrix >> Bs=sparse(B) % Sparse 200-by-200 identity matrix >> whos % Bs는단지 0.5% 의 0 아닌원소만을포함하고 % 3200 bytes 만을저장하면된다. Name Size Elements Bytes Density Complex B 200 by 200 40000 320000 Full No Bs 200 by 200 200 3200 0.0050 No
예제 9.1 (Diary 저장과, Mat-File 저장, 그리고그림화일저장 ) >> diary sec19.txt % 아래에나타나는출력을 sec19.txt 에저장한다. >> x = -pi:0.01:pi; >> % My work will be saved on sec19.txt >> y = sin(x); >> save sec19 x y % 변수 x,y 의값을 sec19.mat 파일에저장한다. >> clear % 모든저장변수값을소거한다. >> load sec19 %sec19.mat 에저장된변수값을읽어온다. >> plot(x,y) >> print -dbmp sec19.bmp % 그림창에나타난그래프를 bmp 형식으로저장한다. >> diary off >> A = [2 3-5; 4-1 6]; B = [1-3 4; 3 0 1]; >> A+B, 2*A, 3*B, 3*A-2*B >> X= 3*B - 1/2 * ( 2*A + B) >> A = [ 1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15]; >> size(a)
>> a13=a(1,3), a31=a(3,1), a25=a(2,5), a34=a(3,4) >> [i,j] = find(a==4) >> [i,j] = find(a==7) >> [i,j] = find(a==15) >> A = [2 1 0; 3 2 0; 1 0 1]; B=[1 1 1 0; 2 1 1 0; 2 3 1 2]; >> A*B >> % B*A % it's not defined (!) >> A = [1 0 0; 0 1 0; 1 1 0]; B=[1 0 1; 0 1 1; 0 0 1]; >> AB=A*B, BA=B*A >> AB==BA % 정수값을가지는행렬이동치인가를비교하여얻은논리배열 >> all(ab==ba) % 각행의원소가모든같은값을가지면 1 을출력 >> all(all(ab==ba)) % 모든원소가같은값을가지면 1 을출력 >> A = [1 4-1; 3 0 2]; B=[3 0 1; 2 1 3; 4 1 2]; C=[2 1; 0 2; -3 1]; >> (A*B) * C == A * (B*C) >> all(all( (A*B)*C == A*(B*C) )) % integer matrix equality check
>> A=rand(2,2); B=rand(2,2); C=rand(2,2); >> A*(B+C) - (A*B+A*C) %#% A*(B+C) == A*B + A*C >> (A+B)*C - (A*C+B*C) %#% (A+B)*C == A*C + B*C >> A = rand(4); A = (A-A')/2; A2 = A^2; >> A2 - A2', max(max(abs(a2-a2'))) >> P = [523 107 48 16; 12 349 6 2; 157 112 18 264]; >> di = sum(p(1,:)) >> rc = sum(p(:,2)) >> iu = P(3,4)
π π