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

如何用Python基于二维矩阵绘制二元函数f(x₁,x₂)的3D图?

二元函数3D绘图的矩阵索引问题解决

你的代码报错是因为列表推导式里用了x1 in x1_axis and x2 in x2_axis——numpy数组无法直接通过and做布尔判断,会触发歧义错误;而且这种写法也没法生成二维的函数值矩阵,因为你需要的是x1和x2的所有组合对应的fun元素。

下面是两种可行的实现方法:

方法一:直接利用已有矩阵(推荐)

因为fun本身就是对应x1(行)、x2(列)的二维函数值矩阵,只需生成匹配的网格坐标即可绘图:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x1_axis = np.arange(0, 10, 0.1)
x2_axis = np.arange(0, 10, 0.1)

# 生成网格矩阵,indexing='ij'确保行对应x1,列对应x2,和你的fun矩阵索引逻辑匹配
X1, X2 = np.meshgrid(x1_axis, x2_axis, indexing='ij')

# 直接用fun矩阵绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X1, X2, fun)
plt.show()

indexing='ij'是关键参数,它保证生成的X1每行对应一个x1值,X2每列对应一个x2值,完全匹配你说的"x1对应矩阵行,x2对应矩阵列"的规则。

方法二:通过索引重新生成函数值矩阵(仅需手动生成时用)

如果必须手动遍历生成f矩阵,注意浮点数不能直接作为矩阵索引,要先转换成对应整数位置,同时用嵌套列表推导式实现双重循环:

import numpy as np

x1_axis = np.arange(0, 10, 0.1)
x2_axis = np.arange(0, 10, 0.1)

# 把x1、x2的浮点值转成矩阵的整数索引(步长0.1,所以索引=值/0.1取整)
f = [[fun[int(x1 / 0.1), int(x2 / 0.1)] for x2 in x2_axis] for x1 in x1_axis]
f = np.array(f)

# 后续绘图代码和方法一一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:55