У меня есть 4 входных переменных (поплавки):SymPy и mpmath дают "TypeError: не может создать MPF" при использовании функции егГ() в пределах solveset()
- Xmax
- Xmin
- процент
- режим
и я хочу, чтобы решить следующую (довольно долго) уравнение с:
> (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 решить уравнение, но это дает мне следующее сообщение об ошибке:
TypeError: cannot create mpf from 0.707106781186547*(-s**2 - 0.287682072451781)/s
Мой код выглядит следующим образом:
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.
Я думаю, что я сузил проблему функции ERF(), она возвращает
EmptySet()
когда я бегу
solveset(log(Xmax) - (log(mode) + s ** 2), s, domain=S.Reals)
Я не могу понять, что попробовать дальше, любая помощь будет оценили!
Первоначально я думал, что это проблема с математикой, но уравнение успешно решено в Matlab, поэтому проблема, вероятно, исходит из sympy или mpmath.
К сожалению, это не дает мне правильного ответа. Он возвращает объект «Conditionset» вместо одного поплавка, который является правильным ответом, который я получаю от matlab. – cachemoi
. Этот код в матабеле дает правильный ответ для одного случая: Функция sigma = Test() % 1/2 + 1/2 * егГ ((журнал (Xmax) - (журнал (режим) + s^2))/(SQRT (2) * с)) - (1/2 + 1/2 * егГ ((журнал (Xmin) - (log (режим) + s^2))/(sqrt (2) * s))) syms s eqn = (1/2 + 1/2 * erf ((log (4) - (log (2)) + s^2))/(SQRT (2) * с)) - (1/2 + 1/2 * егГ ((журнал (1) - (журнал (2) + s^2))/(SQRT (2) * s)))) - 0.95 == 0; sigma = solve (eqn, s); % sigma = double (сигма); end – cachemoi
Похоже, вам следует открыть второй вопрос для этого, поскольку он не связан. Название вашего вопроса здесь требует разрешения 'TypeError', что и было сделано выше. Извините, я не могу больше помочь –