使用lambdify创建的函数无法用Matplotlib绘制,求解决方法
解决SymPy与Matplotlib绘图时"Cannot convert expression to float"错误
修正后的代码
import sympy as sp from sympy import lambdify, Function from sympy.abc import x from sympy.utilities.lambdify import implemented_function import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() # 定义自定义函数(可根据实际需求修改函数逻辑) inf = implemented_function(Function('f'), lambda x: eval("x")) # 指定modules为numpy,让生成的函数支持数组批量计算 f = lambdify(x, inf(x), modules='numpy') # 生成数值化的x轴数据,这里取-10到10区间的100个采样点 x_vals = np.linspace(-10, 10, 100) y_vals = f(x_vals) # 用数值数组计算对应的y值 # 使用数值数据绘图 ax.plot(x_vals, y_vals, color="blue", linestyle=":", label="f(x)") ax.legend() plt.show()
错误原因解析
- 符号变量不能直接用于Matplotlib:原代码中
ax.plot(x, f(x))里的x是SymPy的符号变量,Matplotlib需要的是数值数组而非符号表达式,因此会触发类型转换错误。 - lambdify需适配数组输入:默认生成的函数仅支持单个数值计算,指定
modules='numpy'可让函数处理numpy数组,实现批量计算。 - plt.show()位置错误:原代码先调用
plt.show()会显示空图,必须放在所有绘图逻辑之后执行。
内容的提问来源于stack exchange,提问作者Hendrik
相关产品推荐
相关产品推荐

