심파이에서는 변수를 대수 기호로 사용하려면 반드시 symbols()함수를 써서 지정해 주어야 한다. 만약 x, y, z를 대수 기호로 사용하겠다면 다음과 같이 하면 된다.
>>> x = symbols(‘x’)>>> y,z=symbols(‘y z’) |
아래부터는 live.sympy.org 에서 직접 확인해 볼 수 있다.
[그림 1] live.sympy.org 접속화면
대수 방정식
이것을 이용하여 수식 x+2y 를 입력해 보자.
>>> expr = x+2*yx+2*y |
여기서 x, y는 마치 파이썬의 변수처럼 사용되었지만 내부적으로는 대수기호로 지정되어 있는 상태이다.
>>> expr+1x + 2*y + 1>>> x*exprx*(x + 2*y)>>> expr2 = expand(x*expr)x**2 + 2*x*y>>> factor(expr2)x*(x + 2*y) |
이와 같이 expand() 함수를 이용하여 수식을 전개할 수 있고 factor()함수로 인수분해를 할 수 있다.
분수식을 통분하거나 분리할때는 together() 함수와 apart()함수를 이용한다.
>>> a, b, c, d = symbols('a b c d')>>> together(a/b + c/d)(a*d + b*c)/(b*d)>>> apart( (a**2+a+4)/(a+2) )a - 1 + 6/(a + 2) |
대수 방정식을 풀기 위해서는 solve()함수를 이용하면 된다.
>>> solve(x**2-2,x)[-sqrt(2), sqrt(2)] |
미분
이제 함수 sin(x)ex 를 미분해 보자. 미분은 diff() 함수를 이용하면 된다.
>>> diff(exp(x)*sin(x),x)exp(x)*sin(x) + exp(x)*cos(x) |
적분
함수 exsin(x) + excos(x)의 부정적분을 계산해 보자. integrate()함수를 이용하면 된다.
>>> integrate(exp(x)*sin(x)+exp(x)*cos(x),x)exp(x)*sin(x) |
정적분을 구하려면 integrate()함수의 두 번째 인수에 범위를 지정해 주면 된다. sympy에서 무한대는 oo (소문자 o 두 개) 기호를 사용한다.
>>> integrate(sin(x**2),(x,-oo, oo))sqrt(2)*sqrt(pi)/2 |
극한
극한값을 구하려면 limit()함수를 이용하면 된다.
>>> limit(sin(x)/x,x,0)1 |
미분방정식
심파이를 이용하면 미분 방정식도 풀 수 있다.
>>> t=symbols('t')>>> y=Function('y')>>> dsolve( Eq(y(t).diff(t,t)-y(t), exp(t)), y(t))y(t) == C2*exp(-t) + (C1 + t/2)*exp(t) |
선형대수
선형대수도 가능하다. 예를 들어 행렬
[ 1 2 ]
[ 3 4 ]
의 고유값을 구하려면 다음과 같이 하면 된다.
>>> A = Matrix([[1,2],[2,2]])>>> A.eigenvals(){-sqrt(17)/2 + 3/2: 1, 3/2 + sqrt(17)/2: 1} |
이와 같이 sympy를 이용하면 다양한 대수식을 표현하거나 방정식을 풀 수 있다.
댓글 없음:
댓글 쓰기