關於運動的思考

2021-10-23 11:35:30 字數 4625 閱讀 1963

``在很多不同的科學領域裡面,對於運動或者變化的描述和建模,都具有非常根本性的地位——我個人認為,在計算機視覺裡面,這也是非常重要的。

什麼是「流」?

在我接觸過的各種數學體系中,對於運動和變化的描述,我感覺最為適合的有兩種不同的perspective:流和變換群。前者以被作用的物件為中心,運動就是這個東西隨時間變化的函式;後者以變換本身為中心,研究的是各種變換所組成的空間的代數和拓撲結構。我想,相對來說,前者對於多數人而言似乎更為直觀。在這篇文章裡,就以「流」(flow)的角度展開了。其實,這兩種思路有著根本的聯絡——這種聯絡體現在李群論的乙個基礎概念——李群作用(lie group action),以及由它所延伸出來的豐富的理論。

流(flow)是什麼呢?很通俗的說,表示了一種運動規則。給定乙個點的初始位置 x,讓它運動一段時間 t,那麼之後到達另乙個位置 y,那麼 y 就是初始位置 x 和運動時間 t 的函式:

y = s( t, x )

這個函式 s,如果符合一些合理的性質,就叫做乙個流(flow)。學過微分幾何的同學可能會覺得這個定義與數學中的嚴格定義有點差距——確實如此。在微分幾何中,流的概念需要建立在流形和單引數子群或者積分曲線的基礎上,在一篇blog文章中很難按照這樣的方式闡述。只好在一定程度上放棄嚴密性,從直觀出發,希望能傳遞出最基本的思想。

我們想想, 乙個合理的運動函式應該具有什麼性質呢?我想,最起碼應該有三點:

1. 運動是連續的。物理學告訴我們,現實中沒有所謂的「瞬間轉移」。在上面的式子中,如果固定 x,那麼 y( t ) = s(t, x) 就是這個初始位置在 x 的點的運動過程。在數學上,沒有「瞬間轉移」就是說對於任何 x,它的運動過程 y( t ) 都是連續的。

2. 變形是連續的。現在假設我們不考慮乙個點,而是考慮乙個物體。那麼,本來是鄰居的點,後來還是鄰居——嚴格一點,在拓撲學上就是說,x 和它的乙個鄰域各自都運動了時間 t,那麼運動後,這個鄰域關係還是保持的——這等價於不改變這個物體的拓撲結構(比如,不把它撕開,但是連續變形是肯定允許的)。當然,在現實中物體被撕開不是沒有可能,但是這會導致拓撲結構的改變,這就不是一般的數學工具所用表達的了。

3. 時間上的一致性。簡單的說,如果我先讓它運動時間 t1,在運動時間 t2,那麼和讓它運動時間 (t1 + t2)是一樣的。用上面這個表示式寫,就是:s( t2,  s( t1, x) ) = s(t2 + t1, x)。這個性質在物理上似乎理所當然,但是在數學上,你隨便給乙個二元函式s,可就未必符合這個屬性了。這個規定保證了,我們定義出來的 s 最起碼在物理上不會出現錯亂。但是,它的意義不止於此,後面我們會看到,它在代數上,表示了乙個群同構對映(group homomorphism)——這種對映在李代數中有著核心作用。

總結起來,s(x, t) 是對於 x 和 t 的連續函式(實際上,在一般的定義中更嚴格一些,通常要求 s 是光滑函式,就是無限階可微的函式。光滑性其實不是很強的條件,我們學過的全部初等函式都是光滑的)。還有就是關於時間的一致性條件。這裡特別強調一點,我們允許 t 是可正可負的:時間取負數,就是讓這個點沿著原路徑倒回去走——怎麼來的,就怎麼回去。這裡面隱含了乙個條件:在某一時刻分開的兩點是永遠走不到一起成為一點的——否則倒回去就不知道往哪走了——這拓撲上,拓撲結構不發生改變就保證了這一點:物體既不能撕開,也不能粘在一起。

流——變換群和運動曲線的統一

這個s(t, x)呢,可以從兩個方面去看,就得到兩種不同的理解。首先,固定 t,

t_t ( x ) = s(t, x)

它就變成了乙個關於x的變換函式:把乙個點從乙個位置變換到時間 t 後的另外乙個位置。那麼 t_t 就是乙個變換。然後,不同的時間 t,對應著乙個不同的變換。而且基於時間的一致性,先做 t_(t1) 變換 (走時間 t1),再做 t_(t2) 變換(再走時間 t2),相當於另乙個變換 t_(t2 + t1)。數學上就是:t_(t2) * t_(t1) = t_(t2 + t1)。如果你對群的概念有基本的了解,這裡就可以看出來,從全部的不同時間的t_t 構成了乙個變換群,從 t 到 t_t 的對映,就是從實數r上的加法群到這個變換群的同構對映。因為 t_t 是由乙個引數 t 控制的,有個專門的名詞,叫做「單引數群」(one-parameter group)。由於加法群的可交換性,這個單引數變換群也是可交換的——這個可交換性的物理意義很明顯: 先走t1,再走t2;還是先走t2,再走t1,是一樣的。

因此,我們得到了第一種理解:流,就是連續作用在乙個物體上的可交換單引數變換群。(這裡所謂「物體」,在數學上有專門的名字「流形」,對於這點我不想展開太多了。)其實,這才是關於流的比較正規的定義。

從另外乙個角度上看,固定 x,我們追蹤這乙個點的運動,

y_x ( t ) = s(t, x)

那麼 y_x 就是初始位置(t=0時的位置)為 x 的點的運動過程——也叫做運動曲線(curve) 或者運動軌跡(orbit)。每個點都有自己的運動曲線,所謂流,就是這所有的這些運動曲線的共同體,或者說,流就是由這些運動曲線刻畫的——這和我們一些直觀的想法是一樣的——我們在畫畫時喜歡在河上畫幾條曲線來表示流動。

這個函式s(t, x),把變換群和運動曲線同一起來了——它們就是乙個東西的兩個不同側面。到這裡,我們向我們的目標邁出了第一步——最終,我們是要把變換群和向量場聯絡在一起——這就是李群和李代數的核心所在。

流與向量場

繼續我們的故事。現在,我們有了y_x( t ),那麼對它求導,我們就可以得到這個點在各個時刻的速度。整個流行就是所有這些曲線的集合,這樣,在流形上的每個點,我們都能找到經過它的一條曲線,從而標出這點的速度。(這裡強調一點,對於乙個給定的流,經過某點的曲線是唯一的,你可以想想為什麼?)於是,我們給每個點都賦予了乙個速度,這就是「速度場」(velocity field)。每個速度就是曲線上的乙個切向量,所以更一般的說,我們把它叫做「向量場」。這裡,我們看到,任意乙個流都可以通過運動曲線的速度來建立乙個對應的向量場。而且可以證明,這個向量場是連續的。

那麼反過來呢?我們給定乙個連續的向量場,能不能找到乙個流和它對應呢?這裡面有三個方面

1. (存在性),能不能找到乙個流,它的速度場等於給定的向量場。

2. (唯一性),如果存在,這個流是不是唯一的。

3. (連續性),這個流 s(t, x) 是不是關於 x 和 t 的連續函式(或者光滑函式)。

這個問題是乙個很深刻的問題,它的回答直接聯絡到一般意義的常微分方程的解的存在性,唯一性,和連續性。答案是,這在區域性上是成立的。就是任意乙個定義於流形上的向量場,對於流形上的任何一點,總能找到包含它的乙個「區域性流形」(開子流形),以及定義在這個區域性上的流,使得流的速度場和給定的向量場在這個區域性相等。簡潔一點說,符合條件的流在處處「區域性存在」。而且,它們在某種意義上是唯一的,就是兩個符合條件的「區域性流」,它們在定義域重合的部分是相等的。如果給定向量場是連續(光滑)的話,那麼匯出的流也是連續(光滑)的。

我不打算給出嚴格的證明,這可以在很多微分流形的相關資料中找到。這裡,我希望用乙個通俗的過程來介紹,怎麼構造出這個流。我們把向量場看成是在乙個大地圖上標了很多很密的指示牌——告訴你到了這點後應該用多大的速度往什麼方向開車。於是,你從某個地方出發,你先看看附近的指示牌,把車子調整到指示的速度和方向,往前開一小段後看到下乙個指示,繼續調整速度和方向,一直這樣下去,你開車的過程就形成了乙個運動軌跡,而且在各點上的速度,都和該點的指示一致。設想乙個極限過程,指示牌無限密集,開車的人每個時刻都在連續地調節速度,那麼就得到了乙個和向量場一致的運動曲線。我們上面說過,流是所有這些運動曲線的集體,於是我們從不同的地方開始開車,最後就能把整個流構造出來了。

有些時候,向量場的定義域可能不是很完整,那麼車子不能無限開下去(不然可能開出去了),這時候只能給出「區域性的流」。如果乙個向量場存在乙個全域性的流,就叫做完備的向量場(complete vector field)。

從這個故事,我們知道乙個變換是怎麼煉成的:就是按照指示,一步步的做,這些小步積累起來,就形成最後的變換效果。有什麼樣的指示,就會有什麼樣的變換。在李群論中,數學家給向量場起了個名字:infinitestimal generator——寓意是,千里變換,生於跬步。數學上,「千里」與「跬步」的關係,就是李群和李代數的聯絡。

為什麼我們不直接描述變換,而言描述生成它的向量場呢?很簡單,很多時候全域性的演化不容易直接描述,而小步的前進則是很容易把握的。在很多問題中,我們知道「divide and conquer「的策略能夠大大簡化問題,從變換群到向量場正是這種策略的極限體現。乙個簡單的例子,比如我們要表示乙個不會改變物體大小的變換過程,所謂「不可壓縮性」如果用變換矩陣直接表達,那是乙個頗為複雜的非線性約束,而如果使用向量場表達,我們只需要把向量場限制在某個有限維子空間裡——這就是乙個簡單得多的線性約束。這樣的例子還有很多很多。

和微分方程的聯絡

最後,我們再回頭看看上面這個「從向量場推導流」的問題。我們知道所謂速度場,就是對 t 的導數,所以這個問題,可以寫成:

給定向量場 v(x), 求 s(t, x) 使得 d s(t, x) / dt = v(x), 並且 s(0, x) = x

這就是一般意義的常微分方程的初值問題。對這個問題的回答,和對於常微分方程的解得存在性,唯一性和連續性的回答,是聯絡在一起的。給定乙個向量場,就相當於給出乙個常微分方程。如果給定 x, 那麼所形成的曲線 y_x ( t ),就是上述微分方程的解,而流 s(t, x) 就是所有這些解的整體。我們知道微分方程的解通常以積分形式給出,所以上面說的「運動曲線」,在數學上有個正式的學名叫「積分曲線」(integral curve)。

在物理上,「積分曲線」也是很容易理解的,就是把「速度指示牌」的指示積累起來形成的路徑,積分曲線生成的過程就是「積跬步而致千里」的過程。而且,這不僅僅是一種形象思考,在實際問題中微分方程的數值解法正好就是這種過程的最好體現。

我對開源運動的思考

今天無事瀏覽網頁,看到袁萌老先生的部落格上關於開源軟體的一些文章,讓我又想起開源軟體的前途。我是乙個菜鳥級的技術愛好者,熱衷於程式設計,但卻沒有取得多少成績。作為乙個程式設計愛好者,我深知開發軟體不易,開發出人性化的軟體更不易,程式設計師必須投入大量的精力和時間。試想你花費大量時間和精力寫出來的凝聚...

關於博弈的思考

博弈,決策,永恆的主題 在博弈的過程中不要考慮是否公平,而是要考慮是否對你自己有利。這句話很值得思考。人生無時無刻不在博弈,無論是在微觀上,兩個人之間的談話 還是在巨集觀上每次人生抉擇的過程,博弈,總是在乙個恰當的視點上讓人設身處地的感受到。在博弈的過程中,公平與否,很多人都在抱怨 有的時候是與自己...

關於執行的思考

方 的實施,貫穿於軟體開發的整個過程。實施的關鍵在於執行,而執行由很多瑣碎的活動組成。在軟體開發實踐中,執行應該被放到乙個完整的體系環境中去考慮,單純強調執行本身,是無法解決執行問題的。在討論執行這個話題之前,我認為有必要先來看看東西方文化的差異。中國近代哲學史上有一種觀點,即地理環境決定了文化差異...