42
1 MATLAB MATLAB 프프프프프 프프프프프

MATLAB 프로그래밍

Embed Size (px)

DESCRIPTION

MATLAB 프로그래밍. MATLAB. MATLAB 이란 ? mathworks 사 (http://www.mathworks.com) 개발 수치해석 및 프로그래밍 환경을 제공하는 공학용 툴 특징 행렬 처리 용이 함수와 데이터의 그래프 표현 사용자 인터페이스 생성 및 다른 프로그래밍 언어 연결 가능 다양한 내장 함수 및 툴박스 제공 플랫폼 독립적. MATLAB 데스크탑. MATLAB 스칼라. 값 배정. 소수점이하 15 자리까지 표현. 소수점이하 4 자리까지 표현. MATLAB 벡터 , 행렬. - PowerPoint PPT Presentation

Citation preview

Page 1: MATLAB  프로그래밍

1

MATLAB MATLAB 프로그래밍프로그래밍

Page 2: MATLAB  프로그래밍

2

MATLABMATLAB

MATLAB 이란 ?mathworks 사 (http://www.mathworks.com) 개발수치해석 및 프로그래밍 환경을 제공하는 공학용 툴

특징행렬 처리 용이함수와 데이터의 그래프 표현사용자 인터페이스 생성 및 다른 프로그래밍 언어 연결 가능다양한 내장 함수 및 툴박스 제공플랫폼 독립적

Page 3: MATLAB  프로그래밍

3

MATLAB MATLAB 데스크탑데스크탑

Page 4: MATLAB  프로그래밍

4

MATLAB MATLAB 스칼라스칼라

값 배정

소수점이하 15 자리까지 표현

소수점이하 4 자리까지 표현

Page 5: MATLAB  프로그래밍

5

MATLAB MATLAB 벡터벡터 , , 행렬행렬

행 벡터a = [ 1 2 3 4 5 ]

열 벡터b = [ 2 ; 4 ; 6 ; 8 ; 10 ]

b = [ 2 4 6 8 10 ] ‘ ‘ : 전치행렬

b(4) 인덱스번호는 1 부터 시작 , 8 출력

행렬c = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]

c(2,3) ( 행번호 , 열번호 ) 6 출력

Page 6: MATLAB  프로그래밍

6

MATLAB MATLAB 벡터벡터 , , 행렬행렬

콜론 (:) 연산자

1 부터 5 까지 1 씩 증가하는 행벡터

1 부터 3 까지 0.5 씩 증가하는 행벡터

인덱스 2~4 까지의 벡터 추출

Page 7: MATLAB  프로그래밍

7

MATLAB MATLAB 벡터벡터 , , 행렬행렬

콜론 (:) 연산자

2 행 , 인덱스 생략

3 행 , 1 열과 2 열

2~3 행 , 1~2 열로 구성된 2x2 행렬 반환

Page 8: MATLAB  프로그래밍

8

MATLAB MATLAB 벡터벡터 , , 행렬행렬

linspace(x1, x2, n)x1 과 x2 사이의 등 간격 n 개의 포인트 생성

logspace(x1, x2, n)10x1 과 10x2 사이에 지수적 등 간격 n 개의 포인트 생성

Page 9: MATLAB  프로그래밍

9

MATLAB MATLAB 벡터벡터 , , 행렬행렬

eye(n)nxn 단위행렬 (identity matrix)

zeros(n,m)nxm 0 행렬

ones(n,m)mxm 행렬 ( 모든 원소의 값이 1)

Page 10: MATLAB  프로그래밍

10

수학 연산수학 연산

우선순위 연산자 설명1 ^ 지수 계산2 - 음부호3 * / 곱셈 , 나눗셈4 \ 왼쪽 나눗셈 ( 행렬 연산 )

5 + - 덧셈 , 뺄셈

>> y = pi / 4>> -y^2.45>> (-y)^2.45

Page 11: MATLAB  프로그래밍

11

행렬 연산행렬 연산

OperationMATLAB Form

Comments

Array Addition a + bArray addition and matrix addition are identical

Array Subtraction a – bArray subtraction and matrix subtraction are identical

Array Multiplication a . * bElement-by-element multiplication of a and b. Both arrays must be the same shape, or one of them must be a scalar

Matrix Multiplication a * bMatrix multiplication of a and b. The number of columns in a must equal the number of rows in b.

Array Right Division a ./ b

Element-by-element division of a and b : a(i,j) / b(i,j). Both arrays must be the same shape, or one of them must be a scalar.

Array Exponentiation a. ^ b

Element-by-element exponentiation of a and b : a(i,j) ^ b(i,j). Both arrays must be the same shape, or one of them must be a scalar

Page 12: MATLAB  프로그래밍

12

행렬 연산 예제행렬 연산 예제

덧셈 /뺄셈a = [ 1 2 3 4 5 ]; b = [ 2 4 6 8 10];c = a + b

곱셈a = [ 1 2 3 4 5 ]; b = [ 2 4 6 8 10 ]’c = 2 * aa*b

외적 (outer product)b * a

Page 13: MATLAB  프로그래밍

13

행렬 연산 예제행렬 연산 예제

지수정방행렬 ^ 지수승

배열 연산자 (. 연산자 )각 원소끼리 연산.*

./

.^

Page 14: MATLAB  프로그래밍

14

내장 함수내장 함수

Trigonometric Functions

Function Description

cos(x) Calculates cos x, with x in radians.

acos(x) Calculates cos-1x, with the results in radians.

sin(x) Calculates sin x, with x in radians.

asin(x) Calculates sin-1x, with the results in radians.

tan(x) Calculates tan x, with x in radians.

atan(x) Calculates tan -1x, with the results in radians.

mod(x,y) Remainder, or modulo, function.

sqrt(x) Calculates the square root of x.

>> sqrt(2)

ans =

1.4142

Page 15: MATLAB  프로그래밍

15

내장 함수내장 함수

Round, Exponential, Logarithm

Function Description

[value,index] = max(x)

Returns the maximum value in vector x, and optionally the location of that value.

[value,index] = min(x)

Returns the minimum value in vector x, and optionally the location of that value.

ceil(x) Rounds x to the nearest integer towards positive infinity :ceil ( 3.1 ) = 4 and ceil ( -3.1 ) = -3

fix(x) Rounds x to the nearest integer towards zero :fix ( 3.1 ) = 3 and fix ( -3.1 )= -3

floor(x) Rounds x to the nearest integer towards minus infinity :floor ( 3.1 ) = 3 and floor ( -3.1 ) = -4

round(x) Rounds x to the nearest integer

exp(x) Calculates ex.

log(x) Calculates the natural logarithm log e x.

log2(x) Calculates the natural logarithm log 2 x.

Page 16: MATLAB  프로그래밍

16

내장 함수내장 함수

Complex & Rational Numbers

Helphelp 함수명

Function Description

abs(x) Calculates |x|.

angle(x) Returns the phase angle of the complex value x, in radians

conj(z) Calculates conjugate of z.

imag(z) Calculates imaginary part of z.

real(z) Calculates real part of of z.

rat(x) Calculates rational approximation of x

rats(x) Calculates rational output of x

Page 17: MATLAB  프로그래밍

17

함수 활용 예함수 활용 예

자유낙하 속도 측정

t=[0:2:20]’;

g=9.81; m=68.1; cd=0.25;

v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t)

t

m

gc

c

gmv d

d

tanh

v : 속도 (m/s)g : 중력가속도 (9.81m/s2)m : 질량 (kg)cd : 항력계수 (kg/m)

t : 시간 (s)

v = 0 18.7292 33.1118 42.0762 46.9575 49.4214 50.6175 51.1871 51.4560 51.5823 51.6416

Page 18: MATLAB  프로그래밍

18

그래픽 표현그래픽 표현

Figureplotstemstairsbarcompasspiesemilogsemilogxsemilogy

plot

stairs

compass

stem

bar

pie

Page 19: MATLAB  프로그래밍

19

그래픽 표현그래픽 표현

Labelxlabel (‘x_string’)ylabel (‘y_string’)

Titletitle (‘string’)

LegendLegends can be created with the legend function.The basic form of this function is

legend(‘string1’, ’string2’, . . . , pos)

pos 설명 pos 설명

0Automatic “best” placement (least conflict with data)

1 Upper right-hand corner (default)

2 Upper left-hand corner 3 Lower left-hand corner

4 Lower right-hand corner -1 To the right of the plot

Page 20: MATLAB  프로그래밍

20

그래픽 표현그래픽 표현

Colors & StylesColor Marker Style Line Style

y yellow . point - solid

m magenta o circle : dotted

c cyan x x-mark -. dash-dot

r red + plus -- dashed

g green * star <none> no line

b blue s square

w white d diamond

k black v triangle (down)

^ triangle (up)

< triangle (left)

> triangle (right)

p pentagram

h hexagram

<none> no marker

Page 21: MATLAB  프로그래밍

21

그래픽 표현그래픽 표현x=0:pi/100:2*pi;

y1=sin(2*x);

y2=2*cos(2*x);

plot(x,y1,'k-o',x,y2,'b--v')

title('Plot of f(x)=sin(2x) and its derivative')

xlabel('x')

ylabel('y')

legend('f(x)','d/dx f(x)',4)

grid on

Page 22: MATLAB  프로그래밍

22

그래픽 표현그래픽 표현

사랑의 방정식

225171617 22 yyxx

x=[-4.15:0.001:4.15];a=17;b=-16*abs(x);c=17*x.^2 - 225;y1=(-b+sqrt(b.^2 - 4*a.*c))/(2*a);y2=(-b-sqrt(b.^2 - 4*a.*c))/(2*a); plot(x,real(y1))hold onplot(x,real(y2))grid on

Page 23: MATLAB  프로그래밍

23

스크립트 파일스크립트 파일

M- 파일 작성 scriptdemo.m

g=9.81; m=68.1; t=12; cd=0.25;

v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t)

>> scriptdemo

Page 24: MATLAB  프로그래밍

24

함수 파일함수 파일

함수 형식

예제 ) freefallvel.m function velocity = freefallvel(m,cd,t)

% 자유낙하 속도 계산 % 입력 ) m: 질량 (kg), cd: 항력계수 , t: 시간 ( 초 )

% 출력 ) t 초 후 낙하 속도 출력 g = 9.81;

velocity=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t);

>> freefallvel(68.1, 0.25, 12)

function outvar = funcname(arglist)

% help comments

statements

outvar = value

Page 25: MATLAB  프로그래밍

25

여러 개의 값 반환여러 개의 값 반환

stats.m function [ mean, stdev ] = stats (x)

n = length(x);

mean = sum(x) / n;

stdev = sqrt ( sum((x-mean).^2 / (n-1)));

>> y = [ 8 5 10 12 6 7.5 4 ]

>> [ m , s ] = stats(y)

m = 7.5000

s = 2.8137

Page 26: MATLAB  프로그래밍

26

input input 함수함수

형식 n = input(‘prompt string’)

설명 명령창에 ‘prompt string’ 을 출력하고 값을 입력 받음

예제m = input(‘Mass (kg): ’)

>> Mass (kg): 68.1_

name = input(‘Enter your name: ’,‘s’)

% 문자열 입력 >> enter your name: Matlab_

Page 27: MATLAB  프로그래밍

27

disp disp 함수함수

형식disp( value )

설명명령창에 value 값 출력

예제

Page 28: MATLAB  프로그래밍

28

fprintf fprintf 함수함수

형식 fprintf( ‘ format ’, arglist … )

설명 주어진 format 에 맞춰 값을 출력

포맷 / 제어 코드

코드 설명

%d 정수 포맷

%e e 를 사용하는 과학 포맷

%E E 를 사용하는 과학 포맷

%f 소수 포맷

%g %e 나 %f 중에서 간단한 포맷

\n 새로운 줄로 시작

\t 탭

Page 29: MATLAB  프로그래밍

29

fprintf fprintf 예제예제

fprintfdemo.m function fprintfdemo x = [ 1 2 3 4 5 ];

y = [ 20.4 12.6 17.8 88.7 120.4 ];

z = [ x ; y ];

fprintf(‘ x y \n’);

fprintf(‘ %5d %10.3f \n’, z);

결과1 20.400

2 12.600

3 17.800

……

Page 30: MATLAB  프로그래밍

30

대화식 대화식 M-M- 파일 작성파일 작성

freefallinteract.mfunction velocity = freefallinteract

% freefallinteract() : 자유낙하 속도 계산g = 9.81;

m = input( ‘ 무게 (kg) : ’);

cd = input( ‘ 항력계수 (kg/m) : ’);

t = input( ‘ 시간 (s) : ’);

disp( ‘ 낙하속도 (m/s) : ’ )disp( sqrt(g*m/cd)*tanh(sqrt(g*cd/m)* t) )

실행>> freefallinteract

무게 (kg) : 68.1

항력계수 (kg/m) : 0.25

시간 (s) : 12

낙하속도 (m/s) : 50.6175

Page 31: MATLAB  프로그래밍

31

함수호출함수호출

freefallinteract.m 수정function velocity = freefallinteract

% freefallinteract() : 자유낙하 속도 계산m = input( ‘ 무게 (kg) : ’);

cd = input( ‘ 항력계수 (kg/m) : ’);

t = input( ‘ 시간 (s) : ’);

disp( ‘ 낙하속도 (m/s) : ’ )disp( freefallvel(m,cd,t) )

freefallvel.m 의 freefallvel 함수를 호출

Page 32: MATLAB  프로그래밍

32

관계관계 //논리 연산논리 연산

관계연산자

논리 연산자

x == 0 == Equal

unit ~= ‘m’ ~= Not equal

a < 0 < Less than

s > t > Greater than

3.9 <= a / 3 <= Less than or equal to

r >= 0 >= Greater than or equal to

~x ~ Not

x & y & And

x | y | Or

Page 33: MATLAB  프로그래밍

33

판정 판정 : if : if 구문구문

형식 if condition

statements end

설명 condition 이 참 (1) 이면 statements 수행 거짓 (0) 이면 수행 안함

예제 if grade >= 60

disp( ‘ passing grade: ’ ) disp( grade ); end if grade >= 60, disp( ‘ passing grade: ’ ), end

Page 34: MATLAB  프로그래밍

34

에러함수 에러함수 : error: error

형식 error( msg )

설명 텍스트 메시지 msg 를 출력하고 m- 파일 종료

예제 if x == 0, error(‘Zero value encountered’), end f = 1 / x;

Page 35: MATLAB  프로그래밍

35

if / else if / else 구문구문

mysign.m function sgn = mysign (x)

% mysign(x) : return 1 if x is greater then zero

% -1 if x is less then zero % 0 if x is equal to zero

if x > 0 sgn = 1;

elseif x < 0 sgn = -1;

else sgn = 0; end

Page 36: MATLAB  프로그래밍

36

for for 구문구문

형식 for index = start : step : finish

statements

end

설명 index 값을 start 부터 finish 까지 step 씩 증가 /감소 시키면서 statements 를 반복 실행

예제 i = 0; for t = 0:0.02:50 i = i + 1;

y(i) = cos(t)end

t = 0:0.02:50;y = 5 * cos(t)

Page 37: MATLAB  프로그래밍

37

메모리 사전 할당메모리 사전 할당

t = 0:0.01:5;for i = 1:length(t)

if t(i) > 1 y(i) = 1 / t(i);else y(i) = 1;end

end

t = 0:0.01:5;y = ones( size(t) );for i = 1:length(t) if t(i) > 1

y(i) = 1 / t(i); endend

배열의 크기가 예측 가능하면미리 메모리를 할당

Page 38: MATLAB  프로그래밍

38

while while 구조구조

형식 while condition

statements

end

설명 condition 이 참 (1) 인 동안 statements 를 반복 수행

예제 while x > 0 while(1)

x = x – 3; if x < 0, break, end

disp( x ) x = x – 5;

end end

Page 39: MATLAB  프로그래밍

39

Gauss EliminationGauss Elimination

function [ x ] = GaussNaive( A, b )

% GaussNaive(A,b) :

% Gauss elimination without pivoting

% input:

% A = coefficient matrix

% b = right hand side vector

% output:

% x = solution vector

[m,n] = size(A);

if m~=n, error('Matrix A must be square'); end

nb = n+1;

Aug = [A b];

Page 40: MATLAB  프로그래밍

40

Gauss EliminationGauss Elimination

% forward elimination

for k = 1:n-1

for i = k+1:n

factor = Aug(i,k)/Aug(k,k);

Aug(i,k:nb) = Aug(i,k:nb)-factor*Aug(k,k:nb);

end

end

% back substitution

x = zeros(n,1);

x(n) = Aug(n,nb)/Aug(n,n);

for i = n-1:-1:1

x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);

end

Page 41: MATLAB  프로그래밍

41

Gauss EliminationGauss Elimination

실행결과

x1 + x2 + 2x3 = 9

2x1 + 4x2 – 3x3 = 1

3x1 + 6x2 – 5x3 = 0

>> A = [ 1 1 2 ; 2 4 -3 ; 3 6 -5 ];

>> b = [ 9 1 0 ]’;

>> GaussNaive(A,b)

ans =

1

2

3

Page 42: MATLAB  프로그래밍

42

HomeworkHomework

Gauss-Jordan EliminationMake a MATLAB program ‘GaussJordan.m’ runs as follows

>> A = [ 1 1 2 ; 2 4 -3 ; 3 6 -5 ];

>> b = [ 9 1 0 ]’;

>> GaussJordan(A,b)

ans =

1 0 0 1

0 1 0 2

0 0 1 3

Refer two samples: GaussNaive.m, GaussianElimination.mReference for MATLAB syntax: Matlab.pdf