44
INTRODUCTION MATLAB 강좌, IT ACADEMY 한병옥

Introduction - ita.kaist.ac.kr281%29.pdf · matlab? • mat rix lab oratory • 수치해석, 행렬연산, 신호처리, 간편한그래픽기능 • 고성능의수치계산 •

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • INTRODUCTIONMATLAB 강좌, IT ACADEMY

    한병옥

  • MATLAB?

    • MATRIX LABORATORY• 수치해석, 행렬연산, 신호처리, 간편한그래픽기능

    • 고성능의수치계산

    • 결과의가시화

    • 행렬/벡터를기본자료로사용하여기능을수행

    • 강력한 TOOLBOX 제공• 신호처리/통계학/영상처리/제어/FUZZY LOGIC

    • 재정/화학공정

  • MATLAB?

    • MATLAB의전형적인이용범위• 수학과관련된계산• 알고리즘개발• 상황모델링과데이터분석• 여러가지과학과공학적인그래픽적표현• GUI에의한 APPLICATION 개발

  • MATLAB?

    • MATLAB 특징• 행렬데이터가기본연산

    • M FILE을이용한프로그래밍

    • TOOLBOX

    • 심볼로이루어진수식을계산하는기호계산

    • GUI프로그래밍

    • SIMULINK

  • MATLAB INSTALLATION

    • MATLAB 정품소프트웨어구하기• KAIST 학생의경우학교 LICENSE를이용하여다운로드가능(KFTP.KAIST.AC.KR 참조)

    • 그외의경우아진출판사에서학생용 MATLAB 구매후설치 (학생증사본필요)

  • MATLAB INTERFACE• CURRENT FOLDER

    • 현재작업디렉토리

    • EDITOR• M-파일스크립트파일을작성하기위한에디터

    • COMMAND WINDOW• MATLAB 명령어를직접입력하여실행

    • WORKSPACE• 현재실행되어있는 MATLAB 내의변수목록

    • COMMAND HISTORY• 실행한명령어의히스토리내역

    Workspace

    Editor

    Current Folder

    Command History

    Command Window

  • MATLAB INTERFACE

    • DEFAULT INTERFACE

  • PRACTICE

    2 x 3 행렬을 만들고, Workspace에서 값을 바꿔봅시다.

    1. Command Window에서 아래 명령어를 입력합니다.>> A = [1 2 3; 4 5 6]

    2. Workspace에 “A”를 더블 클릭하여 아래와 같은 spread sheet가 나타나는지확인합니다.

    3. 값을 변경한 다음, 우측 상단의 X 표시를 눌러 spread sheet를 끕니다.그리고 아래 명령어를 입력하여 값이 변경되었는지 확인합니다.

    >> A

  • PRACTICE

    방금 전에 입력한 명령어를 화살표 키를 이용하여 불러봅시다.

    1. 마우스로 Command Window를 선택하면 창이 활성화되어 타이틀 바의색이 진하게 되고, 프롬프트(>>)에 커서가 깜박거립니다.

    2. 키보드의 위/아래 화살표 키를 눌러보세요. 이전에 입력했던 명령어가프롬프트에 나타나는지 확인합니다.

    3. 화살표 키를 조작하는 대신 Command History 창에 나타난 명령어를 더블클릭하여 실행해봅시다.

  • PRACTICE

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

    • 프롬프트(>>)에서 명령어 입력을 시작• a = [1 2 3]라고 타이프하고 Enter:

    >> a = [1 2 3]a =

    1 2 3

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

    • 2+2, factor(123456789), sin(100)

  • COMMAND WINDOW 에서유의사항

    • 대문자와 소문자는 다르다.• 변수의 이름을 타이프하면 현재 값을 스크린에 제시• 마지막 부분에 세미콜론(;)을 두면 변수 값이 스크린에 나타나지 않는다.• (), [], 그리고 {} 들은 서로 교환될 수 없다. • 위쪽 화살표와 아래쪽 화살표 키를 이용하여 이전에 입력한 명령문들을 순차적으로 검색• 첫 번째 몇 글자를 타이프하고 위쪽 화살표 키를 누르면 예전의 명령어를 다시 불러올 수있다.

  • HELP

    • HELP 사용법• >> HELP TOPIC_NAME

  • HELP

  • PRACTICE

    abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceil, conj, cos, cosh, exp, fix, floor, gcd, imag, lcm, log, log10, real, rem, round, sign, sin, sinh, sqrt, tan, tanh

    • help 명령을사용해서다음 function 알아보기• plot• acos, atan, asin• floor, ceil, round• :• rem• exp• sqrt

  • 기본명령어

    >> quit

    • MATLAB 종료

    >> clc

    • command window 깨끗하게만들기

    >> clear

    >> clear all

    • 사용하고있는모든변수및함수지우기

    >> save

    >> load

    • 변수를파일로저장및불러오기

    >> who

    >> whos

    • 변수의이름과값, 속성을보는명령

    >> format

    • 커맨드윈도우에결과출력형식을지정하는명령

    • short / long / hex 옵션

  • 연산과변수의할당

    • + (더하기)

    • - (빼기)

    • * (곱하기)

    • / (나누기)

    • ^ (거듭제곱)

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

    >> (1+sqrt(5))/2ans =

    1.6180

    >> 2^(-53)ans =

    1.1102e-016

  • 연산과변수의할당

    • 연산 결과: ans라고 불리는 변수에 할당

    • 이를 이용하여 다른 계산을 수행하려면 변수 ans를 사용

    • 이전 답의 제곱과 제곱근의 합

    >> ans^2 + sqrt(ans)ans =

    2.2213e+004

  • PRACTICE

    >> 8 + (6 * (1 + sqrt(5))) / 2

    >> 4 / 3 * pi * 10^3

    >> exp(sqrt(3)) + pi * 10^3

    >> exp(pi * sqrt(-1)) >> exp(pi * i)or

  • 연산과변수의할당

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

    0.4081 >> v = sin(20)v =

    0.9129>> u^2 + v^2ans =

    1

    • 삼각함수의 계산: 라디안을 사용• pi: 값을 갖는 항구적인 변수

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

    0.4142

  • 변수명규약

    • 변수의이름은대소문자를구분함

    • 최대 63자까지이름에쓸수있음

    • 시작은꼭문자로해야함

    • 미리예약되어있는변수들은피하는것이좋음• ANS, PI, EPS, INF, NAN (NAN), I (J), NARGIN, NARGOUT, REALMIN, REALMAX

  • 기본적인산술연산자

    연산자 기능 연산자 기능

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

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

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

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

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

  • PRACTICE

    • 𝑥𝑥 = 2와 𝑦𝑦 = 2일때다음을계산하시오.

    A. 𝒚𝒚𝒙𝒙𝟑𝟑

    𝒙𝒙 −𝒚𝒚

    B. 𝟑𝟑𝒙𝒙𝟐𝟐𝒚𝒚

    C. 𝟑𝟑𝟐𝟐𝒙𝒙𝒚𝒚

    D. 𝒙𝒙𝟓𝟓

    𝒙𝒙𝟓𝟓−𝟏𝟏

  • 벡터 (VECTOR)

    • 순서로나열된수들의목록

    • 대괄호안에수들을콤마나빈칸으로구분시켜넣음으로써벡터를입력

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

  • 벡터 (VECTOR)• 1에서 10까지의값을갖는벡터를생성

    >> w = 1:10w =

    1 2 3 4 5 6 7 8 9 10

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

    • 증가분은 0:0.1:2이나 100:-2:0과같이소수이거나음수일수있다.

    • 일반적으로 M:N은원소가 M, M+1, ..., N 인벡터를생성

    >> g = 2:3:10, h = 1:-0.25:0g =

    2 5 8h =

    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

  • 벡터의원소

    • 벡터항/값여러개호출• 소괄호 () 안에주소를배열(: 또는 [])로기입• x(1:5) =• x(7:end) =• x(2:2:7) =• x(3:-1:1) =• x([8 2 9 1])

    • 벡터항/값여러개변경• 소괄호 () 안에주소를배열(: 또는 [])로기입후같은크기의배열을값으로할당• x([3:5]) = [5 9 10]

  • 벡터항/값지우기

    • 배열항/값지우기• 소괄호 () 안에주소를넣고빈행렬 [] 할당

    • x(5) = [], x(1:3) = []

    • x(2:2:7) = []

    • x([8 2 9 1]) = []

    • 기타배열만들기• x=[2 2*pi sqrt(2) 2-3j]

    • x=first:last

    • x=first:increment:last

  • 벡터연산• 벡터 w를 행벡터로부터 열벡터로 전환

    >> v'ans =

    3456

    • 벡터 X의 각 원소들에 대한 제곱>> X = 0:2:10X =

    0 2 4 6 8 10>> X.^2Ans =

    0 4 16 36 64 100

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

  • 벡터연산

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

    >> a = 1:2:10a =

    1 3 5 7 9>> b = [-2 3 -5 1 6]b =

    -2 3 -5 1 6>> a.*bans =

    -2 9 -25 7 54

  • LINSPACE

    • 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

  • 벡터의내적과외적• 내적, 스칼라, 혹은점곱: x'*y, dot(x,y)

    • 외적: cross>> x = [-1 0 1]'; y = [3 4 5]';>> x'*yans =

    2>> dot(x,y)ans =

    2>> cross(x,y)ans =

    -48-4

    >> Z = x*y'Z =

    -3 -4 -50 0 03 4 5

  • 행렬 (MATRIX)• 숫자를네모꼴로배열한것

    • 대괄호 []를사용하고각항(ELEMENT)은쉼표(COMMA) 또는공백(SPACE)으로구분

    • 3 X 4 행렬>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12]A =1 2 3 45 6 7 89 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의전치

  • 행렬의원소» B = [1 0 2;3 -2 1;-1 1 2]B =

    1 0 23 -2 1-1 1 2

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

    >> B(2,3)ans =

    1

    • 두번째열: B(:,2)

    >> B(:,2)ans =

    0-21

    • 세번째행: B(3,:)

    >> B(3,:)ans =

    -1 1 2

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

    >> C = B(:,2:3)C =

    0 2-2 11 2

  • 행렬의원소

    • 행렬항/값여러개호출• A(r,c)

    • A(r,:)

    • A(:,c)

    • A(:)

    • A(i)

    • A(x)

  • 행렬의연산

    >> x = [3 -2 5 4]'x =

    3-254

    >> A*xans =

    3070110

    » C = A+BC =

    3 1 52 -2 23 3 8

    » D = A-BD =

    1 1 1-4 2 05 1 4

    >> P = A*BP =

    2 1 11-2 1 04 2 22

  • 행렬의연산

    • sum 함수: 각열의합>> sum(A)ans =

    5 3 10

    • diag: 주어진행렬의대각원소>> diag(A)ans =

    206

    >> sum(diag(A))ans =

    8

    • W^2 : 행렬곱 W*W

    • W.^2 : W의모든원소들이각각제곱>> W = [1 2; 3 4]W =

    1 23 4

    >> W^2ans =

    7 1015 22

  • 행렬의연산

    >> W.^2ans =

    1 49 16

    >> x = [1 2 3]; y = [2 3 4]; z = [1 2; 3 4];>> x.^yans =

    1 8 81>> 2.^xans =

    2 4 8>> 2.^zans =

    2 48 16

  • PRACTICE

    >> a=[1 3 5 7 9 11; 2 4 6 8 10 12; 3 6 9 12 15 18; 4 8 12 16 20 24; 5 10 15 20 15 30]

    >> b=a(:,3)

    >> c=a(2,:)

    >> e=a(2:4,:)

    >> f=a(1:3, 2:4)

    >> v=4:3:34

    >> u=v([3, 5, 7:10])

    >> a=[10:-1:4; 2:2:14; 3:3:21; 5:-2:-7]

    >> b=a([1,3], [1,3,5:7])

  • PRACTICE

    >> kt=[2 8 40 65 3 55 23 15 70 80]

    >> kt(6) = []

    >> kt([3 6]) = []

    >> mtr=[5 78 4 24 9; 4 0 36 60 12; 56 13 5 89 3]

    >> mtr(:,2:4)=[]

    >> mtr(4)=[]

  • PRACTICE

    • help 명령어와실습을통해아래의특수행렬생성함수가무엇인지알아보세요.• zeros, ones, eye, rand, magic

    • zeros(3,2)

    • ones(3)

    • ones(2,5)

    • rand(3)

    • magic(7)

  • PRACTICE

    0 0 0 1 1 1

    0 0 0 1 1 1

    1 1 0 0 0 01 0 1 0 0 01 0 0 1 0 01 0 0 0 1 0

    1 10 00 01 1

  • PRACTICE

    • 6X6 행렬에서가운데두행과가운데두열의원소가 1이고나머지원소는모두 0인행렬생성하기

    0 0 1 1 0 00 0 1 1 0 01 1 1 1 1 11 1 1 1 1 10 0 1 1 0 00 0 1 1 0 0

  • PRACTICE

    [A]

    2 5 8 11 14 17

    3 6 9 12 15 18

    4 7 10 13 16 19

    5 8 11 14 17 20

    6 9 12 15 18 21

    [B]

    5 10 15 20 25 30

    30 35 40 45 50 55

    55 60 65 70 75 80

    [V]

    99 98 97 96 95 94 93 92 91

    • A의첫번째행과세번째행의마지막 4개의열을 B의첫두행의첫네열로대체하고, 또 A의네번째행의마지막 4개의열을 v의다섯번째에서여덟번째의원소로대체하기

    introductionMatlab?Matlab?Matlab?MATLAB installationMatlab interfaceMatlab interface슬라이드 번호 8Practicepractice command window 에서 유의사항helphelppractice기본 명령어연산과 변수의 할당연산과 변수의 할당practice연산과 변수의 할당변수명 규약기본적인 산술 연산자PRACTICE벡터 (Vector)벡터 (Vector)벡터의 원소벡터의 원소벡터항/값 지우기벡터 연산벡터 연산linspace벡터의 각 원소에 대한 계산 벡터의 내적과 외적행렬 (Matrix)행렬의 원소행렬의 원소행렬의 연산행렬의 연산행렬의 연산PRACTICEPRACTICEpracticePRACTICEPRACTICEPRACTICE