目錄

20200718 想法源起 20200719 我們在做什麼(一) 20200722 我們在做什麼(二) 20200725 竟然成為數學家(一) 20200729 竟然成為數學家(二) 20200801 竟然成為數學家(三) 20200805 不同職級(一) 20200808 不同職級(二) 20200812 趕客系列(一)為什麼讀大學? 20200815 趕客系列(二)不同大學學位跟工作的關係 20200819 趕客系列(三)大學的目的 20200822 趕客系列(四)大學為什麼要有主修 20200826 趕客系列(五)要挑選一個什麼樣的主修 20200829 沒有無緣無故的恨(一) 20200831 科普系列 - 數學與電影動畫製作(一) 20200902 沒有無緣無故的恨(二) 20200905 沒有無緣無故的恨(三) 20200907 科普系列 - 數學與電影動畫製作(二) 20200909 終身職位的評核 20200912 學術界吸引人的地方 20200914 科普系列 - 數學與電影動畫製作 (三) 20200916 學術界辛苦的地方(一) 20200919 學術界辛苦的地方(二) 20200921 科普系列 - 數學與電影動畫製作 (四) 20200923 大學的讀書成績有多重要 20200926 本科生研究機會 20200928 科普系列 - 數學與圖像修復(一) 20200930 用創新的方法去教育科學 20201003 參加研討會的重要 20201005 科普系列 - 數學與圖像修復(二) 20201007 教授與教學 20201010 研究是什麼(一) 20201012 科普系列 - 數學與圖像修復(三) 20201014 研究是什麼(二) 20201017 研究是什麼(三) 20201019 科普系列 - 數學與圖像修復(四) 20201021 如何閱讀研究論文 20201024 研究生應該修什麼課 20201026 科普系列 - 數學與圖像修復(五) 20201029 本科生的多主修多副修 20201102 科普系列 - 數學與數獨(一) 20201105 幾位教授(一) 20201109 科普系列 - 數學與數獨(二) 20201112 幾位教授(二) 20201116 科普系列 - 數學與數獨(三) 20201119 幾位教授(三) 20

計算數學入門系列 - 計算區域的離散化(二)



假設我們有興趣的區域是在0到1之間,我們可以把這個區域分成某些數量的線段。最簡單的方式, 就是把這線段分成N 段相同長度的線段。 所以一共就會有N +1點。用MATLAB 的表示方式,我們可以用

N=…;

dx=1/N;

x=[0:dx:1];

當然,還是有一些同學喜歡用looping 的方法,喜歡把第三行寫成

for i=1:N+1

      x(i)=(i-1)*dx;

end

需要留意的是,這裏一共有N +1點,所以最後一個index並不是N,要不是最後運算時就差了x=1 那一點。 這裏有一點奇怪的是,我們定義了線段的段數,而不是取樣點數。所以如果同學喜歡定義N點,那就記得要把dx 定義成1/(N-1)。


對於不同問題的邊界條件,我們可能會將這個簡單的分段作出一點變化。上面所說的,對於一些Dirichlet Boundary Condition 非常方便。這種邊界條件,固定了在邊界上面函數的數值。在一些應用來說可能是邊界的溫度已經固定了,然後我們希望找出在區域內其他地方的溫度。所以在進行導數的近似值的時候,x(1) 和x(N+1) 就可以直接運用邊界條件去固定他們的數值。另外一點要注意的是,當我們在解決這個在計算區域內的問題,裏面我們希望求的是N -1個取樣點的函數值。 如果同學希望要找出來的是N個未知數(而不是N -1個取樣點上的函數),那就可以把dx定義成1/(N+1) 。


有一些問題,我們希望做一個周期性計算區域(Periodic Domain),就是說我們假設答案有一個周期性的特性所以無論x 的數值是什麼,x 和x+1 這兩點其實函數值是會一樣。如果這樣子,我們定義計算區域是就不需要考慮x=1 這一點,因為這一點的數值其實會跟x(1) 一樣,我們就不需要再多花心神在這一點上。

N=…;

dx=1/N;

x=[0:dx:1-dx];

如果寫這樣子, N這個數值就不是代表着線段的總數,而是代表着取樣點的數目。


然後有另外一些數學問題,我們希望取樣點是在線段的中心,而不是在線段的兩端。這樣,我們可以用

N=…;

dx=1/N;

x=[dx/2:dx:1-dx/2];

這個取樣點的方法不太常用,對一般入門的同學可能沒有太大用途。可是當我們在解決一些守恆定律方程式(Conservation Laws), 用到一些有限容積法(Finite Volume Scheme) 的時候,這個離散化就不可少了。


上面所說的所有例子,都是相對比較簡單的區域離散化,我們都希望離散後點與點之間的距離是相等,用dx 來表示。可是有一些問題,我們有時會希望不同區域的取樣點分布有所不一樣。其中一個最主要的原因,是希望我們可以根據函數變化的速度去安排取樣點的密度。如果計算答案在某些區域內變化得非常快速,我們會希望多放一些取樣點仔細了解函數變化的情況。如果答案在某些另外的區域沒有太大變化,我們其實可以使用少 一些取樣點,已經可以把答案好好的用的插補方法估計出來。總的來說,這些方法叫做自適應方法 (Adaptive Method)。 雖然在編寫程式時可能有一點複雜 和麻煩,在一些計算應用裏面,是非常有效率的。 另外亦有另外一些方法取樣點並不會使相同距離,而是選用一些正交多項式 (Orthogonal Polynomial) 的根作為取樣點的地方。其中一個常用的是Chebyshev Polynomial, 牛津大學的Prof. Nick Trefethen [1] 就是其中一個大力推動者,他也花了很多時間建立了Chebfun 這一個MATLAB 的Package,有興趣的同學可以花點時間看一下[2] 。 對於這個研究方向,我自己就不太過熱心,主要的問題還是在高維空間的計算。


留言