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

Jupyter Notebook中用Sympy定义方程、求导积分绘图及报错解决

SymPy函数求导/积分后绘图报错解决方案

报错原因

  • SymPy的所有求导、积分、自定义函数都是符号运算逻辑,仅支持传入SymPy符号类变量,你后续将符号变量x覆盖为numpy数组后,再把数组传入求导/积分函数自然会触发参数校验报错
  • 即使是预定义好的符号表达式,也无法直接接收numpy数组完成批量数值计算,需要做格式转换

修正方法

使用SymPy内置的sp.lambdify()方法,将符号表达式转换为支持numpy数组输入的数值计算函数即可,同时要注意不要重复覆盖符号变量的名称,避免变量冲突。

完整可运行代码

import sympy as sp
from IPython.display import display
sp.init_printing()
import matplotlib.pyplot as plt
import numpy as np

# 定义符号变量,不要和后续数值数组变量重名
x_sym = sp.symbols('x')
a = sp.sympify("4/5")

# 1. 定义原函数符号表达式
func_sym = x_sym**3 + a * x_sym**2
display("原函数:", func_sym)

# 2. 定义导函数符号表达式
dfunc_sym = sp.diff(func_sym, x_sym)
display("导函数:", dfunc_sym)

# 3. 定义积分函数符号表达式(不定积分,可按需加常数项)
int_func_sym = sp.integrate(func_sym, x_sym)
display("不定积分结果:", int_func_sym)

# 将所有符号表达式转换为支持numpy数组输入的数值函数
func_num = sp.lambdify(x_sym, func_sym, 'numpy')
dfunc_num = sp.lambdify(x_sym, dfunc_sym, 'numpy')
int_func_num = sp.lambdify(x_sym, int_func_sym, 'numpy')

# 生成数值计算用的x数组
x_arr = np.linspace(-10, 10, 20)

# 绘图
plt.plot(x_arr, func_num(x_arr), label='原函数')
plt.plot(x_arr, dfunc_num(x_arr), label='导函数')
plt.plot(x_arr, int_func_num(x_arr), label='不定积分函数')
plt.legend()
plt.show()

额外说明

如果需要计算定积分,只需要在生成积分符号表达式时传入上下限即可,示例:

# 计算x从0到2的定积分,得到的是固定值
fixed_int = sp.integrate(func_sym, (x_sym, 0, 2))
display("0到2的定积分结果:", fixed_int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:12:01