Python,求解变量的 non-linear 方程

Python, solve non-linear equation for a variable

使用 Python 和 SymPy 我正在尝试为 b:

求解这个方程

Text

我的代码:

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)

我得到这个错误:NotImplementedError:多个生成器...没有实现求解方程的算法...

你知道错在哪里吗?还是说等式太难了,Python都解不出来?谢谢

最好使用来自 sympy 的 piE:

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⋅π     ⎠  

方程是超越方程,不太可能存在解析解。可能有一个 Lambert 形式,但 solve 没有找到任何东西。

你可以通过使用 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