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

如何用Python绘制给定参数的多元函数Contour Plot(等高线图)

绘制多元残差平方和函数的等高线图

你的目标函数是$\frac{1}{2}|AX - b|_2^2$,其中$X$是二维向量(对应$x_1, x_2$两个变量),$A \in \mathbb{R}^{100 \times 2}$,$b \in \mathbb{R}^{100 \times 1}$。由于这是基于矩阵运算的函数,不能像简单二元函数那样逐元素计算,需要通过批量向量运算生成网格点对应的函数值,具体实现步骤如下:

实现代码

import numpy as np
import matplotlib.pyplot as plt

# 1. 模拟你的A和b数据(替换为你实际的A、b矩阵)
np.random.seed(42)  # 固定随机种子,保证结果可复现
A = np.random.randn(100, 2)
b = np.random.randn(100, 1)

# 2. 生成x1和x2的网格(可根据实际需求调整取值范围)
x1 = np.linspace(-5, 5, 400)
x2 = np.linspace(-5, 5, 400)
XX, YY = np.meshgrid(x1, x2)

# 3. 批量计算所有网格点的函数值
# 将网格转换为(2, N)的矩阵,每一列对应一个X向量
X_flat = np.vstack([XX.ravel(), YY.ravel()])
# 计算AX - b,得到每个X对应的残差矩阵
AX_minus_b = A @ X_flat - b
# 计算每个X对应的函数值:1/2 * 残差的L2范数平方
Z_flat = 0.5 * np.sum(AX_minus_b ** 2, axis=0)
# 将扁平化的Z值还原为网格形状
Z = Z_flat.reshape(XX.shape)

# 4. 绘制等高线图
fig, ax = plt.subplots(figsize=(8, 6))
contour = ax.contour(XX, YY, Z, levels=20)
# 添加等高线数值标签
ax.clabel(contour, inline=True, fontsize=8)
# 设置坐标轴标签和标题
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_title('等高线图: $\\frac{1}{2}\\|AX - b\\|_2^2$')

plt.show()

关键步骤说明

  • 网格数据转换:np.vstack([XX.ravel(), YY.ravel()])把二维网格的所有点转换成列向量形式,利用矩阵乘法批量计算所有点的函数值,避免循环遍历,提升效率。
  • 函数值计算:通过矩阵乘法A @ X_flat得到所有X对应的AX结果,减去b后逐平方再求和,最后乘以1/2,得到每个网格点的函数值。
  • 形状还原:把扁平化的Z_flat还原成和XX、YY一致的网格形状,才能被contour函数识别绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:25:19