首页 > 解决方案 > 如何从python中得到一个非线性复杂方程的封闭形式?

问题描述

我正在从以下非线性方程中寻找 x 的封闭形式:

1/{e^[a*(d-x)]+1}+ln(1/x-1)*b=c

python是否用代数而不是数值数据来求解非线性方程?还是有任何有用且有效的工具来解决这个问题?

标签: pythonsympysymbolic-math

解决方案


你知道Sympy方程代数解的模块吗?不幸的是,我不确定它是否可以解决您自己的方程式,但如果以后可以帮助您:

In [1]: from sympy import exp, log, solve
In [2]: from sympy.abc import a,b,c,d,x
In [3]: solve( 1/(exp(a*(d-x))+1) + log(1/x-1)*b - c, x)

在这里找不到任何解决方案(请看下面的最后一行):

-------------------------------------------------- ------------------------- NotImplementedError Traceback (最近一次调用最后一次) in () ----> 1 solve( 1/(exp(a *(dx))+1) + log(1/x-1)*bc, x)

/usr/lib/python3/dist-packages/sympy/solvers/solvers.py insolve(f, *symbols, **flags) 1063 ################## ################################################# ###### 1064 if bare_f: -> 1065 solution = _solve(f[0], *symbols, **flags) 1066 else: 1067 solution = _solve_system(f, symbols, **flags)

/usr/lib/python3/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags) 1632 1633 如果结果为 False:-> 1634 raise NotImplementedError('\n'.join( [msg, not_impl_msg % f])) 1635 1636 if flags.get('simplify', True):

NotImplementedError: 多个生成器 [exp(-a x), log(-1 + 1/x)] 没有实现求解方程 b log(-1 + 1/x) - c + 1/(exp(a*( d - x)) + 1)

当然,您可以期望像Mathematica这样的东西比Sympy更强大,但实际上:

Wolfram Language 12.0.0 Engine for Linux x86 (64-bit)
Copyright 1988-2019 Wolfram Research, Inc.

In[1]:= Solve[ 1/(Exp[a*(d-x)]+1) + Log[1/x - 1]*b == c, x]                     

Solve::nsmet: This system cannot be solved with the methods available to Solve.

                    1                     1
Out[1]= Solve[-------------- + b Log[-1 + -] == c, x]
                   a (d - x)              x
              1 + E

推荐阅读