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

将互引用字符串字典转为SymPy表达式并实现求导的方法

解决SymPy字典表达式求导问题

别担心,这个操作其实很简单,咱们一步步来:

首先,你需要先把字典里的字符串表达式转换成SymPy能识别的表达式对象,之后就可以直接用sy.diff()求导了。下面是完整的代码示例:

步骤1:导入SymPy并定义变量

import sympy as sy
x = sy.symbols('x')  # 定义唯一的SymPy变量x

步骤2:准备你的原始字典

假设你的字典是这样的(你可以替换成自己的实际表达式):

# 键是a、b、c(作为表达式的左侧),值是字符串形式的右侧表达式
expr_dict = {
    'a': 'x**2 + 5*x - 3',
    'b': 'sy.sin(x) + sy.exp(2*x)',
    'c': 'x*sy.cos(x) - sy.log(x)'
}

步骤3:转换表达式并求导

先把每个字符串转成SymPy表达式,再对x求导:

# 1. 将字符串表达式转换为SymPy表达式对象
sym_exprs = {key: sy.sympify(expr_str) for key, expr_str in expr_dict.items()}

# 2. 对每个表达式求关于x的导数
derivatives = {key: sy.diff(expr, x) for key, expr in sym_exprs.items()}

步骤4:查看结果

如果要以“左侧' = 导数表达式”的形式输出结果,可以这样做:

for lhs, deriv in derivatives.items():
    # 用simplify确保导数表达式更简洁
    print(f"{lhs}' = {sy.simplify(deriv)}")

运行这段代码后,你会得到类似这样的输出:

a' = 2*x + 5
b' = 2*exp(2*x) + cos(x)
c' = -x*sin(x) + cos(x) - 1/x

小提示

如果你的字符串表达式里没有写sy.前缀(比如直接写'sin(x)'),那可以提前把SymPy的常用函数导入到当前命名空间,这样sympify就能正确解析了:

from sympy import sin, exp, cos, log
# 此时你的字典可以写成:
expr_dict = {
    'a': 'x**2 + 5*x - 3',
    'b': 'sin(x) + exp(2*x)',
    'c': 'x*cos(x) - log(x)'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:05:32