61
1 MATLAB 둘러보기

제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

제 1 장

MATLAB 둘러보기

Page 2: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• MATLAB: MATrix LABoratory

• 대화 형식 프로그래밍 환경: 제 4세대 언어

MATLAB 시작하기

• MATLAB 데스크탑 window:

Page 3: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• MATLAB의 수행: Command Window에서 명령어를 입력

• Command Window: Desktop→Desktop Layout→Command Window Only

• 기본 상태: Desktop→Desktop Layout→Default

Page 4: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

Command Window에서의 입력

• Command Window 위에서 마우스를 클릭하여 이를 활성화

• 프롬프트(>>)에서 명령어 입력을 시작

• 보기: a = [1 2 3]라고 타이프하고 Enter:

>> a = [1 2 3] a = 1 2 3

• ”a ="와 “1 2 3”이 빈 줄로 분리

• format compact: 스크린 상의 빈 줄들로 이루어지는 공간을 생략

• 보기: 2+2, factor(123456789), sin(100)을 시도

Page 5: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에
Page 6: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

Command Window에서 명령어를 입력할 때 유의해야 할 사항:

• 대문자와 소문자는 다르다.

• 변수의 이름을 타이프하면 현재값을 스크린에 제시

• 마지막 부분에 세미콜론(;)을 두면 변수값이 스크린에 나타나지 않는다.

• (), [], 그리고 {} 들은 서로 교환될 수 없다.

• 위쪽 화살표와 아래쪽 화살표 키를 이용하여 이전에 입력한 명령문들을 순차적으로 검색

• 첫 번째 몇 글자를 타이프하고 위쪽 화살표 키를 누르면 예전의 명령어를 다시 불러올 수

있다.

• help (주제명)을 입력하면 명령어, 함수, 혹은 관심있는 주제에 대한 도움말에 접할 수 있다.

• MATLAB을 끝내려면 exit나 quit를 입력

Page 7: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

Help(도움말)의 이용

• ommand Window에서 help는 특정 명령어에 대한 신속한 정보를 얻는 데에 유용

• MATLAB 도움말 검색기를 이용하면 보다 광범위한 내용을 얻을 수 있다.

• 창 상단의 메뉴 바에서 Help를 클릭하면 도움말 검색을 위한 다양한 옵션들을 제공

• Help를 클릭하고 이로부터 나타나는 부메뉴에서 MATLAB Help를 클릭하면 Help Navigator

창이 나타난다.

• 도움말 검색방법: 메뉴 바에서 Help를 클릭하고 이로부터 나타나는 부메뉴에서 Using the

Help Browser를 선택

MATLAB 작업 중지하기

• 프롬프트에서 quit를 입력

• 일반적으로 창을 닫아주는 버튼(대개 상부 오른쪽 구석에 있는 X)을 클릭

• File 메뉴에서 Exit MATLAB을 선택

Page 8: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

연산과 변수의 할당

• +: 더하기, -: 빼기, *: 곱하기, /: 나누기, ^: 멱급수 연산

• 보기: >> 5^3 - (6 + 2)/2 + 7*4 ans = 1 4 9

• 보기: 와 을 계산

>> (1+sqrt(5))/2 ans = 1.6180 >> 2^(-53) ans = 1.1102e-016

• 연산 결과: ans라고 불리는 변수에 할당 • 이를 이용하여 다른 계산을 수행하려면 변수 ans를 사용 • 보기: 이전 답의 제곱과 제곱근의 합

>> ans^2 + sqrt(ans) ans = 2.2213e+004

Page 9: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 어떤 변수에 값을 할당: 등호(=)를 사용

• 보기:

>> u = cos(20) u = 0.4081 >> v = sin(20) v = 0.9129 >> u^2 + v^2 ans = 1

• 삼각함수의 계산: 라디안을 사용

• pi: 값을 갖는 항구적인 변수

>> y = tan(pi/8) y = 0.4142

Page 10: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 기본적인 산술 연산자:

연산자 기능 연산자 기능

+ 더하기 .^ 배열의 거듭제곱

- 빼기 ∖ 백슬래쉬, 행렬의 왼 나눗셈

* 곱셈 / 슬래쉬, 오른 나눗셈

.* 배열의 곱셈 .∖ 배열의 왼 나눗셈

^ 거듭제곱 ./ 배열의 오른 나눗셈

Page 11: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•복소수

• 허수단위 의 표현: I, j, sqrt(-l), complex(0,1)

• 보기: 실수부가 2, 허수부가 -3인 복소수는 2-3i, 2-3*i, 2-3*sqrt(-1), 혹은 complex(2,-3)과

같이 표현

• conj: 켤레복소수, real: 실수부, imag: 허수부

• 복소수의 크기: abs, 위상각: angle을 이용

• 보기: >> w = (-1)^0.25 w = 0.7071 + 0.7071i >> z = conj(w) z = 0.7071 - 0.7071i >> [real(z) imag(z)] ans = 0.7071 -0.7071 >> exp(i*pi) ans = -1.0000 + 0.0000i >> angle(w) ans = 0.7854 >> abs(w) ans = 1

Page 12: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•입력 오류의 수정

• 에러 메시지의 보기:

>> 4x^3 ??? 4x^3 | Error: Missing MATLAB operator.

• 오류의 수정: 상향 화살표( ) 키와 왼쪽 및 오른쪽 화살표 키들을 이용하여 명령어들을

편집한 다음 Return이나 Enter 키를 눌러 다시 수행

•계산의 중지

• 계산에서 빠져나오지 못하거나 연산에 너무 오랜 시간이 걸리는 경우: Ctrl+C

Page 13: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

벡터와 행렬

• 벡터

• 벡터: 순서로 나열된 수들의 목록 • 대괄호 안에 수들을 콤마나 빈 칸으로 구분시켜 넣음으로써 벡터를 입력 • 보기:

>> u = [-3 2 4 8 11] u = -3 2 4 8 11 >> u = [-3,2,4,8,11] u = -3 2 4 8 11 >> v = [-5 3 -7 9 12 -1 0 6] v = -5 3 -7 9 12 -1 0 6

• 보기: 1에서 10까지의 값을 갖는 벡터를 생성

>> w = 1:10 w = 1 2 3 4 5 6 7 8 9 10

• 증가분은 0:0.1:2이나 100:-2:0과 같이 소수이거나 음수일 수 있다. • 일반적으로 m:n은 원소가 m, m+1, ..., n 인 벡터를 생성

Page 14: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 증가분이 1이 아닌 경우는 m:s:n으로 지정: m으로 시작하여 s만큼 증가(혹은 감소)하면서 n에 이르는 원소들이 생성 • 보기:

>> g = 2:3:10, h = 1:-0.25:0 g = 2 5 8 h = 1.0000 0.7500 0.5000 0.2500 0

• 벡터 w의 원소: w(1), w(2) 등과 같이 취할 수 있다 >> w(3) ans = 5

• 벡터 w에서 세 번째부터 6번째 원소까지로 구 성되는 새로운 벡터 v: >> v = w(3:6) v = 3 4 5 6

Page 15: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 벡터 w를 행벡터로부터 열벡터로 전환: w 다음에 프라임(‘)을 붙인다: >> w' ans = 1 3 5 7 9 • 벡터 X의 각 원소들에 대한 제곱: >> X = 0:2:10 X = 0 2 4 6 8 10 >> X.^2 Ans =

0 4 16 36 64 100

• 마침표(.): X 안의 숫자들이 개별적으로, 혹은 원소별로 제곱

• 벡터들을 원소별로 곱하거나 나눌 경우: .*이나 ./를 이용

Page 16: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 보기: 벡터 a의 원소들을 벡터 b의 원소들과 곱하기

>> a = 1:2:10 a = 1 3 5 7 9 >> b = [-2 3 -5 1 6] b = -2 3 -5 1 6 >> a.*b ans = -2 9 -25 7 54

•linspace

• linspace(a,b,n): a와 b 사이에 간격이 동일한 n 개의 점들을 생성 • n을 생략하면 n = 100으로 설정

>> linspace(-1,1,9) ans = -1.0000 -0.7500 -0.5000 -0.2500 0 0.2500 0.5000 0.7500 1.0000

Page 17: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 벡터의 각 원소에 대한 계산

• exp(a): 행 벡터 a의 각 원소에 대한 지수값을 계산

• log(ans): ans 에 저장된 각 원소에 대한 로그값을 계산

• sqrt(a): 벡터 a의 각 원소에 대한 제곱근 값을 계산

>> a = [1 2 3]; >> exp(a) ans = 2.7183 7.3891 20.0855 >> log(ans) ans = 1 2 3 >> sqrt(a) ans = 1.0000 1.4142 1.7321

Page 18: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 벡터의 내적(inner product)과 외적(outer product)

• 내적, 스칼라, 혹은 점 곱: x'*y, dot(x,y)

• 외적: cross

>> x = [-1 0 1]'; y = [3 4 5]'; >> x'*y ans = 2 >> dot(x,y) ans = 2 >> cross(x,y) ans = -4 8 -4 >> Z = x*y' Z = -3 -4 -5 0 0 0 3 4 5

Page 19: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•행렬

>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12] A = 1 2 3 4 5 6 7 8 9 10 11 12

• 각 행들은 세미콜론으로 구분 • A+c: 스칼라 c를 A의 각 원소에 더함 • A-B: A와 B의 차이 • A-c: A의 각 원소로부터 숫자 c를 뺌 • A와 B의 곱: A*B • 숫자 c와 행렬 A의 곱: c*A • A': A의 공액 전치 • 예: 행렬 A와 열벡터 x의 행렬 곱

• 3 x 4 행렬의 보기:

>> x = [3 -2 5 4]' x = 3 -2 5 4 >> A*x ans = 30 70 110

Page 20: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 두 행렬 A와 B의 합, 차이, 곱:

» A = [2 1 3; -1 0 1; 4 2 6] A = 2 1 3 -1 0 1 4 2 6 » B = [1 0 2;3 -2 1;-1 1 2] B = 1 0 2 3 -2 1 -1 1 2 » C = A+B C = 3 1 5 2 -2 2 3 3 8 » D = A-B D = 1 1 1 -4 2 0 5 1 4 >> P = A*B P = 2 1 11 -2 1 0 4 2 22

Page 21: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• sum 함수: 각 열의 합

>> sum(A) ans = 5 3 10

• diag: 주어진 행렬의 대각원소

>> diag(A) ans = 2 0 6 >> sum(diag(A)) ans = 8

• W^2 : 행렬곱 W*W • W.^2 : W의 모든 원소들이 각각 제곱

>> W = [1 2; 3 4] W = 1 2 3 4 >> W^2 ans = 7 10 15 22

Page 22: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

>> W.^2 ans = 1 4 9 16 >> x = [1 2 3]; y = [2 3 4]; z = [1 2; 3 4]; >> x.^y ans = 1 8 81 >> 2.^x ans = 2 4 8 >> 2.^z ans = 2 4 8 16

• A' : 행렬 A의 켤레 전치 • A가 실수이면 A'는 단순한 전치 • A.' : 켤레화되지 않은 전치

>> Z = [1 -i;1+2i 1+i] Z = 1.0000 0 - 1.0000i 1.0000 + 2.0000i 1.0000 + 1.0000i >> Z' ans = 1.0000 1.0000 - 2.0000i 0 + 1.0000i 1.0000 - 1.0000i

>> Z.' ans = 1.0000 1.0000 + 2.0000i 0 - 1.0000i 1.0000 + 1.0000i

Page 23: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 행렬의 계수(係數, rank): rank • 행렬값: det • 역행렬: inv

>> B = [1 0 2;3 -2 1;-1 1 2] B = 1 0 2 3 -2 1 -1 1 2 >> rank(B) ans = 3 >> det(B) ans = -3 >> inv(B) ans = 1.6667 -0.6667 -1.3333 2.3333 -1.3333 -1.6667 -0.3333 0.3333 0.6667 >> B^-1 ans = 1.6667 -0.6667 -1.3333 2.3333 -1.3333 -1.6667 -0.3333 0.3333 0.6667

Page 24: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•행렬 B의 2행 3열에 위치하는 원소: B(2,3), 두 번째 열: B(:,2), 세 번째 행: B(3,:)

>> B(2,3) ans = 1 >> B(:,2) ans = 0 -2 1 >> B(3,:) ans = -1 1 2

B에서 2열과 3열만을 취하여 새로운 행렬 C를 만든다면

>> C = B(:,2:3) C = 0 2 -2 1 1 2

Page 25: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 자동구성 행렬: eye, zeros, ones들을 이용

>> I3 = eye(3,3), Y = zeros(3,5), Z = ones(2) I3 = 1 0 0 0 1 0 0 0 1 Y = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Z = 1 1 1 1

• 불규칙 수들로 구성되는 행렬: rand와 randn

• rand: [0,1] 상에서 균일 분포를 갖는 불규칙 원소들을 생성

• randn: 정규 (0,1) 분포를 갖는 불규칙 원소들을 생성

>> F = rand(3), G = randn(1,5) F = 0.7062 0.3586 0.8468 0.5260 0.8488 0.3270 0.2157 0.0426 0.5541 G = 1.4051 1.1780 -1.1142 0.2474 -0.8169

Page 26: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

출력의 억제

• 입력라인 끝부분 스크린의 세미콜론(;) : MATLAB 명령어의 출력이 프린트되는 것이 억제

>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; >> A*x;

데이터의 표현

• 데이터 출력형식: format 명령어를 이용

>> format long >> a = [1 2 3]; >> sqrt(a) ans = 1.00000000000000 1.41421356237310 1.73205080756888 >> format short >> sqrt(a) ans = 1.0000 1.4142 1.7321

Page 27: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 다양한 format 명령어 및 옵션:

명령어+옵션 기 능 보기

format 기본. short와 동일.

format bank 달러와 센트의 고정서식 2.23

format compa

ct

여분의 라인을 생략 theta = pi/2

theta =

1.5708

format hex 16진수 40092fb54442d18

format long 15자리로 조정된 고정소수점 3.14159265358979

format long e 15자리 부동소수점 3.141592653589793e+0

0

format long g 15자리 고정소수점 또는 부동소수

점의 최적합표시

3.14159265358979

format short 5자리로 조정된 고정소수점 3.1416

format short e 5자리 부동소수점 3.1416e+00

format short g 5자리 고정소수점 또는 부동소수

점의 최적합표시

3.1416

format rat 유리수 분수형식 355/113

Page 28: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• vpa: 변수 정밀도 연산을 수행

>> vpa('sqrt(2)', 50) ans = 1.4142135623730950488016887242096980785696718753769

• lookfor 명령어: 지정한 키워드가 포함되는 함수, 명령어를 추출하여 해당하는 함수

및 명령어 이름을 모두 제시

• 소수점 이하의 취급:

함수 설명 기능

round 가장 가까운 정수로의 포함 사사오입

ceil +방향으로의 포함 올림

floor -방향으로의 포함 내림

fix 0을 향한 가장 가까운 정수로의 포함 내림(+의 경우) 올림(-의 경우)

>> round((100*3+150*3)*0.05) ans = 38

Page 29: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

변수의 처리

•clear 명령어 • 함수 이름과 변수 이름이 같을 때에는 변수이름이 우선 • clear: 변수를 모두 소거 • 개별적인 변수의 소거: clear 다음에 소거하고자 하는 변수 이름을 입력

>> clear x

• clear 명령어의 옵션:

clear 명령어의 옵션 기능

clear 작업공간에서 모든 변수를 소거

clear variables 작업공간에서 모든 변수를 소거

clear global 모든 광역 변수를 소거

clear functions 모든 컴파일 된 m파일, mex 파일로의 링크를 소거

clear all 모든 변수, 광역 변수, 함수, MEX 링크, Java 패키지

임포트 리스트를 소거

clear import

명령어 프롬프트로 Java 패키지 임포트 리스트를 소

단, 함수 안에서는 사용 불가

clear classes 클래스의 정의도 소거

Page 30: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•특수변수와 정수

특수변수와 정수 기능

ans 최신 출력

eps 부동소수점에서의 상대정밀도(= )

realmax + 최대부동소수점 개수

realmin + 최소부동소수점 개수

pi 3.1415926535897

i, j 허수단위

inf 무한대

NaN 부정치

Page 31: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• whos 명령어

• Command Window에서 변수를 확인

>> whos Name Size Bytes Class A 3x3 72 double array B 3x3 72 double array X 1x6 48 double array Z 3x3 72 double array a 1x3 24 double array ans 1x3 24 double array b 3x1 24 double array u 1x5 40 double array v 1x8 64 double array w 1x5 40 double array x 3x1 24 double array y 1x1 8 double array Grand total is 64 elements using 512 bytes

Page 32: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

기호를 이용한 연산 • Symbolic Toolbox(기호 툴박스)를 이용 • syms를 사용하여 기호변수로 사용하고자 하는 변수들을 선언

>> syms y >> a = 7; >> a^2 - 2*a*y + y ans = 49-13*y >> syms x y >> z = x^2 - 2*x*y + y z = x^2-2*x*y+y >> 5*y*z ans = 5*y*(x^2-2*x*y+y) >> syms x y >> (x - y)*(x - y)^2 ans = (x-y)^3 >> expand(ans) ans = x^3-3*x^2*y+3*x*y^2-y^3 >> factor(ans) ans = (x-y)^3

Page 33: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• expand: 식의 곱셈

• factor: 식을 인수분해

• simplify: 식을 가능한 한 간단하게 표현

>> simplify((x^3 - y^3)/(x-y))

ans =

x^2+x*y+y^2

>> syms p x y

>> y = ((x^p)^(p+1))/x^(p-1);

>> simplify(y)

ans =

(x^p)^p*x

Page 34: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•기호식에서의 치환

• ubs: 식의 원래 변수들 가운데 하나(혹은 그 이상)에 대하여 수치값이나 다른 기호식으 로 치환 • subs(w, u, 2): 식 w에서 변수 u 대신에 2를 치환

>> d = 1, syms u v d = 1 >> w = u^2 - v^2 w = u^2-v^2 >> subs(w,u,2) ans = 4-v^2

>> subs(w,v,d) ans = u^2-1 >> subs(w,v,u+v) ans = u^2-(u+v)^2 >> simplify(ans) ans = -2*u*v-v^2

Page 35: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

M-파일

• M-파일: MATLAB 명령어들을 포함하는 통상적인 텍스트 파일

• M-파일의 작성: MATLAB에 내장된 Editor(편집기)를 이용 - 상단 메뉴바에서 File->New->M-

File의 순서로 선택

• 명령어 입력라인에서 edit를 타이프, 혹은 edit 다음에 현재의 디렉토리에 있는 기존 M-파일의

이름을 타이프하여 시작

• 디렉토리 검색기에서 M-파일을 더블 클릭

• 스크립트 M-파일과 함수 M-파일로 구분

• M-파일의 저장: MATLAB 상단의 "Current Directory"를 이 파일이 저장된 디렉토리로 지정

Page 36: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•스크립트 M-파일

• 순서대로 수행되는 일련의 MATLAB 명령어들을 포함 • 보기:

format long x = [0.1 0.01 0.001]; y = sin(x)./x

• 저장시 확장자 “.m"을 반드시 포함 • 보기: 다음 스크립트를 편집기에서 작성한 다음 marks.m라는 이름으로 저장

markdat = [12 0 5 28 87 3 56]; exsort = sort(markdat) exmean = mean(markdat) exmed = median(markdat) exstd = std(markdat)

• 명령어 라인에서 이를 수행

>> marks exsort = 0 3 5 12 28 56 87 exmean = 27.2857 exmed = 12 exstd = 32.8010

Page 37: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•코멘트의 추가

• 퍼센트 기호(%): 코멘트의 시작 • % 기호가 있는 줄의 나머지 부분: 수행되지 않음

format long % 15자리로 표시 x = [0.1, 0.01, 0.001]; y = sin(x)./x % 이 값들은 x가 0에 접근함에 따라 % sin(x)/x는 1에 접근함을 보여준다.

• 코멘트에 여러 줄이 필요할 때: 각 줄이 시작될 때마다 맨 앞에 퍼센트 기호

•함수 M-파일

• 현재 사용중인 디렉토리나 MATLAB의 다른 경로에 위치해야 하는 평범한 텍스트 파일 • 저장할 때 파일 이름을 반드시 함수 이름과 같도록 해야 한다. • 보기:

function y = slm(c) % SLM은 x = 10^(-b)에 대하여 sin(x)/x를 계산한다. % 여기에서 b = 1, ..., c 이다. format long b = 1:c; x = 10.^(-b); y = (sin(x)./x)';

Page 38: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 함수 M-파일의 첫 번째 줄: function으로 시작 - MATLAB은 이 파일을 함수 M-파일로 인식 • M-파일의 첫 번째 줄: 함수의 이름을 지정 • 함수 M-파일의 첫 번째 줄 다음에는 그 M-파일이 무엇을 위한 것인가를 설명하여 주는 코멘 트들을 추가 - help 명령어는 자동적으로 이 정보를 제시 • 예:

>> help slm SLM은 x = 10^(-b)에 대하여 sin(x)/x를 계산한다. 여기에서 b = 1, ..., c 이다.

• 함수의 수행: 명령어 라인에서 함수의 이름을 입력

>> slm(5) ans = 0.99833416646828 0.99998333341667 0.99999983333334 0.99999999833333 0.99999999998333

Page 39: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

함수

•내장함수 • 대표적인 MATLAB 내장함수: sqrt, cos, sin, tan, log, exp, atan, gamma, erf, besselj 등

>> log(exp(3)) ans = 3

• 함수 log: 자연로그로서 “ln"으로 표현

>> sin(2*pi/3) ans = 0.8660

• 기호 인수의 사용:

>> sin(sym('2*pi/3')) ans = 1/2*3^(1/2)

• 선형방정식 시스템:

로 두면

Page 40: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 백슬래쉬 함수의 이용:

>> A = [-3 0 -1; 2 5 -7; -1 4 8] A = -3 0 -1 2 5 -7 -1 4 8 >> b = [-3; 1; 2] b = -3 1 2 >> x = A\b x = 0.9124 0.2028 0.2627

•사용자 정의함수

• 명령어 inline을 사용 • 연산자 @를 사용하여 “익명함수”(anonymous function)를 생성 • 별도의 함수 M-파일로 생성

MATLAB에서 사용자가 자신의 함수를 정의하는 방법:

Page 41: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

의 정의

inline을 사용:

>> f1 = inline('x^2', 'x') f1 = Inline function: f1(x) = x^2

익명함수를 생성:

>> f = @(x) x^2 f = @(x) x^2

정의된 함수의 계산:

>> f1(4) ans = 16 >> f(4) ans = 16

• 벡터에 대한 연산의 수행: 연산자 *, /, 그리고 ^ 앞에 마침표

Page 42: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 의 벡터화된 버전:

>> f = @(x) x.^2 혹은 >> f1 = inline('x.^2', 'x') 예: >> f(1:5) ans = 1 4 9 16 25

• 다변수 함수의 정의:

>> g = @(x, y) x^2 + y^2; g(1,2) >> g1 = inline('x^2 + y^2', 'x', 'y'); g1(1,2)

• 벡터계산:

Page 43: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 예: x가 y보다 클 경우 x와 y를 서로 교환

if x > y temp = y; y = x; x = temp; end

• elseif를 이용하여 하나, 혹은 그 이상의 조건들을 추가

•for 루프 • for 루프의 사용구조: for (변수) = (표현) (문장) end • 예: 조화수열 1/i의 처음부터 25번째 항까지의 합 >> s = 0; >> for i = 1:25, s = s + 1/i; end, s s = 3.8160

루프

• if 문장의 가장 간단한 형태:

• if 문

if (조건) (문장) end

• (조건)의 원소들이 모두 0이 아니면 (문장)이 수행

Page 44: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

그래프

• ezplot을 이용한 그래프

• 단일변수 함수의 그래프를 그리는 가장 간단한 방법 • 함수를 나타내는 문자열, 기호식, 혹은 익명함수를 이용

• 예: 구간 -2에서 2 사이에서 의 그래프

>> ezplot('x^2 + x + 1', [-2 2])

• 기호식의 사용: >> syms x, ezplot(x^2 + x + 1, [-2 2])

• 익명함수의 사용:

>> ezplot(@(x) x.^2 + x + 1, [-2 2])

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

1

2

3

4

5

6

7

x

x2+x+1

Page 45: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•그래프의 보정

• 그래프 타이틀의 변경:

>> title '포물선'

•다른 방법: 그림창 상부의 Edit 메뉴에서 Axes Properties...를 선택

•라벨: ylabel - 세로축 라벨, xlabel - 수평 축 라벨

• axis: 수직축과 수평축의 범위를 변경

•예: 수직축의 범위를 0부터 3까지로 제한

>> axis ([-1 2 0 3])

•axis square: 그래프의 모양을 정사각형으로 변형

Page 46: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•plot을 이용한 그래프

• plot: 수치 데이터의 벡터에 대하여 작용

• plot(X, Y): X와 Y는 길이가 같은 벡터

>> X = [1 2 3]; Y = [4 6 5]; plot(X,Y)

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 34

4.2

4.4

4.6

4.8

5

5.2

5.4

5.6

5.8

6

Page 47: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 기본적으로 2차원(2D) 그래프를 생성:

>> t = 0:0.005:1; z = exp(10*t.*(t-1)).*sin(12*pi*t);

>> plot(t,z)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

Page 48: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• fplot: 문자열로 표시되는 함수의 그래프를 작성

•>> fplot('exp(10*t.*(t-1)).*sin(12*pi*t)', [0 1 -0.8 0.8])

• [-1, 3]에서 ● 의 그래프 작성:

x의 범위를 지정하고 x에 따른 함수값 y를 계산한 다음 plot 함수를 이용

• grid: 그래프에 격자를 삽입

>> x = -1:0.1:3; >> y = x.^2 -3*x +1; >> plot(x,y) >> grid >> title('x^2 -3*x +1') >> xlabel('x'), ylabel('y')

-1 -0.5 0 0.5 1 1.5 2 2.5 3-2

-1

0

1

2

3

4

5x2 -3*x +1

x

y

Page 49: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•여러 곡선들의 그래프

•두 개 이상의 곡선들을 하나의 그래프 상에 겹쳐 그리려면 hold on을 이용

•hold on은 hold off를 입력할 때까지 유효

•예: >> ezplot('exp(-x^2)', [0 10]) >> hold on >> ezplot('cos(x)', [0 10]) >> hold off >> title 'exp(-x^2) and cos(x)'

0 1 2 3 4 5 6 7 8 9 10

-1

-0.5

0

0.5

1

x

exp(-x2) and cos(x)

• plot의 이용: >> x = 0:0.01:10; plot(x, exp(-x.^2), x, cos(x)) • hist: 히스토그램 >> hist(randn(1000,1))

-3 -2 -1 0 1 2 30

50

100

150

200

250

Page 50: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•3차원 그래프

•3차원 그래프는 명령어 plot3를 사용

• 구간 (t는 0.1씩 증가)에서 함수

의 3차원 그래프:

» t = [0:0.1:4*pi]; » y1 = sin(t/2); » y2 = cos(t/2); » y3 = cos(t/2); » plot3(y1, y2, y3) » xlabel('x 축') » ylabel('y 축') » zlabel('z 축') » title('3차원 그래프') » grid

Page 51: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•미분방정식의 풀이

• MATLAB은 미분방정식의 풀이를 위한 많은 다양한 함수들을 내장

• ode45는 ode23과 함께 가장 널리 사용

• ode45를 사용한 미분방정식의 풀이: (구간: )

• 주어진 미분방정식을 나타내는 함수 M-파일을 작성:

% myode1.m : 간단한 미분방정식의 보기 function dy = myode1(t,y) % dy = myode1(t,y)는 미분을 계산한다. dy = - y - sin(3*t);

• Command Window(명령어 창)에서 아래 코드를 수행:

>> tinv = [0 3]; y0 = 1; >> [t,y] = ode45(@myode1,tinv,y0);

>> plot(t,y)

0 0.5 1 1.5 2 2.5 3-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 52: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

MATLAB 활용의 보기

• 개체증가모델의 계산

• 개체증가모델(population growth model):

• MATLAB Editor/Debugger window에서 다음과 같은 프로그램을 작성: function [t, x] = pmod(a, xinit, n) x(1) = xinit; t(1) = 0; for k = 2:n+1; t(k) = k-1; x(k) = a*x(k-1)*(1-x(k-1)); end

• 위의 함수 M-파일을 pmod라는 이름으로 저장

• 다음에 원래의 MATLAB window로 되돌아 와서 이 함수를 사용하는 프로그램을 작성하고 실행:

a는 2.8, 초기값은 0.1, 시간은 30까지로 설정

» [ts, xp] = pmod(2.8, 0.1, 30); » plot(ts, xp) » xlabel('time step') » ylabel('population') » title('Population growth model')

Page 53: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에
Page 54: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

•불규칙 Fibonacci 수열

• 불규칙 Fibonacci 수열 은 과 가 정해진 후 다음 관계로부터 생성:

• ±는 +와 -가 선정될 확률이 같아야 함을 의미

• 아주 큰 n에 대하여 은 1의 확률로 의 배수처럼 증가 ( )

• 함수 M-파일을 작성한 다음 fbn이라는 이름으로 저장:

% fbn.m : 불규칙 Fibonacci 수열 rand('state',100) % Set random number state. m = 1000; % 반복계산 횟수 x = [1 2]; % 초기조건 for n = 2:m-1 % for loop x(n+1) = x(n) + sign(rand-0.5)*x(n-1); end semilogy(1:1000,abs(x)) c = 1.13198824; hold on semilogy(1:1000,c.^[1:1000]) hold off

Page 55: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• for 루프: 불규칙 Fibonacci 수열을 배열 x에 저장

• 새로운 원소 x(n+1)이 할당될 때마다 자동적으로 x를 확장

• semilogy 함수는 n을 x 축에, abs(x)를 로그로 나타낸 y 축에 도시

• hold on: 다음번의 그림을 현재의 그림 위에 겹쳐 도시

• 두 번째 semilogy 함수: 기울기가 c인 직선의 그래프를 생성

• 명령어 라인에서 >> rfib을 입력:

0 100 200 300 400 500 600 700 800 900 100010

0

1010

1020

1030

1040

1050

1060

Page 56: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 상미분 방정식의 풀이

• ode45 함수를 이용한 상미분 방정식(ODE) 시스템의 풀이: Lorenz 방정식 군

•초기조건: , 풀이구간:

Page 57: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 먼저 미분방정식 시스템을 정의하는 함수 M-파일을 작성: function dy = ldes(t,y) dy = [10*(y(2)-y(1)) 28*y(1)-y(2)-y(1)*y(3) y(1)*y(2)-8*y(3)/3];

•미분방정식 시스템을 풀기 위한 스크립트 M-파일 derun.m(이름은 자유로이 붙일 수 있다)을 작성

•derun을 입력: 곡선이 시간에 따라 완성

% derun.m : 상미분 방정식 시스템의 풀이 tspan = [0 50]; % Solve for 0 <= t <= 50. yzero = [0;1;0]; % 초기조건 [t,y] = ode45(@ldes, tspan, yzero); plot(y(:,1),y(:,3)) % (y_1,y_3) 상 평면 title('Lorenz equations') xlabel('y_1') ylabel('y_3')

-20 -15 -10 -5 0 5 10 15 200

5

10

15

20

25

30

35

40

45

50

Lorenz equations

y1

y3

Page 58: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에

• 3차원 객체의 생성

•내부를 제거한 3차원(3D) 객체생성의 보기: 다음 스크립트 M-파일 sobj.m을 작성하고 명령어

라인에서 sobj를 입력

% sobj.m : 속이 빈 3차원 객체를 생성 N = 10; % 증분 횟수. 이 값을 증가시켜 보자. z = linspace(-5,5,N)'; radius = sqrt(1+z.^2); theta = 2*pi*linspace(0,1,N); X = radius*cos(theta);2 Y = radius*sin(theta); Z = z(:,ones(1,N)); surf(X,Y,Z) axis equal

•surf(X,Y,Z): 3D 표면을 생성 - 높이 Z(i,j)는 x-y 평면의 점 (X(i,j),Y(i,j))에서 지정 -4

-20

24

-5

0

5

-5

0

5

Page 59: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에
Page 60: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에
Page 61: 제 1 장 MATLAB 둘러기 - contents.kocw.netcontents.kocw.net/KOCW/document/2013/hanyang/ParkSangung/01.pdf · Help(도움말)의 이용 • ommand Window에서 help는 특정 명령어에