4 개의 입력 변수 (부동산)가 있습니다.
그리고 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
가져 오기를 잃고 erf
sympy 버전을 사용하면 오류가 해결됩니다.
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)
참고 :
log
및 sqrt
에서 mpmath
. 결과를 얻기 위해 여기에서 결과에 영향을 미치지 않습니다.sympy
solveset
호출시 그렇게 할 수 있습니다 .이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다