Sympy solveset 将结果存储为浮点数、整数等

Sympy solveset store results as float, integer etc

我正在使用 sympy solveset 求解累积概率函数(或者一般的方程式,如果你想这样考虑的话)。到目前为止,一切都很好。他们 return 然而 "sets" 作为一种结果输出。我在将它们转换为或将它们保存为标准 python 变量类型时遇到了麻烦:在我的例子中,我希望它是一个浮点数。

我的代码如下:

import sympy as sp
from sympy import Symbol 
from sympy import erf
from sympy import log
from sympy import sqrt

x = Symbol('x')   
p = 0.1

sp.solveset((0.5 + 0.5*erf((log(x) - mu)/(sqrt(2)*sigma)))-p)
Out[91]: 
FiniteSet(7335.64225447845*exp(-1.77553477605362*sqrt(2)))

是否可以将其转换为浮点数?仅使用 float() 是行不通的,因为我已经尝试过了,而且到目前为止,我还以某种方式将其存储为列表,然后再次提取数字。但是这种方式看起来很麻烦,不适合我的目的。最后,我会让我们说将这个方程求解 1000 次以上,我希望将所有结果作为一个包含浮点数的整洁数组。

如果将上面的结果存储如下:

q = sp.solveset((0.5 + 0.5*erf((log(x) - mu)/(sqrt(2)*sigma)))-p)

然后 Python 说类型是 sets.setsFiniteSet 如果你试图访问变量 q 它会给你一个错误(顺便说一句,在 Spyder 中工作):

"Spyder was unable to retrieve the value of this variable from the console - The error message was: 'tuple object has no attribute 'raise_error'".

我不知道那是什么意思。非常感谢。

FiniteSet 的工作方式类似于 Python set。您可以将其转换为列表并通过索引提取元素,例如:

In [3]: S = FiniteSet(7335.64225447845*exp(-1.77553477605362*sqrt(2)))                                                                         

In [4]: S                                                                                                                                      
Out[4]: 
⎧                  -1.77553477605362⋅√2⎫
⎨7335.64225447845⋅ℯ                    ⎬
⎩                                      ⎭

In [5]: list(S)                                                                                                                                
Out[5]: 
⎡                  -1.77553477605362⋅√2⎤
⎣7335.64225447845⋅ℯ                    ⎦

In [6]: list(S)[0]                                                                                                                             
Out[6]: 
                  -1.77553477605362⋅√2
7335.64225447845⋅ℯ                    

In [7]: list(S)[0].n()                                                                                                                         
Out[7]: 595.567591563886