我從來沒有嘗試過在python中做動畫之前提前道歉,這個問題看起來很愚蠢。我在論壇上四處張望,但努力尋找任何人進行模擬,就像我隨着時間的推移有一個我能夠理解的答案。隨着時間的推移一維動畫使用matplotlib
我有一個變量(maxfs),它是時間(t)的函數。我已經計算了h並且創建了一些一維地塊,並且我可以繪製不同的時間步長,因爲maxfs會隨着時間而演變,但只能通過手動更改t來進行。然而,我將在演示文稿中介紹一些數據,並且爲了演示目的,我想說明解決方案隨着時間的推移如何演變。我最初的想法是運行for循環for time(t)在所有點上計算h(這是我在MATLAB中要做的),然而查看Matplotlib文檔中的示例,我不確定是否以這種方式執行動畫是可能的。我在下面列出了我的代碼,如果任何人對我的最初想法是否是一種可能的方式,或者是否有其他可行的方法會有什麼建議。我對python相當陌生,因此如果可能的話,我正在尋找一個相當簡單的解決方案,因爲我時間不夠。提前致謝。
__author__="ahe"
__date__ ="$23-Jul-2014$"
import numpy as np
import matplotlib.pyplot as plt
import math
import sys
from math import sqrt
import decimal
from sklearn.metrics import mean_square_error
from matplotlib import gridspec
t=1
l=1
d=0.088
g=9.81
l2=l**2.0
# fs1=FS(0,0) fs2=FS(xm,0)
fs1=0.04
fs2=0.02
xm=-0.5
omega=((2*g*d)/l2)**0.5
B=g*((fs1-fs2)/(omega*xm))
C=fs1+(g*(((fs1-fs2)**2.0)/(4*omega*(xm**2.0))))
nx, ny = (101,101)
x5 = np.linspace(-2,2,nx)
y5 = np.linspace(-2,2,ny)
xv,yv = np.meshgrid(x5,y5)
x = np.arange(-2,2.04,0.04)
y = np.arange(-2,2.04,0.04)
nx2,ny2 = (111,111)
x10 = np.linspace(-2.2,2.24,nx2)
y10 = np.linspace(-2.2,2.24,ny2)
xv1,yv1 = np.meshgrid(x10,y10)
x1=np.arange(-2.2,2.22,0.04,dtype=float)
y1=np.arange(-2.2,2.22,0.04,dtype=float)
t59=np.arange (1,12321,1,dtype=float)
print len(x1),len(y1)
# Building the parabolic basin (Bottom)
zf=np.arange(len(t59),dtype=float)
zf= (0.088*((x1[None,:]**2)+(y1[:,None]**2)))-0.2
zf5=np.reshape(zf,(111,111))
zf1 = zf5[55,:]
zf2=zf1[5:106]
# End of building parabolic basin
h=np.zeros(len(x))
eq1=-((((B**2.0)*omega)/(4*g))*math.cos(2*omega*t))+C
term=(B*omega)/g
print 'eq1=',eq1,'term=',term
for i in range(len(x)):
h[i] = eq1 - ((term*math.cos(omega*t)*x[i]))
maxfs=np.maximum([zf2],[h])
maxfs=maxfs[0]
# PLOTTING
plt.figure(1)
plt.plot(x,maxfs,'r',lw=1.5)
plt.plot(x1,zf1,'k',lw=1.5)
plt.legend(['Analytical','Bathymetry'], loc='upper center',fancybox=True,prop={'size':12})
plt.ylabel('Free Surface [m]',fontsize=12)
plt.xlabel('Distance [m]',fontsize=12)
plt.axis([-2.5,2.5,-0.2,0.25])
plt.title ('Initial conditions for planar surface',fontsize=15)
#plt.text(-0.43,0.30,RMSE,fontsize=12,bbox=props)#,bbox=dict(facecolor='none',edgecolor='black'))
plt.show()
有編輯時間步長所以它是小於1的方式嗎? – user3771983 2014-08-27 17:36:22
是的。將參數幀更改爲包含您想要的值的迭代。像frames = np.arange(1,10,0.1) – Molly 2014-08-27 17:39:37