La bibliothèque mpmath
dans SymPy comprend une mise en œuvre de lambertw
. mpmath
implémente l'arithmétique à virgule flottante de précision arbitraire.
Voici un exemple. Tout d'abord, importer mpmath
de sympy
et définissez les chiffres de précision à 100 (choisi arbitrairement - le changement pour répondre à vos besoins):
In [96]: from sympy import mpmath
In [97]: mpmath.mp.dps = 100
Vérifiez que la fonction mpmath
donne les mêmes résultats que scipy.special.lambertw
:
In [98]: from scipy.special import lambertw
In [99]: lambertw(123.45)
Out[99]: (3.5491328966138256+0j)
In [100]: mpmath.lambertw(123.45)
Out[100]: mpf('3.549132896613825444243187580460572741065183903716765715536934583554830913412258511917029758623080475405')
Calculer lambertw(3.1e600)
. L'argument est entré comme une chaîne, car nous ne pouvons pas représenter 3.1e600 comme une valeur à virgule flottante normale. mpmath
convertira la chaîne en une valeur à virgule flottante de haute précision en utilisant la précision que nous avons définie précédemment.
In [101]: mpmath.lambertw('3.1e600')
Out[101]: mpf('1375.455917376503282959382815269413629072666427317318260231463057587794635136887591876065911283365916388')
Nous pouvons également créer une x
variable pour maintenir la valeur d'entrée, puis appelez mpmath.lambertw(x)
:
In [102]: x = mpmath.mpf('3.1e600')
In [103]: x
Out[103]: mpf('3.099999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999e+600')
In [104]: mpmath.lambertw(x)
Out[104]: mpf('1375.455917376503282959382815269413629072666427317318260231463057587794635136887591876065911283365916388')
Le résultat peut être représenté comme une valeur en virgule flottante régulière, nous passons donc à la fonction builtin float()
pour effectuer la conversion:
In [105]: float(mpmath.lambertw(x))
Out[105]: 1375.455917376503
la première chose que vous pouvez faire est de poster ce que vous avez essayé avec une explication des raisons pour lesquelles il n'a pas wo rk; dire aux gens ici que * "j'ai essayé avec" décimal ", mais ça n'a pas marché". * n'est pas utile. –
Je serais surpris si 'scipy.special.lambertw' fonctionne avec' decimal.Decimal' ... –