SymPy로 대수 연산 해보기

11736 단어 파이썬sympy

SymPy란?



대수 연산의 라이브러리입니다.
Symbolic적인 연산(문자를 수치로서가 아니라 그대로 계산하는 연산)을 가능하게 합니다.

SymPy로 할 수있는 일


  • 문자 변수 정의
  • 음수
  • 실수, 복소수

  • 배포
  • 인수 분해
  • 극한
  • 미분
  • 적분
  • 방정식 풀기
  • 행렬 연산

  • 이전 준비


    ModuleNotFoundError 가 나오면 pip install sympy 하십시오.
    import sympy as sy
    
    # Jupyter Notebook上で、レンダリングされた結果を表示する
    sy.init_printing()
    

    출력 결과의 예:

    $$x^{3}+3 x^{2} y + 3 x y^{2} + y^{3}$$
    sy.init_printing 설정에 따라 다양한 형식으로 연산 결과를 표시 할 수 있습니다.
    참고 자료

    렌더링하지 않고 latex 코드를 출력하는 경우


    # 第一引数: レンダリングしない
    # str_printer: 出力結果をsy.latexでラップして、latex出力に変換する
    sy.init_printing(False, str_printer=lambda x: sy.latex(x))
    

    출력 결과의 예: x^{3} + 3 x^{2} y + 3 x y^{2} + y^{3}

    이렇게 설정하면 Jupyter Notebook의 출력이 모두 latex 코드로 변환됩니다.
    논문이나 리포트 등에 붙여넣는 경우, 처음에는 렌더링 결과를 보면서 코드를 수정하고, 마지막은 latex 출력하는 것이 편리할 것 같네요.

    덧붙여서 sy.latex 함수는 수식을 latex 출력하는 함수입니다.

    렌더링을 원하지 않는 경우


    sy.init_printing(False)
    

    출력 결과의 예: x*3 + 3*x2*y + 3*x*y2 + y*3

    이것은 Python 문법으로 출력하고 싶을 때 사용합니다. 이것을 이대로 복사하면 SymPy에서 사용할 수 있습니다.

    기본 사용법



    기호 정의


    # シンボルを定義
    a = sy.Symbol("a")
    a
    

    $$a$$
    # 複数のシンボルを同時に定義
    x, y = sy.symbols("x y")
    
    # LaTexの記法を使える(raw文字列にしないとエスケープ文字と認識する)
    theta, gamma = sy.symbols(r"\theta \gamma")
    theta, gamma
    

    $$\left(\theta,\\gamma\right)$$
    # 正の実数として定義
    r = sy.Symbol("r", positive=True)
    
    # 実数として定義
    q = sy.Symbol("q", real=True)
    

    문자 정보를 주지 않으면 매우 일반적인 복소수로 계산할 수 있으므로 가능한 한 정보를 제공하도록합시다.

    기본 연산


    a**2 + x - theta
    

    $$-\theta + a^{2} + x$$
    a**2 / a
    

    $$a$$
    (x + y)**3
    

    $$\left(x + y\right)^{3}$$

    표현식 확장 등


    f = (x + y)**3
    f.expand()
    

    $$x^{3}+3 x^{2} y + 3 x y^{2} + y^{3}$$
    # x^2の係数
    f.expand().coeff(x, n=2)
    

    $$3 y$$

    미분과 극한


    f = sy.sin(x)/x
    f.limit(x, 0)
    

    $$1$$
    # xで偏微分
    f = 3 * x**2 * y + x * y**2
    f.diff(x)
    

    $$6 x y + y^{2}$$

    대입(심볼도 대입할 수 있다)


    # y に a**2 を代入
    f.subs([(y, a**2)])
    

    $$a^{4}x+3 a^{2}x^{2}$$

    NumPy를 ufunc로 변환



    심볼릭 표현을 NumPy의 ufunc로 변환할 수 있습니다.
    이것은 상당히 편리합니다.
    심볼릭 계산을 한 후 수치 계산을 간단하게 할 수 있습니다.
    x, a, b, c = sy.symbols("x a b c")
    f = a * x**2 + b * x + c
    f
    

    $$a x^{2} + b x + c$$
    # 4引数を持つ関数を定義
    args = (x, a, b, c)
    func = sy.lambdify(args, f, "numpy")
    
    func는 4 변수 함수입니다.
    다만, $a$, $b$, $c$ 를 고정하면 2차 함수가 되는군요.
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    # 実際に数値を代入(ufuncとして振る舞い、ベクトル演算が可能)
    xx = np.linspace(0, 1)
    plt.plot(xx, func(xx, 1, -0.5, 0))
    plt.show()
    



    방정식을 풀다


    eq = sy.Eq(2*x + 5*y, -1)
    

    $$2 x + 5 y = -1$$
    sy.solve(eq, x)
    

    $$-\frac{5 y}{2} -\frac{1}{2}$$

    요약



    Jupyter Notebook에서의 출력 방법과 기본적인 사용법을 소개했습니다.
    SymPy를 사용하면 대수 연산을 기계 파워를 사용하여 건간 계산할 수 있습니다.
    지금까지 케어리스 미스에 겁을 먹으면서 계산하고 있던 복잡한 계산도, SymPy로 검산할 수 있게 되거나 인간에서는 도저히 할 수 없는 계산도 할 ​​수 있기 때문에, 여러가지 가능성이 퍼지네요.

    행렬 연산 등은 그 밖에도 기사를 쓰고 싶습니다.

    참고 자료



  • Sympy+Jupyter로 최강의 계산기 환경 만들기
  • 공식 HP
  • Jupyter Notebook에서 SymPy 수식과 LaTeX 명령을 결합하여 표시
  • 좋은 웹페이지 즐겨찾기