绘制f_invx时出现ValueError:x与y维度不匹配,求解决方法
解决Matplotlib绘图时x与y维度不匹配的ValueError问题
问题根源
你的f_invx是Sympy生成的符号表达式,并非可直接对numpy数组进行计算的函数。直接将其传入plt.plot时,Matplotlib无法将符号表达式批量应用于长度为100的x数组,只会生成单个符号结果,导致y的维度为(1,),与x的(100,)维度不匹配,触发错误。
修复方案
使用Sympy的lambdify方法,将符号表达式转换为支持numpy数组运算的可调用函数,这样就能生成与x长度一致的y值数组。
修正后的完整代码
import sympy from sympy import * import matplotlib.pyplot as plt import numpy as np def calcola_funzione_inversa(): x, y = sympy.symbols("x y") # 定义符号变量x、y f = (2*x - 3)/5 # 原代码中Function('f')(x)无实际作用,可删除 func = sympy.Eq(y, f) # 构建方程y = f(x) f_inv = sympy.solve(func, x) # 解方程得到x关于y的表达式 f_invx = f_inv[0].subs(y, x) # 将y替换为x,得到逆函数的符号表达式 pprint(f_invx) return f_invx def disegna_funzione_inversa(f_invx): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) x = np.linspace(-4, 4, 100) # 调整坐标轴样式 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.spines['bottom'].set_position('zero') ax.spines['left'].set_position('zero') # 关键:将符号表达式转为numpy兼容的函数 f_inv_func = sympy.lambdify(sympy.symbols('x'), f_invx, 'numpy') y_values = f_inv_func(x) plt.plot(x, y_values, '-r') plt.show() # 执行调用 f_inversa_in_x = calcola_funzione_inversa() disegna_funzione_inversa(f_inversa_in_x)
核心修改说明
sympy.lambdify(sympy.symbols('x'), f_invx, 'numpy'):将符号表达式f_invx转换为以x为参数、使用numpy运算的函数。- 调用转换后的函数
f_inv_func(x),生成与x长度完全一致的y值数组,满足Matplotlib绘图的维度要求。
内容的提问来源于stack exchange,提问作者Davidebe
相关产品推荐
相关产品推荐

