Sympy矩阵计算结果绘图触发AssertionError报错如何解决
报错原因
sympy.plot的入参要求第一个位置传入未计算的符号表达式,第二个位置传入(符号变量, 取值下限, 取值上限)的三元组,你当前的写法参数顺序错误,且提前对符号变量做了替换,不符合入参规范。- 执行
M2[0].subs(l, base)时,你直接把符号l替换成了长度为10000的numpy数组,返回结果是numpy数组而非sympy要求的Expr类型,触发了参数类型断言校验报错。 - 额外注意:矩阵运算得到的
M2[0]是复数,直接绘图需要先取模值、实部或者虚部,否则会出现维度不匹配或渲染警告。
修复方案
有两种常用修复方式,可根据需求选择:
方式1:直接使用sympy.plot绘图
不需要提前生成采样数组base,直接传入符号表达式和变量范围即可:
# 这里取r的模值绘图,要画实部可把sympy.Abs替换为sympy.re sympy.plot(sympy.Abs(M2[0]), (l, 0, 10), xlabel='l', ylabel='r的模值')
方式2:转成numpy函数后用matplotlib绘图
适合需要自定义绘图样式、后续要用到数值结果的场景:
# 将sympy表达式转换为支持numpy数组输入的向量化函数 f_r = sympy.lambdify(l, sympy.Abs(M2[0]), 'numpy') # 批量计算所有采样点的r值 r_vals = f_r(base) # 调用matplotlib绘图 plt.plot(base, r_vals) plt.xlabel('l') plt.ylabel('r的模值') plt.show()
内容的提问来源于stack exchange,提问作者Tom W
相关产品推荐
相关产品推荐

