我想繪製一個ODE模型的矢量場和三個變量。我想平均沿第三軸的矢量,並將矢量場與其值的標準偏差信息一起呈現。 的ODE系統:三個變量的ODE的Python矢量場
a = 1.
b1 = 0.1
b2 = 0.11
c1 = 1.5
c2 = 1.6
d = 0.75
def dudt(a,b1,b2,u,v1,v2):
return a*u - b1*u*v1 - b2*u*v2
def dv1dt(d,c1,b1,u,v1):
return -c1*v1 + d*b1*u*v1
def dv2dt(d,c2,b2,u,v2):
return -c2*v2 + d*b2*u*v2
,我目前使用的功能是:
import numpy as np
import matplotlib.pyplot as plt
def plotVF(mS=None, density= 20,color='k'):
mB1 = np.linspace(0,1.1,int(density))
mB2 = np.linspace(0,1.1,int(density))
if mS==None:
mS = np.linspace(0,1.1,int(density))
B1,B2,S = np.meshgrid(mB1,mB2,mS)
average=True
else:
B1,B2 = np.meshgrid(mB1,mB2)
S = mS
average=False
DB1 = dv1dt(d,c1,b1,S,B1)
DB2 = dv2dt(d,c2,b2,S,B2)
DS = dudt(a,b1,b2,S,B1,B2)
if average:
print "Averaging"
DB1std = np.std(DB1,axis=2)
DB2std = np.std(DB2,axis=2)
DB1 = np.mean(DB1,axis=2)
DB2 = np.mean(DB2,axis=2)
DS = np.mean(DS,axis=2)
vecstd = np.hypot(DB1std,DB2std)
plt.imshow(vecstd)
plt.colorbar()
B1,B2 = np.meshgrid(mB1,mB2)
M = (np.hypot(DB1, DB2, DS))
M[ M == 0] = 1.
DB1=DB1/M
DB2=DB2/M
DS=DS/M
print B1.shape,B2.shape,DB1.shape,DB2.shape
plt.quiver(B1, B2, DB1, DB2, pivot='mid', color=color)
plt.xlim(0,1.1), plt.ylim(0,1.1)
plt.grid('on')
plt.show()
它給我,沿第三軸線的標準差是零,這沒有任何意義。 有人有一個想法我做錯了什麼?
請寫一些關於你想要做的事情的文字?我之前繪製了矢量場。但是,您的代碼太長,無法確切知道哪一部分存在問題。 – kanayamalakar
@kanayamalakar我已經添加了一個圖像,矢量場的背景顏色被假設爲網格中每個點的向量的標準偏差,相對於第三個變量(我正在對其進行平均) – Ohm
它並不全是零。您的右上角有比左下角更淺的藍色。所以也許只是改變色彩? – sulkeh