matlab for c/c++ programmers - kaist it academy web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5...

61
MATLAB Programming 닀항식 김탁은 [email protected] 1

Upload: others

Post on 25-Sep-2019

47 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식

김 탁 은[email protected]

1

Page 2: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식 (polynomial)

MATLAB에서 닀항식의 표현 방법

• 닀항식 𝑝𝑝 𝑥𝑥 = 𝑝𝑝1𝑥𝑥𝑛𝑛 + 𝑝𝑝2𝑥𝑥𝑛𝑛−1 + ⋯+ 𝑝𝑝𝑛𝑛𝑥𝑥 + 𝑝𝑝𝑛𝑛+1 가 죌얎졌을 때, 각

계수 pi륌 찚수가 높은 순윌로 나엎한 벡터로 표현핹

• 𝑃𝑃 = 𝑝𝑝1, 𝑝𝑝2, 
 , 𝑝𝑝𝑛𝑛+1

닀항식의 값 계산

• y = polyval( P, X )

– 닀항식 P륌 죌얎진 X 값에 대핮 계산

𝑓𝑓 𝑥𝑥 = 3𝑥𝑥2 − 2𝑥𝑥 + 1

evaluate 𝑓𝑓(𝑥𝑥) at 𝑥𝑥 = 5

>> p = [3 -2 1];>> polyval(p,5)

ans =66

2

Page 3: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

MATLAB에서 닀항식의 표현 방법

닀항식읎 아래와 같읎 정의

• 𝑓𝑓 𝑥𝑥 = 3𝑥𝑥6 − 3𝑥𝑥4 − 2𝑥𝑥

• 위의 닀항식에서 x의 5ì°š, 3ì°š, 2ì°š, 1ì°š 항곌 상수항읎 없윌므로,

닀항식을 MATLAB 벡터로 표현할 때 빈자늬륌 0윌로 채워쀌

• 벡터는 찚수가 높은 항의 계수부터 적음

• P = [3 0 -3 0 0 -2 0]

>> P = [3 0 -3 0 0 -2 0];>> polyval(P, 0)

ans =0

>> polyval(P, 1)

ans =-2

3

Page 4: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식의 계산

여러 값에 대핮 닀항식 동시에 계산하Ʞ

• 𝑓𝑓 𝑥𝑥 = 3𝑥𝑥6 − 3𝑥𝑥4 − 2𝑥𝑥

• Y = polyval( P, X) 핚수에서, X 값윌로 슀칌띌, 벡터, 또는 행렬 가능

• 계산 결곌 Y는 입력된 X와 동음한 크Ʞ륌 가짐

• P = [3 0 -3 0 0 -2 0]

>> polyval(P, [0 -3 2])

ans =

0 1950 140

>> polyval(P, magic(2))

ans =

-2 193811512 140

4

Page 5: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

닀음 닀항식의 값을 x = 0:2:6 에서 계산핎 뎅시닀.

𝑓𝑓 𝑥𝑥 = 3𝑥𝑥2 − 7𝑥𝑥2 + 2𝑥𝑥 + 23

𝑓𝑓 𝑥𝑥 = 4𝑥𝑥3 − 0.53𝑥𝑥4

𝑓𝑓 𝑥𝑥 = 𝑥𝑥3 − 2𝑥𝑥4 − 2

5

Page 6: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식 쉜게 만듀Ʞ

만앜 닀항식 찚수가 맀우 높거나, 닀항식의 항듀읎 맀우 많닀멎?

• 𝑓𝑓 𝑥𝑥 = 3𝑥𝑥100 − 3𝑥𝑥90 + 5𝑥𝑥23 − 3𝑥𝑥3 − 2𝑥𝑥

• 닀항식을 만듀Ʞ 위핎, 아래와 같읎 Ꞟ읎가 1001읞 벡터 P륌 생성

• P = [3 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 0 0 
 -3 0 -2 0]

• 수작업윌로 닀항식을 생성하는 것은 였타의 확률읎 높음!

• Symbolic Math Toolbox륌 읎용하자!!

– P = sym2poly( F )

• 심볌늭 닀항식 (symbolic polynomial)을 polynomial coefficient vector로 변환

>> syms x>> f = 3*x^100 - 3*x^90 + 5*x^23 - 3*x^3 - 2*x;>> P = sym2poly(f)

6

Page 7: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식 계수 벡터 검슝하Ʞ

닀항식 계수 벡터가 정확하게 잘 Ʞ술되었는지 검슝하렀멎?

• Symbolic Math Toolbox륌 읎용하자!!

– F = poly2sym( P )

• polynomial coefficient vector로부터 심볌늭 닀항식 생성

• 수작업윌로 생성한 닀항식 계수 벡터륌 심볌늭 닀항식윌로 바꿔서

검슝

• P = [3 1 -1 0 -5 0]

>> P = [3 1 -1 0 -5 0];>> poly2sym(P)

ans =3*x^5 + x^4 - x^3 - 5*x

7

Page 8: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식의 곱셈

닀항식듀 간의 곱셈은 두 계수 배엎의 convolution윌로 계산

• C = conv( A, B )

• 𝑓𝑓 𝑥𝑥 = 4𝑥𝑥3 − 2𝑥𝑥 + 1 F = [4 0 -2 1]

• 𝑔𝑔 𝑥𝑥 = 3𝑥𝑥3 + 5𝑥𝑥2 − 3𝑥𝑥 − 2 G = [3 5 -3 -2]

1 -2 0 4

3 5 -3 -2 4 x 3 = 12

3 5 -3 -2 0 x 3 + 4 x 5 = 20

3 5 -3 -2 -2 x 3 + 0 x 5 + 4 x -3 = -18

3 5 -3 -2 1 x 3 + -2 x 5 + 0 x -3 + 4 x -2 = -15

3 5 -3 -2 1 x 5 + -2 x -3 + 0 x -2 = 11

3 5 -3 -2 1 x -3 + -2 x -2 = 1

3 5 -3 -2 1 x -2 = -2

>> F = [4 0 -2 1];>> G = [3 5 -3 -2];>> conv(F,G)

ans =

12 20 -18 -15 11 1 -2

8

Page 9: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식의 곱셈

Convolution을 읎용하지 않는 방법

1. 각각의 닀항식을 symbolic polynomial로 변겜

2. symbolic polynomial 간의 곱셈 연산 수행

3. sym2poly 핚수륌 읎용하여 polynomial coefficient vector로 변환

>> F = [4 0 -2 1];>> G = [3 5 -3 -2];>> fn = expand( poly2sym(F) * poly2sym(G) )

fn =12*x^6 + 20*x^5 - 18*x^4 - 15*x^3 + 11*x^2 + x – 2

>> sym2poly(fn)

ans =12 20 -18 -15 11 1 -2

9

Page 10: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

ì„ž 닀항식의 곱셈

두 닀항식을 곱한 닀음, ê·ž 결곌와 나뚞지 닀항식을 곱핚

𝑎𝑎 𝑥𝑥 = 2𝑥𝑥2 − 𝑥𝑥 + 1

𝑏𝑏 𝑥𝑥 = 𝑥𝑥3 − 2𝑥𝑥2 − 2

𝑐𝑐 𝑥𝑥 = 𝑥𝑥 + 1

>> A = [2 -1 1];>> B = [1 -2 0 -2];>> C = [1 1];>> D = conv(conv(A,B),C)

D =

2 -3 -2 -3 -4 0 -2

>> A = poly2sym([2 -1 1]);>> B = poly2sym([1 -2 0 -2]);>> C = poly2sym([1 1]);>> D = A*B*C

D =-(x + 1)*(2*x^2 - x + 1)*(- x^3 + 2*x^2 + 2)

>> sym2poly(D)

ans =2 -3 -2 -3 -4 0 -2

또는

10

Page 11: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식 나눗셈

닀항식 g륌 h로 나누는 겜우

• 𝑔𝑔 𝑥𝑥 = ℎ 𝑥𝑥 𝑞𝑞 𝑥𝑥 + 𝑟𝑟(𝑥𝑥) 륌 만족하는 몫 𝑞𝑞(𝑥𝑥) 곌 나뚞지 𝑟𝑟(𝑥𝑥) 륌 구할

수 있음

• [q, r] = deconv( g, h )

– 닀항식 g륌 h로 나누얎, 몫 q와 나뚞지 r을 반환 (q, r은 닀항식)

>> g = [1 -6 12 -8];>> h = [1 -2];>> [q, r] = deconv(g,h)

q =1 -4 4

r =0 0 0 0

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 2

11

Page 12: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

닀항식 g 와 h의 나눗셈을 symbolic expression윌로 수행핎

뎅시닀.

닀음 두 닀항식을 symbolic expression윌로 표현하고 나눗셈을

했을 때, ê·ž 결곌륌 확읞핎뎅시닀.

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 2

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 1 죌의: 상수항읎 1로바뀌었음

12

Page 13: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

닀항식 g 와 h의 나눗셈을 symbolic expression윌로 수행핎

뎅시닀.

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 2

>> g = [1 -6 12 -8];>> h = [1 -2];>> sg = poly2sym(g); sh = poly2sym(h);>> sg/sh

ans = (x^3 - 6*x^2 + 12*x - 8)/(x - 2)

>> simplify(sg/sh)

ans =(x - 2)^2

>> expand(simplify(sg/sh))

ans =x^2 - 4*x + 4

13

Page 14: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

닀음 두 닀항식을 symbolic expression윌로 표현하고 나눗셈을

했을 때, ê·ž 결곌륌 확읞핎뎅시닀.

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 1

>> g = [1 -6 12 -8];>> h = [1 -1];>> sg = poly2sym(g); sh = poly2sym(h);>> sg/sh

ans =(x^3 - 6*x^2 + 12*x - 8)/(x - 1)

>> simplify(sg/sh)

ans =(x - 2)^3/(x - 1)

몫곌나뚞지륌구하렀멎??14

Page 15: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic 닀항식에서 몫곌 나뚞지 구하Ʞ

[Q, R] = quorem( F, G )

• 심볌늭 닀항식 F와 G륌 입력 받아 F/G 나눗셈을 수행하고, 몫곌

나뚞지륌 각각 Q, R로 반환핹

𝑔𝑔 𝑥𝑥 = 𝑥𝑥3 − 6𝑥𝑥2 + 12𝑥𝑥 − 8

ℎ 𝑥𝑥 = 𝑥𝑥 − 1

>> g = [1 -6 12 -8];>> h = [1 -1];>> sg = poly2sym(g); sh = poly2sym(h);>> [q, r] = quorem(sg, sh)

q =x^2 - 5*x + 7

r =-1

% 검산

>> expand(q*sh+r)

ans =x^3 - 6*x^2 + 12*x - 8 15

Page 16: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

심볌늭 닀항식에서 계수 구하Ʞ

sym/coeffs 핚수

• [c, terms] = coeffs( P )

– 닀항식 P에서 몚든 믞정변수듀의 계수륌 반환

– c는 계수, terms는 각 믞정 변수듀의 찚수

• [c, terms] = coeffs( P, X )

– 닀항식 P에서 믞정계수 X의 찚수륌 반환

– c는 계수, terms는 각 믞정 변수듀의 찚수

>> syms x y>> z = 3*x^2*y^2 + 5*x*y^3>> [c, terms] = coeffs(z)

c =[ 3, 5]

terms =[ x^2*y^2, x*y^3]

>> syms x y>> z = 3*x^2*y^2 + 5*x*y^3>> [c, terms] = coeffs(z, x)

c =[ 3*y^2, 5*y^3]

terms =[ x^2, x]

>> [c, terms] = coeffs(z, y)

c = [ 5*x, 3*x^2]

terms =[ y^3, y^2] 16

Page 17: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

심볌늭 닀항식을 분수 형태로 나타낎Ʞ

[N, D] = numden( A )

• 심볌늭 닀항식 또는 심볌늭 표현 A륌 분수 형태로 나타냄

• 반환 값 N (numerator), D (denominator)

>> sym x y>> r = 1 + x^2 / (3 + x^2/5);r =x^2/(x^2/5 + 3) + 1

>> [n, d] = numden( r )

n =6*x^2 + 15

d = x^2 + 15

>> [n,d] = numden(sym(4/5))

n =4

d =5

>> [n,d] = numden(x/y + y/x)

n =x^2 + y^2

d =x*y

17

Page 18: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Taylor 수엎

F = taylor( A )

• 핚수 A가 입력되멎, 핚수륌 귌사하는 심볌늭 닀항식 F가 반환됹

• Ʞ볞적윌로 0 부귌의 Taylor 수엎읎 5ì°š 항까지 생성

>> syms x y z>> f = taylor(log(1+x))

f =x^5/5 - x^4/4 + x^3/3 - x^2/2 + x

>> ezplot( 'log(1+x)' )>> hold on;>> h = ezplot( f );>> set(h, 'color', 'red');

18

Page 19: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Taylor 수엎

F = taylor( A, x, a, ‘order’, n )

• 핚수 A륌 x = a 에서 nì°š 항의 닀항식윌로 귌사

% sin(x)륌 x=0에서귌사

>> syms x;>> f = taylor(sin(x), x, 0, 'order', 10)

f =

x^9/362880 - x^7/5040 + x^5/120 - x^3/6 + x

>> ezplot( 'sin(x)' );>> hold on;>> h = ezplot( f );>> set( h, 'color', 'red' );

19

Page 20: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Taylor 수엎

F = taylor( A, x, a, ‘order’, n )

• 핚수 A륌 x = a 에서 nì°š 항의 닀항식윌로 귌사

% sin(x)륌 x=2에서귌사

>> syms x;>> f = taylor(sin(x), x, 2, 'order', 10)

f =

x^9/362880 - x^7/5040 + x^5/120 - x^3/6 + x

>> ezplot( 'sin(x)' );>> hold on;>> h = ezplot( f );>> set( h, 'color', 'red' );>> ylim( [-5 5] )

20

Page 21: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Multivariable Taylor 수엎

F = taylor( A, [x1, x2, 
, xk] , [a1, a2, 
, ak], ‘order’, n )

• 닀변수 핚수 A륌 (x1, x2, 
, xk) = (a1, a2, ..., ak) 에서 nì°š 항의 닀항식윌로 귌사

% 2변수핚수륌 (x,y) = (0, 0) 에서귌사

>> syms x y;>> f = x + y + 3*exp(-x^2-y^2); >> ezsurf(f, [-1 2]);

>> g = taylor(f, [x,y], [0,0], 'order', 10);>> hold on;>> ezsurf(g, [-1 2]);

21

Page 22: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Parametric 핚수의 Taylor 수엎

공간상의 핚수가 𝑥𝑥 𝑡𝑡 = 𝑒𝑒−𝑡𝑡20 cos 𝑡𝑡, 𝑊𝑊 𝑡𝑡 = 𝑒𝑒−

𝑡𝑡20 sin 𝑡𝑡, 𝑧𝑧 𝑡𝑡 = 𝑡𝑡 음 때,

• Taylor로 위의 핚수륌 귌사하는 방법은, 각 핚수 x(t), y(t), z(t)륌 t에 대핮 귌사

syms x y tx = exp(-t/20)*cos(t);y = exp(-t/20)*sin(t);z = t;

figure(1);ezplot3(x,y,z, [-10 10]);

p = [x y z];f = taylor(p, t, 0, 'order', 30);

figure(2);ezplot3(f(1), f(2), f(3), [-10, 10]);

원래핚수

원핚수륌귌사한핚수

22

Page 23: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

방정식 풀읎

23

Page 24: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic Equation Solver

solve 핚수

• solve( eqn1, eqn2, 
, eqnN)

• solve( eqn1, eqn2, 
, eqnN, var1, var2, 
, varN)

– var 는 방정식에서 풀고자 하는 믞지수

방정식의 핮 구하Ʞ 예제

• 𝑎𝑎𝑥𝑥2 + 𝑏𝑏𝑥𝑥 + 𝑐𝑐 = 0

>> syms a b c x>> f = a*x^2+b*x+c;>> solve(f)

ans =

-(b + (b^2 - 4*a*c)^(1/2))/(2*a)-(b - (b^2 - 4*a*c)^(1/2))/(2*a)

2찚방정식읎므로두개의핎륌얻음

f==0 윌로계산핚

𝑠𝑠𝑠𝑠𝑠𝑠 ≔−𝑏𝑏 ± 𝑏𝑏2 − 4𝑎𝑎𝑐𝑐

2𝑎𝑎

24

Page 25: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic Equation Solver

solve 핚수 사용법

• eg) 𝑥𝑥2 − 2𝑥𝑥 − 4 = 0

• solve 핚수륌 ì“ž 때, symbolic 표현을 입력윌로 죌거나, 방정식을 묞자엎

형태로 쀄 수 있음.

>> syms x>> f = x^2-2*x-4;>> solve(f==0, x)

ans =

5^(1/2) + 11 - 5^(1/2)

>> solve('x^2-2*x-4==0')

ans =

5^(1/2) + 11 - 5^(1/2)

또는

25

Page 26: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic Equation Solver

𝑓𝑓 𝑥𝑥 = 𝑔𝑔(𝑥𝑥) 방정식의 겜우,

• 묞자엎로 입력하는 겜우, ‘f(x) = g(x)’ 로 하멎 되고, symbolic 표현윌로

Ʞ술하는 겜우, f(x) – g(x) == 0 형태로 만듀얎 죌얎알 핹.

• eg) cos 2𝑥𝑥 = 1 − sin(𝑥𝑥)

>> solve('cos(2*x) = 1 - sin(x)')

ans =

0pi/6

(5*pi)/6

>> syms x>> f = cos(2*x) + sin(x) - 1

f = cos(2*x) + sin(x) - 1

>> solve(f)

ans =

0pi/6

(5*pi)/6

또는

26

Page 27: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀변수 방정식의 풀읎

예륌 듀얎, 2𝑥𝑥 − log𝑊𝑊 = 1 방정식의 겜우,

• 얎느 변수에 대핮 풀 지 지정핎죌멎 됚

>> syms x y>> f = 2*x-log(y)-1

f =2*x - log(y) - 1

>> solve(f, x)

ans =log(y)/2 + 1/2

>> solve(f, y)

ans =exp(2*x - 1)

>> solve('2*x-log(y)=1', 'x')

ans =

log(y)/2 + 1/2

>> solve('2*x-log(y)=1', 'y')

ans =

exp(2*x - 1)

또는

27

Page 28: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

연늜 방정식의 풀읎

예륌 듀얎, 𝑥𝑥2 − 𝑊𝑊 = 2 와 y − 2𝑥𝑥 = 5 로 구성된 연늜 방정식을 푌닀고

하멎,

• 1. 여러 변수가 있을 때, 얎느 한 변수륌 지정하여 핎당 변수륌 좌변에 두고

방정식을 정늬 (y 변수로 식을 정늬)

𝑓𝑓1 ≔ 𝑊𝑊 = 𝑥𝑥2 − 2 , 𝑓𝑓2 ≔ 𝑊𝑊 = 2𝑥𝑥 + 5

• 2. 두 식을 각각 좌변, 우변에 두고 등식윌로 만듩

𝑥𝑥2 − 2 = 2𝑥𝑥 + 5

• 3. 등식윌로 만듀얎진 식의 핎륌 찟음 (x에 대한 핮)

𝑥𝑥 = 1 ± 2 2

• 4. 3번에서 찟은 핎륌 식에 대입하여 나뚞지 변수에 대한 값을 계산

𝑊𝑊 = 7 + 4 2, 𝑊𝑊 = 7 − 4 2

28

Page 29: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

연늜 방정식의 풀읎

예륌 듀얎, 𝑥𝑥2 − 𝑊𝑊 = 2 와 y − 2𝑥𝑥 = 5 로 구성된 연늜 방정식을 푌닀고

하멎,

>> syms x>> y1 = x^2 - 2;>> y2 = 2*x + 5;>> xsols = solve(y1 == y2)

xsols =

2*2^(1/2) + 11 - 2*2^(1/2)

>> simplify(subs(y1, xsols))

ans =

4*2^(1/2) + 77 - 4*2^(1/2)

>> simplify(subs(y2, xsols))

ans =

4*2^(1/2) + 77 - 4*2^(1/2)

29

Page 30: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

연늜 방정식의 풀읎

solve 핚수륌 읎용하멎 연늜 방정식을 쉜게 풀 수 있음

𝑥𝑥2 − 𝑊𝑊 = 2 와 y − 2𝑥𝑥 = 5 로 구성된 연늜 방정식

>> syms x y>> sols = solve( x^2 - y == 2, y - 2*x == 5 )

sols =

x: [2x1 sym]y: [2x1 sym]

% 첫번짞핎

>> sols.x(1)

ans =

2*2^(1/2) + 1

>> sols.y(1)

ans =

4*2^(1/2) + 7

% 두번짞핎

>> sols.x(2)

ans =

1 - 2*2^(1/2)

>> sols.y(2)

ans =

7 - 4*2^(1/2)

30

Page 31: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

닀음 연늜 방정식듀의 핎륌 solve 핚수륌 읎용하여 구핎뎅시닀.

• ᅵ𝑥𝑥 + 𝑊𝑊 − 𝑧𝑧 = 03𝑥𝑥 + 2𝑊𝑊 − 𝑧𝑧 = 52𝑥𝑥 − 𝑊𝑊 − 3𝑧𝑧 = −6

• ï¿œ 𝑊𝑊 = 32𝑥𝑥𝑊𝑊 = 5𝑥𝑥 + 1

•𝑥𝑥1 + 2𝑥𝑥2 + 4𝑥𝑥3 − 3𝑥𝑥4 = 5−2𝑥𝑥1 + 3𝑥𝑥2 − 𝑥𝑥3 − 6𝑥𝑥4 = 2𝑥𝑥1 + 5𝑥𝑥2 − 3𝑥𝑥3 + 2𝑥𝑥4 = 4

𝑥𝑥1 − 3𝑥𝑥2 − 5𝑥𝑥3 = 1

31

Page 32: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

닀음 연늜 방정식듀의 핎륌 solve 핚수륌 읎용하여 구핎뎅시닀.

• ᅵ𝑥𝑥 + 𝑊𝑊 − 𝑧𝑧 = 03𝑥𝑥 + 2𝑊𝑊 − 𝑧𝑧 = 52𝑥𝑥 − 𝑊𝑊 − 3𝑧𝑧 = −6

• ï¿œ 𝑊𝑊 = 32𝑥𝑥𝑊𝑊 = 5𝑥𝑥 + 1

•𝑥𝑥1 + 2𝑥𝑥2 + 4𝑥𝑥3 − 3𝑥𝑥4 = 5−2𝑥𝑥1 + 3𝑥𝑥2 − 𝑥𝑥3 − 6𝑥𝑥4 = 2𝑥𝑥1 + 5𝑥𝑥2 − 3𝑥𝑥3 + 2𝑥𝑥4 = 4

𝑥𝑥1 − 3𝑥𝑥2 − 5𝑥𝑥3 = 1

% problem 1>> syms x y z>> f1 = x + y - z == 0;>> f2 = 3*x + 2*y - z == 5;>> f3 = 2*x - y - 3*z == -6;>> sols = solve(f1, f2, f3)

sols =

x: [1x1 sym]y: [1x1 sym]z: [1x1 sym]

>> [sols.x sols.y sols.z]

ans =[ 2, 1, 3]

% problem 2>> syms x y>> sols = solve('y=3^(2*x)', 'y=5^x+1')

sols =

x: [1x1 sym]y: [1x1 sym]

>> [sols.x sols.y]

ans =

[ 0.57107246071180090433600366899982, 3.

>> digits(5)>> [sols.x sols.y]

% problem 3>> syms x1 x2 x3 x4>> f1 = x1+2*x2+4*x3-3*x4 == 5;>> f2 = -2*x1+3*x2-x3-6*x4 == 2;>> f3 = x1+5*x2-3*x3+2*x4 == 4;>> f4 = x1-3*x2-5*x3==1;>> sols = solve(f1,f2,f3,f4)

sols = x1: [1x1 sym]x2: [1x1 sym]x3: [1x1 sym]x4: [1x1 sym]

>> [sols.x1 sols.x2 sols.x3 sols.x4]

ans =[ 720/337, 397/674, -85/674, -246/337] 32

Page 33: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

닀음 두 핚수 f(x,y)와 g(x,y)가 교찚하는 지점의 좌표값을 구핎뎅시닀.

• 𝑓𝑓 𝑥𝑥,𝑊𝑊 = 𝑊𝑊 − 4𝑥𝑥2 + 3

• 𝑔𝑔 𝑥𝑥,𝑊𝑊 = 𝑥𝑥2

4+ 𝑊𝑊2 − 1

33

Page 34: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

닀음 두 핚수 f(x,y)와 g(x,y)가 교찚하는 지점의 좌표값을 구핎뎅시닀.

• 𝑓𝑓 𝑥𝑥,𝑊𝑊 = 𝑊𝑊 − 4𝑥𝑥2 + 3

• 𝑔𝑔 𝑥𝑥,𝑊𝑊 = 𝑥𝑥2

4+ 𝑊𝑊2 − 1

% solutionsyms x yf = y - 4*x^2+3;g = x^2/4 + y^2 - 1;h1 = ezplot(g);set(h1, 'color', 'r');hold on;h2 = ezplot(f);set(h2, 'color', 'b');grid on;axis([-3 3 -4 4]);

[xs, ys] = solve(f, g)sols = [double(xs) double(ys)]

34

Page 35: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

탄도 믞사음을 쏘았을 때, 시간에 따륞 x축, y축 방향의 거늬는 아래와

같습니닀.

• 𝑑𝑑𝑑𝑑𝑠𝑠𝑡𝑡𝑥𝑥 𝑡𝑡 = 𝑣𝑣0 𝑡𝑡 cos(𝜃𝜃)

• 𝑑𝑑𝑑𝑑𝑠𝑠𝑡𝑡𝑊𝑊 𝑡𝑡 = 𝑣𝑣0 𝑡𝑡 sin 𝜃𝜃 − 12𝑔𝑔𝑡𝑡2

쎈Ʞ 속도 v0가 100 m/s 읎고, 쀑력가속도 g가 9.8 m/s2 음 때, 믞사음을

쏘는 각도에 따띌 믞사음읎 땅에 닿을 때까지 도달하는 거늬가 얎떻게

변화하는지 귞래프로 귞렀뎅시닀.

35

Page 36: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

disty(t) 귞래프가 0읎 되는 순간의 t 값읎 믞사음읎 땅에 닫는

순간읎므로, disty(t) 핚수가 0읎 될 때, t값의 핎륌 찟아냄.

syms v0 t theta g

disty = v0 * t * sin(theta) - 1/2 * g * t^2;distx = v0 * t * cos(theta)

impact_time = solve(disty, t, 0)

impact_time =

0(2*v0*sin(theta))/g

36

Page 37: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

disty(t) 핚수가 0읎 될 때, t값의 핎륌 distx 값의 t에 대입

귞러멎, distx 핚수는 theta에 ꎀ한 핚수가 됚

impact_dist = subs(distx, t, impact_time(2));

g = 9.8;v0 = 100;

impact_dist = subs(impact_dist)

impact_dist =

(100000*cos(theta)*sin(theta))/49

37

Page 38: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

distx(theta) 핚수륌 theta = 0 .. pi/2 까지 plot 핚수 읎용하여 귞늌

t = 0:0.1:pi/2;y = subs(impact_dist, theta, t);

plot(t, y)grid on

38

Page 39: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

fzero

solve륌 통핎 f(x) = sin(x) – 0.5x 의 핎륌 구하멎 0만 나옎

• 귞러나, 귞래프륌 귞렀볎멎 í•Žê°€ 2개 더 졎재핚을 확읞할 수 있음

fzero는 “닚음변수” 핚수 f의 부혞가 변하는 지점 (슉, f(x) = 0)의 귌을 구하는 데에 사용

• 원하는 귌에 가깝닀고 생각되는 시작값 x0 로부터 귌을 탐색하여,

𝑥𝑥𝑛𝑛 − 𝑥𝑥∗ ≀ 2 × 10−16 을 만족하는 추정귌 x*륌 구할 때 까지 반복적윌로 계산

>> syms x>> ezplot('sin(x) - 0.5*x')>> grid on

39

Page 40: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

fzero

solve륌 통핎 f(x) = sin(x) – 0.5x 의 핎륌 구하멎 0만 나옎

• 귞러나, 귞래프륌 귞렀볎멎 í•Žê°€ 2개 더 졎재핚을 확읞할 수 있음

>> solve('sin(x)-0.5*x==0')

ans =0

>> fzero('sin(x)-0.5*x', [1 3])

ans =1.8955

>> fzero('sin(x)-0.5*x', [-3 -1])

ans =-1.8955

>> fzero('sin(x)-0.5*x', [-5 -3])Error using fzero (line 274)The function values at the interval endpoints must differ in sign.

40

Page 41: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

닀음 방정식듀의 귌을 fzero 핚수륌 읎용하여 구핎뎅시닀.

• x – tan(x) = 0

• cos(x) – x = 0

41

Page 42: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

닀음 방정식듀의 귌을 fzero 핚수륌 읎용하여 구핎뎅시닀.

• x – tan(x) = 0

• cos(x) – x = 0

>> solve('x - tan(x) == 0')

ans =0

>> ezplot('x - tan(x)')>> grid on>> fzero('x - tan(x)', -4)

ans =-4.4934

>> fzero('x - tan(x)', 4)

ans =4.4934

42

Page 43: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식의 ê·Œ 계산

roots 핚수

• 닀항식 p의 귌을 수치적윌로 계산핎죌는 핚수

• z = roots( p )

– p 는 닀항식의 계수 벡터

– z 는 닀항식 p = 0 의 ê·Œ

>> syms x>> p = sym2poly(x^2 - x - 1)

p =1 -1 -1

>> z = roots(p)

z =-0.61801.6180

43

Page 44: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

닀항식의 귌의 검슝

polyval 핚수

• 닀항식 p에 값을 대입하여 닀항식의 값을 계산핚

• v = polyval( p, z )

– p 는 닀항식의 계수 벡터

– z 는 닀항식의 값을 계산할 값

% 닀항식귌계산

>> syms x>> p = sym2poly(x^2 - x - 1)

p =1 -1 -1

>> z = roots(p)

z =-0.61801.6180

% 닀항식귌검슝

>> polyval(p, z)

ans =

1.0e-15 *

-0.11100.2220

0 에귌접한값

44

Page 45: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

믞분 방정식 풀Ʞ

45

Page 46: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

믞분 방정식의 표현

MATLAB에서는 믞분 연산자륌 닀음곌 같읎 표현핹

• 𝑑𝑑𝑑𝑑𝑥𝑥 D, 𝑑𝑑2

𝑑𝑑𝑥𝑥2 D2, 𝑑𝑑

3

𝑑𝑑𝑥𝑥3 D3, 
, 𝑑𝑑

𝑛𝑛

𝑑𝑑𝑥𝑥𝑛𝑛 Dn

• 아래 믞분 방정식은 믞분연산자 D륌 읎용하여 닀음곌 같읎 표현 가능

𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= −2𝑥𝑥𝑊𝑊 Dy = -2xy

믞분방정식의 핮 구하Ʞ 예제

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= −2𝑥𝑥𝑊𝑊, y 1 = 1

>> dsolve('Dy = -2*x*y', 'y(1) = 1', 'x')

ans =

exp(1)*exp(-x^2)46

Page 47: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic Expression 읎용한 믞분 방정식 풀읎

Symbolic Math에서는 아래 믞분연산자 D가 적용되지 않음

• 𝑑𝑑𝑑𝑑𝑥𝑥 D, 𝑑𝑑2

𝑑𝑑𝑥𝑥2 D2, 𝑑𝑑

3

𝑑𝑑𝑥𝑥3 D3, 
, 𝑑𝑑

𝑛𝑛

𝑑𝑑𝑥𝑥𝑛𝑛 Dn

• 대신 diff(x) 로 표현핎알 핹

믞분방정식의 핮 구하Ʞ 예제

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= −2𝑥𝑥𝑊𝑊, y 1 = 1

>> syms x y(t)>> dsolve(diff(y) == -2*x*y, y(1) == 1, x)

ans =

exp(1)*exp(-x^2)

47

Page 48: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

nì°š 믞분 방정식의 풀읎

𝑊𝑊′′ + 6𝑊𝑊′ + 9𝑊𝑊 = 0, y 0 = −4, y′ 0 = 14

• 여Ʞ서 y’’ 는 𝑑𝑑2𝑊𝑊𝑑𝑑𝑥𝑥2

또는 D2y, y’는 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥또는 Dy 륌 의믞핚

>> Dsol = dsolve('D2y+6*Dy+9*y=0', 'y(0)=-4', 'Dy(0)=14', 'x')

Dsol =

2*x*exp(-3*x) - 4*exp(-3*x)

>> simple(Dsol)

ans =

2*exp(-3*x)*(x - 2)

48

Page 49: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

nì°š 믞분 방정식의 풀읎

𝑊𝑊′′ + 6𝑊𝑊′ + 9𝑊𝑊 = 0, y 0 = −4, y′ 0 = 14

• 여Ʞ서 y’’ 는 𝑑𝑑2𝑊𝑊𝑑𝑑𝑥𝑥2

또는 D2y, y’는 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥또는 Dy 륌 의믞핚

• symbolic expression윌로 ì“°ë©Ž 아래와 같음

>> syms x y(t)>> D2y = diff(diff(y));>> Dy = diff(y);>> Dsol = dsolve(D2y+6*Dy+9*y==0, y(0)==-4, Dy(0)==14, x)

Dsol =

2*x*exp(-3*x) - 4*exp(-3*x)

49

Page 50: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

연늜 믞분 방정식

연늜믞분방정식 (D = 𝑑𝑑𝑑𝑑𝒕𝒕

)

• ᅵ𝑥𝑥′ − 2𝑥𝑥 − 3𝑊𝑊 = 2𝑒𝑒2𝑡𝑡

−𝑥𝑥 + 𝑊𝑊′ − 4𝑊𝑊 = 3𝑒𝑒2𝑡𝑡, x 0 = − 2

3, y 0 = 1

3

• 여Ʞ서 x’ 는𝑑𝑑𝑥𝑥𝑑𝑑𝑡𝑡또는 Dx, y’는

𝑑𝑑𝑊𝑊𝑑𝑑𝑡𝑡또는 Dy 륌 의믞핚

>> DSol2 = dsolve('Dx-2*x-3*y=2*exp(2*t)', '-x+Dy-4*y=3*exp(2*t)', 'x(0)=-2/3', 'y(0)=1/3')

DSol2 = y: [1x1 sym]x: [1x1 sym]

>> DSol2.x

ans =- (3*exp(2*t))/4 - exp(5*t)*((11*exp(-3*t))/12 - 1)

>> DSol2.y

ans =exp(2*t)/4 - exp(5*t)*((11*exp(-3*t))/12 - 1) 50

Page 51: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

연늜 믞분 방정식

연늜 믞분 방정식 (D = 𝑑𝑑𝑑𝑑𝒕𝒕

) 을 Symbolic Expression윌로 풀읎

• ᅵ𝑥𝑥′ − 2𝑥𝑥 − 3𝑊𝑊 = 2𝑒𝑒2𝑡𝑡

−𝑥𝑥 + 𝑊𝑊′ − 4𝑊𝑊 = 3𝑒𝑒2𝑡𝑡, x 0 = − 2

3, y 0 = 1

3

• 여Ʞ서 x’ 는𝑑𝑑𝑥𝑥𝑑𝑑𝑡𝑡또는 Dx, y’는

𝑑𝑑𝑊𝑊𝑑𝑑𝑡𝑡또는 Dy 륌 의믞핚

syms x y x(t) y(t)Dx = diff(x);Dy = diff(y);deq1 = Dx-2*x-3*y==2*exp(2*t);deq2 = -x+Dy-4*y==3*exp(2*t);DSol2 = dsolve(deq1, deq2, 'x(0)=-2/3', 'y(0)=1/3', t);

51

Page 52: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz

아래 죌얎진 믞분 방정식을 symbolic expression을 사용하여 풀얎뎅시닀

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= 𝑒𝑒𝑥𝑥

2𝑊𝑊

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= 𝑒𝑒𝑊𝑊𝑥𝑥𝑒𝑒𝑊𝑊+𝑥𝑥2𝑒𝑒𝑊𝑊

• 𝑒𝑒𝑥𝑥(𝑑𝑑𝑥𝑥𝑑𝑑𝑡𝑡

+ 1) = 1 , 𝑥𝑥(0) = 1

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

+ 1−𝑊𝑊2

1−𝑥𝑥2= 0

52

Page 53: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Quiz Sol.

아래 죌얎진 믞분 방정식을 symbolic expression을 사용하여 풀얎뎅시닀

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= 𝑒𝑒𝑥𝑥

2𝑊𝑊

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

= 𝑒𝑒𝑊𝑊𝑥𝑥𝑒𝑒𝑊𝑊+𝑥𝑥2𝑒𝑒𝑊𝑊

• 𝑒𝑒𝑥𝑥(𝑑𝑑𝑥𝑥𝑑𝑑𝑡𝑡

+ 1) = 1 , 𝑥𝑥(0) = 1

• 𝑑𝑑𝑊𝑊𝑑𝑑𝑥𝑥

+ 1−𝑊𝑊2

1−𝑥𝑥2= 0

syms x y(t)Dy = diff(y);dsolve(Dy==exp(x)/(2*y))

syms x y(t)Dy = diff(y);dsolve(Dy==(exp(y)*x)/(exp(y)+x^2*exp(y)))

syms x(t)Dx = diff(x);f = exp(x)*(Dx+1)==1;dsolve(f, x(0)==1)

syms x y(t)Dy = diff(y);f = Dy + sqrt((1-y^2)/(1-x^2)) == 0;dsolve(f)

53

Page 54: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

변환

54

Page 55: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

변환읎란?

ì–Žë– í•œ 핚수 f(t)륌 닀륞 핚수 F(s)로 변환하는 것.• 전자공학에서는 시간

변환을 통핎 복잡한 핚수 f(t)륌 쉜게 풀 수 있는 F(s)로 변환하여 묞제륌 í•Žê²°.

믞분 방정식 등을 풀 때 널늬 사용.

예륌 듀얎, 믞분방정식을 푌닀고 하멎,

• 1. 핚수 f(t)륌 F(s)로 변환 (식읎 간닚핎짐)• 2. F(s)의 믞분 방정식을 품• 3. F(s)에서 얻은 핎륌 닀시 역변환하멎 원 식 f(t)의 í•Žê°€ 됚

종류• Laplace 변환, Z-변환, Fourier 변환, 


55

Page 56: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Laplace 변환

띌플띌슀 변환 : 𝐹𝐹 𝑠𝑠 = 𝐿𝐿 𝑓𝑓 𝑡𝑡 = ∫0∞𝑓𝑓 𝑡𝑡 𝑒𝑒−𝑠𝑠𝑡𝑡𝑑𝑑𝑡𝑡

역 띌플띌슀 변환 : 𝑓𝑓 𝑡𝑡 = 12𝜋𝜋𝑖𝑖 ∫𝜎𝜎−𝑖𝑖∞

𝜎𝜎+∞ 𝐹𝐹 𝑠𝑠 𝑒𝑒𝑠𝑠𝑡𝑡𝑑𝑑𝑠𝑠

변환 예

% 띌플띌슀변환>> syms t w>> laplace(t^2)

ans =2/s^3

>> laplace(cos(w*t))

ans =s/(s^2 + w^2)

>> laplace(t^1)

ans =1/s^2

% 띌플띌슀역변환>> syms s w>> ilaplace( 1/s^3 )

ans =t^2/2

>> ilaplace( 3/(s+w) )

ans =3*exp(-t*w)

>> ilaplace( s/(s^2+4) )

ans =cos(2*t)

56

Page 57: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Laplace 변환

띌플띌슀 변환을 읎용한 믞분 방정식의 풀읎 (1/2)

• 1찚와 2ì°š 믞분 방정식의 Laplace 변환 𝐿𝐿 𝑑𝑑𝑑𝑑

𝑑𝑑𝑡𝑡= 𝑠𝑠𝐹𝐹 𝑠𝑠 − 𝑓𝑓 0

𝐿𝐿 𝑑𝑑2𝑑𝑑𝑑𝑑𝑡𝑡2

= 𝑠𝑠2𝐹𝐹 𝑠𝑠 − 𝑠𝑠𝐹𝐹 𝑠𝑠 − 𝑓𝑓′(0)

• 닀음 믞분 방정식 𝑊𝑊′′ + 6𝑊𝑊′ + 9𝑊𝑊 = 0, y 0 = −4, y′ 0 = 14 을Laplace 변환윌로 풀읎

𝐿𝐿 𝑊𝑊′′ + 6𝑊𝑊′ + 9𝑊𝑊 = 𝐿𝐿 𝑊𝑊′′ + 6𝐿𝐿 𝑊𝑊′ + 9𝐿𝐿 𝑊𝑊

= 𝑠𝑠2𝑌𝑌 𝑠𝑠 − 𝑠𝑠𝑌𝑌 𝑠𝑠 − 𝑊𝑊′ 0 + 6𝑠𝑠𝑌𝑌 𝑠𝑠 − 6𝑊𝑊 0 + 9𝑌𝑌 𝑠𝑠 = 0

𝑠𝑠2 + 6𝑠𝑠 + 9 𝑌𝑌 𝑠𝑠 = −4𝑠𝑠 + 14

𝐹𝐹 𝑠𝑠 = −4𝑠𝑠+14𝑠𝑠2+6𝑠𝑠+9

57

Page 58: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Laplace 변환

띌플띌슀 변환을 읎용한 믞분 방정식의 풀읎 (2/2)

𝐹𝐹 𝑠𝑠 = −4𝑠𝑠+14𝑠𝑠2+6𝑠𝑠+9

F(s)륌 띌플띌슀 역변환 하멎 원 믞분방정식의 í•Žê°€ 구핎짐

>> syms s>> Y = (-4*s+14)/(s^2+6*s+9)

Y =-(4*s - 14)/(s^2 + 6*s + 9)

>> ilaplace(Y)

ans =26*t*exp(-3*t) - 4*exp(-3*t)

58

Page 59: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Z 변환

Z 변환 : 𝐹𝐹 𝑠𝑠 = 𝑍𝑍 𝑓𝑓 𝑡𝑡 = ∑𝑛𝑛=0∞ 𝑓𝑓 𝑛𝑛𝑛𝑛 𝑧𝑧−𝑛𝑛

변환 예

% Z 변환>> syms t>> f = sin(2*t)

f = sin(2*t)

>> fz = ztrans(f)

fz =(z*sin(2))/(z^2 - 2*cos(2)*z + 1)

>> pretty(fz)

z sin(2) -------------------2 z - 2 cos(2) z + 1

% Z 역변환>> syms z>> f = 3*z/(z^2 - 4*z + 5);>> f = 3*z/(z^2 - 4*z + 5)

f = (3*z)/(z^2 - 4*z + 5)

>> ft = iztrans(f)

ft =((-1)^n*(- 2 - i)^(n - 1)*15*i)/4 - ((-1)^n*(- 2 + i)^(n - 1)*15*i)/4 + (3*(-1)^n*5^n*cos(n*(pi - a

>> pretty(ft)

/ / / 1/2 \ \ \n n | | | 2 5 | | |

3 (-1) 5 cos| n | pi - acos| ------ | | | n n - 1 \ \ \ 5 / / / 15 (-1) (i - 2) i

------------------------------------------- - ----------------------- + 1/2 n 4

2 (5 )

n n - 1 15 (-1) (- i - 2) i -------------------------

4

𝑓𝑓 𝑧𝑧 =3𝑧𝑧

𝑧𝑧2 − 4𝑧𝑧 + 5

59

Page 60: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Fourier 변환

Fourier 변환 : 𝐹𝐹 𝑀𝑀 = ∫−∞∞ 𝑓𝑓 𝑥𝑥 𝑒𝑒−𝑖𝑖𝑖𝑖𝑥𝑥𝑑𝑑𝑥𝑥

역 Fourier 변환 : 𝑓𝑓 𝑡𝑡 = 12𝜋𝜋 ∫−∞

∞ 𝐹𝐹 𝑀𝑀 𝑒𝑒𝑖𝑖𝑖𝑖𝑥𝑥𝑑𝑑𝑀𝑀

변환 예

% Fourier 변환>> syms x u>> f = x*exp(-abs(x))

f =x*exp(-abs(x))

>> g = fourier(f, u)

g =-(u*4*i)/(u^2 + 1)^2

>> pretty(g)

4 u i - ---------

2 2 (u + 1)

% Fourier 역변환>> syms x>> f = exp(-abs(x))

f =

exp(-abs(x))

>> g = ifourier(f)

g =

1/(pi*(t^2 + 1))

𝑓𝑓 𝑥𝑥 = 𝑥𝑥𝑒𝑒−|𝑥𝑥| 𝑔𝑔 𝑥𝑥 = 𝑒𝑒−|𝑥𝑥|

60

Page 61: MATLAB for C/C++ Programmers - KAIST IT Academy Web ... · −𝑊𝑊= 2 와y −2𝑥𝑥= 5 로구성된연늜방정식을푌닀고 하멎, • 1. 여러변수가있을때, 얎느한변수륌지정하여핎당변수륌좌변에두고

MATLAB Programming

Symbolic Math Toolbox 죌요 핚수듀핚수명 핚수Ʞ능

syms symbolic 변수정의

ezplot symbolic 수식 plotting

double symbolic 변수륌 double형데읎터로변환

diff 핚수륌믞분

int 핚수륌적분

limit 핚수의극한

symsum ꞉수계산

solve 방정식의핎구핚

fourier 핚수의 fourier transform

ifourier 핚수의 inverse fourier transform

laplace 핚수의 laplace transform

ilaplace 핚수의 inverse laplace transform

ztrans 핚수의 z transformation

iztrans 핚수의 inverse z transformation

collect 닀항식의공통항정늬

expand 닀항식전개

factor 읞수분핎

hornor 닀항식을 nested form윌로만듊

simple 닀항식을가장간소화된표현윌로바꿈

simplify 닀항식을간소화된표현윌로 바꿈

pretty 수학적표현윌로 symbolic 수식을변형 61