Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用matplotlib/Mayavi创建由2个空间坐标定义的曲面的三维动画?_Python_Animation_Matplotlib_Mayavi - Fatal编程技术网

Python 如何使用matplotlib/Mayavi创建由2个空间坐标定义的曲面的三维动画?

Python 如何使用matplotlib/Mayavi创建由2个空间坐标定义的曲面的三维动画?,python,animation,matplotlib,mayavi,Python,Animation,Matplotlib,Mayavi,这是一个一维扩散方程的数值代码,用于离散有限差分格式。速度是为每个时间步获得的,我想制作这个解决方案的动画,以便可视化速度相对于扩散下的时间的演化。任何帮助都将不胜感激。谢谢大家! import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D ##library for 3d projection plots from matplotlib import cm ##cm = "

这是一个一维扩散方程的数值代码,用于离散有限差分格式。速度是为每个时间步获得的,我想制作这个解决方案的动画,以便可视化速度相对于扩散下的时间的演化。任何帮助都将不胜感激。谢谢大家!

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D ##library for 3d projection plots
from matplotlib import cm ##cm = "colormap" for changing the 3d plot color palette

###variable declarations
nx = 31
ny = 31
nt = 17
nu=.05
dx = 2.0/(nx-1)
dy = 2.0/(ny-1)
sigma = .25
dt = sigma*dx*dy/nu

x = np.linspace(0,2,nx)
y = np.linspace(0,2,ny)

u = np.ones((ny,nx)) ##create a 1xn vector of 1's
un = np.ones((ny,nx)) ##

###Assign initial conditions

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2 ##set hat function I.C. : u(.5<=x<=1 && .5<=y<=1 ) is 2

fig = plt.figure()
ax = fig.gca(projection='3d')
X,Y = np.meshgrid(x,y)
surf = ax.plot_surface(X,Y,u[:], rstride=1, cstride=1, cmap=cm.coolwarm,
    linewidth=0, antialiased=False)
plt.show()
ax.set_xlim(0,2)
ax.set_ylim(0,2)
ax.set_zlim(1,2.5)
#ax.zaxis.set_major_locator(LinearLocator(5))

###Run through nt timesteps

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2

for n in range(nt+1): 
    un[:] = u[:]
    u[1:-1,1:-1]=un[1:-1,1:-1]+nu*dt/dx**2*(un[2:,1:-1]-2*un[1:-1,1:-1]+un[0:-2,1:-1])+nu*dt/dy**2*   (un[1:-1,2:]-2*un[1:-1,1:-1]+un[1:-1,0:-2])    

    u[0,:]=1
    u[-1,:]=1

    u[:,0]=1
    u[:,-1]=1

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,u[:], rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=True)
ax.set_zlim(1,2.5)
plt.show()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从mpl_toolkits.mplot3d导入用于三维投影图的Axes3D###库
从matplotlib导入cm##cm=“colormap”以更改3d打印调色板
###变量声明
nx=31
ny=31
nt=17
nu=.05
dx=2.0/(nx-1)
dy=2.0/(ny-1)
西格玛=.25
dt=σ*dx*dy/nu
x=np.linspace(0,2,nx)
y=np.linspace(0,2,ny)
u=np.ones((ny,nx))35;#创建1的1xn向量
un=np.ones((纽约州,纽约州))##
###指定初始条件

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2###set hat函数I.C.:u(.5这里有一种使用Mayavi的方法-阅读注释以获得一些解释:

import numpy as np
import time

# import mayavi's mlab API for scripting
from mayavi import mlab

###variable declarations
nx = 31
ny = 31
nt = 17
nu=.05
dx = 2.0/(nx-1)
dy = 2.0/(ny-1)
sigma = .25
dt = sigma*dx*dy/nu

x = np.linspace(0,2,nx)
y = np.linspace(0,2,ny)

u = np.ones((ny,nx)) ##create a 1xn vector of 1's
un = np.ones((ny,nx)) ##

###Assign initial conditions

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2 ##set hat function I.C. : u(.5<=x<=1 && .5<=y<=1 ) is 2
X,Y = np.meshgrid(x,y)

###Run through nt timesteps

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2

# create a surface from grid-shaped data
surf = mlab.mesh(X,Y,u[:])

t = time.time()
max_framerate = 10
for n in range(nt+1): 
    un[:] = u[:]
    u[1:-1,1:-1]=un[1:-1,1:-1]+nu*dt/dx**2*(un[2:,1:-1]-2*un[1:-1,1:-1]+un[0:-2,1:-1])+nu*dt/dy**2*   (un[1:-1,2:]-2*un[1:-1,1:-1]+un[1:-1,0:-2])    

    u[0,:]=1
    u[-1,:]=1

    u[:,0]=1
    u[:,-1]=1

    # the mlab_source attribute of surf represents the data we're plotting.
    # it has x, y and z attributes as you'd expect. here we only need to
    # update the z attribute
    surf.mlab_source.z = u

    # there's no need to call any equivalent to matplotlib's draw() or show() 
    # functions - another draw event gets triggered automatically whenever
    # surf's data source gets modified

    # put a pause in here to control the maximum framerate
    while time.time() - t < (1./max_framerate):
        pass
    t = time.time()
将numpy导入为np
导入时间
#导入mayavi的mlab API以编写脚本
来自mayavi import mlab
###变量声明
nx=31
ny=31
nt=17
nu=.05
dx=2.0/(nx-1)
dy=2.0/(ny-1)
西格玛=.25
dt=σ*dx*dy/nu
x=np.linspace(0,2,nx)
y=np.linspace(0,2,ny)
u=np.ones((ny,nx))35;#创建1的1xn向量
un=np.ones((纽约州,纽约州))##
###指定初始条件

u[.5/dy:1/dy+1,.5/dx:1/dx+1]=2###设置帽子功能I.C.:u(.5谢谢阿里的回答。我现在可以想象美丽的动画了!)