2014-01-08 2 views
3

나는 sympy에서 단순한 인수 분해 문제를 가지고있다. sympy로 큰 성공을 거두었습니다. 그러나 복잡한 무언가로 인해 난감한 점이 있습니다.sympy 인자 simple relationship

어떻게

phi**2 - 2*phi*phi_0 + phi_0**2 - 8 

(phi - phi_0)**2 - 8 

에 반영하기 위해 어떻게해야합니까?

나는 이미 요소 기능 같은 기존 솔루션을 산출

factor(phi**2 - 2*phi*phi_0 + phi_0**2 - 8,phi-phi_0) 

을 시도했습니다. 내가 코멘트에서 언급 한 바와 같이

+0

예상 답변에 오타가 있습니다. '(phi-phi_0) ** 2 - 8'이어야합니다. (이것은 당신의 문제를 일으키지 않지만 누군가를 혼란스럽게 할 수 있습니다.) – svk

+0

고마워요. 오타가 수정되었습니다. – ibell

+2

factor()는 표현식의 일부만 사용해야 하는지를 결정할 수 없다고 생각합니다. factor (x ** 2 + 2 * x + 2)를 고려하십시오. factoration을 허용하려면 +1을 식과 분리해야한다고 어떻게 결정합니까? – kazemakase

답변

1

는, 예 : "부분 인수 분해는"(예를 들어, x**2 + 5*x + 7(x + 2)*(x + 3) + 1(x + 1)*(x + 4) + 3에 해당하고, 당신이 그것에 무슨 일이 일어나고 있는지 이해하면 자신의 예를 가지고 올 어렵지 않다) 고유하지 않습니다.

수동으로 이러한 작업을 수행 할 수있는 방법이 있지만 내가 무엇을 찾고 있는지 알지 못하기 때문에 무엇을 말할지를 알기가 어렵습니다. 예를 들어,이 특정 예를 수행하는 가장 쉬운 방법은

>>> print(A.subs(phi, x + phi_0).factor().subs(x, phi - phi_0)) 
(phi - phi_0)**2 - 8 

는 SymPy가 xphi - phi_0를 대체 할만큼 똑똑하지 않다 (x = phi - phi_0하자이지만, x - phi_0phi를 대체 할만큼 똑똑하다 같은 일이다). 이것은 더 큰 다항식의 관점에서 고려하기를 원하거나 당신이 무엇을 목표로 삼고 있는지 잘 알지 못한다면 멋지게 일반화되지 않습니다. 그러나 변수의 이름이 주어지면 나는 phi - phi_0이 당신이 신경 쓰는 것이라고 생각합니다.

이 외에도 식을 파고 들어 자신의 알고리즘을 파고 작성하여 원하는 단순화를 수행 할 수 있음을 지적해야합니다. 시작하려면 http://docs.sympy.org/latest/tutorial/manipulation.html을보십시오. 또한 Expr의 모든 방법을 살펴보십시오. 다양한 as_* 메소드와 같은 것들을 작성하게되면 꽤 유용한 헬퍼 함수가 있습니다.

+0

하나의 변수 만 다루는 경우에는'decompose' 함수가 유용 할 수도 있습니다. 불행히도 아직 다 변수 표현식을 지원하지 않습니다. – asmeurer