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

绘制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:16