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

如何在Python的SymPy中修改导数的表达式显示形式?

在SymPy中实现导数的点符号(ẋ)显示

有几种方法可以让SymPy把Derivative(x, t)显示为ẋ:

方法1:直接定义带点符号替代导数

最简单的方式是预先定义带点的符号(比如ẋ)来代表dx/dt,直接在表达式中使用这个符号:

from sympy import symbols, Eq, Derivative

x, ẋ, t = symbols('x ẋ t')
# 用ẋ表示dx/dt的关系
diff_eq = Eq(ẋ, Derivative(x, t))
print(diff_eq)  # 输出 ẋ = d/dt x
# 如果直接需要显示ẋ作为导数结果,可直接使用该符号
print(ẋ)  # 输出 ẋ

方法2:自定义字符串打印机修改输出格式

如果希望保留Derivative对象但改变其打印样式,可以自定义StrPrinter子类,针对单变量对t的导数替换为点符号:

from sympy import symbols, Derivative
from sympy.printing.str import StrPrinter

class DotStrPrinter(StrPrinter):
    def _print_Derivative(self, expr):
        # 匹配单变量对t求导的情况
        if (len(expr.args) == 2 
            and expr.args[0].is_symbol 
            and expr.args[1].is_symbol 
            and expr.args[1].name == 't'):
            var_name = expr.args[0].name
            # 为变量添加点符号,这里以x为例,可扩展其他变量
            return f'ẋ' if var_name == 'x' else f'ẏ' if var_name == 'y' else f'\\dot{{{var_name}}}'
        # 其他情况保持默认打印
        return super()._print_Derivative(expr)

x, t = symbols('x t')
expr_diff = Derivative(x, t)
printer = DotStrPrinter()
print(printer.doprint(expr_diff))  # 输出 ẋ

方法3:自定义LaTeX打印机用于渲染场景

如果在Jupyter Notebook或需要LaTeX渲染的环境中,可以自定义LaTeX打印机,让导数输出为\dot{x}(渲染后就是ẋ):

from sympy import symbols, Derivative, init_printing
from sympy.printing.latex import LatexPrinter

class DotLatexPrinter(LatexPrinter):
    def _print_Derivative(self, expr):
        if (len(expr.args) == 2 
            and expr.args[0].is_symbol 
            and expr.args[1].is_symbol 
            and expr.args[1].name == 't'):
            return rf'\dot{{{self._print(expr.args[0])}}}'
        return super()._print_Derivative(expr)

# 初始化自定义打印机
init_printing(printer=DotLatexPrinter)
x, t = symbols('x t')
expr_diff = Derivative(x, t)
expr_diff  # 在Jupyter中会渲染为ẋ

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:10:38