[기초 수학] Python에서 수식 미분/적분 (sympy 라이브러리 소개)

반응형

SymPy Logo

 

* 전체 코드

import sympy as sp
from sympy.abc import x, y
## 미분
exp = x**2 +2*x + 3
sp.diff(exp, x)

## 사용된 변수와 도메인과 함께 표시
sp.poly(sp.diff(exp, x)) # Z:정수, Q:유리수, R:실수, C:복소수

# x로 2번 미분
sp.diff(exp, x, x) 

## dx/dy or dy/dx
sik=x**2 + y**2 +2*x + 3
sp.idiff(sik, x, y) # dx/dy
sp.idiff(sik, y, x) # dy/dx

## 적분
sik=sp.log(x**2+sp.E**x) # 수식 정의
sp.integrate(sik, x) # 적분

### 적분이 안되는 경우
sp.integrate(sp.cos(x**3+2), x)

 

 

 

Contents

     

    1. 배경

    파이썬에서 복잡한 수식을 미분하거나 적분하여 보기좋게 출력해주는 라이브러리가 있습니다. 수학을 그렇게 잘하지는 못하지만, 미분과 적분 수식이 주어지면, 해당 변수에 대해 편미분, 전미분, 적분 등을 해서 아름다운 수식으로 출력해주는 라이브러리입니다. 

     

    2. 설치

    pip install sympy # 일반 터미널
    
    !pip install sympy # 주피터 노트북이라면

    * 설치 결과

    sympy 설치

     

    3. 미분

    1) 모듈 import 및 수식 생성

    import sympy as sp
    from sympy.abc import x, y
    exp = x**2 +2*x + 3
    exp

    * 코드 해석

    sympy 라이브러리를 import 하고, sp로 줄여서 사용합니다. 다음으로, sympy.abc에서 변수 x, y를 사용합니다. (외에도 sympy.abc에서 a~z, A~Z 알파벳을 모두 변수로 쓸 수 있고, 알파, 베타 등도 사용할 수 있습니다.) 그리고, x**2 + 2*x + 3이라는 간단한 수식을 만들어 보겠습니다. 아래 그림을 보면, 수식이 예쁘게 출력됩니다.

    * 출력

    기초 수식 생성

     

    2) 미분(편미분)

    # 미분
    sp.diff(exp, x)

    * 코드 설명

    sp.diff(수식, 변수)를 통해 수식에 대해, 변수로 편미분을 할 수 있습니다. x변수로 편미분을 하였고, 그 결과는 아래와 같습니다.

     

    * 출력

    x로 편미분

     

    3) 도메인과 함께 표시

    # 미분 + 도메인과 함께 출력
    sp.poly(sp.diff(exp, x))

    * 코드 설명

    sp.poly(수식)를 통해, (수식, 사용된 변수들, 도메인) 형식으로 보기 좋게 Poly 객체를 출력할 수 있습니다. 미분 결과 수식은 2x + 2가 나오기 때문에, 아래 결과를 보면 2x+2와 사용된 변수 x, 마지막으로 실수(Z) 도메인을 출력합니다. (각 도메인은 Z: 정수, Q: 유리수, R: 실수, C: 복소수)

    * 출력

    수식, 변수들, 도메인 표시

     

    4) 여러 번 미분

    sp.diff(exp, x, x) # x로 2번 미분

    * 코드 설명

    sp.diff(수식, 변수1, 변수2...) 이렇게 하면 수식에 대해 변수1로 미분한 결과를 변수2로 미분합니다. 예시에서는 x로 2번 미분한 결과를 반환합니다. 3)에서 한 번 미분되었을 때, 2x+2가 나왔고 이를 x로 한번 더 미분하니 결과로 2가 출력됩니다.

    * 출력

    x로 2번 편미분

     

    5) 전미분(전체 미분)

    이번엔 편미분이 아닌 전체 미분을 알아보겠습니다. 이를 위해 x와 y 두 가지 변수로 이루어진 수식을 정의해보겠습니다.

    sik=x**2 + y**2 +2*x + 3
    sik

    * 출력

    다변수 수식 생성

     

    이를 dy/dx로 전미분 해보고, dx/dy로 전미분 해보겠습니다.

    # dy/dx를 해주는 메소드
    sp.idiff(sik, y, x)
    
    # dx/dy를 해주는 메소드
    sp.idiff(sik, x, y)

    * 코드 설명

    sp.diff가 편미분이라면, sp.idiff(수식, 종속변수(y), 독립변수(x)) 형식으로 사용합니다. 그러면 수식에 대해 dy/dx로 전미분을 해줍니다. sp.idiff(수식, x, y)로 사용한다면, x가 종속변수가 되고, y가 독립변수가 되고, dx/dy를 하게 됩니다.

    * 출력

    전미분

     

     

     

     

    4. 적분

    1) 수식 정의 및 적분

    sik=sp.log(x**2+sp.E**x)
    sik

    * 코드 설명

    이번엔 조금 복잡한 식을 만들어보겠습니다. sympy라이브러리는 파이, 자연상수 e, 로그, 등등 수학에서 사용되는 수많은 용어들을 지원해줍니다. 

    * 출력

    로그 수식 생성

     

    sp.integrate(sik, x) # 적분

    * 코드 설명

    sp.integrate(수식, 변수) 형식으로 사용됩니다. 수식에 대해 변수로 적분을 해서 출력해줍니다.

    * 출력

    적분

     

    2) 적분이 안 되는 경우

    sp.integrate(sp.cos(x**3+2), x) # 적분 안되는 경우

    * 코드 설명

    만약 적분이 안 되는 경우는 어떻게 출력될까요? cos(x**3 +2)라는 수식은 적분이 안됩니다. 이런 경우, 아래처럼 그대로 출력되게 됩니다.

    * 출력

    적분 안되는 경우

     

     

    이렇게 Python을 통해 미분과 적분을 변수별로 출력해주는 라이브러리인 sympy에 대해 알아보았습니다.

    다음에 더 유익하고 재미있는 글로 찾아오겠습니다.

    읽어주셔서 감사합니다.

     

    * 위의 실습 코드는 아래 깃허브 링크에 모두 정리해두었습니다.

     

    GitHub - netsus/math_for_machine_learning: 머신 러닝을 위한 수학 정리 feat python

    머신 러닝을 위한 수학 정리 feat python. Contribute to netsus/math_for_machine_learning development by creating an account on GitHub.

    github.com

     

    Reference)
    1. SymPy Logo: https://www.wikidata.org/wiki/Q5971368
    2. https://everyday-image-processing.tistory.com/121
    반응형

    댓글

    Designed by JB FACTORY