Download presentation
Presentation is loading. Please wait.
1
MATLAB 개요와 응용 3장 배열 연산
2
목 차 배열의 덧셈과 뺄셈 배열 곱셈 배열 나눗셈 원소별 연산 MATLAB 내장함수에서의 배열 사용 난수의 발생 응용예제
3장 배열과 행렬
3
개요 스칼라 또는 배열 변수들이 MATLAB에서 생성되면, 이 변수들은 다양한 수학연산에 사용될 수 있다. MATLAB은 과학과 공학 분야에서 많은 응용분야를 가진 고급 배열연산을 수행하도록 설계되었다. 이 장에서는 배열을 이용하여 MATLAB이 수행하는 기본적이고 가장 일반적인 수학 연산을 제시한다. 배열의 덧셈과 뺄셈 연산 선형대수법칙에 따른 배열의 곱셈과 나눗셈, 거듭제곱 연산(표준기호 *, /, ^ 이용) 원소별 연산(element-by-element operation)을 이용한 배열의 곱셈과 나눗셈, 거듭제곱 연산(.*, ./, .^의 기호 이용) 3장 배열과 행렬
4
행렬의 덧셈과 뺄셈 같은 크기의(같은 행과 열의 수를 가진) 배열들에 대한 덧셈과 곱셈은 같은 위치의 원소들을 더하거나 빼서 구한다. >> v = [3 6 2]; w=[ ]; >> z = v + w z = >> A=[2 -3 7; ]; >> B=[10 7 4; ]; >> C = A - B C = >> D = A + B D = >> D-2 ans = >> C * 2 ans = 행렬의 덧셈이나 뺄셈에 스칼라가 포함된 경우, 행렬의 모든 원소에 스칼라를 더하거나 뺀다. 3장 배열과 행렬
5
배열의 덧셈과 뺄셈 응용예 세 학생의 과목별 중간고사 및 기말고사 성적은 다음 표와 같다. 세 학생의 각 과목별 평균점수와 중간고사에 대한 성적향상 점수를 구하라. 이 름 중간고사 기말고사 국어 영어 수학 물리 이스근 61 78 39 42 69 84 51 46 강후동 49 57 24 36 55 53 31 40 이숭기 92 97 89 96 90 >> M = [ ; ; ]; %중간고사 성적 >> F = [ ; ; ]; %기말고사 성적 >> T = 0.5*(M + F) % 학생별, 과목별 총점 구하기 T = >> E = F – M % 학생별, 과목별 성적 향상 E = 3장 배열과 행렬
6
배열의 곱셈 MATLAB에서 행렬의 곱은 선형대수의 규칙에 따라 행해진다.
>> C = A*B T = >> D = B*A ??? Error using ==> mtimes Inner matrix dimensions must agree. 3장 배열과 행렬
7
행렬 곱과 벡터 곱 (1/2) 행렬의 곱은 교환법칙이 성립하지 않는다. 즉, AB≠BA이다.
행렬 곱과 벡터 곱 (1/2) 행렬의 곱은 교환법칙이 성립하지 않는다. 즉, AB≠BA이다. 벡터 곱 vw의 경우, 두 벡터의 원소 개수는 같아야 하고 한쪽 벡터가 행벡터이면 나머지 벡터는 열벡터이어야 하며, 스칼라 또는 행렬을 얻게 된다. dot(a, b) 내장함수는 두 벡터의 행∙열 구분 없이 내적을 구한다. >> A = [ 6 2; 4 7]; B = [3 9; 5 1]; >> C = A*B, D = B*A % A*B≠B*A C = D = 3장 배열과 행렬
8
행렬 곱과 벡터 곱 (2/2) v*w ≠ w*v >> G*F
행렬 곱과 벡터 곱 (2/2) >> v = [ ]; w = [3; 9; 5]; >> x = v*w x = 56 >> z = w*v z = >> dot(v, w) % v*w ans = >> F=[1 3; 5 7]; G=[4 2; 1 6]; >> F*G >> G*F >> A=[ ; ; ] A = >> C = 3*A C = >> D=A*3 D = v*w ≠ w*v 수와 행렬의 곱은 행렬의 각 원소에 수를 곱해 구한다. 3장 배열과 행렬
9
연립선형방정식의 행렬 표현과 나눗셈 연립선형방정식을 행렬에 의해 간단히 표현하고 해를 체계적인 방법으로 구할 수 있다.
단위행렬(identity matrix or unity matrix) I 대각선 원소가 모두 1이고 그 외의 원소는 0인 정방행렬(square matrix)로서, MATLAB에서는 eye(n) 명령어로 생성한다. 스칼라 변수에 1을 곱한 경우처럼 행렬(또는 벡터)에 단위행렬 I를 곱해도 행렬은 변화가 없다. 즉, AI = A, Iv = v, BI = B 이다. 만일 A가 정방행렬이면, AI = IA = A이다. 3장 배열과 행렬
10
행렬의 역행렬(Inverse Matrix)
정방행렬인 A와 B를 곱한 결과가 단위행렬 I라면, 두 행렬은 서로 역행렬의 관계에 있다. 즉 A는 B의 역행렬이며, B는 A의 역행렬이다. AB = BA = I → A=IB-1 =B-1 or B=IA-1 =A-1 AA-1 =I → A-1 은 A의 역행렬 MATLAB에서 A의 역행렬은 A^-1 또는 inv(A) 명령으로 구한다. >> A= [ ; ; ]; >> B=inv(A) B = >> A*B % B*A와 동일 ans = >> A^ % A의 역행렬 >> A*A^ % AA-1=I 5.55 e-17 3장 배열과 행렬
11
행렬식(Determinant) 행렬 A의 determinant는 |A|로 표시하며, MATLAB 명령어 det(A)에 의해 구한다. >> A= [ ; ; ]; det(A) ans = 7 >> B=[ ; ; ]; det(B) 3 3장 배열과 행렬
12
행렬 나눗셈 (1/2) Left division \
행렬 나눗셈 (1/2) MATLAB에는 ‘right division(/)’과 ‘left division(\)’의 두 가지 형식의 행렬 나누기가 있다. 연립선형방정식을 Ax=B의 행렬형태로 나타냈을 때 벡터 x는 두 가지 방법으로 구할 수 있다. Left division \ Ax = b의 양변에 A의 역행렬 A-1을 곱하면, A-1Ax = A-1b → Ix = x = A-1b 즉, Ax = b의 해는 x = A-1b이다. MATLAB 명령어로 x = inv(A)*b 이다. MATLAB에서 left division ‘\’를 이용하여 구할 수도 있다. 즉, x = A\b. 위의 두 방법은 같은 결과를 주는 것처럼 보이지만, MATLAB이 x를 계산하는 방법은 다르다. Left division ‘\’는 Gauss elimination 방법에 따라 수치적으로 계산한다. 큰 행렬이 포함된 경우, 역행렬 계산이 가우스 소거법보다 정확도가 떨어질 수 있으므로 선형연립방정식을 푸는 경우에는 left division을 사용하는 것이 유리하다. 3장 배열과 행렬
13
행렬 나눗셈 (2/2) Right division / 행 벡터 v와 w에 대해, 선형방정식 vA = w 에서 v를 구하려면
행렬 나눗셈 (2/2) Right division / 행 벡터 v와 w에 대해, 선형방정식 vA = w 에서 v를 구하려면 vAA-1 = wA-1 → vI = v = wA-1 or v = w/A 즉, vA = w의 해는 v = w/A or wA-1 이다. Ax=b >> 4/8 ans = >> 4\8 ans = 2 >> A=[ ; ; ]; b=[8; 4; 0]; >> x=A^-1 * b ans = 0.2927 2.6341 >> x2 = inv(A)*b x2 = >> x3 = A\b % 가우스 소거법 x3 = 3장 배열과 행렬
14
예제 3.1 연립선형방정식의 해 다음 선형연립방정식을 행렬 형식으로 나타내고 해를 구하라. 4x – 2y + 6z = 8
예제 3.1 연립선형방정식의 해 다음 선형연립방정식을 행렬 형식으로 나타내고 해를 구하라. 4x – 2y + 6z = 8 2x + 8y + 2z = 4 6x + 10y + 3z = 0 위 연립방정식을 행렬 형식으로 나타내면 다음과 같다: >> A=[ ; ; ]; b=[8; 4; 0]; >> x=A\ b % x=inv(A)*b로 구할 수도 있음 x = 0.2927 2.6341 >> C=[4 2 6; ; 6 2 3]; w = [8 4 0]; >> x = w/C x = Ax = b → A-1Ax=A-1b → x=A\b xC=w → xCC-1=wC-1 → x = w/C 3장 배열과 행렬
15
원소별(Element-by-Element) 연산
행렬에 대한 곱셈과 나눗셈은 선형대수의 법칙을 따른다. 그러나 두 행렬의 원소와 원소 사이의 연산이 필요한 경우가 많다. 덧셈과 뺄셈은 원래 행렬의 같은 위치의 원소끼리 더하거나 빼므로 원칙적으로 원소별 연산에 해당된다. 원소별 연산은 다음과 같이 점 뒤에 연산기호를 붙이면 된다: .* (원소별 곱셈), .^ (원소별 지수승), ./ (우측 나눗셈), .\ (좌측 나눗셈) 두 벡터 v와 w가 각각 v=[v1, v2, v3], w=[w1 w2 w3]이라면, v.*w = [ v1w1, v2w2, v3w3 ] v./w = [ v1/w1, v2/w2, v3/w3 ] v.^w = [ v1w1, v2w2, v3w3 ] 두 행렬 A와 B에 대해 3장 배열과 행렬
16
행렬의 원소별 연산 >> C=A./B C = >> 2.^B ans = >> A*B ??? Error using==> mtimes Inner matrix dimensions must agree. >> A=[ ; ]; >> B=[1 4 10; 3 2 7]; >> A.*B ans = 3장 배열과 행렬
17
원소별 연산 예 원소별 연산은 많은 독립변수에서 함수값을 계산할 때 매우 유용하다. 먼저 독립변수의 값들을 벡터로 정의하고 이 벡터를 이용하여 함수값을 원소별 연산을 이용하여 계산한다. y(x)= 2x2- 5x+1 함수의 값 계산 >> x = 1:7 x = >> y = 2*x.^2 – 5*x + 1 y = >> plot(x, y) y(x) = (x3 + 5x)/(4x2 – 10)의 계산 >> x = [1:0.03:3]; >> y = (x.^3 + 5*x)./(4*x.^2 - 10); 3장 배열과 행렬
18
내장함수에서의 배열 사용 (1/2) MATLAB의 내장함수는 입력인자가 배열인 경우 함수에 의해 정의된 연산이 배열의 각 원소에 대해 수행되도록 만들어져 있으므로, 함수를 원소별로 적용하는 것으로 생각할 수 있다. 따라서 출력은 입력인자 배열의 각 원소를 함수에 대입하여 얻은 결과를 해당 원소로 갖는 배열이다. cos(x) 함수의 계산 >> x=[0:pi/6:2*pi] x = Columns 1 through 7 Columns 8 through 13 >> y=cos(x) y = >> plot(x, y), grid on 3장 배열과 행렬
19
내장함수에서의 배열 사용 (2/2) sqrt(x) 함수의 계산
내장함수에서의 배열 사용 (2/2) sqrt(x) 함수의 계산 >> d=[ ; ; ] d = >> h=sqrt(d) h = 3장 배열과 행렬
20
배열 해석용 내장함수 (1/2) 함수 설명 예 mean(A) C=max(A) [d,n]=max(x) min(A)
배열 해석용 내장함수 (1/2) 함수 설명 예 mean(A) A가 벡터이면, 벡터 원소들의 평균값을 돌려준다. >> A=[5,9,2,4]; >> mean(A) ans = 5 C=max(A) A가 벡터이면, C는 A에서 가장 큰 원소이다. A가 행렬인 경우, C는 A의 각 열에서 가장 큰 원소들로 구성된 행벡터이다. >> A=[5,9,2,4,11,6,11,1]; >> C=max(A) C = 11 [d,n]=max(x) A가 벡터이면, d는 A에서 가장 큰 원소이며 n은 원소의 위치이다(최대값이 여러 개인 경우에는 첫 번째 최대값의 위치). >>[d,n]=max(A) d = 11 n = 5 min(A) 최소값을 찾는다는 점을 제외하고는 max(A)와 동일하다. >> min(A) ans = 2 [d,n]=min(A) 최소값을 찾는다는 점을 제외하고는 [d,n]=max(A)와 동일하다. sum(A) A가 벡터이면, 벡터 원소들의 합을 돌려준다. >> sum(A) ans = 20 3장 배열과 행렬
21
배열 해석용 내장함수 (2/2) 함수 설명 예 sort(A) median(A) std(x) det(A) dot(a,b)
배열 해석용 내장함수 (2/2) 함수 설명 예 sort(A) A가 벡터이면, 벡터의 원소들을 오름차순으로 정렬한다. >> A=[5,9,2,4]; >> sort(A) ans = median(A) A가 벡터이면, 벡터 원소들의 중앙값(median value)을 돌려준다. >> median(A) ans = 4.5 std(x) A가 벡터이면, 벡터의 원소들의 표준편차를 돌려준다. >> std(A) ans = det(A) 정방행렬 A의 행렬식을 돌려준다. >> A=[2, 4; 3, 5]; >> det(A) ans = -2 dot(a,b) 두 벡터 a와 b의 스칼라 곱(내적)을 계산한다. 벡터는 각각 행벡터 또는 열벡터가 될 수 있다. >> a=[1,2,3]; b=[3,4,5]; >> dot(a, b), cross(a, b) ans = 26 ans = cross(a,b) 두 벡터 a와 b의 외적(cross product)을 계산한다. 두 벡터는 3개의 원소를 가져야 한다. inv(A) 정방행렬 A의 역행렬을 돌려준다. >> A=[2,-2,1;3,2,-1;2,-3,2]; >> inv(A) ans = … 3장 배열과 행렬
22
Random number(난수)의 생성 (1/2)
많은 공학 응용에서 많은 난수들의 집합을 필요로 하는 경우가 종종 있다. MATLAB은 난수를 생성하는 내장함수로 rand, randn이 있다. rand 명령어 : 0과 1 사이에서 균일하게 분포된 난수들을 생성시킴 rand : 한 개의 난수 생성, rand(1, n) : n개의 난수 행벡터 생성 rand(n) : nn 크기의 난수 행렬 생성, rand(m, n) : mn 크기의 난수행렬 생성 randperm 명령어 : 1에서 n까지의 정수의 무작위 순열(random permutation)으로 구성된 1n의 행벡터를 생성함 >> x = randperm(8) x = (0, 1)이 아닌 구간에 분포되어 있는 난수들이나 정수로만 이루어진 난수들이 필요한 경우, 다음과 같은 수학적인 조작에 의해 구할 수 있다: (b-a)*rand+a 예) -5와 10 사이의 난수를 가지는 원소 10개의 벡터 : >> v=15*rand(1,10)-5 v = 3장 배열과 행렬
23
Random number(난수)의 생성 (2/2)
모두 정수인 난수의 생성은 실수를 정수로 변환하는 함수를 이용한다. 예) 1에서 100 사이의 정수 난수를 갖는 2×15 행렬의 생성: >> A=round(99*rand(2,15)+1) A = randn 명령어 : 평균이 0이고 표준편차가 1인 정규분포 난수들의 생성 randn(n) : nn 크기의 난수행렬, rand(m, n) : mn 크기의 난수행렬 >> d=randn(3,4) d = >> x = round( 5*randn(1, 10) + 10) x = randn 명령어의 결과에 원하는 평균값을 더하고 원하는 표준편차를 곱함으로써 임의의 평균과 표준편차를 갖는 난수를 생성할 수 있다. 3장 배열과 행렬
24
예제 3.2 등가 힘의 계산 (1/2) 그림과 같이 고리에 가해지는 세 힘의 합력(등가 힘)을 구하라. 풀이
예제 3.2 등가 힘의 계산 (1/2) 그림과 같이 고리에 가해지는 세 힘의 합력(등가 힘)을 구하라. 30° 20° 143° F1=400 N F2=500 N F3=700 N 합력(등가 힘)은 고리에 가해지는 세 힘을 모두 더하여 구한다. 다음 세 단계에 따라 해를 구한다. 각 힘을 두 원소의 벡터로 나타낸다. 벡터의 첫 번째 원소는 힘 벡터의 x 축 성분이고 두 번째 원소는 힘 벡터의 y 축 성분이다. 세 벡터를 더하여 등가 힘을 벡터 형태로 구한다. 등가 힘의 크기와 방향을 구한다. 풀이 직각좌표계에서 힘 벡터 F는 다음과 같이 쓸 수 있다: 3장 배열과 행렬
25
예제 3.2 등가 힘의 계산 (2/2) 스크립트 파일 Ch3Ex3_2.m 명령어 창에서의 프로그램 실행
예제 3.2 등가 힘의 계산 (2/2) 스크립트 파일 Ch3Ex3_2.m 64.95° F1=400 N F2=500 N F3=700 N Ftot= N 명령어 창에서의 프로그램 실행 3장 배열과 행렬
26
예제 3.3 마찰 실험(원소별 계산) 실험에서 마찰 계수 μ는 질량 m을 이동시키는데 필요한 힘 F를 측정하면 다음 식에 의해 구할 수 있다: F m >> m=[ ]; F = [12.5, 23.5, 30, 61, 117, 294]; >> mu=F./(m*9.81) mu = >> mu_ave = mean(mu) mu_ave = 0.6109 m과 F의 값을 벡터로 입력함 원소별 연산으로 각 시험에 대한 mu의 값을 계산함 여섯 번의 시험을 통한 F 에 대한 측정 결과가 다음 표로 주어졌다. 각 시험에 대한 마찰계수를 구하고, 모든 시험 결과에 대한 마찰계수의 평균을 구하라. 시험 번호 1 2 3 4 5 6 질량 m (kg) 10 20 50 힘 F (N) 12.5 23.5 30 61 117 294 3장 배열과 행렬
27
예제 3.4 전기저항회로 분석 (1/3) 다음 전기회로에 대해 Kirchhoff의 전압법칙에 의한 망전류 방법(mesh current method)을 이용하여 각 저항에서의 전류를 구하라. V1 = 20 V, V2 = 12 V, V3 = 40 V R1 = 18 , R2 = 10 , R3 = 16 R4 = 6 , R5 = 15 , R6 = 8 R7 = 12 , R8 = 14 풀이 : Kirchhoff 전압법칙(voltage law) : 폐회로상의 전압을 모두 더하면 0이다. 각 망에 전류 i1, i2, i3, i4 를 할당한 후, Kirchhoff 전압 제2법칙을 각 망에 적용하면, 전류에 대한 선형 연립방정식 4개를 얻을 수 있으며, 이 선형 연립방정식으로부터 망전류의 값을 구할 수 있다. 두 망에 모두 속해 있는 저항을 흐르는 전류는 각 망에서의 전류를 더한 값과 같다. 모든 전류는 시계방향으로 흐른다고 가정한다. 각 망에 대한 식에서, 전압원의 부호는 전류가 -극 쪽으로 흐를 때 양(+)이며, 저항의 전압 부호는 망전류 방향의 전류에 대해 음(-)이다. 3장 배열과 행렬
28
예제 3.4 전기저항회로 분석 (2/3) 네 망에 대해 전압 제2법칙을 적용하여 얻은 선형방정식
예제 3.4 전기저항회로 분석 (2/3) 네 망에 대해 전압 제2법칙을 적용하여 얻은 선형방정식 위의 연립방정식을 행렬 형태로 나타낸다. 3장 배열과 행렬
29
예제 3.4 전기저항회로 분석 (3/3) 스크립트 파일 Ch3Ex3_4.m 명령어 창에서의 실행 결과 3장 배열과 행렬
30
예제 3.5 두 질점의 운동 (1/3) 기차와 자동차가 교차로로 가고 있다. t=0에서 기차는 교차로의 남쪽 400 ft 지점에서 54 mi/h의 정속으로 북쪽으로 달리고 있으며, 동시에 자동차는 교차로의 서쪽 200 ft 지점에서 28 mi/h의 속력과 4 ft/s2의 가속도로 동쪽으로 달리고 있다. 이후 10초 동안에 대해 매초마다 기차와 자동차의 위치, 둘 사이의 거리, 자동차에 대한 기차의 상대 속력을 구하라. 결과는 11×6의 행렬로 생성하여 출력한다. 행렬의 각 행에서 첫째 원소는 시간, 나머지 다섯 원소는 각각 기차의 위치, 자동차의 위치, 기차와 자동차 사이의 거리, 자동차의 속력, 자동차에 대한 기차의 상대 속력이다. 풀이 : 일정한 가속도로 직선을 따라 움직이는 기차와 자동차의 위치: 기차와 자동차 사이의 거리: v=54 mi/h x y v=28 mi/h a=4 ft/s2 400 ft 200 ft 3장 배열과 행렬
31
예제 3.5 두 질점의 운동 (2/3) 기차의 속도는 일정하며, 벡터 기호로는 vtrain = v0 train j이다. 자동차는 가속하고 있으며 시간 t 에서의 속도는 vcar=(v0 car + acar t)i 이다. 자동차에 대한 기차의 상대속도는 vt/c = vtrain – vcar = (vocar + acar t)i + v0 train j 이며, 상대속도의 크기는 벡터의 길이와 같다. 3장 배열과 행렬
32
예제 3.5 두 질점의 운동 (3/3) 스크립트 파일을 명령창에서 실행하면 다음 결과를 얻는다:
예제 3.5 두 질점의 운동 (3/3) 스크립트 파일을 명령창에서 실행하면 다음 결과를 얻는다: 시간 기차 위치(ft) 차 위치(ft) 차와 기차 사이의 거리(ft) 차에 대한 기차의 상대속력(ft/s) 3장 배열과 행렬
33
3장 강의록 끝 3장 끝 3장 배열과 행렬
Similar presentations