1 / 35

MATLAB 개요와 응용 3 장 배열 연산

MATLAB 개요와 응용 3 장 배열 연산. 목 차. 배열의 덧셈과 뺄셈 배열 곱셈 배열 나눗셈 원소별 연산 MATLAB 내장함수에서의 배열 사용 난수의 발생 응용예제. 개요. 스칼라 또는 배열 변수들이 MATLAB 에서 생성되면 , 이 변수들은 다양한 수학연산에 사용될 수 있다 . MATLAB 은 과학과 공학 분야에서 많은 응용분야를 가진 고급 배열연산을 수행하도록 설계되었다 . 이 장에서는 배열을 이용하여 MATLAB 이 수행하는 기본적이고 가장 일반적인 수학 연산을 제시한다 .

pearly
Télécharger la présentation

MATLAB 개요와 응용 3 장 배열 연산

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MATLAB개요와 응용3장 배열 연산

  2. 목 차 • 배열의 덧셈과 뺄셈 • 배열 곱셈 • 배열 나눗셈 • 원소별 연산 • MATLAB 내장함수에서의 배열 사용 • 난수의 발생 • 응용예제 3장 배열과 행렬

  3. 개요 • 스칼라 또는 배열 변수들이 MATLAB에서 생성되면, 이 변수들은 다양한 수학연산에 사용될 수 있다. MATLAB은 과학과 공학 분야에서 많은 응용분야를 가진 고급 배열연산을 수행하도록 설계되었다. 이 장에서는 배열을 이용하여 MATLAB이 수행하는 기본적이고 가장 일반적인 수학 연산을 제시한다. • 배열의 덧셈과 뺄셈 연산 • 선형대수법칙에 따른 배열의 곱셈과 나눗셈, 거듭제곱 연산(표준기호 *, /, ^ 이용) • 원소별 연산(element-by-element operation)을 이용한 배열의 곱셈과 나눗셈, 거듭제곱 연산(.*, ./, .^의 기호 이용) 3장 배열과 행렬

  4. >> v = [3 6 2]; w=[9 -1 5]; >> z = v + w z = 12 5 7 >> A=[2 -3 7; 8 4 5]; >> B=[10 7 4; -11 15 1]; >> C = A - B C = -8 -10 3 19 -11 4 >> D = A + B D = 12 4 11 -3 19 6 >> D-2 ans = 10 2 9 -5 17 4 >> C * 2 ans = -16 -20 6 38 -22 8 행렬의 덧셈이나 뺄셈에 스칼라가 포함된 경우, 행렬의 모든 원소에 스칼라를 더하거나 뺀다. 행렬의 덧셈과 뺄셈 • 같은 크기의(같은 행과 열의 수를 가진) 배열들에 대한 덧셈과 곱셈은 같은 위치의 원소들을 더하거나 빼서 구한다. 3장 배열과 행렬

  5. >> M = [61 78 39 42; 49 57 24 36; 92 97 89 84]; %중간고사 성적 >> F = [69 84 51 46; 55 53 31 40; 96 97 92 90]; %기말고사 성적 >> T = 0.5*(M + F) % 학생별, 과목별 총점 구하기 T = 65.0000 81.0000 45.0000 44.0000 52.0000 55.0000 27.5000 38.0000 94.0000 97.0000 90.5000 87.0000 >> E = F – M % 학생별, 과목별 성적 향상 E = 8 6 12 4 6 -4 7 4 4 0 3 6 배열의 덧셈과 뺄셈 응용예 • 세 학생의 과목별 중간고사 및 기말고사 성적은 다음 표와 같다. 세 학생의 각 과목별 평균점수와 중간고사에 대한 성적향상 점수를 구하라. 3장 배열과 행렬

  6. >> A = [ 1 4 3; 2 6 1; 5 2 8]; >> B = [5 4; 1 3; 2 6]; >> C = A*B T = 15 34 18 32 43 74 >> D = B*A ??? Error using ==> mtimes Inner matrix dimensions must agree. 배열의 곱셈 • MATLAB에서 행렬의 곱은 선형대수의 규칙에 따라 행해진다. 3장 배열과 행렬

  7. >> A = [ 6 2; 4 7]; B = [3 9; 5 1]; >> C = A*B, D = B*A % A*B≠B*A C = 28 56 47 43 D = 54 69 34 17 행렬 곱과 벡터 곱 (1/2) • 행렬의 곱은 교환법칙이 성립하지 않는다. 즉, AB≠BA이다. • 벡터 곱 vw의 경우, 두 벡터의 원소 개수는 같아야 하고 한쪽 벡터가 행벡터이면 나머지 벡터는 열벡터이어야 하며, 스칼라 또는 행렬을 얻게 된다. dot(a, b)내장함수는 두 벡터의 행∙열 구분 없이 내적을 구한다. 3장 배열과 행렬

  8. >> G*F ans = 14 26 31 45 >> A=[2 5 7 0; 10 1 3 4; 6 2 11 5] A = 2 5 7 0 10 1 3 4 6 2 11 5 >> C = 3*A C = 6 15 21 0 30 3 9 12 18 6 33 15 >> D=A*3 D = 6 15 21 0 30 3 9 12 18 6 33 15 >> v = [ 6 2 4 ]; w = [3; 9; 5]; >> x = v*w x = 56 >> z = w*v z = 18 6 12 54 18 36 30 10 20 >> dot(v, w) % v*w ans = 56 >> F=[1 3; 5 7]; G=[4 2; 1 6]; >> F*G ans = 7 20 27 52 v*w ≠ w*v 수와 행렬의 곱은 행렬의 각 원소에 수를 곱해 구한다. 행렬 곱과 벡터 곱 (2/2) 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. >> A^-1% A의 역행렬 ans = 0.2278 -0.0886 -0.1646 -0.0253 -0.1013 0.2405 -0.0823 0.1709 0.0316 >> A*A^-1% AA-1=I ans = 1.0000 0.0000 0.0000 0 1.0000 0 -0.0000 0.0000 1.0000 >> A= [ 7 4 6; 3 1 8; 2 5 4]; >> B=inv(A) B = 0.2278 -0.0886 -0.1646 -0.0253 -0.1013 0.2405 -0.0823 0.1709 0.0316 >> A*B % B*A와 동일 ans = 1.0000 0.0000 0.0000 0 1.0000 0 -0.0000 0.0000 1.0000 5.55e-17 행렬의 역행렬(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)명령으로 구한다. 3장 배열과 행렬

  11. >> A= [ 1 2 0; 0 1 1; 3 0 1]; det(A) ans = 7 >> B=[ 1 2 1; 0 1 1; 3 1 1]; det(B) ans = 3 행렬식(Determinant) • 행렬 A의 determinant는 |A|로 표시하며, MATLAB 명령어 det(A)에 의해 구한다. 3장 배열과 행렬

  12. 행렬 나눗셈 (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. Ax=b >> 4/8 ans = 0.5000 >> 4\8 ans = 2 >> A=[ 4 -2 6; 2 8 2; 6 10 3]; b=[8; 4; 0]; >> x=A^-1 * b ans = -1.8049 0.2927 2.6341 >> x2 = inv(A)*b x2 = -1.8049 0.2927 2.6341 >> x3 = A\b % 가우스 소거법 x3 = -1.8049 0.2927 2.63412 행렬 나눗셈 (2/2) • Right division / • 행 벡터 v와 w에 대해, 선형방정식 vA = w에서 v를 구하려면 vAA-1 = wA-1→ vI = v = wA-1or v = w/A 즉, vA = w의 해는v = w/A or wA-1이다. 3장 배열과 행렬

  14. >> A=[ 4 -2 6; 2 8 2; 6 10 3]; b=[8; 4; 0]; >> x=A\ b % x=inv(A)*b로 구할 수도 있음 x = -1.8049 0.2927 2.6341 >> C=[4 2 6;-2 8 10; 6 2 3]; w = [8 4 0]; >> x = w/C x = -1.8049 0.2927 2.6341 Ax = b → A-1Ax=A-1b →x=A\b xC=w → xCC-1=wC-1 →x = w/C 예제 3.1 연립선형방정식의 해 • 다음 선형연립방정식을 행렬 형식으로 나타내고 해를 구하라. 4x – 2y + 6z = 8 2x + 8y + 2z = 4 6x + 10y + 3z = 0 위 연립방정식을 행렬 형식으로 나타내면 다음과 같다: 3장 배열과 행렬

  15. 선형연립방정식을 행렬로 표현한 후, 계수행렬의 대각선 원소들을 0으로 만들고 대각선 밑의 원소들은 모두 0으로 만듦으로써 삼각형 모양의 계수 행렬로 변형하여 해를 구하는 방법이다. • 예제 : x + 3y + z = 10 4x + y + 2z = 16 x + 2y + 5z= 12 ①행×(-4)+②행 → ② ①행×(-1)+③행 → ③ ②행과 ③행 교환 ②행 ×(-1) → ② ②행 ×(11)+③행 → ③ ③행 ×(-1/46) → ③ Gauss-Jordan Elimination (1/2) 3장 배열과 행렬

  16. ③행×(4) + ②행 → ② ③행×(-1)+ ①행 → ① ②행 ×(-3) +①행 → ① Gauss-Jordan Elimination (2/2) • 위 식의 계수 행렬을 I 행렬로 만들면 Gauss-Jordan소거법이 된다. 3장 배열과 행렬

  17. 원소별(Element-by-Element) 연산 • 행렬에 대한 곱셈과 나눗셈은 선형대수의 법칙을 따른다. 그러나 두 행렬의 원소와 원소 사이의 연산이 필요한 경우가 많다. 덧셈과 뺄셈은 원래 행렬의 같은 위치의 원소끼리 더하거나 빼므로 원칙적으로 원소별 연산에 해당된다. • 원소별 연산은 다음과 같이 점 뒤에 연산기호를 붙이면 된다: .* (원소별 곱셈), .^ (원소별 지수승), ./ (우측 나눗셈), .\ (좌측 나눗셈) • 두 벡터 v와 w가 각각 v=[v1, v2, v3], w=[w1w2w3]이라면, v.*w = [ v1w1, v2w2, v3w3 ] v./w = [ v1/w1, v2/w2, v3/w3 ] v.^w = [ v1w1, v2w2, v3w3] • 두 행렬 A와 B에 대해 3장 배열과 행렬

  18. >> C=A./B C = 2.0000 1.5000 0.3000 1.6667 4.0000 0.5714 >> 2.^B ans = 2 16 1024 8 4 128 >> A*B ??? Error using==> mtimes Inner matrix dimensions must agree. 행렬의 원소별 연산 >> A=[2 6 3; 5 8 4]; >> B=[1 4 10; 3 2 7]; >> A.*B ans = 2 24 30 15 16 28 3장 배열과 행렬

  19. >> x = 1:7 x = 1 2 3 4 5 6 7 >> y = 2*x.^2 – 5*x + 1 y = -2 -1 4 13 26 43 64 >> plot(x, y) • y(x) = (x3 + 5x)/(4x2 – 10)의 계산 >> x = [1:0.03:3]; >> y = (x.^3 + 5*x)./(4*x.^2 - 10); >> plot(x, y) 원소별 연산 예 • 원소별 연산은 많은 독립변수에서 함수값을 계산할 때 매우 유용하다. 먼저 독립변수의 값들을 벡터로 정의하고 이 벡터를 이용하여 함수값을 원소별 연산을 이용하여 계산한다. • y(x)= 2x2- 5x+1 함수의 값 계산 3장 배열과 행렬

  20. MATLAB의 내장함수는 입력인자가 배열인 경우 함수에 의해 정의된 연산이 배열의 각 원소에 대해 수행되도록 만들어져 있으므로, 함수를 원소별로 적용하는 것으로 생각할 수 있다. 따라서 출력은 입력인자 배열의 각 원소를 함수에 대입하여 얻은 결과를 해당 원소로 갖는 배열이다. • cos(x) 함수의 계산 >> x=[0:pi/6:2*pi] x = Columns 1 through 7 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416 Columns 8 through 13 3.6652 4.1888 4.7124 5.2360 5.7596 6.2832 >> y=cos(x) y = Columns 1 through 7 1.0000 0.8660 0.5000 0.0000 -0.5000 -0.8660 -1.0000 Columns 8 through 13 -0.8660 -0.5000 -0.0000 0.5000 0.8660 1.0000 >> plot(x, y), grid on 내장함수에서의 배열 사용 (1/2) 3장 배열과 행렬

  21. sqrt(x) 함수의 계산 >> d=[1 4 9; 16 25 36; 49 64 81] d = 1 4 9 16 25 36 49 64 81 >> h=sqrt(d) h = 1 2 3 4 5 6 7 8 9 내장함수에서의 배열 사용 (2/2) 3장 배열과 행렬

  22. 배열 해석용 내장함수 (1/2) 3장 배열과 행렬

  23. 배열 해석용 내장함수 (2/2) 3장 배열과 행렬

  24. Random number(난수)의 생성 (1/2) • 많은 공학 응용에서 많은 난수들의 집합을 필요로 하는 경우가 종종 있다. MATLAB은 난수를 생성하는 내장함수로 rand, randn이 있다. • rand 명령어: 0과 1 사이에서 균일하게 분포된 난수들을 생성시킴 • rand : 한 개의 난수 생성, rand(1, n) : n개의 난수 행벡터 생성 • rand(n) : nn 크기의 난수 행렬 생성, rand(m, n) : mn 크기의 난수행렬 생성 • randperm 명령어: 1에서 n까지의 정수의 무작위 순열(random permutation)으로 구성된 1n의 행벡터를 생성함 >> x = randperm(8) x = 8 2 7 4 3 6 5 1 • (0, 1)이 아닌 구간에 분포되어 있는 난수들이나 정수로만 이루어진 난수들이 필요한 경우, 다음과 같은 수학적인 조작에 의해 구할 수 있다: (b-a)*rand+a 예) -5와 10 사이의 난수를 가지는 원소 10개의 벡터 : >> v=15*rand(1,10)-5 v = 7.2209 8.5869 -3.0952 8.7006 4.4854 -3.5369 -0.8225 3.2032 9.3626 9.4733 3장 배열과 행렬

  25. 모두 정수인 난수의 생성은 실수를 정수로 변환하는 함수를 이용한다. 예) 1에서 100 사이의 정수 난수를 갖는 2×15 행렬의 생성: >> A=round(99*rand(2,15)+1) A = 44 77 20 45 71 28 66 13 96 59 39 80 49 65 76 68 17 50 35 23 • randn 명령어: 평균이 0이고 표준편차가 1인 정규분포 난수들의 생성 • randn(n) : nn 크기의 난수행렬, rand(m, n) : mn 크기의 난수행렬 >> d=randn(3,4) d = -0.5883 -0.1364 1.0668 2.1832 0.1139 0.0593 >> x = round( 5*randn(1, 10) + 10) x =6 4 10 10 7 10 10 3 13 8 randn 명령어의 결과에 원하는 평균값을 더하고 원하는 표준편차를 곱함으로써 임의의 평균과 표준편차를 갖는 난수를 생성할 수 있다. Random number(난수)의 생성 (2/2) 3장 배열과 행렬

  26. 그림과 같이 고리에 가해지는 세 힘의 합력(등가 힘)을 구하라. • 풀이 • 직각좌표계에서 힘 벡터 F는 다음과 같이 쓸 수 있다: F3=700 N F2=500 N 143° 30° 20° F1=400 N • 합력(등가 힘)은 고리에 가해지는 세 힘을 모두 더하여 구한다. 다음 세 단계에 따라 해를 구한다. • 각 힘을 두 원소의 벡터로 나타낸다. 벡터의 첫 번째 원소는 힘 벡터의 x 축 성분이고 두 번째 원소는 힘 벡터의 y 축 성분이다. • 세 벡터를 더하여 등가 힘을 벡터 형태로 구한다. • 등가 힘의 크기와 방향을 구한다. 예제 3.2 등가 힘의 계산 (1/2) 3장 배열과 행렬

  27. 스크립트 파일 Ch3Ex3_2.m 명령어 창에서의 프로그램 실행 Ftot=589.98 N F3=700 N F2=500 N 64.95° F1=400 N 예제 3.2 등가 힘의 계산 (2/2) 3장 배열과 행렬

  28. 실험에서 마찰 계수 μ는 질량 m을 이동시키는데 필요한 힘 F를 측정하면 다음 식에 의해구할 수 있다: F m 여섯 번의 시험을 통한 F에 대한 측정 결과가 다음 표로 주어졌다. 각 시험에 대한 마찰계수를 구하고, 모든 시험 결과에 대한 마찰계수의 평균을 구하라. >> m=[2 4 5 10 20 50]; F = [12.5, 23.5, 30, 61, 117, 294]; >> mu=F./(m*9.81) mu = 0.6371 0.5989 0.6116 0.6218 0.5963 0.5994 >> mu_ave = mean(mu) mu_ave = 0.6109 m과 F의 값을 벡터로 입력함 원소별 연산으로 각 시험에 대한 mu의 값을 계산함 예제 3.3 마찰 실험(원소별 계산) 3장 배열과 행렬

  29. 다음 전기회로에 대해 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.4 전기저항회로 분석 (1/3) 3장 배열과 행렬

  30. 네 망에 대해 전압 제2법칙을 적용하여 얻은 선형방정식 • 위의 연립방정식을 행렬 형태로 나타낸다. 예제 3.4 전기저항회로 분석 (2/3) 3장 배열과 행렬

  31. 스크립트 파일 Ch3Ex3_4.m • 명령어 창에서의 실행 결과 예제 3.4 전기저항회로 분석 (3/3) 3장 배열과 행렬

  32. 기차와 자동차가 교차로로가고 있다. t=0에서 기차는 교차로의 남쪽 400 ft 지점에서 54 mi/h의 정속으로 북쪽으로 달리고 있으며, 동시에 자동차는 교차로의 서쪽 200 ft 지점에서 28 mi/h의 속력과 4 ft/s2의 가속도로 동쪽으로 달리고 있다. 이후 10초 동안에 대해 매초마다 기차와 자동차의 위치, 둘 사이의 거리, 자동차에 대한 기차의 상대 속력을 구하라.결과는 11×6의 행렬로생성하여 출력한다.행렬의 각 행에서 첫째 원소는 시간, 나머지 다섯 원소는 각각 기차의 위치, 자동차의 위치, 기차와 자동차 사이의 거리, 자동차의 속력, 자동차에 대한 기차의 상대 속력이다. y v=28 mi/h a=4 ft/s2 x 200 ft 400 ft v=54 mi/h • 풀이 : 일정한 가속도로 직선을 따라 움직이는 기차와 자동차의 위치: 기차와 자동차 사이의 거리: 예제 3.5 두 질점의 운동 (1/3) 3장 배열과 행렬

  33. 기차의 속도는 일정하며, 벡터 기호로는 vtrain = v0 trainj이다. 자동차는 가속하고 있으며 시간 t에서의 속도는 vcar=(v0 car + acar t)i이다. 자동차에 대한 기차의 상대속도는 vt/c = vtrain – vcar = (vocar + acar t)i + v0 trainj이며, 상대속도의 크기는 벡터의 길이와 같다. 예제 3.5 두 질점의 운동 (2/3) 3장 배열과 행렬

  34. 스크립트 파일을 명령창에서 실행하면 다음 결과를 얻는다: 차에 대한 기차의 상대속력(ft/s) 시간 차와 기차 사이의 거리(ft) 차 위치(ft) 기차 위치(ft) 예제 3.5 두 질점의 운동 (3/3) 3장 배열과 행렬

  35. 3장 끝 3장 강의록 끝 3장 배열과 행렬

More Related