我希望知道如何在 Python 中绘制类型 $(t,x,u = u (t,x)) $的表面。更准确地说,$t,x $是向量,$u $是初始化为 np.zeros () 的矩阵,而函数图并没有像我想要的那样绘制表面。有人可以帮忙吗?代码如下:
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))
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": ""})
surf = ax.plot_suce(t_mesh, x_mesh, sol, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
应该使用哪种格式使 plt.plot(时间,空间,溶胶)工作?
PS:我做数学研究,很少编码。如果我的陈述不清楚,对不起。
您可以像这样绘制该函数:
import numpy as np
import math
import matplotlib.pyplot as plt
from matplotlib import cm
# ... your original code here ...
def plot_suce_from_arrays(X, Y, Z, rotate=0):
assert Y.shape + X.shape == Z.shape, "X and Y shapes don't match Z"
X_mesh, Y_mesh = np.meshgrid(X, Y)
fig, ax = plt.subplots(subplot_kw={"projection": ""})
ax.view_init(elev=30, azim=-60 + rotate)
surf = ax.plot_suce(X_mesh, Y_mesh, Z, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
plot_suce_from_arrays(space, time, sol, rotate=90)
结果:
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(35条)