幫實驗室做流場的事情,因此臨時在做畢設的同時穿插着看了幾篇流場的論文。感慨就是英文太差、數學基礎不夠,C++不熟悉。總之,自己距離目標很遙遠。今後努力的目標是,回顧高等代數、微分幾何等知識。學習C++、OpenGl,MFC,STL。總之,很多要學習跟看的東西。需要加油的。
然後記錄一下看了幾篇論文總結的臨界點的檢查與分類知識。
定義1 (臨界點,Critical Points) :如果流場中某點P0 的三個速度分量均爲零,而且存在一個包圍P0 的鄰域,該鄰域內除P0 外任意點處的速度矢量均不爲零,則P0 爲該流場中的一個臨界點,記爲CP0 。
首先是檢測。現有的臨界點檢測方法包括MC 方法(Marching Cube ,MC)和基於幾何代數的方法 。MC 方法是構造三維標量數據場中等值面的經典算法,把流場數據網格頂點的三個速度分量u (v ,w) 都分別當作標量來看待,就可以直接應用MC 方法得到v = 0 的點,但MC 方法只適合於六面體單元構成的規則而密集的數據場,不適用於稀疏的、不規則的數據場。Stephen Mann 等通過幾何代數(Geometric Algebra) 的方法求出網格單元的poincare 指數ind ( c) ,如果ind ( c) ≠0 ,則該網格單元(cell) 必然存在臨界點,這種
方法雖然可以準確地檢測出臨界點,但是算法難以理解而且計算量大。本文將Sperner 引理引入到臨界點檢測中,給出了臨界點檢測的新算法。
根據定義可知,如果網格上的點是臨界點,則可以很容易的判定,因爲它的速度矢量均爲0,下面講解如果臨界點不在網格邊緣上而是在區域內如何判定。
簡單理解就是看右圖,向量的方向落在四個象限中分別給點標記成1、2、3、4.如果在一個區域內,如左圖,即邊界點包含1、2、3、4.則稱爲是Sperner 完全標號的,這樣的區域內部必然包含至少一個臨界點。
然後是將臨界點分類。臨界點分類是根據它的Jacobian矩陣的特徵值決定的。首先來解釋Jacobian矩陣。Jacobian矩陣是一個向量在另一個向量上的導數:
式子中的u,v是向量在x、y方向上的兩個分量。這兩個分量分別是用函數表示,分別是關於x、y的函數。因此,矩陣內部的值分別是u、v關於x、y的偏導數。
圖中的R1、R2是Jacobian矩陣的特徵值的實部,I1、I2是虛部。
如何計算特徵值呢?
矩陣的特徵值就是它的特徵多項式的根。