SymPy는 파이썬으로 작성된 기호 수학(Symbolic Mathematics) 전용 라이브러리입니다. SymPy는 본격적인 컴퓨터 대수 시스템(CAS, Computer Algebra System)을 지향하면서도, 코드를 최대한 단순하게 유지하여 이해하기 쉽고 확장하기도 편리하도록 설계되었습니다.
SymPy는 순수 파이썬으로만 작성되어 있으며, 유일한 의존성은 임의 정밀도 부동소수점 연산을 제공하는 순수 파이썬 라이브러리인 mpmath입니다. 덕분에 설치와 사용이 매우 간편합니다.
SymPy 모듈 설치하기
pip 명령어 한 줄로 간단히 설치할 수 있습니다.
pip install sympy
Rational과 Integer 클래스
SymPy는 Rational(유리수)과 Integer(정수)라는 두 가지 수치 타입을 정의합니다.
Rational 클래스는 유리수를 분자(numerator)와 분모(denominator)라는 두 정수의 쌍으로 표현합니다. 예를 들어 Rational(1, 2)는 1/2를, Rational(5, 2)는 5/2를 나타냅니다. Integer 클래스는 말 그대로 정수를 표현하는 데 사용됩니다.
임의 정밀도 연산과 특수 상수
SymPy는 내부적으로 mpmath를 활용하기 때문에 임의 정밀도(arbitrary-precision) 연산이 가능합니다. 이 덕분에 exp(자연상수 e), pi(원주율), oo(무한대) 같은 특수 상수들이 단순한 값이 아닌 심볼(symbol)로 취급되며, 필요에 따라 원하는 정밀도로 계산할 수 있습니다.
예제 코드
# sympy 모듈의 모든 기능 가져오기
from sympy import *
# pi**3은 그 자체로 심볼릭 표현식이므로 수치 값이 나오지 않음
p = pi**3
print("value of p is :" + str(p))
# evalf() 메서드는 표현식을 부동소수점 숫자로 평가함
q = pi.evalf()
print("value of q is :" + str(q))
# e^1 (e ** 1)과 동일한 계산
r = exp(1).evalf()
print("value of r is :" + str(r))
s = (pi + exp(1)).evalf()
print("value of s is :" + str(s))
# 무한대(oo)에 값을 더해도 여전히 무한대
rslt = oo + 10000
print("value of rslt is :" + str(rslt))
if oo > 9999999 :
print("True")
else:
print("False")실행 결과
value of p is :pi**3 value of q is :3.14159265358979 value of r is :2.71828182845905 value of s is :5.85987448204884 value of rslt is :oo True
핵심 포인트 정리
- pi**3처럼 심볼릭 표현식은 evalf()를 호출하기 전까지는 수치 값으로 변환되지 않습니다.
- evalf() 메서드는 심볼릭 표현식을 부동소수점 숫자로 평가해 줍니다.
- oo(무한대)는 어떤 유한한 수보다 크며, 무한대에 값을 더해도 결과는 여전히 무한대입니다.