기록하는삶

[파이썬/Python] sympy 모듈, 미분, 편미분 본문

AI/파이썬(Python)

[파이썬/Python] sympy 모듈, 미분, 편미분

mingchin 2021. 12. 9. 03:21
728x90
반응형

아직은 파이썬을 활용해서 함수를 미분을 해야하는 일을 겪지는 못했지만,, 해당 목적을 달성할 수 있는 모듈이 sympy다. (외에도 정말 많은 기능을 제공하는 것 같다.) 예시는 아래와 같다.

import sympy as sym
from sympy.abc import x,y,e

# sym.diff(함수, 변수(원하는 미분 횟수만큼))
sym.diff(sym.poly(x**2), x)

sym.diff(sym.cos(x**2), x)

sym.diff(sym.cos(e**x), x)

sym.diff(sym.cos(y**2 + x**3 + x*y), x)

sym.diff(sym.cos(y**2 + x**3 + x*y), y)

# sym.idiff(수식, y, x) -> 수식=0의 방정식에 대한 dy/dx
sym.idiff((x**2)*y + x*y - y**2, y , x)

# 여러 번 미분하기
sym.diff(sym.poly(x**10 + 6*x**5 + x**3), x,x,x)

x,y, 오일러상수 e등을 본래 알파벳이 아닌 함수의 변수 혹은 상수로 활용하기 위해 sympy.abc에서 import할 수 있으며, sympy.diff(함수, 변수)를 통해 다항함수, 삼각함수, 지수함수 등의 미분이 가능하다.

sym.poly()의 경우 연산을 던지면 간략화해서 보여주며, 사용된 변수들과 domain을 함께 포함하는데 default가 Z이고 따로 설정할 수 있는 것 같다. (Z: 정수, Q: 유리수, R: 실수, C: 복소수)

log(e)라고 뱉는 것은 밑이 e인 로그를 말하는 것 같다. (왜 써준겨 1인데)

위와 같이 편미분도 가능하며, 주어진 방정식에 대해 dy/dx를 구해주는 idiff(수식, y, x) -> dy/dx 함수도 있었다.

여러 번 미분도 가능하다! 원하는 만큼 인자를 던지면 된다. 아래는 세 번 미분의 예시.

 

당연히 반대로 적분하는 함수도 있었다. 적분이 가능하면 그 결과를, 불가능하면 integral dx의 수식 형태를 출력하는 것 같다. 다항함수의 경우 poly()가 하위 attribute인 integral()을 가진다.

import sympy as sym
from sympy.abc import x,y,e

sym.integrate(sym.cos(y**2 + x**3 + x*y), x)

sym.poly(x**2 + x - 2).integrate()

sym.integrate(x*e**(x**2), x)

세 번째거는 otherwise가 필요 없는데 이상하네,,

728x90
반응형