sympy 및 mpmath는 solveset () 내에서 erf () 함수를 사용할 때 "TypeError : cannot create mpf"를 제공합니다.

카슈미르

4 개의 입력 변수 (부동산)가 있습니다.

  • Xmax
  • Xmin
  • 백분율
  • 방법

그리고 s에 대해 다음과 같은 (다소 긴) 방정식을 풀고 싶습니다.

> (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage == 0

방정식을 풀기 위해 mpmath와 sympy를 사용하고 싶지만 다음과 같은 오류 메시지가 표시됩니다.

유형 오류 : 0.707106781186547 * (-s ** 2-0.287682072451781) / s에서 mpf를 만들 수 없습니다.

내 코드는 다음과 같습니다.

from mpmath import erf, log, sqrt
from sympy import Symbol, solveset, S

percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s')

eqn = (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage)

solveset(eqn, s, domain=S.Reals)

mpf는 mpmath에서 만든 float 유형입니다.

erf () 함수로 문제를 좁힌 것 같습니다.

EmptySet()

내가 달릴 때

solveset(log(Xmax) - (log(mode) + s ** 2), s, domain=S.Reals)

다음에 무엇을 시도해야할지 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다!

처음에는 수학 문제라고 생각했지만 방정식이 matlab에서 성공적으로 해결되었으므로 문제는 아마도 sympy 또는 mpmath에서 비롯된 것입니다.

루이스 매독스

mpmath가져 오기를 잃고 erfsympy 버전을 사용하면 오류가 해결됩니다.

from sympy import Symbol, solveset, S, erf, log, sqrt

percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s', real=True)

eqn = (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage)

solveset(eqn, s)

참고 :

  • 당신은 가져올 필요가 없습니다 logsqrt에서 mpmath. 결과를 얻기 위해 여기에서 결과에 영향을 미치지 않습니다.sympy
  • 변수 s에 실제 도메인을 지정할 수 있으므로 solveset호출시 그렇게 할 수 있습니다 .

추가 사용의 예는 필요한 경우 여기 패키지 테스트에 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관