在 python 中使用 sympy 微分绝对值函数不会 return 一个答案

Differentiating absolute value functions using sympy in python won't return an answer

我试图找到 tanh(x) 函数的最大曲率点,但曲率的数学定义包含绝对值函数。我已经指定 x 必须是实值,这解决了 sympy returning 曲率导数的虚函数。但是,当尝试使用 sym.solve() 方法求解 k'(x)=0 时,python 将简单地继续 运行 而不是 return 一个答案。

x = sym.symbols('x', real=True)

# below are parameters I found from curve fitting raw data elsewhere that are just converted to sympy variables

a = sym.Float(a)  
b = sym.Float(b)
c = sym.Float(c)
d = sym.Float(d)

# function in question
def f(x):
    return a * sym.tanh(b * x + c) + d

def fprime(x):
    return sym.diff(f(x),x,1)

def f2prime(x):
    return sym.diff(f(x),x,2)

f1 = fprime(x)
f2 = f2prime(x)

# mathematical definition of curvature
def kappa(f1,f2):
    return sym.Abs(f2) / ( 1 + f1**2 )**(3/2)

def kprime(f1,f2):
    return sym.diff(kappa(f1,f2),x,1)

k1 = kprime(f1,f2)
print(k1)

常量 a,b,c,d=[-2.40402847 -3.20154993 0.51489147 -8.05771537]k1 的一个组合是

0.324273723818531*(1 - tanh(0.514891472285591 - 3.2015499273203*x)**2)*((1 - tanh(0.514891472285591 - 3.2015499273203*x)**2)**2 + 0.0168810800591381)**(-2.5)*(6.40309985464061*tanh(0.514891472285591 - 3.2015499273203*x)**2 - 6.40309985464061)*tanh(0.514891472285591 - 3.2015499273203*x)*Abs((tanh(3.2015499273203*x - 0.514891472285591)**2 - 1)*tanh(3.2015499273203*x - 0.514891472285591)) + 0.108091241272844*((3.2015499273203 - 3.2015499273203*tanh(3.2015499273203*x - 0.514891472285591)**2)*(tanh(3.2015499273203*x - 0.514891472285591)**2 - 1) + (6.40309985464061 - 6.40309985464061*tanh(3.2015499273203*x - 0.514891472285591)**2)*tanh(3.2015499273203*x - 0.514891472285591)**2)*((1 - tanh(0.514891472285591 - 3.2015499273203*x)**2)**2 + 0.0168810800591381)**(-1.5)*sign((tanh(3.2015499273203*x - 0.514891472285591)**2 - 1)*tanh(3.2015499273203*x - 0.514891472285591))

然后尝试使用 print(sym.solve(k1),x) 解决 x 的问题 return 永远无法得到答案。

这是一个漂亮的 high-order 非线性方程。尝试 nsolve:

>>> nsolve(k1, -.5)
-0.427127686132521