如何解Python中的(x+1)e^x=c(constant)?

How to solve (x+1)e^x=c(constant) in Python?

我想解 Python 中的 (x+1)e^x=c 方程。

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

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

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))
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

预览:https://onlinegdb.com/By8Z2Jwgw

你的表情很数字化。当 sympy 的 solve 试图找到一个完美的符号解决方案时,sympy 遇到了麻烦。

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

from sympy import symbols, exp, diff, nsolve, pi, cos

n = symbols('n')
sigmao = 0.06866
sigmas = 0.142038295
theta = 38.9076
rad = (pi / 180) * theta
sec = 1 / 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)

result = nsolve(fin, n, 1)
print(result, fin.subs(n, result).evalf())

结果:1.05992379637846 -7.28565300819065e-17

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

用sympy解决原题:

from sympy import symbols, Eq, exp, solve

x = symbols('x')
solutions = solve(Eq((x + 1) * exp(x), 20))
for s in solutions:
    print(s.evalf())

结果:1.92309074332181