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

Python中SymPy求导后如何计算导函数在指定x值处的数值结果

报错原因

diff返回的是SymPy的符号表达式对象,不是Python可调用函数,因此不能直接用f(3.14)这种传参调用的写法。

解决方法

方法1:用subs方法直接代入求值

适合单次计算少数几个点的场景,直接调用表达式的subs方法传入变量和对应值即可,需要标准数值结果可以追加evalf()方法:

from sympy import *
# 先定义符号变量x
x = symbols('x')
# 计算cos(x)的导数,结果为 -sin(x)
f_prime = diff(cos(x), x)
# 代入x=3.14计算数值
result = f_prime.subs(x, 3.14).evalf()
print(result)

方法2:用lambdify转成可调用函数

适合需要批量计算大量点的场景,用lambdify把符号表达式转成和普通Python函数一致的可调用对象,还可以指定numpy作为后端支持数组输入,计算效率远高于subs:

from sympy import *
import numpy as np

x = symbols('x')
f_prime = diff(cos(x), x)
# 转成支持numpy数组输入的可调用函数
f_numeric = lambdify(x, f_prime, backend='numpy')

# 单个点计算
print(f_numeric(3.14))
# 批量计算多个点
print(f_numeric(np.array([1, 2, 3, 3.14])))

其他可实现求导+数值计算的工具包

  • 数值求导类:NumDiffTools,不需要定义符号表达式,直接对现成的数值函数求导,适合无法写出显式函数表达式的场景
  • 自动微分类:PyTorch、TensorFlow、JAX,都是支持自动微分的数值计算框架,支持GPU/TPU加速,适合大规模计算、需要用到梯度做优化的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:03