345]) - chibum.files.wordpress.com · 예제3.2 (1/3) q....
TRANSCRIPT
수치해석수치해석Numerical AnalysisNumerical Analysis
161009161009
Ch3. Programming with Ch3. Programming with Ch3. Programming with Ch3. Programming with MATLABMATLAB
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)
3.1 M-파일 (2/5)
• 함수함수함수함수 파일파일파일파일---- functionfunctionfunctionfunction이라는이라는이라는이라는 단어로단어로단어로단어로 시작하는시작하는시작하는시작하는 MMMM----파일이다파일이다파일이다파일이다....
function outvar = funcname(arglist)%helpcomments
Numerical AnalysisNumerical Analysis
%helpcommentsstatementsoutvar = value;
outvar = 출력변수의출력변수의출력변수의출력변수의 이름이름이름이름funcname = 함수의함수의함수의함수의 이름이름이름이름arglist = 함수의함수의함수의함수의 인수목록인수목록인수목록인수목록helpcomments
= 사용자가사용자가사용자가사용자가 제공하는제공하는제공하는제공하는 함수에함수에함수에함수에 관한관한관한관한 정보정보정보정보statements
= value를를를를 계산하여계산하여계산하여계산하여 그그그그 값을값을값을값을 outvar에에에에배정하는배정하는배정하는배정하는 문장문장문장문장
예제 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);
예제 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
예제 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)
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
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
주함수
부함수
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’.
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')
%%%%문자열을문자열을문자열을문자열을 받는받는받는받는 경우경우경우경우
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): ')
%%%%문자열을문자열을문자열을문자열을 나타내는나타내는나타내는나타내는 경우경우경우경우
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
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
새로운새로운새로운새로운 줄로줄로줄로줄로 시작시작시작시작
탭탭탭탭
예제 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)
예제 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
3.3 구조 프로그래밍 (1/11)
� 명령을명령을명령을명령을 연속적으로연속적으로연속적으로연속적으로 수행하지수행하지수행하지수행하지 않는않는않는않는 것을것을것을것을
허용하는허용하는허용하는허용하는 구문구문구문구문
---- 판정판정판정판정 ((((또는또는또는또는 선택선택선택선택): ): ): ): 판정에 기초를 둔 흐름의 분기점이다.
---- 루프루프루프루프 ((((또는또는또는또는 반복반복반복반복): ): ): ): 반복을 허용하는 흐름의 루프이다.
� 판정판정판정판정
Numerical AnalysisNumerical Analysis
� 판정판정판정판정[if [if [if [if 구조구조구조구조]]]]
if conditionstatements
end
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
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
3.3 구조 프로그래밍 (4/11)
[[[[논리조건논리조건논리조건논리조건] ] ] ]
• ~~~~ (Not) (Not) (Not) (Not)
value1 relation value2
Numerical AnalysisNumerical Analysis
- 논리적 부정을 나타낼 때 사용한다.
• &&&& (And) (And) (And) (And)
- 두 식에서 논리적 곱을 나타낼 때 사용한다.
• | | | | (Or) (Or) (Or) (Or)
- 두 식에서 논리적 합을 나타낼 때 사용한다.
3.3 구조 프로그래밍 (5/11)
Numerical AnalysisNumerical Analysis
<<<<복잡한복잡한복잡한복잡한 논리식의논리식의논리식의논리식의 단계별단계별단계별단계별 계산계산계산계산>>>>
3.3 구조 프로그래밍 (6/11)
if conditionstatements1
elsestatements2
if condition1statements1
elseif condition2statements2
[if … else 구조] [if … elseif 구조]
Numerical AnalysisNumerical Analysis
statements2end
statements2…
else statementselse
end
예제 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
예제 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
예제 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
3.3 구조 프로그래밍 (7/11)
루프
for index = start:step:finishstatements
[for … end 구조]
Numerical AnalysisNumerical Analysis
statementsend
예제 3.5 (1/2)
Q. 순차곱셈을 위한 for 루프
풀이) factorial 함수와 같은 기능을 갖도록 for 루프를
사용하여 프로그램을 작성한다.
Numerical AnalysisNumerical Analysis
>> factorial(5)ans =120
예제 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명령창에서 다음과같이 확인할 수 있다.
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);
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
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
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
3.4 3.4 3.4 3.4 내포화와내포화와내포화와내포화와 들여쓰기들여쓰기들여쓰기들여쓰기
• 내포화내포화내포화내포화 (nesting)(nesting)(nesting)(nesting)- 다른 구조 안에 구조를 배치하는 것이다.
Numerical AnalysisNumerical Analysis
예제 3.6 (1/3)
Q. 2Q. 2Q. 2Q. 2차방정식을차방정식을차방정식을차방정식을 풀기풀기풀기풀기 위해위해위해위해 내포화를내포화를내포화를내포화를 이용함이용함이용함이용함
cbxaxxf ++= 2)(
Numerical AnalysisNumerical Analysis
a
acbbx
2
42 −±−=
예제 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
예제 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
예제 3.6 (3/3)
명령창에서 다음과 같이 확인할 수 있다.
>> quadroots(1,1,1)r1 =-0.5000
i1 =
Numerical AnalysisNumerical Analysis
i1 =0.8660
r2 =-0.5000
i2 =-0.8660
예제 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!
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
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
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])
예제 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
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
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
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
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)
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
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
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
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