2013-11-26 2 views
2

나는 약간의 검색을 해왔고, 나는 내가 구글에게 잘못된 질문을하고 있을지도 모른다고 생각한다. 거기에 다른 문제가있는 스레드가있는 경우 알려 주시기 바랍니다.sympy - 분모의 값을 찾기 위해 "solve()"사용하기

나는 sympy에 비교적 익숙하지 만 설명서가 좋기 때문에 지금까지 어떤 문제도 없었습니다. MATLAB에서 Python으로 변환하려고하고 있는데 MATLAB에서 작동하는 일부 스크립트를 테스트하고 있습니다. 나는 파이썬 3.3을 사용하고있다.

나는 비교적 단순한 평등을 해결하려고 노력하고 있으며 실패하고 있습니다. 아래 스크립트를 실행하면 빈 목록 만 출력으로받습니다.

# define the symbols we wish to use 
se = symbols('se') 

# assign some constants 
D = S(0.24) 
sn = S(38e6) 
Q = S(0.64) 

Dprime = 1.0 - D 

mc = 1 + (se/sn) 

# this is the expression that we wish to make equal to Q 
expr = (S(1)/(pi * (mc * Dprime - S(0.5)))) 

# this should print the value for se 
print(solve(Eq(expr, Q),se)) 

이 코드 블록은 "해결"기능이 실행될 때까지 완벽하게 작동합니다.

>>> Eq(expr, Q) 
      1     
──────────────────── = 0.64 
π⋅(2.0e-8⋅se + 0.26) 

설명서를 살펴본 결과 활용할 수있는 몇 가지 플래그가 있음을 발견했습니다. 나는 처음에 내가 적절하다고 생각했던 것들을 시도했다. 나는 그 때 내가 적절하다고 생각하지 않은 것들을 시도했다. 나는 그들을 모두 시험해 보았다.

또한 변수 입력에 대한 다양한 연산을 시도했습니다. 내가 남긴 그들 중 하나는 "symplify"기능으로 이해되는 S()입니다. 아마 나는이 것을 지나치게했지만, 나는 그 기능을 과용 할 수 없다고 생각한다.

문제는 분모에 변수가있는 것과 관련이있는 것으로 보입니다. sympy 문서에 포함 된 많은 예제를 시도해 보았습니다. 그리고 모두 저에게 적합합니다. 따라서 설치 자체에 상당히 확신합니다. 대답을 검색하는 동안

J 물론

답변

1

, 시간 내 주셔서 감사합니다, 나는 대신에 'sympy'의 'scipy'사용에 대한 약간 가로 질러왔다. 문제가 발생하면 from scipy import *을 배치하면 문제가 해결됩니다.

1

원하는 플래그는 rational=False입니다. 나는 이것이 SymPy의 버그라고 생각하지만, 아마도 계수 2.0e-8은 너무 작습니다.

+0

https://code.google.com/p/sympy/issues/detail?id=4112를 열었습니다. – asmeurer

+0

이 문제가 해결 된 것 같습니다. SymPy의 차기 버전에서 더 잘 작동 할 것입니다. – asmeurer