SymPy-단순화

Sympy는 수학적 표현을 단순화하는 강력한 능력을 가지고 있습니다. SymPy에는 다양한 단순화를 수행하는 많은 기능이 있습니다. simple ()이라는 일반 함수가 가장 단순한 형태의 표현식에 도달하려고 시도합니다.

단순화

이 함수는 sympy.simplify 모듈에 정의되어 있습니다. impl ()은 입력 표현식을 "단순"하게 만들기 위해 지능형 휴리스틱을 적용하려고합니다. 다음 코드는 $ sin ^ 2 (x) + cos ^ 2 (x) $ 표현식을 단순화합니다.

>>> from sympy import * 
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2 
>>> simplify(expr)

위의 코드 조각은 다음과 같은 출력을 제공합니다.

1

넓히다

expand ()는 다항식 확장에 사용되는 SymPy에서 가장 일반적인 단순화 함수 중 하나입니다. 예를 들면-

>>> a,b=symbols('a b') 
>>> expand((a+b)**2)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$a^2 + 2ab + b^2$

>>> expand((a+b)*(a-b))

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$a^2 - b^2$

expand () 함수는 표현식을 더 작게 만드는 것이 아니라 더 크게 만듭니다. 일반적으로 이것이 사실이지만, 종종 expand ()를 호출하면 표현식이 더 작아집니다.

>>> expand((x + 1)*(x - 2) - (x - 1)*x)

위의 코드 조각은 다음과 같은 출력을 제공합니다.

-2

인자

이 함수는 다항식을 취하여 유리수에 대해 기약 할 수없는 요인으로 인수합니다.

>>> x,y,z=symbols('x y z') 
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor(expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$z(x + 2y)^2$

>>> factor(x**2+2*x+1)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$(x + 1)^2$

factor () 함수는 expand ()와 반대입니다. factor ()에 의해 반환 된 각 요소는 축소 할 수 없습니다. factor_list () 함수는보다 구조화 된 출력을 반환합니다.

>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor_list(expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

(1, [(z, 1), (x + 2*y, 2)])

수집

이 함수는 합리적 지수를 가진 거듭 제곱까지의 표현식 목록과 관련하여 표현식의 추가 항을 수집합니다.

>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3 
>>> expr

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x^3 + x^2z + 2x^2 + xy + x - 3$

이 표현식에 대한 collect () 함수는 다음과 같습니다.

>>> collect(expr,x)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x^3 + x^2(2 - z) + x(y + 1) - 3$

>>> expr=y**2*x + 4*x*y*z + 4*y**2*z+y**3+2*x*y 
>>> collect(expr,y)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$Y^3+Y^2(x+4z)+y(4xz+2x)$

취소

cancel () 함수는 합리적 함수를 취하여 표준 표준 형식 인 p / q에 넣습니다. 여기서 p와 q는 공통 인자가없는 확장 다항식입니다. p와 q의 선행 계수에는 분모가 없습니다. 즉, 정수입니다.

>>> expr1=x**2+2*x+1 
>>> expr2=x+1 
>>> cancel(expr1/expr2)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x+1$

>>> expr = 1/x + (3*x/2 - 2)/(x - 4) 
>>> expr

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$

>>> cancel(expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\frac{3x^2 - 2x - 8}{2x^2 - 8}$

>>> expr=1/sin(x)**2 
>>> expr1=sin(x) 
>>> cancel(expr1*expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\frac{1}{\sin(x)}$

Trigsimp

이 함수는 삼각 ID를 단순화하는 데 사용됩니다. 역삼 각 함수에 대한 명명 규칙은 함수 이름 앞에 a를 추가하는 것입니다. 예를 들어, 역 코사인 또는 아크 코사인은 acos ()라고합니다.

>>> from sympy import trigsimp, sin, cos 
>>> from sympy.abc import x, y
>>> expr = 2*sin(x)**2 + 2*cos(x)**2 
>>> trigsimp(expr)

2

trigsimp 함수는 휴리스틱을 사용하여 가장 적합한 삼각법 ID를 적용합니다.

파워 심프

이 함수는 거듭 제곱을 유사한 기수 및 지수와 결합하여 주어진 표현을 줄입니다.

>>> expr=x**y*x**z*y**z 
>>> expr

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x^y x^z y^z$

>>> powsimp(expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x^{y+z} y^z$

powsimp ()는 bases 만 결합하거나 combine = 'base'또는 combine = 'exp'를 변경하여 지수 만 결합 할 수 있습니다. 기본적으로 combine = 'all'은 둘 다 수행합니다. force가 True이면 가정을 확인하지 않고베이스가 결합됩니다.

>>> powsimp(expr, combine='base', force=True)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x^y(xy)^z$

빗질하다

계승 및 이항을 포함하는 조합 표현식은 combsimp () 함수를 사용하여 단순화 할 수 있습니다. SymPy는 factorial () 함수를 제공합니다.

>>> expr=factorial(x)/factorial(x - 3) 
>>> expr

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\frac{x!}{(x - 3)!}$

위의 조합 식을 단순화하기 위해 다음과 같이 combsimp () 함수를 사용합니다.

>>> combsimp(expr)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$x(x-2)(x-1)$

이항 (x, y)은 x 개의 개별 항목 집합에서 y 항목을 선택하는 방법의 수입니다. 종종 xCy로 작성됩니다.

>>> binomial(x,y)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$(\frac{x}{y})$

>>> combsimp(binomial(x+1, y+1)/binomial(x, y))

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\frac{x + 1}{y + 1}$

Logcombine

이 함수는 로그를 취하고 다음 규칙을 사용하여 결합합니다.

  • log (x) + log (y) == log (x * y) 둘 다 양수이면
  • a * log (x) == log (x ** a) x가 양수이고 a가 실수 인 경우
>>> logcombine(a*log(x) + log(y) - log(z))

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$a\log(x) + \log(y) - \log(z)$

이 함수의 force 매개 변수가 True로 설정되면 수량에 대한 가정이 이미 존재하지 않는 경우 위 가정이 유지되는 것으로 간주됩니다.

>>> logcombine(a*log(x) + log(y) - log(z), force=True)

위의 코드 스 니펫은 아래 표현식에 해당하는 출력을 제공합니다.

$\log\frac{x^a y}{z}$