Python sympy 기호
"x"와 "z"를 기호로 사용하면이 코드에 문제가 없습니다.
from sympy import *
x, z = symbols('x z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))
y.subs({x: 5, z: 25})
그러나 "q"와 "a"를 사용하면 solve는 나에게 어떤 해결책도주지 않습니다.
q, a = symbols('q a')
y = -6*q**2 + 2*q*a**0.5 + 50*q - a
solve((diff(y, q), diff(y, a)))
y.subs({q: 5, a: 25})
보시다시피 "subs"를 사용하여 목적 함수에 오타가 없는지 확인합니다.
업데이트 : "Symbol"을 사용하여 각 변수를 개별적으로 설정했지만 "q"와 "a"를 다시 사용하면 작동하지 않습니다.
# This works
x = Symbol('x')
z = Symbol('z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))
# This does not work
q = Symbol('q')
a = Symbol('a')
y = -6*q**2 + 2*q*a**0.5 + 50*q-a
solve((diff(y, q), diff(y, a)))
감사합니다.
답변
알았다!
그것은 모두 변수의 알파벳 순서에 달려 있습니다.
당신이 대체 할 경우 x에 대한 z및 z대한 x첫 번째 예에서도 작동이 중지됩니다.
내부적으로 해결은 식을 함수 _solve로 보낸 sympy.solvers다음 방정식을 풀려고 시도하고 여러 번 실패합니다.
마지막으로 마지막으로하는 일은 알파벳순으로 정렬하는 인수 를 사용하여 내부 함수를 통해 기호를 선택 -sqrt(a) + q하거나 해결하려고 시도 하는 것입니다 (이 인수가 없어도 여전히 가능하지만이 인수로 래핑 하면 예제가 마술처럼 작동합니다. 정반대로).x - sqrt(z)_ok_symsreversed
그래서 그것은 x - sqrt(z)as x: sqrt(z)및 -sqrt(a) + qas로 해결 됩니다 a: q**2.
첫 번째 경우에는 쉽게 해결할 수있는 것으로 끝나지만 50 - 10*sqrt(z)두 번째 경우에는 -12*q + 2*sqrt(q**2) + 50단순화 할 수 없기 때문에 손실됩니다 sqrt(q**2).
출처 : 많은 테스트 : https://github.com/sympy/sympy/blob/master/sympy/solvers/solvers.py