将互引用字符串字典转为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
相关产品推荐
相关产品推荐

