2016-04-13 30 views
2

我想繪製一個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() 

它給我,沿第三軸線的標準差是零,這沒有任何意義。 Vector_Field 有人有一個想法我做錯了什麼?

+1

請寫一些關於你想要做的事情的文字?我之前繪製了矢量場。但是,您的代碼太長,無法確切知道哪一部分存在問題。 – kanayamalakar

+0

@kanayamalakar我已經添加了一個圖像,矢量場的背景顏色被假設爲網格中每個點的向量的標準偏差,相對於第三個變量(我正在對其進行平均) – Ohm

+0

它並不全是零。您的右上角有比左下角更淺的藍色。所以也許只是改變色彩? – sulkeh

回答

1

你的代碼幾乎完美無缺。只有一個問題:你用一個名爲plt.imshow的vanilla調用顏色圖。

顧名思義,imshow用於繪製圖像。因此,默認情況下不會期望座標輸入,只是包含像素數據的單個數組。這意味着對imshow的簡單調用將會使軸限制對應於圖像中的像素數 - 在您的情況下,您的二維數據陣列的尺寸。如果你看看imshow直接創建的圖像,你會發現極限值高達x,y=20。稍後,根據實際的底層網格設置新的限制,將您的繪圖截斷至前兩個數據點。

解決的辦法是明確地告訴plt.imshow()您希望您的陰謀駐留在座標空間:

plt.imshow(vecstd, extent=[B1.min(),B1.max(),B2.min(),B2.max()], origin='lower') 

第一個關鍵字參數extentxy限制到其中的數據應該繪製。請注意重要的第二個關鍵字參數origin。默認情況下,imshow繪製事物「顛倒」,以而不是顛倒繪製實際圖像。當您使用imshow來繪製用笛卡爾座標定義的東西時,必須告訴它,座標系的原點不應該是圖的左上角的上部(如圖像),而應該是下部的左邊的角落(和常規地塊一樣)。