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

Python中绘制(t,x,u=u(t,x))类型曲面的问题求助

解决Python中3D曲面绘制的格式问题

问题背景

作为数学研究者,日常很少编程,想在Python中绘制$(t,x,u=u(t,x))$类型的3D曲面。t、x是用np.zeros()初始化的向量,u是同维度的矩阵,但使用plot_surface函数未能得到预期效果,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import math

eps=0.1
m=2000
n=100
dt=1.0/m
dx=1.0/(n*n)
time=np.zeros(m+1)
for i in range(m+1):
  time[i]=i*dt
space=np.zeros(2*n+1)
for j in range(2*n+1):
  space[j]=(j-n)*dx*n
sol=np.zeros((m+1,2*n+1))
# 这里建议添加初始条件,比如设置最后一行(t=1时)的解
# sol[m, :] = np.exp(-(space)**2/(0.1**2))  # 示例高斯初始条件
for i in range(m):
  index_i=m-1-i
  for j in range(1,2*n):
    sol[index_i, j] =sol[index_i+1, j]-0.5*dt*math.log(eps+abs(sol[index_i+1, j+1]+sol[index_i+1, j-1]-2*sol[index_i+1, j])/dx)
t_mesh, x_mesh = np.meshgrid(time, space)
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
surf = ax.plot_surface(t_mesh, x_mesh, sol, cmap=cm.coolwarm,
                           linewidth=0, antialiased=False)
plt.show()

核心问题与解决方法

你遇到的主要问题是网格矩阵与解矩阵的维度不匹配,以及初始条件缺失导致解全为0的问题,具体修正方式如下:

1. 维度匹配修正

np.meshgrid(time, space)默认生成的t_mesh和x_mesh形状是(2n+1, m+1),而你的sol矩阵形状是(m+1, 2n+1)(行对应时间,列对应空间),二者维度不兼容,导致plot_surface无法正确映射。有两种修正方式:

  • 方式一:转置解矩阵
    将plot_surface中的sol改为sol.T,让其形状与网格矩阵一致:

    surf = ax.plot_surface(t_mesh, x_mesh, sol.T, cmap=cm.coolwarm, linewidth=0, antialiased=False)
    
  • 方式二:指定meshgrid的索引模式
    使用indexing='ij'参数生成与sol维度匹配的网格,这样无需转置:

    t_mesh, x_mesh = np.meshgrid(time, space, indexing='ij')
    surf = ax.plot_surface(t_mesh, x_mesh, sol, cmap=cm.coolwarm, linewidth=0, antialiased=False)
    

2. 添加初始条件

你的sol初始全为0,迭代计算时从最后一行(对应t=1的时刻)往前推,但最后一行没有设置初始值,导致整个解矩阵始终为0,绘制出来是平面。需要给sol[m, :](最后一行)设置初始条件,比如:

# 示例:高斯分布初始条件
sol[m, :] = np.exp(-(space)**2/(0.1**2))

或者根据你的偏微分方程需求设置对应的初始边界值。

3. 关于plt.plot(time, space, sol)

plt.plot()是用于绘制2D曲线的函数,无法直接绘制3D曲面。要绘制3D曲面必须使用ax.plot_surface()(基于3D坐标轴),上面的修正就能让它正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:57:42