數學是什麼呢?對某些人來說,數學是一堆公式和符號,完全不知道用來幹什麼。大部份人對大部份符號都知道怎麼解釋,可是把他們都放在一起後,便完全不知所謂。不單是毫無頭緒,可能是由於學習時候所面對的挫折及失敗,對大部份人來說看見這些不知名的數學方程式是會產生一點恐懼。這些情況不單是在香港會出現,在美國更加容易見到。在1999年,洛杉磯時報有一篇報道,指出對於大部份準大學生來說,「數學就等於恐懼」。更過分的是,在2016年,有一篇在華盛頓郵報的新聞,說有一名經濟學教授在機場等候上機時在做研究,旁邊的乘客由於看不明他在寫一些什麼方程式,甚至認為他是恐怖分子會影響飛機飛行安全。看見這些新聞,不知是可怒還是可笑。
所以在這科普系列裏面,我希望可以介紹幾個看起來比較簡單,容易令人明白的數學應用。從這些例子,我希望可以令到公眾明白到數學有趣的地方。要仔細解釋這些例子背後數學的原理和真實使用時所面對的困難,其實比較困難。始終我也不應該要求所有看這篇文章的人都有相當數學背景。所以,後面的討論也是點到即止,只希望提升公眾對數學的興趣。

數學在電影裏面經常出現。一個例子,是電影「有你終身美麗」(A Beautiful Mind)。電影主角就是一個有名數學家Prof. John Nash。故事由羅素高爾扮演數學家,記錄着Prof. Nash在大學是如何創立博弈論(Game Theory)。記得有一年, Prof. Nash剛巧到了UCLA的IPAM參加了一個會議,發表了博弈論的一些結果。膽粗粗去找了他拍了一張照片(圖中左二是我,左三就是Prof. Nash)。
之後亦有一套福爾摩斯的電影,「神探福爾摩斯:詭影遊戲」。主角福爾摩斯當然不是一名數學家,可是在這一齣電影裏面,其中一名主要主角就是一名數學教授。電影拍攝非常嚴謹,電影裏面所有關於數學的,拍攝時都找到牛津大學應用數學中心提供意見。有其中一幕是拍攝到數學教授的辦公室,在背景一面黑板上面寫滿了數學方程式。上面所有研究題目都盡可能是那個時代一些有興趣的題目。裏面包括n-body problem,或者是一些關於雷射方程式的一些計算。電影甚至有一幕,鏡頭剛好拍攝到數學教授所寫的一份研究論文,題目是關於星體運行軌跡的研究。
「神探伽利略:嫌疑犯X的獻身」裏面亦有一名數學教授。神探伽利略不是物理學家嗎?對,可是在這一齣電影裏面,的確有一名數學教授。在宣傳海報上面,寫着「物理天才超精密頭腦激戰數學天才零破綻佈局」。當然神探伽利略就是名偵探,角色非常正面。而那一個數學家,就當然不是一個什麼正義的角色。不只是這一齣電影,上面提到的另外兩齣電影裏面,數學家的形象仍然是非常的反面,可能是在社會上非常離群,可能是心理狀況有異常,可能是一個反社會的大壞蛋。這些比較負面的形象,其實很符合了一般大眾對數學家的既定想法。
有朋友在網站上面會討論不同電影及動畫裏面的數學,有興趣的朋友可以到那邊觀看。在這裏,我希望討論的,並不是在電影裏面所討論的數學,而是我們到底怎麼用數學去幫助我們拍攝或者製作電影。這些你們可能會有聽過,當然電腦特技在電影拍攝經常出現。實質做法,是需要有電腦特技製作人員在電腦面前小心翼翼一筆一畫去模擬不同場景。可能需要剪剪貼貼,將電影裏面不同打鬥場面的參與人數加多,也可能是需要模擬鐵達尼號沉沒時候船身下沉時的過程。這些都需要花大量時間而且亦要有充足的訓練去熟習電腦軟件的運用。你可以找回1997年鐵達尼號的電影來看一看。電影裏面絕大部份場景都是使用了電腦特技去把電影「拍」出來。想也知道不會打造一艘船然後把它鑿沉去拍攝這齣電影。可是,儘管在那年代這套電影特技令人嘆為觀止,在現今再看一次時,就會發現場景非常虛假。如果現在你把這套電影當作新的一樣在電影院裏面放,可以想像不會有人付錢看。
由於大部份觀眾都被寵壞了,對這些電腦特技的要求越來越高,所以電影拍攝公司亦都會盡可能發展一些新的技術去幫助他們拍攝。這些在動畫製作上邊就顯得非常明顯。大約在2000年時,有一些公司就開始發展一些叫做「物理模擬」的動畫製作(Physics Based Simulations)。他們就不會要求動畫師在電腦面前把動畫一幅一幅慢慢的畫出來,反而,是使用了一些物理數學的原理加入動畫製作裏面。方法是先建立一個數學模型去模擬動畫裏面運動的過程。這些場景大部份都已經有很好的數學方程式模擬。比如說如果你想模擬海面運動的過程,你就需要看一下納維-斯托克斯方程(Navier-Stokes Equation)。如果你想模擬物件在一般情況下運動的過程,你有可能可以看一下牛頓方程式。但是如果場景非常複雜,儘管我們可以把數學模型寫得很好,這些問題通常非常難以用人手解決,基本上不可能去找一個顯性的解(Explicit Solution)。所以這就需要用電腦去幫我們找出一個近似值。儘管我們說是近似值,但是絕大部份時間找出來的答案都已經比以往動畫插畫師一幅一幅慢慢畫來得好得多。
最先出現的其中一個例子就是2001年Pixar的怪獸公司。可能大家不清楚,Pixar這間公司並不只是動畫製作公司那麼簡單,他其實是一間研究中心。他每一齣動畫電影,裏面都發展了一些新的電腦動畫技術,去幫助他的製作。在怪獸公司這齣電影裏面,Pixar就發明了一套可以幫忙模擬毛髮運動的軟件。主角蘇利文(Sulley)全身都有厚厚的毛髮。由於巨大身體的運動,身體上面每一條毛髮都會隨之而不斷擺動。而他們擺動的方式,其實就是根據了一些數學方程式去模擬出來的。你可以想像一下,我們根本不可能要求動畫師將身體上面每一條毛髮都一條一條的去畫出來,也已經不說我們希望可以看到一些比較合理而且又隨着身體運動的鏡頭。然後你又想像一下,就算動畫師可以不計時間用一年半載去畫出這3至5秒的動畫出來,然後導演說,咦,那時是在下雨,為什麼他的毛髮那麼蓬鬆,不是應該看起來重一些嗎?然後,就沒有然後了。因為動畫師發覺已經沒有那個耐性再把這些再畫一次了。這就顯示了物理模擬動畫製作的重要之處。因為如果公司已經把這套軟件發展出來,很可能在軟件裏面已經有好幾個不同的參數代表着不同環境的變化。用上面的下雨的例子來說,電腦動畫師只需要回去把參數改一改,就可以再去吃過午飯,回來就已經可以看一下電腦運算出來的結果。
另外一個Pixar做出來的軟件,可以用來模擬海面波浪變化。在Finding Nemo(海底總動員)裏面,就有一幕講述主角被捕捉到悉尼的一間診療所裏面。鏡頭一轉,看見悉尼歌劇院外面海面,有海豚在水面滑過。然後可以清楚看見海面上海波浪的變化。這一個問題在計算流體力學裏面非常困難。主要原因是在這個模擬裏面有三個不同的狀態,包括了空氣,流體(就是說海水),以及固體(在這個例子就是海豚的背鰭)。如果我們想計算這三個不同狀態變化的過程,我們就必須要有一個很好的軟件幫忙計算在不同情況下這三個狀態的表示方式。比如說,在氣體及液體之間的介面(Interface),我們就需要有方法模擬海浪泛起,產生氣泡,然後不同大小的氣泡被困在水裏的情況。這些在水中的起泡也因為表面張力互相結合而成為一個大的起泡。也可能由於速度不同,一個大的起泡會分裂成很多細小的起泡。海水也因為波浪的原因離開了海面,產生了很多浪花,一粒一粒的水珠在空氣裏面翻滾飛動。又比如,液體及固體的互相影響,也是一個困難的課題。可以想像波浪拍岸,波浪會因而改變他的速度及運動方向,如何在偏微分方程裏面解決這個邊界問題,也需要一點仔細的分析。所以在那一齣動畫裏面,Pixar就運用了一些介面計算的方式,去幫忙「繪畫」海洋生物在海面運動時所產生波浪的變化。所以看起來,動畫就非常寫實。
由於計算數學對電腦特技或者電腦動畫的幫助,數學家也會得到不同的鼓勵。大家每年可能都會看奧斯卡頒獎典禮。但是奧斯卡除了一些最佳演員最佳導演最佳劇本等等的獎項以外,還有一些是關於技術的獎項。其中有一個叫做科學及技術獎,每年都會頒發給一些對電影拍攝有幫助的公司及人。在2007年就頒發了一些發展流體計算的公司。其中一間叫做Digital Domain,大家可能不認識,可是他發展了一套軟件去繪製「明日之後」(The Day After Tomorrow)裏面由於兩極冰川融化海水大量湧入紐約市中心的情況。如果你現在在看一下這一套電影,你依然會發現海水運動過程非常真實,背後就是靠去找納維-斯托克斯方程的一個近似值。在同一年,亦都有三名數學家拿到這個科學及技術獎,他們亦是幫忙了設計軟件計算流體運動的變化。其中一名是在史丹福大學的Prof. Ron Fedkiw,雖然他現在是計算機科學的教授,可是他博士學位是數學系的。Prof. Fedkiw自己的研究是去幫忙解決水平值計算準成度及增加其計算效能。由於他在這計算方面的貢獻,除了在2007年,他在2014年亦都憑着其他在多態流(Multiphase Flows)和煙霧計算的方法,再次拿到這個科學及技術獎。數學家拿奧斯卡好像很特別,所以我經常會開玩笑地說,數學科目沒有諾貝爾獎,因此就會不斷拿不同地方的其他獎項。
介面計算亦有很多不同在動畫上面的應用。然後比較近期,被迪士尼收購了的Pixar,有一齣叫做「雷霆戰狗」(Bolt)的動畫,也運用了介面計算的研究。動畫裏面有一隻被困在玻璃球的倉鼠。在動畫差不多結尾時,玻璃球由於碰撞而破裂,倉鼠就從玻璃球裏面逃脫出來。而這一兩秒「鏡頭」前面的動畫,亦是用了電腦計算去幫忙「繪畫」裂痕在玻璃球上面破裂的軌跡。而且一兩秒的過程,不留意亦不可能發現。所以從這些細微的地方,你就可以看到動畫公司繪製這些動畫是多麼的用心。
最後一個數學如何用在動畫製作上的例子,就是比較近期,迪士尼大收的動畫「魔雪奇緣」(Frozen)。裏面中了魔法的公主會不斷長出冰雪。電影裏面經常會出現的場景,就是一點一點的雪花會生長成巨大的冰雪。而這些冰雪晶體生長(Crystal Growth)的模式,也可以通過電腦計算而得到出來。這齣動畫在繪畫的時候,亦都找來加州理工的「Dr. Snowflakes」提供科學協助,幫忙設計晶體生長的鏡頭。除了晶體生長以外,這齣動畫裏面亦有大量關於雪的鏡頭。Prof. Fedkiw的學生Prof. Joseph Teran亦設計了一個科學計算方法,來計算雪在不同情況下的變化,有興趣的可到的網頁看看。

上面提到所有關於動畫設計的軟件,聽起來好像比較似電腦科學工程。都是關於軟件製作和應用。可是上面每一個提到的項目,都可以是計算數學裏面一些非常學術的問題。比如說,這個晶體生長的模型,亦是我以前做過的一個問題。之前提到,在UCLA修讀博士時,曾經到過UC Irvine訪問Prof. John Lowengrub。那個時候我所設計的水平值計算方法,就曾經用來模擬雪花生長的情況。在那些計算裏面,我們可以簡單的改變周圍外在環境的溫度以及晶體的一些物理條件,晶體生長的方式及形狀就可以被計算出來。這裏面牽涉到兩個數學的問題。其中一個是因為外在環境影響,我們需要計算在區域內溫度的變化。這裏所指出的區域有兩部份,一部份是在晶體裏面的地方,另外一個部份就是從晶體表面一直到離開給予外在環境溫度很遠的地方。在晶體表面的溫度有一條物理方程式可以給與固定,而溫度就會關乎於表面的曲率以及晶體的生長速度。所以第一個需要解決的數學問題,就是在一個不固定的區域內如何可以由 外在給予的溫度計算區域內所有的溫度。從物理上來說,這個溫度就需要符合一條叫做拉普拉斯方程(Laplace Equation)的偏微分方程。跟一般本科生在偏微分方程計算方法(Numerical Methods for Partial Differential Equations)裏面所見到的不同,計算區域並不是普通的長方形或圓形,而是一個不規則,根據晶體形狀所給定的區域。
另外一個數學問題,就是從區域內所得到的溫度,去計算晶體表面上每一點向外移動的速度。這兩個問題對我來說都非常有趣。問題本身,在本科生應用數學課程裏邊基本上已經接觸過,可是把這兩個看起來完全不相干的問題連接起來,這中間就需要發展出一些新的計算技術,去得到一個準確而且高效率的方法。
至於計算流體力學(Computational Fluid Dynamics CFD),亦是計算數學裏面一個傳統而且非常重要的課題。在修讀博士時,聽過有一些非常有趣的應用。比如說噴墨打印機的噴嘴設計,由於噴墨從噴嘴離開時的速度,會影響到墨汁撞擊紙張時所產生的形狀,噴墨打印公司就希望用數值計算的方法去設計噴嘴的形狀以及機器裏面對物質所產生壓力,去令到打印機打印出來的效果更好。差不多的技術,在一些食品製作時也會需要。比如說沙律醬的製造就需要設計噴嘴將食油與其他材料有更好的混合。所以食品製作公司,亦曾經希望數學家,設計一個數學模型和軟件幫忙這些食品的創造。
甚至乎在煮食上面,計算流體力學也可以幫忙解釋一些現實生活上面所見到的事情。例如在炒菜時,我們如何可以知道在鑊上面的溫度呢?(注意:我不是問在鑊上燒熱了的油溫,而是乾燒一個鑊時的溫度。)一個方法是可以在鑊上面灑上一丁點水(在做這個實驗時,千萬不要將水灑在燒熱了的煮食油上面),然後觀察水珠在鑊上所停留的時間。如果所停留的時間比較長,而且在鑊的表面上不斷走動,我們就可以知道鑊的溫度其實已經相當高。這個物理現象,想起來有一點比較奇怪。就是說,如果溫度越高,水蒸發的速度不是也跟着提升嗎?所以如果鑊的表面溫度越高,水珠停留在表面上的時間不就會咁短嗎?這個奇怪的現象,其實叫做萊頓弗羅斯特現象(Leidenfrost Effect)。
的確,水滴蒸發速度會根據鑊的表面溫度而有所改變。當溫度在沸點以前,溫度越高水停留在表面的時間會越短。可是,當鑊的表面溫度超過水滴沸點,水珠直接接觸鑊面的地方將會由液態變成氣態,水珠就會因為壓力的關係被托起而離開鑊的表面。所以剩下來的水珠可以在鑊的表面以一個無阻力的狀態四處移動。情況就像我們在「美國冒險樂園」或者「歡樂天地」裏面的那個氣墊球(Air Hockey)遊戲,球塊可以在無阻力的桌面上飛快移動一樣。要更加仔細的研究這個現象,就需要靠計算流體力學的幫助,才可以有效計算到底液體改變成氣體以後可以產生的承托力。有一些關於這個現象的實驗片段,大家可以在YouTube找到,看起來非常有趣。

以前曾經提過,其中一個對應用數學產生興趣的原因,是中七時到科大參加開放日聽到數學系招生講座,看到一些關於計算流體力學應用的片段。記得那時看見的是一個數學計算實驗,目的是模擬水壩因為破裂,水從一面流到另一面的情況。這些計算流體力學的例子,在中學的純數學科目是完全沒有接觸過。所以第一次看到這些模擬結果時,感到特別興奮,因為終於可以看到一些數學的應用。還記得剛入大學時,已經看見有流體力學(還不是計算流體力學)的課程,所以一直希望可以選 修那一門課,看看有沒有機會再次接觸在中七開放日時所見到的例子。可是當有機會選修那門科時,才發現自己所知道的知識還是太少。是一直到在大學本科生最後一個學期,選修了一門研究生課,才有足夠的計算技巧,編寫程式將那個水壩的例子做出來。由於這些因緣,計算流體力學一直以來都是我非常熱衷的一個研究方向。所以在修讀碩士課程時,找研究指導老師,也是往計算流體力學這個方向進行研究。可是由於那時候非常懶惰(!),一直也沒有做出什麼研究成果。也多謝當時指導老師對我的包容。雖然說沒有太多研究進展,可是對這個研究方向仍然充滿熱誠,還記得那時在科大做了一張可以到全香港所有大學圖書館的借書證,經常往中文大學及理工大學跑,去看他們的那些關於計算流體力學的新書籍。但問題是,這個研究方向已經存在了一段非常長的時間。如果要有一些新的研究成果出來,將會非常困難。所以其實,也從來不會將全部的專注力放在這一個問題上邊。直到最近,有自己的博士學生覺得這個問題也不錯,也做了一點成績出來。

除了這些上面提到的例子,更常聽見的是關於飛機的設計。到底如何可以將飛機設計得好一些去減少阻力和增加承托力。這些都是非常傳統的計算流體力學問題。曾經亦都嘗試往這方面的研究發展,可是由於問題實在非常複雜,也只一直把這興趣收起來。科大數學系裏面亦有教授跟機械及航空工程系合作,發展不同高準成度的計算流體力學軟件。甚至乎,科大現任校長史維教授,他的研究就是計算流體力學。