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

Python绘制3D曲面图:基于je与be值笛卡尔乘积的实现问题

解答

1. 可用的笛卡尔乘积内置工具

  • Python标准库itertools模块下的product函数:可以直接生成多个可迭代对象的笛卡尔乘积,适合循环遍历所有参数组合
  • Numpy提供的np.meshgrid函数:专门生成网格坐标矩阵,输出结果直接适配Matplotlib 3D曲面的输入格式,绘图时更方便

2. 代码调整实现3D曲面绘制

你现有代码的问题是jevals和bevals同步赋值,仅覆盖了两个参数线性相关的对角线组合,因此只能输出单条曲线。调整逻辑如下:

  1. 独立定义je和be的取值范围,互不绑定
  2. 生成两个参数的网格矩阵,遍历所有两两组合计算对应的re/rp/rs值
  3. 把输出结果存储为二维矩阵,适配曲面绘图接口

修改后的完整可运行代码如下:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import fsolve

# 初始化固定参数
jvals = [[0.0, 0.0, 0.0],
         [0.0, 0.0, 0.0],
         [0.0, 0.0, 0.0]]
bvals = [0.1, 0.0, 0.0]

def Neuro(xyz, bvals, jvals):
    re = xyz[0]
    rp = xyz[1]
    rs = xyz[2]

    b1 = bvals[0]
    b2 = bvals[1]
    b3 = bvals[2]

    Jee = jvals[0][0]
    Jep = jvals[0][1]
    Jes = jvals[0][2]

    Jpe = jvals[1][0]
    Jpp = jvals[1][1]
    Jps = jvals[1][2]

    Jse = jvals[2][0]
    Jsp = jvals[2][1]
    Jss = jvals[2][2]

    u_e = (((Jee)*re)-((Jep)*rp)-((Jes)*rs)+b1)
    u_p = (((Jpe)*re)-((Jpp)*rp)-((Jps)*rs)+b2)
    u_s =  (Jse)*re + Jsp+ Jss + b3

    f_e = -re + (u_e)
    f_p = -rp + (u_p)
    f_s = -rs + (u_s)

    return f_e, f_p, f_s

# 定义参数取值范围,可根据需求调整步长和上下限
num_steps = 50 # 步长过大的话计算和渲染速度会变慢
je_range = np.linspace(0, 0.99, num_steps)
be_range = np.linspace(0, 0.99, num_steps)

# 生成网格矩阵,适配曲面绘图
JE, BE = np.meshgrid(je_range, be_range)
RE = np.zeros_like(JE)
RP = np.zeros_like(JE)
RS = np.zeros_like(JE)

# 遍历所有笛卡尔乘积组合计算结果
for i in range(num_steps):
    for j in range(num_steps):
        current_je = JE[i,j]
        current_be = BE[i,j]
        jvals[0][0] = current_je
        bvals[0] = current_be
        xyz0 = np.array([1.0,1,1])
        xyz = fsolve(Neuro, xyz0, args=(bvals, jvals))
        RE[i,j] = xyz[0]
        RP[i,j] = xyz[1]
        RS[i,j] = xyz[2]

# 绘制3D曲面
fig = plt.figure(figsize=(10,7))
ax = fig.add_subplot(projection='3d')
ax.set_xlabel("Jee Values")
ax.set_ylabel("Be Values")
ax.set_zlabel("Root Values")
ax.set_title("3D Surface Plot of re")

# 绘制re的曲面,可替换为RP/RS画另外两个参数的曲面
surf = ax.plot_surface(JE, BE, RE, cmap='Reds', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5) # 加颜色条对应值的大小

plt.show()

如果需要绘制rp或rs的曲面,只需将plot_surface中的RE替换为RP或RS,调整对应的标题和colormap即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:06:01