def smooth_abs(x, dx=0.01):
"""smoothed version of absolute vaue function, with quadratic instead of sharp bottom.
Derivative w.r.t. variable of interest. Width of quadratic can be controlled"""
x, n = _checkIfFloat(x)
y = np.abs(x)
idx = np.logical_and(x > -dx, x < dx)
y[idx] = x[idx]**2/(2.0*dx) + dx/2.0
# gradient
dydx = np.ones_like(x)
dydx[x <= -dx] = -1.0
dydx[idx] = x[idx]/dx
if n == 1:
y = y[0]
dydx = dydx[0]
return y, dydx
评论列表
文章目录