Python, решить нелинейное уравнение для переменной - PullRequest
0 голосов
/ 24 марта 2020

Используя 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 не может его решить? Спасибо

1 Ответ

3 голосов
/ 24 марта 2020

Лучше использовать pi и E от 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⋅π     ⎠  

Уравнение трансцендентно и маловероятно, что существуют аналитические c решения. Потенциально для этого есть форма Ламберта, но 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
...