오늘강의내용 (2014/01/14) Symbolic Math Toolbox 숫자로주어진변수 값 이아니라변수심볼에대한수식연산 ( 즉, symbolic expression 계산 ) 미분, 극한, 적분, 변환의 symbolic expression 계산 1
Symbolic Expression 김탁은 kmste2@kaist.ac.kr 2
Symbolic Math Toolbox 지금까지우리가해온계산방법 변수에숫자가대입되어있을때, 변수들을사칙연산을통해계산하여수치값을얻음 >> x = 1; >> y = x + x y = 2 y = x + x 의결과로 y = 2*x 라는결과를얻을순없을까? Symbolic Math Toolbox 를이용하면가능하다! Symbolic Expression 을계산하기위한툴박스 3
간단한 Symbolic Expression 연산 Symbolic Expression 연산에사용할심볼을정의해야함 syms 키워드를사용하여 x, y, z 을 symbolic 형의데이터타입으로선언 >> syms x y z Symbolic Expression 을적으면, 해당연산이수행되어계산결과가 symbol 들의표현으로나타남 >> y = x + x + 2*z y = 2*x + 2*z 4
간단한 Symbolic Expression 연산 Symbolic 형의데이터타입으로선언되지않았을때 Symbolic Expression 을계산하려고하면다음과같은에러발생 >> syms x >> y = x + k Undefined function or variable 'k'. 사전에정의한 Symbol 형변수에수치값을대입하면, 해당변수는수치값의데이터타입으로변경됨 >> syms x >> class(x) sym >> x = single(10.3125); >> class(x) single 5
Symbolic Toolbox 의기능 기능 분야 Calculus Linear Algebra Simplification Equation Solving Variable-Precision Arithmetics Transformation Special Functions 미분, 적분, 극한, 급수, 역행렬, 고유치, determinant, canonical forms, 인수분해, 전개, 분수표현, 미분방정식, 다항식해계산, 주어진정밀도에근거하여수식계산 Fourier Transform, Laplace Transform, Z-transform, 응용수학에필요한각종특수함수계산 6
sym 함수 S = sym(a) A 로부터 symbolic number/variable/object 를생성 A 가스칼라또는행렬인경우, 해당값들의 symbolic representation 을리턴 >> x = magic(2); >> xsym = sym(x) xsym = [ 1, 3] [ 4, 2] >> class(xsym) sym 7
sym 함수 x = sym( x ) x 라고이름을가진 symbolic variable 을정의 x = sym( x, real ) x 란이름을가진정수형의 symbolic variable 을정의 >> syms x real 과동일 real 특성없애려면 >> x = sym( x, unreal ) k = sym( k, positive ) 양의실수값을가지는 symbolic variable k 를정의 x = sym( x, clear ) symbolic variable x 에 real, positive 등의속성들을모두제거 A = sym( A, [M N]) 이름이 A 인 M x N 행렬의 symbolic variable 정의 각원소의이름은 Ai_j 가됨. 벡터의경우에는 Ak 가됨 A = sym( A, N) 이름이 A 인 N x N 정사각형행렬의 symbolic variable 정의 각원소의이름은 Ai_j 가됨. 벡터의경우에는 Ak 가됨 >> A = sym('a', [2 3]) A = [ A1_1, A1_2, A1_3] [ A2_1, A2_2, A2_3] >> A = sym('a', [1 3]) A = [ A1, A2, A3] >> A = sym('a', 2) A = [ A1_1, A1_2] [ A2_1, A2_2] 8
sym 함수 A = sym( A_%d_%d, [M N]) 각원소의이름이 A_i_j 가되며, 행렬의이름이 A 인 M x N 행렬의 symbolic variable 정의 벡터의경우각원소의이름이 A_k 가됨 행렬의원소접근은 A(i, j) 로할수있음 S = sym(a, flag) A 가스칼라또는행렬인경우, flag 는 r, f, e, d 가능 r : rational (default) f : floating point e : estimated error d : decimal >> r = sym(1/3) r = 1/3 >> f = sym(1/3, 'f') f = 6004799503160661/18014398509481984 >> d = sym(1/3, 'd') d = 0.33333333333333331482961625624739 >> A = sym('a_%d_%d', [3 2]) A = [ A_1_1, A_1_2] [ A_2_1, A_2_2] [ A_3_1, A_3_2] >> B = sym( B_%d_%d', [3 1]) B = B_1_1 B_2_1 B_3_1 >> A(2,2) A_2_2 >> e = sym(1/3, 'e') e = 1/3 - eps/12 9
행렬연산 두행렬의사칙연산의결과로, 각행렬원소명들간의연산결과가결과로나옴 예제 2 x 3 행렬 A, B, 스칼라값 c, d 가 symbolic variable 로정의되어있다고했을때, 두행렬의합 >> A = sym('a_%d_%d', [2, 3]); >> B = sym('b_%d_%d', [2, 3]); >> syms c d % 스칼라값 >> A = sym(a, real ); >> B = sym(b, real ); >> A+B [ A_1_1 + B_1_1, A_1_2 + B_1_2, A_1_3 + B_1_3] [ A_2_1 + B_2_1, A_2_2 + B_2_2, A_2_3 + B_2_3] 행렬 A, B 의각원소가복소수가아니게설정 두행렬의차 >> A-B [ A_1_1 - B_1_1, A_1_2 - B_1_2, A_1_3 - B_1_3] [ A_2_1 - B_2_1, A_2_2 - B_2_2, A_2_3 - B_2_3] 10
행렬연산 행렬과스칼라연산 ( 곱과합 / 차 ) 스칼라에행렬나눗셈 행렬원소간곱 행렬곱 >> c*a+d [ d + A_1_1*c, d + A_1_2*c, d + A_1_3*c] [ d + A_2_1*c, d + A_2_2*c, d + A_2_3*c] >> c./a [ c/a_1_1, c/a_1_2, c/a_1_3] [ c/a_2_1, c/a_2_2, c/a_2_3] >> A.* B [ A_1_1*B_1_1, A_1_2*B_1_2, A_1_3*B_1_3] [ A_2_1*B_2_1, A_2_2*B_2_2, A_2_3*B_2_3] >> A * B' [ A_1_1*B_1_1 + A_1_2*B_1_2 + A_1_3*B_1_3, A_1_1*B_2_1 + A_1_2*B_2_2 + A_1_3*B_2_3] [ A_2_1*B_1_1 + A_2_2*B_1_2 + A_2_3*B_1_3, A_2_1*B_2_1 + A_2_2*B_2_2 + A_2_3*B_2_3] 11
행렬연산 역행렬 >> A = sym('a_%d_%d', [2 2]); >> inv(a) aa cc bb dd 1 = 1 aaaa bbbb dd cc bb aa [ A_2_2/(A_1_1*A_2_2 - A_1_2*A_2_1), -A_1_2/(A_1_1*A_2_2 - A_1_2*A_2_1)] [ -A_2_1/(A_1_1*A_2_2 - A_1_2*A_2_1), A_1_1/(A_1_1*A_2_2 - A_1_2*A_2_1)] >> pretty(ans) Determinant >> det(a) A_1_1*A_2_2 - A_1_2*A_2_1 12
Complex Value 심볼릭변수의속성을 real로설정한다음, 아래와같이허수 i와조합하여복소수 표현 >> x = sym('x', 'real'); >> class(z) >> y = sym('y', 'real'); >> z = x + i * y sym z = x + y*i >> conj(z) x - y*i 심볼릭변수의속성을 real 로설정하지않으면, 의도한복소수를얻을수없음 >> x = sym('x'); >> y = sym('y'); >> z = x+y*i z = x + y*i >> conj(z) conj(x) - conj(y)*i 13
sym 함수로 Expression 정의하기 y = sym( 5*x^2 3 ) >> y = sym('5*x^2+3') y = 5*x^2 + 3 >> ezplot(y) 14
sym 함수로 Expression 정의하기 등호를포함한 expression 도정의가능 예 ) y = sym( 5*x^2 3 = 2 ) >> y = sym('5*x^2+3=2') y = 5*x^2 + 3 == 2 >> solve(y) (5^(1/2)*i)/5 -(5^(1/2)*i)/5 15
정의한 expression 들의합, 차, 곱 >> z1 = sym('3*(1-x)^2+5*x-(y+1)^2'); >> z2 = sym('y^2-5*x*y+2*(x+y)-5'); >> z1 z1 = 5*x + 3*(x - 1)^2 - (y + 1)^2 >> z2 z2 = 2*x + 2*y - 5*x*y + y^2-5 >> z1+z2 7*x + 2*y + 3*(x - 1)^2 - (y + 1)^2-5*x*y + y^2-5 >> z1-z2 3*x - 2*y + 3*(x - 1)^2 - (y + 1)^2 + 5*x*y - y^2 + 5 >> z1*z2 (5*x + 3*(x - 1)^2 - (y + 1)^2)*(2*x + 2*y - 5*x*y + y^2-5) 16
Symbolic Math 함수들에대한정보얻기 예를들어, diff 라는 symbolic math 함수에대한정보를얻고싶을때 >> help diff 로나오는결과는 symbolic math 함수 diff 에대한정보가아님 help 페이지에서는여러다른 toolbox 에서정의된동일한이름의함수들을친절하게알려줌 예 ) Overloaded methods: sym/diff >> help sym/diff 수행시나오는결과가찾고자하는정보 17
Symbolic Math 로미분계산하기 함수 f(x) 를미분하려면 1. 함수에쓰인변수들을 symbolic 데이터타입으로변경 >> syms x n 2. 앞서정의한심볼변수로함수를정의 >> f = x^n 3. sym/diff 함수를이용해함수 f(x) 를미분 >> df = diff( f ) df = n*x^(n - 1) 또는 >> df = diff( f, x ) df = n*x^(n - 1) 18
Symbolic Math 로미분계산하기 함수 f(x) 를미분하려면 1. 함수에쓰인변수들을 symbolic 데이터타입으로변경 >> syms x n 2. 앞서정의한심볼변수로함수를정의 >> f = x^n x 로미분해야한다는것을어떻게알았을까? symbolic toolbox 는변수명이문자 x 에알파벳순으로가장변수로미분수행 따라서, x 와가장가까운변수 x 로미분계산 3. sym/diff 함수를이용해함수 f(x) 를미분 >> df = diff( f ) df = n*x^(n - 1) 또는 >> df = diff( f, x ) df = n*x^(n - 1) 19
미분계산하기 n 차도함수계산하기 diff( 함수, 변수, n) >> syms x n >> f = x^n; >> df = diff(f, x, 2) df = n*x^(n - 2)*(n - 1) >> df = diff(f, x, 3) 함수 f 의 2 차도함수 >> syms a b t >> g = cos(a*t+b); >> dg1 = diff(g, t) dg1 = -a*sin(b + a*t) >> dg2 = diff(gd1, t) dg2 = 함수 g 의 1 차도함수 함수 g 의 1 차도함수의 1 차도함수 df = n*x^(n - 3)*(n - 1)*(n - 2) 함수 f 의 3 차도함수 -a^2*cos(b + a*t) >> gd = diff(g, 2) gd = 함수 g 의 2 차도함수 -a^2*cos(b + a*t) 20
여러수식을동시에미분하기 A = diff( 수식행렬 ) m x n 크기의행렬에수식이있으면, 각각의수식에대해미분을수행한다음, 입력수식행렬과동일한크기의행렬 A 에미분결과를반환 >> syms a b x >> M = [a*x^2+b x*exp(-a*x); cos(a*x) -sin(a*x+b)] M = [ a*x^2 + b, x*exp(-a*x)] [ cos(a*x), -sin(b + a*x)] >> gm = diff(m, x, 1) gm = [ 2*a*x, exp(-a*x) - a*x*exp(-a*x)] [ -a*sin(a*x), -a*cos(b + a*x)] 21
편미분 n 개의독립변수들로구성된함수의경우, 변수를명시적으로지정하면해당변수로편미분수행 >> syms x y >> f = x^2*exp(-y^2)-y/x; >> fx = diff(f, x) fx = 2*x*exp(-y^2) + y/x^2 >> fy = diff(f, y) fy = >> fxy1 = diff(fx, y) fxy1 = 1/x^2-4*x*y*exp(-y^2) >> fxy2 = diff(fy, x) fxy2 = 1/x^2-4*x*y*exp(-y^2) - 1/x - 2*x^2*y*exp(-y^2) 22
접선벡터 어떤곡선 P(t) = (x(t), y(t), z(t)) 의접선벡터는 v(t) = [x (t0), y (t0), z (t0)] P(t) = (cos(t), sin(t), t/2pi) 일때접선벡터를그려봅시다. syms t x = cos(t); y = sin(t); z = t/(2*pi); m = 0:0.1:4*pi; plot3( subs(x,m), subs(y,m), subs(z,m) ); hold on; dx = diff(x); dy = diff(y); dz = diff(z); for s = linspace(0, 4*pi, 20) p = [subs(x,s), subs(y,s), subs(z,s)]; v = [subs(dx,s), subs(dy,s), subs(dz,s)]; nv = v / norm(v); ar = [p' p'+nv']; plot3(ar(1,:), ar(2,:), ar(3,:), 'color', 'r'); end grid on; axis on; 23
함수의극한 limit( F, x, a ) 함수 F 에서 x a 일때극한값 limit( F ) 함수 F 가 a 0 일때극한값 limit( F, x, a, right ) 함수 F 가 x a 일때의우극한값 limit( F, x, a, left ) 함수 F 가 x a 일때의좌극한값 수식 lim ff(xx) xx 0 lim ff(xx) xx aa MATLAB 수식 limit( f ) 또는 limit( f, x, 0 ) limit( f, x, a ) 또는 limit( f, a) lim xx aa limit( f, x, a, left ) lim xx aa + limit( f, x, a, right ) >> syms x a t h; >> limit(sin(x)/x) 1 >> limit((x-2)/(x^2-4),2) 1/4 >> limit((1+2*t/x)^(3*x),x,inf) exp(6*t) >> limit(1/x,x,0,'right') Inf >> limit(1/x,x,0,'left') -Inf >> limit((sin(x+h)-sin(x))/h,h,0) cos(x) >> v = [(1 + a/x)^x, exp(-x)]; >> limit(v,x,inf,'left') [ exp(a), 0] sin xx lim xx 0 xx xx 2 lim xx 2 xx 2 4 lim xx 1 lim xx 0 + xx 1 lim xx 0 xx lim xx 0 lim xx 1 + 2tt xx 3xx sin xx + h sin xx h 1 + aa xx lim xx ee xx xx 24
함수의극한 Symbolic Math Toolbox 와 MATLAB 수치계산을통한극한값비교 ff xx = lim nn nn 2 1 nn 1 % MATLAB 수치계산 >> n = realmax n = 1.7977e+308 >> x = n*(2^(1/n)-1) x = % Symbolic Math Toolbox >> syms n >> f = n*(2^(1/n)-1); >> limit(f, inf) log(2) 0 25
Quiz 다음수식들의극한값을 limit 함수를이용하여계산해봅시다. ff xx = lim nn 1 + xx nn nn ff xx = 1 lim xx 0 xx 4xx ff xx = lim 2 3xx+1 xx 3xx 2 +2xx 5 ee ff xx = lim xx 1 xx 0 sin xx 26
Quiz 미분은다음과같이극한으로정의됩니다. ff xx+h ff(xx) ff xx = lim h 0 h ff xx = cccccc xx 함수의미분값이 diff 함수를써서얻었을때와, 위의극한값을계산해서얻어낸결과가동일한지비교해봅시다. 27
적분 int( F ) 함수 F 를부정적분 int( F, v ) 함수 F 를변수 v 에대해부정적분 int( S, a, b ) 함수 F 를 [a, b] 구간에서부정적분 int( S, v, a, b ) 함수 F 를변수 v 에대해 [a, b] 구간에서부정적분 >> syms x x1 alpha u t; >> int(1/(1+x^2)) atan(x) >> int(x1*log(1+x1),0,1) 1/4 >> int(4*x*t,x,2,sin(t)) -2*t*(cos(t)^2 + 3) 1 1 + xx 2 ddxx 1 xx 1 log 1 + xx 1 ddxx 1 0 sin tt 4xxxx ddxx 2 수식 ff(xx) ddxx MATLAB 수식 int( f ) int( f, x ) ff(tt) ddtt int( f, t ) bb ff(xx) ddxx int( f, x, a, b ) aa 적분상수 C 는출력하지않음!! >> A = [cos(x*t),sin(x*t);-sin(x*t),cos(x*t)]; >> int(a,t) [ sin(t*x)/x, -cos(t*x)/x] [ cos(t*x)/x, sin(t*x)/x] >> int([exp(t),exp(alpha*t)]) [ exp(t), exp(alpha*t)/alpha] cos xxxx ddtt sin xxxx ddtt ee tt ddtt sin xxxx ddtt cos xxxx ddtt ee ααtt ddtt 28
Quiz 다음수식들의적분값을 int 함수를이용하여계산해봅시다. ff xx = ee (kkkk)2, xx ff xx = xx sin xx ff xx = xx 3 2xx 2 + xx 1, 0 xx 2 ff xx = tan 1 xx, 0 xx 1 xx 3 2 ff xx = xx 3 ee xx sin xx, 0 xx ππ 29
수치적분 정적분 aa bb ff xx dddd 의근사를계산하는적분방법 trapz 함수 trapezoidal method 사용 quad 함수 Simpson quadrature rule 사용 quadl 함수 Lobatto quadrature rule 사용 30
수치적분 >> syms x real >> int( x*log(x), x, 2, 4 ) 14*log(2) 3 >> quad( @(x) x.*log(x), 2, 4 ) 2 4 xx log xx ddxx 6.7041 0 1 ee xx 2 log 1 + xx 2 ddxx >> syms x real >> int( exp(-x^2)*log(1+x^2), x, 0, 1 ) Warning: Explicit integral could not be found. int(exp(-x^2)*log(x^2 + 1), x == 0..1) >> quadl( @(x) exp(-x.^2).*log(1+x.^2), 0, 1 ) 0.1539 >> syms x real >> int( sin(x)^2/sqrt(1+cos(x)^2), x, 0, 2*pi ) Warning: Explicit integral could not be found. 0 2ππ ssssss 2 xx 1+cccccc 2 (xx) ddxx int(sin(x)^2/(cos(x)^2 + 1)^(1/2), x == 0..2*pi) >> quadl( @(x) sin(x).^2./sqrt(1+cos(x).^2), 0, 2*pi ) 2.8478 31
수치적분의응용 프레넬적분 두함수 x(t), y(t) 가변수 t 에종속적 tt xx tt = cos uu 2 dddd 0 tt yy tt = sin uu 2 dddd 0 clear all; n = 1000; x = zeros(1, n); y = zeros(1, n); t = linspace(0, 4*pi, n+1); for i = 1:n x(i) = quadl(@(x) cos(x.^2), t(i), t(i+1), 1e-3); y(i) = quadl(@(x) sin(x.^2), t(i), t(i+1), 1e-3); end x = cumsum(x); y = cumsum(y); plot([-x(end:-1:1) 0 x], [-y(end:-1:1) 0 y]) axis equal; 32
다중적분 다중적분은아래와같이반복적분으로계산할수있음 ff xx, yy dddd = cc dd aa bb ff xx, yy dddddddd = aa bb cc dd ff xx, yy dddddddd 1 2 0 3 (xx 2 + xx + yy)dddddddd >> syms x y real >> f = x^3 + x + y; >> int(int(f,y,0,3),x,1,2) 81/4 >> syms x y real >> f = y^2*exp(x)+x*cos(y); >> int(int(f,x,0,1), y,4,6) 4 6 0 1 (yy 2 ee xx + xx cos yy)dddddddd (152*exp(1))/3 - sin(4)/2 + sin(6)/2-152/3 >> double(ans) 87.2983 33
다중적분의수치적분 numerical method 로다중적분의근사치를계산 dblquad, triplequad 이중적분, 삼중적분의수치적분을위한함수 4 6 0 1 (yy 2 ee xx + xx cos yy)dddddddd >> fxy = @(x, y) (y^2*exp(x) + x*cos(y)); >> dblquad(fxy, 0, 1, 4, 6) 87.2983 0 1 0 1 0 1 (yy + zz) sin ππ xx 2 + yy 2 >> syms x y z real >> f = (y+z)*sin(pi*(x^2+y^2)); >> int(int(int(f,x,0,1),y,0,1),z,0,1) dddddddddddd >> f = @(x,y,z) (y+z).*sin(pi*(x.^2+y.^2)); >> triplequad(f,0,1,0,1,0,1) (fresnelc(2^(1/2))*(2^(1/2) + pi*fresnels(2^(1/2))))/(2*pi) >> double(ans) 0.3078 0.3078 34
Symbolic 다중적분 정적분시매개변수를변수로주는경우 예 : aa bb cc dd (xx 2 + xx + yy)dddddddd >> syms x y a b c d real >> f = x^3 + x + y; >> int(int(f,y,c,d),x,a,b) ((a - b)*(c - d)*(a^3 + a^2*b + a*b^2 + 2*a + b^3 + 2*b + 2*c + 2*d))/4 다른좌표계에대한적분 eg) 실린더의부피계산 0 h 0 2ππ 0 aa rrddrrddθθdddd >> syms r theta z h a real >> V = int(int(int(r,r,0,a),theta,0,2*pi),z,0,h) V = pi*a^2*h 35
다항식표현바꾸기 다항식인수분해 (factor 함수 ) >> syms x y >> f = x^3-6*x^2 + 11*x - 6; >> factor(f) (x - 3)*(x - 1)*(x - 2) 다항식전개 (expand 함수 ) >> expand(ans) x^3-6*x^2 + 11*x 6 >> expand(cos(x+y)) cos(x)*cos(y) - sin(x)*sin(y) 36
다항식표현바꾸기 다항식수식단순화 (simplify 함수 ) >> syms x c alpha beta >> simplify(sin(x)^2 + cos(x)^2) 1 >> simplify(exp(c*log(sqrt(alpha+beta)))) (alpha + beta)^(c/2) 37
다항식표현바꾸기 다항식수식에서공통항모으기 (collect 함수 ) >> syms x y >> collect(x^2*y + y*x - x^2-2*x) (y - 1)*x^2 + (y - 2)*x collect(s, v) : 함수 S 를 v 의 polynomial 로해서공통항모으기 >> syms x >> f = -1/4*x*exp(-2*x)+3/16*exp(-2*x) f = (3*exp(-2*x))/16 - (x*exp(-2*x))/4 >> collect(f, exp(-2*x)) (3/16 - x/4)*exp(-2*x) 38
다항식표현바꾸기 함수를분수식으로표현 (pretty 함수 ) >> syms x y >> f = 1/(x-1)*sin(x) f = sin(x)/(x - 1) >> pretty(f) sin(x) ------ x - 1 >> syms x >> int(sqrt(tan(x))) (2^(1/2)*(log(2^(1/2)*tan(x)^(1/2) - tan(x) - 1) - log(tan(x) + 2^(1/2)*tan(x)^(1/2) + 1)))/4 + (2^(1/2)*(atan(2^(1/2)*tan(x)^(1/2) - 1) + atan(2^(1/2)*tan(x)^(1/2) + 1)))/2 >> pretty(ans) 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 2 (log(2 tan(x) - tan(x) - 1) - log(tan(x) + 2 tan(x) + 1)) 2 (atan(2 tan(x) - 1) + atan(2 tan(x) + 1)) -------------------------------------------------------------------------- + ---------------------------------------------------------- 4 2 39
심볼에값대입하기 subs 함수 symbolic substitution 을수행 subs(s) 심볼릭표현 S 의모든변수들을 MATLAB workspace 상에정의된변수들의값으로대체 subs(s, NEW) 심볼릭표현 S 의자유변수 (free variable) 이 NEW 로대체 subs(s, OLD, NEW) 심볼릭표현 S 에서심볼 OLD 를심볼 NEW 로대체 OLD 와 NEW 는동일한사이즈의벡터또는셀배열로, OLD 의각원소가 NEW 의각원소로 1:1 로대체됨 40
심볼에값대입하기 subs( S ) 아래와같이심볼릭표현이정의되었다고할때, >> syms a t y C1 >> y = exp(-a*t)*c1 y = C1*exp(-a*t) a, C1에값을대입 >> a = 980; C1= 3; >> y y = C1*exp(-a*t) workspace 상에저장된값 a, C1을심볼릭표현에반영 >> y = subs(y) y = 3*exp(-980*t) 41
심볼에값대입하기 subs( S, NEW ) >> syms a b c x t >> f = a*sin(b*x)*exp(-a*x^c+t) f = a*exp(t - a*x^c)*sin(b*x) >> syms h >> subs(f, h) a*exp(t - a*h^c)*sin(b*h) subs( S, OLD, NEW ) >> syms a b omega >> f = sin(t) f = sin(t) >> f = subs(f, t, omega*t) f = sin(omega*t) 42
심볼에값여러개동시에대입하기 배열 substitution >> syms a b alpha >> subs(cos(a)+sin(b),{a,b},[alpha,2]) sin(2) + cos(alpha) 행렬값을 substitution >> syms a t >> subs(exp(a*t), a,-magic(2)) [ exp(-t), exp(-3*t)] [ exp(-4*t), exp(-2*t)] 스칼라 substitution >> syms x y >> subs(x*y,{x,y},{[0 1;-1 0],[1-1;-2 1]}) [ 0, -1] [ 2, 0] 43
Symbolic Summation 급수의합을계산 symsum( f ) 기본변수 (default variable) 에대해 f(0) + f(1) + + f(n-1) 를계산 symsum( f, x ) 심볼리변수 x 에대해 f(0) + f(1) + + f(n-1) 를계산 symsum( f, a, b ) 기본변수 (default variable) 에대해 f(a) + f(a+1) + + f(b) 를계산 symsum( f, x, a, b ) 심볼릭변수 x 에대해 f(a) + f(a+1) + + f(b) 를계산 44
Symbolic Summation 급수의합계산예제 >> syms k n >> symsum(k) k^2/2 - k/2 >> symsum(k,0,n-1) (n*(n - 1))/2 >> symsum(k,0,n) (n*(n + 1))/2 >> simplify(symsum(k^2,0,n)) (n*(2*n + 1)*(n + 1))/6 >> symsum(k^2,0,10) 385 >> symsum(k^2,11,10) 0 >> symsum(1/k^2) -psi(1, k) >> symsum(1/k^2,1,inf) pi^2/6 45
Symbolic Production 급수의곱을계산 >> syms i k n >> symprod(k) factorial(k) >> symprod(k,1,n) factorial(n) >> symprod('1/k*i',i,1,n) (k*factorial(n))/k^(n + 1) >> symprod(1/k*i,i,1,n) (k*factorial(n))/k^(n + 1) >> symprod(i^2/(i^2-1), i, 2, Inf) 2 46
Quiz 11 + xx + xx 22 + 의합을계산해봅시다. 47