제 1 장 MATLAB 둘러기 -...

61
1 MATLAB 둘러보기

Transcript of 제 1 장 MATLAB 둘러기 -...

  • 제 1 장

    MATLAB 둘러보기

  • • MATLAB: MATrix LABoratory

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

    MATLAB 시작하기

    • MATLAB 데스크탑 window:

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

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

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

  • 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)을 시도

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

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

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

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

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

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

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

    있다.

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

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

  • Help(도움말)의 이용

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

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

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

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

    창이 나타난다.

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

    Help Browser를 선택

    MATLAB 작업 중지하기

    • 프롬프트에서 quit를 입력

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

    • File 메뉴에서 Exit MATLAB을 선택

  • 연산과 변수의 할당

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

    • 보기: >> 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

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

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

  • • 기본적인 산술 연산자:

    연산자 기능 연산자 기능

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

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

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

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

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

  • •복소수

    • 허수단위 의 표현: 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

  • •입력 오류의 수정

    • 에러 메시지의 보기:

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

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

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

    •계산의 중지

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

  • 벡터와 행렬

    • 벡터

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

    >> 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 인 벡터를 생성

  • • 증가분이 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

  • • 벡터 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 안의 숫자들이 개별적으로, 혹은 원소별로 제곱

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

  • • 보기: 벡터 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

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

    • 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

  • • 벡터의 내적(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

  • •행렬

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

  • • 두 행렬 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

  • • 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

  • >> 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

  • • 행렬의 계수(係數, 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

  • •행렬 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

  • • 자동구성 행렬: 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

  • 출력의 억제

    • 입력라인 끝부분 스크린의 세미콜론(;) : 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

  • • 다양한 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

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

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

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

    및 명령어 이름을 모두 제시

    • 소수점 이하의 취급:

    함수 설명 기능

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

    ceil +방향으로의 포함 올림

    floor -방향으로의 포함 내림

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

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

  • 변수의 처리

    •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 클래스의 정의도 소거

  • •특수변수와 정수

    특수변수와 정수 기능

    ans 최신 출력

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

    realmax + 최대부동소수점 개수

    realmin + 최소부동소수점 개수

    pi 3.1415926535897

    i, j 허수단위

    inf 무한대

    NaN 부정치

  • • 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

  • 기호를 이용한 연산 • 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

  • • 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

  • •기호식에서의 치환

    • 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

  • M-파일

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

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

    File의 순서로 선택

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

    이름을 타이프하여 시작

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

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

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

  • •스크립트 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

  • •코멘트의 추가

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

    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)';

  • • 함수 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

  • 함수

    •내장함수 • 대표적인 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)

    • 선형방정식 시스템:

    로 두면

  • • 백슬래쉬 함수의 이용:

    >> 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에서 사용자가 자신의 함수를 정의하는 방법:

  • 의 정의

    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

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

  • • 의 벡터화된 버전:

    >> 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)

    • 벡터계산:

  • • 예: 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이 아니면 (문장)이 수행

  • 그래프

    • 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

  • •그래프의 보정

    • 그래프 타이틀의 변경:

    >> title '포물선'

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

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

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

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

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

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

  • •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

  • • 기본적으로 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

  • • 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

  • •여러 곡선들의 그래프

    •두 개 이상의 곡선들을 하나의 그래프 상에 겹쳐 그리려면 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

  • •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

  • •미분방정식의 풀이

    • 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

  • 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')

  • •불규칙 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

  • • 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

  • • 상미분 방정식의 풀이

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

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

  • • 먼저 미분방정식 시스템을 정의하는 함수 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

  • • 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