2 장 MATLAB 기초 2.1 MATLAB 환경 2.2 배정 2.3 수학적연산 2.4 내장함수의사용 25 2.5 그래픽 2.6 다른자원
2.1 MATLAB 환경 >> ( 명령어길잡이 ) >> 55-16 39 >> ans + 11 50 명령창 - 명령을입력하는창 그래프창 - 그래프를나타내는창 편집창 - M- 파일을편집하는창
2.2 배정 (1/10) [ 스칼라 ] >> a = 4 a = 4 >> A = 6; >> a =4, A=6; x= 1; a = 4 >> x x = 1
2.2 배정 (2/10) [ 스칼라 ] 복소수 >> x = 2 + i*4 x = 2.0000 + 4.0000i >> x = 2 + j*4 x = 2.0000 + 4.0000i
2.2 배정 (3/10) [ 스칼라 ] 포맷형태 >> pi 3.1416 >> format long (15자리유효숫자 ) >> pi 3.14159265358979 >> format short ( 소수점이하4자리 ) >> pi 3.1416
2.2 배정 (4/10) [ 배열, 벡터와행렬 ] >> a = [ 1 2 3 4 5] a = 1 2 3 4 5 >>b=[2;4;6;8;10] 열벡터 b = 2 4 6 8 10
2.2 배정 (5/10) [ 배열, 벡터와행렬 ] >> A = [1 2 3; 4, 5, 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> who Your variables are: A a ans b x
2.2 배정 (6/10) [ 배열, 벡터와행렬 ] >> whos Name Size Bytes Class A 3x3 72 double array a 1x5 40 double array ans 1x1 8 double array b 5x1 40 double array x 1x1 16 double array (complex) Grand total is 21 elements using 176 bytes
2.2 배정 (7/10) [ 배열, 벡터와행렬 ] >> b(4) A = 8 b = >> A(2,3) 6 >> E=zeros(2,3) E = 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 2 4 6 8 10
2.2 배정 (8/10) [ 콜론연산자 ] >> t = 1:5 t = 1 2 3 4 5 >> t = 1:0.5:3 t = 1.0000 1.5000 2.0000 2.5000 3.0000 >> t = 10: -1:5 t = 10 9 8 7 6 5
2.2 배정 (9/10) [ 콜론연산자 ] >> A(2,:) 4 5 6 >> t(2:4) 9 8 7 A= 1 2 3 4 5 6 7 8 9 t= 10 9 8 7 6 5
2.2 배정 (10/10) [linspace 와 logspace 함수 ] >> linspace(0,1,6) 0 0.2000 0.4000 0.6000 0.8000 1.0000 >> logspace(-1,2,4) 0.1000 1.0000 10.0000 100.0000
2.3 수학적연산 (1/7) [ 계산순서 ] 지수계산 (^) 음부호 (-) 곱셈과나눗셈 (*, /) 왼쪽나눗셈 (\) 덧셈과뺄셈 (+, -)
2.3 수학적연산 (2/7) >> 2*pi 6.2832 >> y=pi/4; >> y^2 2.45 0.5533 >> y=-4^2 y = -16
2.3 수학적연산 (3/7) >> y=(-4)^2 y = 16 >> x=2+4i x = 2.0000 + 4.0000i >> 3*x 6.0000 +12.0000i >> 1/x 0.1000-0.2000i
2.3 수학적연산 (4/7) >> x^2-12.0000 +16.0000i >> x+y 18.0000 + 4.0000i x = 2.0000 + 4.0000i y = 16 >> a=[1 2 3]; >> b=[4 5 6]'; >> A=[1 2 3; 4 5 6; 7 8 9];
2.3 수학적연산 (5/7) >> a*a 30 36 42 >> A*b 32 77 122 >> A*a??? Error using ==> * Inner matrix dimensions must agree. a = b = A = 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9
2.3 수학적연산 (6/7) >> A*A 30 36 42 66 81 96 102 126 150 >> A/pi 0.3183 0.6366 0.9549 1.2732 1.5915 1.9099 2.2282 2.5465 2.8648 A = 1 2 3 4 5 6 7 8 9
2.3 수학적연산 (7/7) >> A^2 행렬의곱 30 36 42 66 81 96 102 126 150 >> A.^2 원소별거듭제곱 1 4 9 16 25 36 49 64 81 A = 1 2 3 4 5 6 7 8 9
2.4 내장함수의사용 (1/9) Help 명령어를사용하여온라인도움을얻음 >> help log LOG Natural logarithm. LOG(X) is the natural logarithm of the elements of X. Complex results are produced if X is not positive. See also LOG2, LOG10, EXP, LOGM.
2.4 내장함수의사용 (2/9) >> help elfun ( 모든내장함수를볼수있음 ) Elementary math functions. Trigonometric. sin - Sine. sinh - Hyperbolic sine. asin - Inverse sine. asinh - Inverse hyperbolic sine. cos - Cosine.
2.4 내장함수의사용 (3/9) >> help elfun ( 모든내장함수를볼수있음 ) Exponential. exp - Exponential. log - Natural logarithm. log10 - Common (base 10) logarithm. sqrt - Square root.
2.4 내장함수의사용 (4/9) >> help elfun ( 모든내장함수를볼수있음 ) Complex. abs - Absolute value. angle - Phase angle. complex - Construct complex data from real and imaginary parts.
2.4 내장함수의사용 (5/9) >> help elfun ( 모든내장함수를볼수있음 ) Rounding and remainder. fix - Round towards zero. floor - Round towards minus infinity. ceil - Round towards plus infinity. round - Round towards nearest integer. mod - Modulus (signed remainder after division). rem - Remainder after division. sign - Signum.
2.4 내장함수의사용 (6/9) >> sin(pi/2) 1 >> exp(1) 2.7183 >> abs(1+2i) 2.2361 >> fix(1.9) : FIX(X) rounds the elements of X to the nearest integers towards zero. 1
2.4 내장함수의사용 (7/9) >> ceil(1.9) 2 >> round(1.9) 2 >> rem(7,3) : remainder after division 1 >> log(a) 0 0.6931 1.0986 1.3863 1.6094 1.7918 1.9459 2.0794 2.1972 A = 1 2 3 4 5 6 7 8 9
2.4 내장함수의사용 (8/9) >> t=[0:2:20]' t = 0 2 4 6 8 10 12 14 16 18 20 >> length(t) () 11
2.4 내장함수의사용 (9/9) >> g=9.81; m=68.1; cd=0.25; >> v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t) v = 0 18.7292 33.1118 42.0762 46.9575 49.4214 50.6175 51.1871 51.4560 51.5823 51.6416
2.5 그래픽 (1/2) 그래프를빠르고편리하게그릴수있음 >> plot(t,v) >> title('plot of v versus t') >> xlabel('value of t') >> ylabel('value of v') >> grid
2.5 그래픽 (2/2) 그래프를빠르고편리하게그릴수있음 >> plot(t,v) >> title('plot of v versus t') >> xlabel('value of t') >> ylabel('value of v') >> grid >> plot(t,v,'bo:') % blue dotted line with circles on it ( 표 2.2 참조 )
3 장 MATLAB 프로그래밍 3.1 M-파일 32 3.2 입력- 출력 3.3 구조프로그래밍 3.4 내포화와들여쓰기 3.5 M-파일로의함수전달 3.6 사례연구 : 번지점프하는사람의속도
3 장 MATLAB 프로그래밍 수학적모델 : dv c = g d v 2 dt m Euler 법 : v i+1 = v i + dv i dt Δt
3.1 M- 파일 (1/5) 스크립트파일 - 일련의 MATLAB 명령어를구성되어저장된 M- 파일이다. %scriptdemo.m g=9.81; m=68.1; cd=0.25; t=12; v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t) >> scriptdemo v = 50.6175
3.1 M- 파일 (2/5) 함수파일 - function 이라는단어로시작하는 M- 파일이다. function outvar = funcname(arglist) %helpcomments statements outvar = value; 여기서 outvar = 출력변수의이름 funcname = 함수의이름 arglist = 함수의인수목록 helpcomments = 사용자가제공하는함수에관한정보 statements = value를계산하여그값을 outvar에배정하는문장
예제 3.2 (1/3) function v = freefallvel(t, m, cd) %freefallvel: bungee velocity with second-order drag %v=freefallvel(t,m,cd) computes the free-fall velocity % of an object with second-order order drag %input: %t=time(s) %m=mass(kg) mass(kg) %cd=second order drag coefficient (kg/m) %output: %v=downward velocity y( (m/s) g=9.81; %accelearation of gravity v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t);
예제 3.2 (2/3) >> freefallvel(12, 68.1, 0.25) 50.6175 >> freefallvel(8, 100, 0.25) 53.1878
u1 예제 3.2 (3/3) >> help freefallvel freefallvel: bungee velocity with second-order drag v=freefallvel(t,m, f l(t cd) computes the free-fall f velocity of an object with second-order drag. input: v = downward d velocity (m/s)
슬라이드 7 u1 수정 user, 12/3/2007
3.1 M- 파일 (3/5) - 함수 M- 파일은 2 개이상의결과를반환할수있다. 예 ) 벡터의평균과표준편차의계산 function [mean, stdev] = stats(x) t n=length(x); mean=sum(x)/n; stdev=sqrt(sum((x-mean).^2/(n-1))); t( (( )^2/( >> 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) - 함수가다른함수를부를수있다. 이러한함수는 M-파일을구분하여작성할수도있고, 한개의 M 파일에포함시킬수도있다. 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); ( d/ ) ) end 주함수 부함수
3.1 M- 파일 (5/5) >> freefallsubfunc (12, 68.1, 0.25) 50.6175 >> vel (12, 68.1, 0.25)??? Undefined command/function vel.
3.2 입력 - 출력 (1/4) input 함수 - 사용자로하여금명령창에서직접입력하도록한다. m = input ('Mass (kg): ') name = input ('Enter your name: ','s') s) % 문자열을받는경우
3.2 입력 - 출력 (2/4) disp 함수 - 어떤값을손쉽게나타낸다. disp(' ') disp('velocity (m/s): ') % 문자열을나타내는경우
3.2 입력 - 출력 (3/4) fprintf 함수 - 정보를표현할때추가적인제어를제공한다. fprintf ('format', x, ) % 포맷코드와제어코드를넣어서나타내는경우 >> fprintf( The velocity is %8.4f m/s\n velocity) The velocity is 50.6175 m/s
3.2 입력 - 출력 (4/4) 포맷코드 설 명 %d %e 정수포맷 e를사용하는과학포맷 %E %f %g E를사용하는과학포맷소수포맷 %e 나 %f 중간단한포맷 제어코드 설 명 n t 새로운줄로시작탭
예제 3.3 (1/3) function freefalli % freefalli: interactive bunge velocity % freefalli f interactive i computation of the % free-fall velocity of an object % with second-order drag. g=9.81; % acceleration of gravity m=input('mass(kg):'); cd=input('drag Coefficient(kg/m):'); i
예제 3.3 (2/3) 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 (3/3) 명령창에서다음과같이입력한다. >> freefalli Mass (kg): 68.1 Drag coefficient (kg/m): 0.25 Time (s): 12 Velocity (m/s): 50.6175 The velocity is -50.6175 m/s Enter your name: Kim Your name is Kim
3.3 구조프로그래밍 (1/12) 명령을연속적으로수행하지않는것을 허용하는구문 - 판정 ( 또는선택 ): 판정에기초를둔흐름의분기점이다. - 루프 ( 또는반복 ): 반복을허용하는흐름의루프이다. 판정 [if 구조 ] if condition statements end
3.3 구조프로그래밍 (2/12) function grader(grade) if grade >= 60 disp('passing passing grade:') disp(grade) end >> grader(95.6) passing grade: 95.6000
u2 3.3 구조프로그래밍 (3/12) [ 에러함수] error ( msg) function f = errortest(x) t( >> errortest(10) if x==0, error(' zero value encountered'), 0.1000 end >> errortest(0) f=1/x;??? Error using ==> errortest zero value encountered
슬라이드 20 u2 수정 user, 12/3/2007
3.3 구조프로그래밍 (4/12) [ 논리조건 ] ~ (Not) value1 relation value2 - 논리적부정을나타낼때사용한다. & (And) - 두식에서논리적곱을나타낼때사용한다. (Or) - 두식에서논리적합을나타낼때사용한다.
3.3 구조프로그래밍 (5/12) < 복잡한논리식의단계별계산 >
3.3 구조프로그래밍 (6/12) [if else 구조 ] [if elseif 구조 ] if condition statements1 else statements2 end if condition1 statements1 elseif condition2 statements2 else statementselse end
예제 3.4 (1/3) 풀이 ) 내장함수인 sign 함수의기능을알아보자. >> sign(25.6) 1 >> sign(-0.776) -1 >> sign(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 sgn = 1; elseif x < 0 sgn = -1; else sgn = 0; end
예제 3.4 (3/3) 명령창에서다음과같이확인할수있다. >> mysign(25.6) 1 >> mysign(-0.776) -1 >> mysign(0) 0
3.3 구조프로그래밍 (7/12) 루프 [for end 구조 ] for index = start:step:finish end statements
예제 3.5 (1/3) 풀이 ) factorial 함수와같은기능을갖도록 for 루프를사용하여 프로그램을작성한다. >> factorial(5) 120
예제 3.5 (2/3) function fout = factor(n) % computes the product of all integers from 1 to n. % x = 1; for i=1:n x = x * i; end fout = x; end
예제 3.5 (3/3) 명령창에서다음과같이확인할수있다. >> factor(5) 120
u3 3.3 구조프로그래밍 (8/12) [ 벡터화 ] i = 0; for t = 0:0.02:5 i = i + 1; y(i) = cos(t); end t = 0:0.02:5; y = cos(t); ()
슬라이드 31 u3 수정 user, 12/3/2007
3.3 구조프로그래밍 (9/12) [while 구조 ] while condition end statements
3.3 구조프로그래밍 (10/12) >> x = 8 x= 8 >> while x > 0 x = x - 3; disp(x) end 5 2-1
3.3 구조프로그래밍 (11/12) [while break 구조 ] while (1) statements if condition, break, end end statements
3.3 구조프로그래밍 (12/12) >> x= 0.24 x = 0.2400 >> while(1) x = x - 0.05 end x = 0.1900 x = 0.1400 x = 0.0900 x = 00400 0.0400 x = -0.0100 if x<0, break, end % 후기점검루프
3.4 내포화와들여쓰기 내포화 - 다른구조안에구조를배치하는것이다.
예제 3.6 (1/3) f ( x) = ax + bx + 2 c x = b ± b 2 4ac 2aa
예제 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: % a = second-order order coefficient % b = first-order coefficient % c = zero-order coefficient % output: % r1: real part of first root
예제 3.6 (2/3) % i1: imaginary part of first root % r2: real part of second root % i2: imaginary part of second root if a == 0 %special cases if b~= 0 %single root r1=-c/b else %trivial root error(' Trivial solution. Try again! ') end
예제 3.6 (2/3) else %quadratic formula d=b^2 4*a*c; %discriminant if d>=0 % real roots r1 = (-b+sqrt(d))/(2*a) r2 = (-b-sqrt(d))/(2*a) else
예제 3.6 (2/3) end %complex roots r1 = -b/(2*a) i1 = sqrt(abs(d))/(2*a) r2=r1 i2=-i1 end
예제 3.6 (3/3) >>quadroots(111) quadroots(1,1,1) r1 = -0.5000 i1 = 0.8660 r2 = -0.5000 i2 = -0.8660
예제 3.6 (3/3) >>quadroots(151) quadroots(1,5,1) r1 = -0.2087 r2 = -4.7913 >> quadroots(0,0,0)??? Error using ==> quadroots Trivial solution. Try again!
u8 3.5 M-파일로의함수전달 (1/7) 무명함수 - M-파일을만들지않고간단한함수를생성할수있게한다. 명령창에서다음과같은구문을사용한다. fhandle = @(arglist) expression >> outvar =feval('cos',pi/6) >> fl = @(x,y) x^2 + y^2; >> fl (3,4) 25
슬라이드 44 u8 수정 user, 12/4/2007
3.5 M- 파일로의함수전달 (2/7) inline 함수 - Matlab 7 이전에서무명함수와같은역할수행. funcname = inline('expression',`'var1' e ess, 'var2', ) >> f1 =inline('x^2 + y^2', 'x', 'y') f1 = inline function: f1(x,y) = x^2 + y^2 >> f1(3,4) 25
u9 3.5 M- 파일로의함수전달 (3/7) function 함수 - 다른함수에작동하는함수. 예 ) fplot (fun, lims) >> vel= @(t) sqrt(9.81*68.1/0.25)* tanh(sqrt(9.81*0.25/68.1)*t); (9 1) ) >> fplot(vel, [0 12])
슬라이드 46 u9 수정 user, 12/4/2007
예제 3.7 gm gm vt () = tanh t C d C d 풀이 ) t=0에서 t=12까지의범위에서함수값을그래프로그릴수있다. >> t=linspace(0, 12); >> v= sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t); >> mean(v) 36.0870
3.5 M- 파일로의함수전달 (4/7) function favg = funcavg(f, a, b, n) % input: % f = function to be evaluated % a= lower bound of range % b= upper bound of range % n= number of intervals % output: % favg = average value of function x = linspace(a,b,n); y=f(x); favg=mean(y);
3.5 M- 파일로의함수전달 (5/7) >> vel= @(t) sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t); >> funcavg(vel, 0, 12, 60) 36.0127 >> funcavg(@sin, 0, 2*pi, 180) -6.3001e-017
3.5 M- 파일로의함수전달 (6/7) 매개변수의전달 - 매개변수에새로운값을취할때편리함. -function 함수의마지막입력인수에 varargin 추가함. [ funcavg 의수정 ] function favg = funcavg (f, a, b, n, varargin) x = linspace(a,b,n); n); y = f(x, varargin{:}); favg = mean(y)
3.5 M- 파일로의함수전달 (7/7) >> 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 36.0127 >> funcavg(vel, 0, 12, 60, 100, 0.28) %m=100, cd=0.28 38.9345
3.6 사례연구 : 번지점프하는사람의속도 (1/4) 수학적모델 : dv cd 2 = g v dt m Euler 법 : v i+1 = v i + dv dt i Δt
3.6 MATLAB M- 파일 : 번지점프하는사람의속도 (2/4) 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 i i value of dependent d variable (m/s)
3.6 MATLAB M- 파일 : 번지점프하는사람의속도 (2/4) % 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; end vend = v; end
3.6 MATLAB M- 파일 : 번지점프하는사람의속도 (3/4) function dv = deriv( v) dv = 9.81 (0.25 / 68.1)*v^2; end
3.6 MATLAB M- 파일 : 번지점프하는사람의속도 (4/4) >> velocity1(0.5, 0, 12, 0) %0.5초간격, 24 번을계산 50.9259 >> velocity1(0.01, 0, 12, 0) %0.01초간격, 1,200번을계산 50.6239 >> velocity1(0.001, 0, 12, 0) %0.001초간격, 12,000번을계산 50.6181