如何解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
你的表情很数字化。当 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
我想解 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
你的表情很数字化。当 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