GN⁺: 파이썬에서의 기호 수학, SymPy
(sympy.org)SymPy의 장점
- 무료: BSD 라이선스를 따르는 SymPy는 자유롭게 사용할 수 있으며 비용이 들지 않음.
- Python 기반: SymPy는 전적으로 Python으로 작성되었으며, Python을 사용함.
- 경량: SymPy는 임의의 부동 소수점 연산을 위한 순수 Python 라이브러리인 mpmath에만 의존하여 사용이 간편함.
- 라이브러리: 대화형 도구로서의 사용뿐만 아니라 다른 애플리케이션에 내장되거나 사용자 정의 함수로 확장될 수 있음.
SymPy를 사용하는 프로젝트들
- Cadabra: SymPy를 스칼라 대수 연산에 사용하는 텐서 대수 및 (양자) 필드 이론 시스템.
- ChemPy: Python으로 작성된 화학에 유용한 패키지.
- devito: 고성능 스텐실 계산을 위한 기호 DSL 및 실시간 컴파일러.
- EinsteinPy: 기호 및 수치 일반 상대성 이론을 위한 Python 패키지.
- galgebra: 기하 대수 (이전에 sympy.galgebra).
- LaTeX Expression project: 대수적 표현의 LaTeX 조판을 쉽게 할 수 있으며 자동 대입 및 결과 계산이 가능함.
- Lcapy: 선형 회로 분석 교육을 위한 실험적 Python 패키지.
- OctSymPy: SymPy를 사용하는 Octave용 기호 패키지.
- Optlang: 수학적 최적화 문제를 해결하기 위한 Python 패키지.
- PyDy: Python에서의 다체 동역학.
- pyneqsys: 비선형 방정식 시스템을 수치적으로 해결하기 위해 기호적으로 정의됨.
- pyodesys: Python에서 ODE 시스템의 간단한 수치적 통합.
- PyTorch TorchInductor: 동적 형태와 스트라이드를 지원하기 위해 SymPy를 사용하는 TorchInductor.
- QMCPACK: C++에서의 양자 몬테카를로. 단위 테스트 및 일부 코드 생성을 위한 참조 값 생성에 SymPy 사용.
- Quantum Programming in Python: 양자 1D 단순 조화 진동자 및 양자 매핑 게이트.
- SageMath: SymPy를 포함하는 오픈 소스 수학 시스템.
- Scikit-fdiff: 유한 차분 이산화.
- SfePy: Python에서의 간단한 유한 요소.
- Spyder: Rstudio 또는 MATLAB에 해당하는 과학적 Python 개발 환경; Spyder의 IPython 콘솔에서 전체 SymPy 지원 가능.
- Symbolic statistical modeling: 복잡한 물리 모델에 통계 연산 추가.
- yt: 체적 데이터를 분석하고 시각화하기 위한 Python 패키지 (yt 단위 시스템인 unyt는 SymPy 사용).
GN⁺의 의견
- SymPy는 BSD 라이선스로 무료로 제공되며, Python 기반으로 작성되어 Python 사용자에게 친숙한 수학적 연산을 위한 라이브러리임. 이는 특히 오픈소스 커뮤니티에서 활발히 사용되며, 다양한 과학 및 엔지니어링 분야에서 활용될 수 있는 장점을 가짐.
- SymPy는 경량이며 다른 애플리케이션에 쉽게 통합될 수 있어, 사용자가 복잡한 수학적 문제를 해결하거나 자신만의 함수를 추가하여 확장할 수 있는 유연성을 제공함.
- 이 기술을 도입할 때는 Python에 대한 기본적인 이해가 필요하며, 특히 수학적 모델링이나 기호 계산이 중요한 프로젝트에서 그 가치를 발휘함.
- SymPy를 사용함으로써 얻을 수 있는 이점은 고성능 수학 연산, 다양한 분야로의 확장성, 그리고 오픈소스 커뮤니티의 지원을 통한 지속적인 개선임.
- 비슷한 기능을 제공하는 다른 프로젝트로는 Mathematica, Maple, MATLAB의 Symbolic Math Toolbox 등이 있으나, 이들은 상용 소프트웨어이므로 SymPy는 무료이면서도 강력한 대안이 될 수 있음.
Hacker News 의견
- 로봇공학 분야에서 일하며, 3D 변환의 결과로 계산된 큰 벡터들을 작성하고 여러 상태 변수에 대한 그들의 자코비안(도함수)을 계산해야 하는 경우가 많음. 이는 복잡한 방정식으로 이어짐. sympy를 사용하여 이러한 큰 벡터를 선언적 방식으로 계산하고, 자코비안을 계산하며, 결과를 C 코드로 내보내어 코드 케이스에 즉시 가져올 수 있음. 예를 들어, 로봇 위치와 센서 위치가 포함된 데이터셋에 접근할 수 있다면 로봇 중심에 대한 센서의 위치를 추정하는 방법을 선언적으로 표현하는 방법을 보여주는 장난감 예제가 있음. 이를 위해
transform
과invert
함수를 정의하기만 하면 됨. - SymPy는 정말 멋진 도구로, 수년간 교육 도구로 사용해왔음. Mathematica/Maple 등과 비교했을 때, 학생들이 수학을 배울 때 사용하는 동사(solve, expand, factor 등)와 정확히 일치하는 API 함수를 가지고 있어 최고의 옵션이라고 생각함. 시작하려는 사람들을 위한 작은 튜토리얼이 있으며, 실행 가능한 노트북 형식으로도 제공됨. 또한, 아무것도 설치하지 않고 SymPy를 시도하고 싶은 사람들을 위해 웹 브라우저에서 Python + SymPy를 실행할 수 있는 SymPy 라이브 쉘도 있음.
- 기호 수학은 학부 과정에서 심각하게 탐구되지 않았으며, 접한 내용은 대부분 Mathematica와 MATLAB과 같은 독점 소프트웨어에 묶여 있었음. 필자는 텐서 계산을 많이 사용하는 수학/공학 분야에서 일하며, Maxima를 주 도구로 사용했지만, 이에 대한 패키지가 제한적이고 다루기 불편함. 이제 더 복잡한 계산을 위해 SymPy를 사용하는데, 이는 Python이 이미 가진 추상화 때문임. 언젠가는 Norvig의 'Principles'를 읽고 Maxima를 필요에 맞게 수정할 수 있기를 바람(텐서 계산/기호(텐서, 기하학적) 대수에 대한 Maxima의 소스 코드/구현을 읽을 수 있는 더 나은 참고 문헌이 있다면 알고 싶음).
- SymPy와 Mathematica의 벤치마크가 있으며, 결과는 Mathematica가 1,523개 문제를 해결하지 못했고, SymPy는 48,529개 문제를 해결하지 못함. 따라서 SymPy는 아직 따라잡을 부분이 있음.
- SymPy를 계산기로 사용하며, 이를 위한 GitHub 링크가 제공됨.
- 일반 상대성 이론에 관심이 있었던 10년 전, 아인슈타인 필드 방정식에 대한 기호 계산을 처리하는 간단한 프로그램을 작성하고 싶었음. SymPy는 옵션이었지만 사용하기 어렵고 작동시키지 못함. Mathematica를 사용하여 몇 시간 만에 해결함. 나중에 확장하여 블랙홀 논문에서 많은 계산을 수행함. 현재 SymPy는 많은 개발을 거쳐 좋은 라이브러리들이 구축되었으며, 심지어 Schwarzschild 메트릭에 대한 Jupyter 노트북 예제도 있음.
- SymPy는 Jupyter에서 매우 잘 작동함. SymPy를 위한 데모 노트북 링크가 제공됨.
- SymPy에 대한 Wikipedia 링크와 함께 Python과 SymPy를 사용하여 로그를 가르치는 방법에 대한 토론 링크가 제공됨. 또한 SymPy와 Matlab을 비교하는 링크와 NumPy를 Matlab 사용자에게 소개하는 문서 링크가 있음.
- SymPy는 작업을 수행하는 데 충분함. 일반적으로 SageMath 콤보 라이브러리에서 사용하는데, SymPy가 독립적으로 사용할 만큼 발전했는지 여부에 대한 질문이 있음.
- 수치 "물리학자"에게 SymPy는 신의 선물과 같았음. 나중에 C++로 최적화하기 전에 더 고급 모델을 프로토타이핑하기에 좋음. Mathematica를 많이 사용하지 않았지만, SymPy보다 기호적으로 더 강력하거나 덜 까다로운 느낌이 듦. Mathematica에 더 많은 경험이 있는 사람이 이에 대해 명확히 설명해줄 수 있기를 바람.