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

如何在Python中绘制隐函数ax²+bxy+cy²+d=0的图像?

解决二元二次方程f(x,y)=0的绘图问题

你的问题出在没有生成平面网格点,而且误用了适合一维曲线的plt.plot()来处理二维函数。原来的代码里,x和y是独立的一维数组,计算f(x,y)时会被广播成二维矩阵,但plt.plot()无法直接解析这种二维数据来绘制等值线,所以才得到了混乱的一维线条。

下面是两种可行的解决方案,最推荐第一种:

方法一:使用plt.contour绘制等值线(最准确)

这是绘制隐函数f(x,y)=0最直接的方式,通过生成网格点计算函数值,然后提取f(x,y)=0的等值线:

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
    return 0.01*x**2 + 0.008*x*y - 0.013*y**2 + 0.15*x + 0.003*y + 1.0097

# 生成x和y的取值范围
x = np.arange(-10.0, 10.0, 0.1)
y = np.arange(-10.0, 10.0, 0.1)

# 将一维数组转换为二维网格矩阵,每个(X[i,j], Y[i,j])对应平面上的一个点
X, Y = np.meshgrid(x, y)

# 计算每个网格点的函数值
Z = f(X, Y)

# 绘制f(x,y)=0的等值线,levels=[0]指定只画值为0的那条线
plt.contour(X, Y, Z, levels=[0], colors='red')

# 添加坐标轴标签和标题
plt.xlabel('x')
plt.ylabel('y')
plt.title('Plot of f(x,y)=0')

# 显示图像
plt.show()

方法二:筛选接近0的点绘制(适合快速验证)

如果想通过散点图展示,可以筛选出f(x,y)绝对值小于某个阈值(比如0.01)的点,近似表示f(x,y)=0的曲线:

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
    return 0.01*x**2 + 0.008*x*y - 0.013*y**2 + 0.15*x + 0.003*y + 1.0097

# 生成网格点
x = np.arange(-10.0, 10.0, 0.05)
y = np.arange(-10.0, 10.0, 0.05)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

# 筛选出Z接近0的点
mask = np.abs(Z) < 0.01
x_points = X[mask]
y_points = Y[mask]

# 绘制散点
plt.scatter(x_points, y_points, s=1, color='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Approximate plot of f(x,y)=0')
plt.show()

关键说明:

  • np.meshgrid是核心:它把一维的x、y数组转换成二维网格,让我们能遍历平面上的每一个点计算函数值。
  • plt.contour专门用于绘制等值线,levels参数可以指定要绘制的等值线数值,这里设为[0]就精准对应f(x,y)=0的曲线。

内容的提问来源于stack exchange,提问作者Hermi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:42:34