0

Using Python and SymPy I am trying to solve this equation for b:

Text

My code:

From sympy import * 
b = Symbol('b') 
x = ((b/(2*math.pi*math.e))*((math.pi*b)**(1/b)))**(1/(2*(b-1)))
solve(x-1.0034,b)

And I get this error: NotImplementedError: multiple generators...No algorithms are implemented to solve equation...

Do you know where is the mistake? Or is it possible that the equaiton is so difficult that Python can not solve it? Thank you

gorte
  • 23
  • 1
  • 6

1 Answers1

3

It's better to use pi and E from sympy:

In [21]: b = Symbol('b')                                                                                                          

In [22]: eq = ((b/(2*math.pi*math.e))*((math.pi*b)**(1/b)))**(1/(2*(b-1))) - 1.0034                                               

In [23]: eq                                                                                                                       
Out[23]: 
                                                1            
                                             ───────         
                                             2⋅b - 2         
⎛                     b ____________________⎞                
⎝0.0585498315243192⋅b⋅╲╱ 3.14159265358979⋅b ⎠        - 1.0034

In [24]: eq = ((b/(2*pi*E))*((pi*b)**(1/b)))**(1/(2*(b-1))) - 1.0034                                                              

In [25]: eq                                                                                                                       
Out[25]: 
                  1            
               ───────         
               2⋅b - 2         
⎛  b _____  -1⎞                
⎜b⋅╲╱ π⋅b ⋅ℯ  ⎟                
⎜─────────────⎟        - 1.0034
⎝     2⋅π     ⎠  

The equation is transcendental and it is unlikely that analytic solutions exist. Potentially there is a Lambert form for this but solve does not find anything.

You can solve it numerically though using nsolve:

In [29]: sol = nsolve(eq, b, 2)                                                                                                   

In [30]: sol                                                                                                                      
Out[30]: 14.3368885826882

In [31]: eq.n(subs={b:sol})                                                                                                       
Out[31]: 7.22915270916583e-19
Oscar Benjamin
  • 12,649
  • 1
  • 12
  • 14