3つの変数を持つODEモデルのベクトルフィールドをプロットしようとしています。私は、第3軸に沿ってベクトルを平均し、その値の標準偏差の情報と共にベクトルフィールドを提示したいと思います。 ODEシステムは、次のとおりです。私は現在使用しています3つの変数の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
機能は次のとおりです。これは、第3の軸に沿って標準偏差が意味を成さない、ゼロであることを私に与え
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