Matplotlib绘图报错:x与y维度不匹配问题咨询
解决Matplotlib绘图时的维度不匹配错误
这个错误的核心原因很明确:你现在的f1是SymPy的符号表达式,而不是能处理NumPy数组的数值函数。当你把xspace(一个长度为100的NumPy数组)传入f(xspace)时,SymPy并不会自动把符号表达式转换成对应数值,反而会返回一个包含整个数组的单一符号对象(形状为(1,)),这就和xspace的(100,)维度不匹配,触发了报错。
你完全不用手写函数表达式,用SymPy的lambdify工具就能完美解决这个问题,它可以把SymPy的符号表达式转换成能直接处理NumPy数组的Python函数,步骤如下:
修正后的完整代码示例
import sympy as sym import numpy as np import matplotlib.pyplot as plt # 首先定义SymPy符号变量x(这一步你可能之前漏掉了) x = sym.symbols('x') # 计算你的符号表达式 line1 = x**16 - 1 line2 = x**24 - 1 f1 = sym.cancel(line1 / line2) # 用lambdify把符号表达式转成支持NumPy的函数 f = sym.lambdify(x, f1, 'numpy') # 绘图部分 xspace = np.linspace(-3, 3, 100) plt.ylim([-3, 3]) plt.plot(xspace, f(xspace)) plt.show()
关于二阶导数的处理
后续需要绘制二阶导数时,同样用SymPy先求导,再转成数值函数即可,完全不用手写复杂表达式:
# 求二阶导数 f1_second_deriv = sym.diff(f1, x, 2) # 转成数值函数 f_second_deriv = sym.lambdify(x, f1_second_deriv, 'numpy') # 直接绘图 plt.plot(xspace, f_second_deriv(xspace)) plt.show()
简单来说,lambdify就是SymPy和NumPy/Matplotlib之间的桥梁,它帮你把符号计算的结果无缝转换成数值计算可用的函数,完美解决维度不匹配的问题,还能省去手写复杂表达式的麻烦。
内容的提问来源于stack exchange,提问作者Mike Hunt
相关产品推荐
相关产品推荐

