You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy表示实数域内绝对值函数的导数?

用SymPy在实数域内获取绝对值函数的导数(以绝对值形式呈现)

核心思路

在实数域中,绝对值函数 (|g(x)|) 的导数(在 (g(x) \neq 0) 处)可表示为 (\frac{g(x)}{|g(x)|} \cdot g'(x))。SymPy默认会基于复数域推导,返回包含 re()、im() 的结果,我们可以通过指定变量的实数属性,结合符号替换将结果转换为绝对值形式。

具体实现步骤

  1. 导入SymPy并定义实数变量
    先明确变量为实数类型,避免复数域推导:

    from sympy import symbols, diff, Abs, sign, simplify
    
    # 定义实数变量x
    x = symbols('x', real=True)
    
  2. 定义绝对值函数并求导
    以 (|x^2 - 4|) 为例,先执行求导操作:

    # 定义绝对值函数
    f = Abs(x**2 - 4)
    # 计算导数
    f_prime = diff(f, x)
    
  3. 将结果转换为绝对值形式
    SymPy会返回 sign(x**2 - 4)*(2*x),而实数域内 sign(y) 等价于 (\frac{y}{|y|})((y\neq0)),通过替换规则整理结果:

    # 替换sign函数为绝对值形式
    f_prime_abs_form = f_prime.subs(sign(x**2 - 4), (x**2 - 4)/Abs(x**2 - 4))
    # 简化表达式
    f_prime_abs_form = simplify(f_prime_abs_form)
    

    最终得到 (\frac{2x(x^2 - 4)}{|x^2 - 4|}),符合实数域内绝对值形式的导数表达。

  4. 通用化处理
    针对任意实数函数 (g(x)),可以封装转换逻辑:

    def abs_derivative(g, var):
        g_prime = diff(g, var)
        return simplify(g_prime.subs(sign(g), g/Abs(g)))
    

    使用示例:

    g = x**3 - 3*x
    print(abs_derivative(g, x))  # 输出 (3*(x**3 - 3*x)*(x**2 - 1))/Abs(x**3 - 3*x)
    

注意事项

  • 当 (g(x)=0) 时,绝对值函数的导数不存在,SymPy的结果会自动忽略该点,使用时需自行关注定义域。
  • 必须给变量指定 real=True,否则SymPy会默认在复数域推导,返回含实部虚部的结果。

内容的提问来源于stack exchange,提问作者andres florian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:36:01