345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q....

49
수치해석 수치해석 Numerical Analysis Numerical Analysis 161009 161009 Ch3. Programming with Ch3. Programming with MATLAB MATLAB

Transcript of 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q....

Page 1: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

수치해석수치해석Numerical AnalysisNumerical Analysis

161009161009

Ch3. Programming with Ch3. Programming with Ch3. Programming with Ch3. Programming with MATLABMATLAB

Page 2: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.1 M-파일 (1/5)

• 스크립트스크립트스크립트스크립트 파일파일파일파일- 일련의 MATLAB 명령어를 구성되어 저장된 M-파일이다.

%scriptdemo.mg=9.81; m=68.1; cd=0.25;

Numerical AnalysisNumerical Analysis

>> scriptdemov =50.6175

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

Page 3: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.1 M-파일 (2/5)

• 함수함수함수함수 파일파일파일파일---- functionfunctionfunctionfunction이라는이라는이라는이라는 단어로단어로단어로단어로 시작하는시작하는시작하는시작하는 MMMM----파일이다파일이다파일이다파일이다....

function outvar = funcname(arglist)%helpcomments

Numerical AnalysisNumerical Analysis

%helpcommentsstatementsoutvar = value;

outvar = 출력변수의출력변수의출력변수의출력변수의 이름이름이름이름funcname = 함수의함수의함수의함수의 이름이름이름이름arglist = 함수의함수의함수의함수의 인수목록인수목록인수목록인수목록helpcomments

= 사용자가사용자가사용자가사용자가 제공하는제공하는제공하는제공하는 함수에함수에함수에함수에 관한관한관한관한 정보정보정보정보statements

= value를를를를 계산하여계산하여계산하여계산하여 그그그그 값을값을값을값을 outvar에에에에배정하는배정하는배정하는배정하는 문장문장문장문장

Page 4: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.2 (1/3)

Q. 번지점프하는 사람의 자유낙하 속도를 함수 파일을 사용하여 구하라.

function v = freefallvel(t, m, cd)% freefallvel: bungee velocity with second-order drag% v=freefallvel(t,m,cd) computes the free-fall velocity

2vm

cg

dt

dv d−=

= t

m

gc

c

gmtv d

d

tanh)(

Numerical AnalysisNumerical Analysis

% v=freefallvel(t,m,cd) computes the free-fall velocity% of an object with second-order drag%input:% t=time(s)% m=mass(kg)% cd=second order drag coefficient (kg/m)%output:% v=downward velocity (m/s)g=9.81; %accelearation of gravityv=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t);

Page 5: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.2 (2/3)

Q1. 68.1 kg 인사람의 12초 후의속도를 구하려면…

>> freefallvel(12, 68.1, 0.25)ans =

50.6175

Numerical AnalysisNumerical Analysis

Q2. 100 kg 인사람의 8초 후의속도를 구하려면…

>> freefallvel(8, 100, 0.25)ans =

53.1878

Page 6: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.2 (3/3)

도움 설명을 불러내려면 다음과 같이 입력한다.

>> help freefallvel

freefallvel: bungee velocity with second-order drag

v=freefallvel(t, m, cd) computes the free-fall velocity

Numerical AnalysisNumerical Analysis

v=freefallvel(t, m, cd) computes the free-fall velocity

of an object with second-order drag.

input:

v = downward velocity (m/s)

Page 7: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.1 M-파일 (3/5)

---- 함수함수함수함수 MMMM----파일은파일은파일은파일은 2222개개개개 이상의이상의이상의이상의 결과를결과를결과를결과를 반환할반환할반환할반환할 수수수수 있다있다있다있다....

예예예예) ) ) ) 벡터의벡터의벡터의벡터의 평균과평균과평균과평균과 표준편차의표준편차의표준편차의표준편차의 계산계산계산계산

function [mean, stdev] = stats(x)n=length(x);mean=sum(x)/n;stdev=sqrt(sum((x-mean).^2/(n-1)));

Numerical AnalysisNumerical Analysis

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 8: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.1 M-파일 (4/5)

• 부함수부함수부함수부함수(subfunctions) (subfunctions) (subfunctions) (subfunctions) - 함수가 다른 함수를 부를 수 있다. 이러한 함수는 M-파일을 구분하여 작

성할 수도 있고, 한 개의 M 파일에 포함시킬 수도 있다.

function v= freefallsubfunc(t, m, cd)

Numerical AnalysisNumerical Analysis

function v= freefallsubfunc(t, m, cd)v=vel(t, m, cd);end

function v=vel(t, m, cd)g=9.81;v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t);end

주함수

부함수

Page 9: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.1 M-파일 (5/5)

>> freefallsubfunc (12, 68.1, 0.25)ans =50.6175

>> vel (12, 68.1, 0.25)??? Undefined command/function ‘vel’.

Numerical AnalysisNumerical Analysis

??? Undefined command/function ‘vel’.

Page 10: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.2 입력-출력 (1/4)

• input 함수- 사용자로 하여금 명령창에서 직접 입력하도록 한다.

m = input ('Mass (kg): ')m = input ('Mass (kg): ')m = input ('Mass (kg): ')m = input ('Mass (kg): ')

name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's')

Numerical AnalysisNumerical Analysis

name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's') name = input ('Enter your name: ', 's')

%%%%문자열을문자열을문자열을문자열을 받는받는받는받는 경우경우경우경우

Page 11: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.2 입력-출력 (2/4)

• disp 함수- 어떤 값을 손쉽게 나타낸다.

disp(' ')disp(' ')disp(' ')disp(' ')

disp('Velocity (m/s): ') disp('Velocity (m/s): ') disp('Velocity (m/s): ') disp('Velocity (m/s): ')

Numerical AnalysisNumerical Analysis

disp('Velocity (m/s): ') disp('Velocity (m/s): ') disp('Velocity (m/s): ') disp('Velocity (m/s): ')

%%%%문자열을문자열을문자열을문자열을 나타내는나타내는나타내는나타내는 경우경우경우경우

Page 12: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.2 입력-출력 (3/4)

fprintffprintffprintffprintf ('format',('format',('format',('format', x,x,x,x, …………))))

%%%%포맷코드와포맷코드와포맷코드와포맷코드와 제어코드를제어코드를제어코드를제어코드를 넣어서넣어서넣어서넣어서 나타내는나타내는나타내는나타내는 경우경우경우경우

• fprintf 함수- 정보를 표현할 때 추가적인 제어를 제공한다.

Numerical AnalysisNumerical Analysis

%%%%포맷코드와포맷코드와포맷코드와포맷코드와 제어코드를제어코드를제어코드를제어코드를 넣어서넣어서넣어서넣어서 나타내는나타내는나타내는나타내는 경우경우경우경우

>>>>>>>> fprintf(fprintf(fprintf(fprintf(‘‘‘‘TheTheTheThe velocityvelocityvelocityvelocity isisisis %%%%8888....4444ffff m/sm/sm/sm/s\\\\nnnn’’’’,,,, velocity)velocity)velocity)velocity)

TheTheTheThe velocityvelocityvelocityvelocity isisisis 50505050....6175617561756175 m/sm/sm/sm/s

Page 13: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.2 입력-출력 (4/4)

표표표표 3.1 3.1 3.1 3.1 fprintffprintffprintffprintf 함수에서함수에서함수에서함수에서 사용하는사용하는사용하는사용하는 포맷포맷포맷포맷 코드와코드와코드와코드와 제어제어제어제어 코드코드코드코드

포맷포맷포맷포맷 코드코드코드코드 설설설설 명명명명

%d%d%d%d

%e%e%e%e

정수정수정수정수 포맷포맷포맷포맷

eeee를를를를 사용하는사용하는사용하는사용하는 과학과학과학과학 포맷포맷포맷포맷

Numerical AnalysisNumerical Analysis3장 MATLAB 프로그래밍

%E%E%E%E

%f%f%f%f

%g%g%g%g

EEEE를를를를 사용하는사용하는사용하는사용하는 과학과학과학과학 포맷포맷포맷포맷

소수소수소수소수 포맷포맷포맷포맷

%e%e%e%e나나나나 %f %f %f %f 중중중중 간단한간단한간단한간단한 포맷포맷포맷포맷

제어제어제어제어 코드코드코드코드 설설설설 명명명명

\\\\nnnn

\\\\tttt

새로운새로운새로운새로운 줄로줄로줄로줄로 시작시작시작시작

탭탭탭탭

Page 14: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.3 (1/2)

Q. 예제 3.2에서와 같이 번지점프하는 사람의 자유낙하 속도를 계산하라.입출력으로 input과 disp 함수를 사용하라.

function freefalli% freefalli: interactive bunge velocity% freefalli interactive computation of the free-fall velocity of an object% with second-order drag.g=9.81; % acceleration of gravity

Numerical AnalysisNumerical Analysis

g=9.81; % acceleration of gravitym=input('Mass(kg):');cd=input('Drag Coefficient(kg/m):');t=input('Time(s):');disp(' ')disp('Velocity (m/s):')disp(sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t))minusvelocity= -sqrt(g*m/cd)* tanh(sqrt(g*cd/m)*t);fprintf('The velocity is %8.4f m/s\n', minusvelocity)name = input ('Enter your name: ', 's'); disp('Your name is'); disp(name)

Page 15: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.3 (2/2)

명령창에서 다음과 같이 입력한다.

>> freefalli>> freefalli>> freefalli>> freefalli

Mass (kg): Mass (kg): Mass (kg): Mass (kg): 68.168.168.168.1

Drag coefficient (kg/m): Drag coefficient (kg/m): Drag coefficient (kg/m): Drag coefficient (kg/m): 0.250.250.250.25

Time (s): Time (s): Time (s): Time (s): 12121212

Numerical AnalysisNumerical Analysis

Time (s): Time (s): Time (s): Time (s): 12121212

Velocity (m/s): Velocity (m/s): Velocity (m/s): Velocity (m/s):

50.617550.617550.617550.6175

The velocity is The velocity is The velocity is The velocity is ----50.6175 m/s50.6175 m/s50.6175 m/s50.6175 m/s

Enter your name: Enter your name: Enter your name: Enter your name: KimKimKimKim

Your name isYour name isYour name isYour name is

Kim Kim Kim Kim

Page 16: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (1/11)

� 명령을명령을명령을명령을 연속적으로연속적으로연속적으로연속적으로 수행하지수행하지수행하지수행하지 않는않는않는않는 것을것을것을것을

허용하는허용하는허용하는허용하는 구문구문구문구문

---- 판정판정판정판정 ((((또는또는또는또는 선택선택선택선택): ): ): ): 판정에 기초를 둔 흐름의 분기점이다.

---- 루프루프루프루프 ((((또는또는또는또는 반복반복반복반복): ): ): ): 반복을 허용하는 흐름의 루프이다.

� 판정판정판정판정

Numerical AnalysisNumerical Analysis

� 판정판정판정판정[if [if [if [if 구조구조구조구조]]]]

if conditionstatements

end

Page 17: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (2/11)

function grader(grade)if grade >= 60

disp('passing grade:')disp(grade)

>> grader(95.6)passing grade:95.6000

Numerical AnalysisNumerical Analysis

<파일 편집기> <명령창>

disp(grade)end

Page 18: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (3/11)

error (msg)

function f = errortest(x)

Cf) 에러 함수

>> errortest(10)

Numerical AnalysisNumerical Analysis

function f = errortest(x)if x==0, error(' zero value encountered'), end

f=1/x;

>> errortest(10)ans =

0.1000>> errortest(0)??? Error using ==> errortestzero value encountered

Page 19: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (4/11)

[[[[논리조건논리조건논리조건논리조건] ] ] ]

• ~~~~ (Not) (Not) (Not) (Not)

value1 relation value2

Numerical AnalysisNumerical Analysis

- 논리적 부정을 나타낼 때 사용한다.

• &&&& (And) (And) (And) (And)

- 두 식에서 논리적 곱을 나타낼 때 사용한다.

• | | | | (Or) (Or) (Or) (Or)

- 두 식에서 논리적 합을 나타낼 때 사용한다.

Page 20: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (5/11)

Numerical AnalysisNumerical Analysis

<<<<복잡한복잡한복잡한복잡한 논리식의논리식의논리식의논리식의 단계별단계별단계별단계별 계산계산계산계산>>>>

Page 21: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (6/11)

if conditionstatements1

elsestatements2

if condition1statements1

elseif condition2statements2

[if … else 구조] [if … elseif 구조]

Numerical AnalysisNumerical Analysis

statements2end

statements2…

else statementselse

end

Page 22: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.4 (1/3)

Q. 내장함수인 sign 함수와 같은 기능을 갖도록if …else 구조를 사용하여 mysign 함수를 작성하라.

풀이) 내장함수인 sign 함수의 기능을 알아보자.

>> sign(25.6)>> sign(25.6)>> sign(25.6)>> sign(25.6)

ans =ans =ans =ans =

Numerical AnalysisNumerical Analysis

1111

>> sign(>> sign(>> sign(>> sign(----0.776)0.776)0.776)0.776)

ans =ans =ans =ans =

----1111

>> sign(0)>> sign(0)>> sign(0)>> sign(0)

ans =ans =ans =ans =

0 0 0 0

Page 23: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.4 (2/3)

function sgn = mysign(x)% mysign(x) returns 1, -1, and 0 for positive, negative, and

zero values, respectively.

if x > 0

Numerical AnalysisNumerical Analysis

if x > 0sgn = 1;

elseif x < 0sgn = -1;

elsesgn = 0;

end

Page 24: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.4 (3/3)

명령창에서 다음과 같이 확인할 수 있다.

>> mysign(25.6)>> mysign(25.6)>> mysign(25.6)>> mysign(25.6)ans =ans =ans =ans =

1111

Numerical AnalysisNumerical Analysis

>> mysign(>> mysign(>> mysign(>> mysign(----0.776)0.776)0.776)0.776)ans =ans =ans =ans =

----1111

>> mysign(0)>> mysign(0)>> mysign(0)>> mysign(0)ans =ans =ans =ans =

0000

Page 25: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (7/11)

루프

for index = start:step:finishstatements

[for … end 구조]

Numerical AnalysisNumerical Analysis

statementsend

Page 26: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.5 (1/2)

Q. 순차곱셈을 위한 for 루프

풀이) factorial 함수와 같은 기능을 갖도록 for 루프를

사용하여 프로그램을 작성한다.

Numerical AnalysisNumerical Analysis

>> factorial(5)ans =120

Page 27: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.5 (2/2)

function fout = factor(n)% computes the product of all integers from 1 to n.%x = 1;for i=1:nx = x * i;endfout = x;

Numerical AnalysisNumerical Analysis

fout = x;end

>> factor(5)>> factor(5)>> factor(5)>> factor(5)

ansansansans ====

120120120120명령창에서 다음과같이 확인할 수 있다.

Page 28: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (8/12)

i = 0;for t = 0:0.02:5

i = i + 1;y(i) = cos(t);

end

[벡터화]

Numerical AnalysisNumerical Analysis

위와 같은 for 루프를 다음과 같이 벡터화할 수 있다.

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

Page 29: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (9/11)

벡터화를 이용하여 메모리 영역을 미리할당 (ones나 zeros 주로 이용)

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

if t(0)>1y(i)=1/t(i);

else

[메모리사전할당]

t = 0:.01:5;y = ones(size(t));

Numerical AnalysisNumerical Analysis

elsey(i) =1;

endend

y = ones(size(t));for i = 1:length(t)

if t(0)>1y(i)=1/t(i);

endend

Page 30: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (10/11)

while conditionstatements

end

[while 구조]>> x = 8;>> while x > 0

x = x - 3;disp(x)

end5

Numerical AnalysisNumerical Analysis

while과 end 사이의 조건이 참인 동안에만 반복한다.(while 루프의 종료는 시작 위치에서 조건이 맞지 않을 경우 발생한다.)

end 52-1

Page 31: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.3 구조 프로그래밍 (11/11)

while (1)statements

if condition, break, endstatements

[while … break 구조]>> x = 8;>> while(1)

x = x - 3;disp(x);if x<0, break, end

endx =

5

Numerical AnalysisNumerical Analysis

while과 end 사이의 조건이 참인 동안 반복하나, while 루프 내의 어떤 위치에서도 종료할 수 있다.

statementsend

x =5

x =2

x =-1

Page 32: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.4 3.4 3.4 3.4 내포화와내포화와내포화와내포화와 들여쓰기들여쓰기들여쓰기들여쓰기

• 내포화내포화내포화내포화 (nesting)(nesting)(nesting)(nesting)- 다른 구조 안에 구조를 배치하는 것이다.

Numerical AnalysisNumerical Analysis

Page 33: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.6 (1/3)

Q. 2Q. 2Q. 2Q. 2차방정식을차방정식을차방정식을차방정식을 풀기풀기풀기풀기 위해위해위해위해 내포화를내포화를내포화를내포화를 이용함이용함이용함이용함

cbxaxxf ++= 2)(

Numerical AnalysisNumerical Analysis

a

acbbx

2

42 −±−=

Page 34: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.6 (2/3)

function quadroots(a, b, c)

% quadroots : roots of a quadratic equation

% quadroots(a, b, c) : real and complex roots

% of quadratic equation

% input:

Numerical AnalysisNumerical Analysis

% input:

% a = second-order coefficient

% b = first-order coefficient

% c = zero-order coefficient

% output:% r1: real part of first root% i1: imaginary part of first root% r2: real part of second root% i2: imaginary part of second root

Page 35: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.6 (2/3)

if a == 0 %special casesif b~= 0 %single root

r1=-c/belse %trivial root

error(' Trivial solution. Try again! ')end

elsed=b^2 4*a*c; %determinant

Numerical AnalysisNumerical Analysis

d=b^2 – 4*a*c; %determinantif d>=0 % real roots

r1 = (-b+sqrt(d))/(2*a)r2 = (-b-sqrt(d))/(2*a)

else %complex rootsr1 = -b/(2*a)i1 = sqrt(abs(d))/(2*a)r2=r1i2=-i1

endend

Page 36: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.6 (3/3)

명령창에서 다음과 같이 확인할 수 있다.

>> quadroots(1,1,1)r1 =-0.5000

i1 =

Numerical AnalysisNumerical Analysis

i1 =0.8660

r2 =-0.5000

i2 =-0.8660

Page 37: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.6 (3/3)

명령창에서 다음과 같이 확인할 수 있다.

>> quadroots(1,5,1)r1 =-0.2087

r2 =

Numerical AnalysisNumerical Analysis

r2 =-4.7913

>> quadroots(0,0,0)??? Error using ==> quadrootsTrivial solution. Try again!

Page 38: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (1/8)(1/8)(1/8)(1/8)

• 무명무명무명무명 함수함수함수함수- MMMM----파일을파일을파일을파일을 만들지만들지만들지만들지 않고않고않고않고 간단한간단한간단한간단한 함수를함수를함수를함수를 생성할생성할생성할생성할 수수수수 있게있게있게있게 한다한다한다한다....

명령창에서명령창에서명령창에서명령창에서 다음과다음과다음과다음과 같은같은같은같은 구문을구문을구문을구문을 사용한다사용한다사용한다사용한다....

fhandle = @(arglist) expression

Numerical AnalysisNumerical Analysis

>> fl = @(x,y) x^2 + y^2;>> fl (3,4)ans =

25

Page 39: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (2/8)(2/8)(2/8)(2/8)

• inline inline inline inline 함수함수함수함수- Matlab 7 이전에서 무명함수와 같은 역할 수행.

funcname = inline('expression',`'var1' , 'var2' ,…)

>> f1 =inline('x^2 + y^2', 'x', 'y')

Numerical AnalysisNumerical Analysis

>> f1 =inline('x^2 + y^2', 'x', 'y')f1 =

inline function:f1(x,y) = x^2 + y^2

>> f1(3,4)ans =

25

Page 40: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (3/8)(3/8)(3/8)(3/8)

• function function function function 함수함수함수함수- 다른다른다른다른 함수에함수에함수에함수에 작동하는작동하는작동하는작동하는 함수함수함수함수. . . .

예 ) fplot (fun, lims)

Numerical AnalysisNumerical Analysis

>> vel= @(t)…sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);>> fplot(vel, [0 12])

Page 41: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

예제 3.7

Q. Q. Q. Q. 어떤어떤어떤어떤 범위에서범위에서범위에서범위에서 함수의함수의함수의함수의 평균값을평균값을평균값을평균값을 구하기구하기구하기구하기 위한위한위한위한 MMMM----파일파일파일파일 만들기만들기만들기만들기

( ) tanhd d

gm gmv t t

C C

=

풀이) t=0에서 t=12까지의 범위에서 함수 값을 그래프로 그릴 수있다.

Numerical AnalysisNumerical Analysis

>> t=linspace(0, 12);>> v= sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t); >> mean(v) ans =

36.0870

Page 42: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (4/8)(4/8)(4/8)(4/8)

function favg = funcavg(a, b, n)% input:% a= lower bound of range% b= upper bound of range% n= number of intervals% output:

Numerical AnalysisNumerical Analysis

% output:% favg = average value of functionx = linspace(a,b,n);y=func(x);favg=mean(y);end

function f=func(t)f=sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);end

Page 43: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (5/8)(5/8)(5/8)(5/8)

function favg = funcavg(f, a, b, n)% input:% a= lower bound of range% b= upper bound of range% n= number of intervals% output:

Numerical AnalysisNumerical Analysis

% output:% favg = average value of functionx = linspace(a,b,n);y=f(x);favg=mean(y);end

function f=func(t)f=sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);end

Page 44: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (6/8)(6/8)(6/8)(6/8)

명령창에서 다음과 같이 확인할 수 있다.

>> vel= @(t)…sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);

Numerical AnalysisNumerical Analysis

>> funcavg(vel, 0, 12, 60)ans =

36.0127>> funcavg(@sin, 0, 2*pi, 180)ans =

-6.3001e-017

Page 45: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (7/8)(7/8)(7/8)(7/8)

• 매개변수의매개변수의매개변수의매개변수의 전달전달전달전달- 매개변수에 새로운 값을 취할 때 편리함.

- function 함수의 마지막 입력인수에 varargin 추가함.

[ funcavg의 수정 ]

Numerical AnalysisNumerical Analysis

function favg = funcavg (f, a, b, n, varargin)x = linspace(a,b,n);y = f(x, varargin{:});favg = mean(y)

Page 46: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.5 M3.5 M3.5 M3.5 M----파일로의파일로의파일로의파일로의 함수함수함수함수 전달전달전달전달 (8/8)(8/8)(8/8)(8/8)

명령창에서 다음과 같이 확인할 수 있다.

>> vel= @(t, m, cd) sqrt(9.81*m/cd)*tanh(sqrt(9.81*cd/m)*t);

>> funcavg(vel, 0, 12, 60, 68.1, 0.25) %m=68.1, cd=0.25

Numerical AnalysisNumerical Analysis

>> funcavg(vel, 0, 12, 60, 68.1, 0.25) %m=68.1, cd=0.25ans =

36.0127>> funcavg(vel, 0, 12, 60, 100, 0.28) %m=100, cd=0.28ans =

38.9345

Page 47: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.6 3.6 3.6 3.6 사례연구사례연구사례연구사례연구: : : : 번지점프하는번지점프하는번지점프하는번지점프하는 사람의사람의사람의사람의 속도속도속도속도 (1/3)(1/3)(1/3)(1/3)

• 수학적수학적수학적수학적 모델모델모델모델: : : : 2vm

cg

dt

dv d−=

Numerical AnalysisNumerical Analysis

• EulerEulerEulerEuler법법법법::::t

dt

dvvv iii ∆+=+1

Page 48: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.6 3.6 3.6 3.6 사례연구사례연구사례연구사례연구: : : : 번지점프하는번지점프하는번지점프하는번지점프하는 사람의사람의사람의사람의 속도속도속도속도 (2/3)(2/3)(2/3)(2/3)

function vend = velocity1(dt, ti, tf, vi)% velocity1: Euler solution for bungee velocity% vend = velocity1(dt, ti, tf, vi)% Euler method solution of bunge jumper velocity% inputs:% dt = time step (s) , ti = initial time (s), tf = final time (s)% vi = initial value of dependent variable (m/s)

Numerical AnalysisNumerical Analysis

% vi = initial value of dependent variable (m/s)% output:% vend = velocity at tf (m/s)t = ti;v = vi;n = (tf - ti)/dt;for i=1:n

dvdt= deriv(v);v = v + dvdt *dt;t = t + dt;

endvend = v; end

function dv = deriv( v)dv = 9.81 – (0.25 / 68.1)*v^2;end

Page 49: 345]) - Chibum Lee · 2015. 8. 28. · 예제3.2 (1/3) Q. 번지점프하는사람의자유낙하속도를함수파일을사용하여구하라. function v = freefallvel(t, m, cd)

3.6 3.6 3.6 3.6 사례연구사례연구사례연구사례연구: : : : 번지점프하는번지점프하는번지점프하는번지점프하는 사람의사람의사람의사람의 속도속도속도속도 (3/3)(3/3)(3/3)(3/3)

명령창에서 다음과 같이 확인할 수 있다.

>> velocity1(0.5, 0, 12, 0) %0.5초 간격, 24번을 계산

ans =50.9259

>> velocity1(0.01, 0, 12, 0)

Numerical AnalysisNumerical Analysis

>> velocity1(0.01, 0, 12, 0) %0.01초 간격, 1,200번을 계산

ans =50.6239

>> velocity1(0.001, 0, 12, 0) %0.001초 간격, 12,000번을 계산

ans =50.6181