如何在Python中求解(x+;1)e^x=c(常量)?

如何在Python中求解(x+;1)e^x=c(常量)?,python,math,sympy,discrete-mathematics,Python,Math,Sympy,Discrete Mathematics,我想用Python求解(x+1)e^x=c方程 如下图所示,已使用lambert w函数成功手动求解该方程: 使用相同的步骤,我希望以编程方式解决(x+1)e^x。我已经按照上图所示的步骤使用Symphy模块对其进行了编码,但没有成功 在Python中有没有解决这类方程的方法 import numpy as np from sympy import * n = symbols('n') sigmao=0.06866 sigmas=0.142038295 theta=38.9 rad=(np.p

我想用Python求解
(x+1)e^x=c
方程

如下图所示,已使用lambert w函数成功手动求解该方程:

使用相同的步骤,我希望以编程方式解决
(x+1)e^x
。我已经按照上图所示的步骤使用Symphy模块对其进行了编码,但没有成功

在Python中有没有解决这类方程的方法

import numpy as np
from sympy import *
n = symbols('n')
sigmao=0.06866
sigmas=0.142038295
theta=38.9
rad=(np.pi/180)*38.9076
cos=np.cos(rad)
sec=1/np.cos(rad)
out = (0.06*0.7781598455*n*(1-exp(-2*0.42*sec*n))+exp(-2*0.42*n*sec)*sigmas)/sigmao
#Apply diff for the above expression. 
fin=diff(out, n)
print(solve(fin,n))

预览:

您的表达式非常数值化。当sympy的
solve
试图找到一个完美的符号解决方案时,sympy陷入了麻烦

为了找到数值解,Symphy有
nsolve
(它允许Symphy的表达式,但在幕后调用mpmath的数值解算器)。与求解不同,这里需要一个初始猜测:

从sympy导入符号、exp、diff、nsolve、pi、cos
n=符号('n')
sigmao=0.06866
sigmas=0.142038295
θ=38.9076
rad=(π/180)*θ
秒=1/秒(拉德)
输出=(0.06*0.7781598455*n*(1-exp(-2*0.42*sec*n))+exp(-2*0.42*n*sec)*sigmas)/sigmao
#对上述表达式应用diff。
fin=diff(输出,n)
结果=nsolve(fin,n,1)
打印(结果,fin.subs(n,result.evalf())
结果:
1.05992379637846-7.2856530819065E-17

请注意,在处理数值时,应非常小心地使用尽可能多的数字,以避免累积错误。每当您有一个精确的表达式时,建议将该表达式保留在代码中,而不是用数字替换。(通常,计算中使用64位或大约16位,但对于中间计算,可以考虑80位)

要用sympy解决原始问题,请执行以下操作:

从sympy导入符号、等式、表达式、求解
x=符号('x')
解=解(等式((x+1)*经验(x),20))
对于解决方案中的s:
打印(s.evalf())

结果:
1.9230907432181

为什么不在mpmath中使用lambertw函数?
(x+1)e^x
不是一个等式。没有等号。你想解决什么问题?你的意思是你想为给定的
x
计算
(x+1)e^x
?还是给了你一个值
y
,你想找到
x
,这样
(x+1)e^x=y
from scipy.optimize import fsolve
import numpy as np

const = 20
def func(x):
    return [(x[0]+1) * np.exp(x[0]) - const]

result = fsolve(func, [1])[0]
print('constant: ', const, ', solution: ', result)
#check
print('check: ', (result+1) * np.exp(result))


#Output[]:
    constant:  20.0 , solution:  1.9230907433218063
    check:  20.0