如何在Python中求解(x+;1)e^x=c(常量)?
我想用Python求解如何在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
(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