第六週上課綱要
首先我們把 cooling.f 程式回顧一下它的內容,以便待會進入狀況:
老師的範例程式 cooling.f、cooling.f.txt
如果希望直接下載到虛擬機器�堛爾隉A就要先把虛擬機器的網路開起來
如何在 FC5 虛擬機器中設定網路連線、虛擬機器設定與使用上的相關資訊
寫好程式後編譯時,由於你的程式中有使用到 pgplot 繪圖副程式,因此編譯指令要像這樣下:
gfortran -o my_prog.x my_prog.f -L /usr/X11R6/lib -lX11 -L /usr/local/pgplot -lpgplot
以上注意 X11R6 的 X 與 R 是大寫、11 跟 6 一樣是數字、有 -L 的地方一定要用大寫,後面連結程式庫用的 -lX11 與 -lpgplot 之 "-l" 則是英文小寫 l 。
完成圖例
分析與討論(暨系列習題)
一、依照牛頓冷卻定律,寫一個預測物體溫度 T(t) 的程式,其中冷卻係數 r、初始溫度 T(0)、環境溫度 Ts,以及微小時間間隔 Dt 由外部讀入。
A.你的程式寫好了,也順利地通過編譯並產生一個可執行檔,也就是指令的語法都正確了,但你怎麼知道它有沒有邏輯上的錯誤(程式內部的錯誤通常叫 bug,因為歷史上曾有蟲子卡在真空管燒掉導致電路借邏輯錯誤的事件),或比方說不小心把 + 號打成 - 號?
(提示:以人腦代替電腦以玻簡單之例子或較少的步驟來核對)
B.微小時間間隔 Dt 是程式使用者自己必須決定的量,請試試看不用數量級的大小。你覺得用多小的值才夠精確?
老師的叮嚀:即使歐樂演算法的程式都做對了,仍要注意微小時間步幅 Dt 不能取得太小,否則會錯得非常離譜,原因可簡短地理解為,有某個瞬間,由於冷卻常數是負的(降溫)的緣故,Dt 乘上去應該要讓溫度降一點點(因為冷卻定律公式中有負號), 如果 Dt 太大了,甚至會發生咖啡溫度減得太多而低於環境溫度,如此就大大地不對了。
二、從實驗數據(參考下表)建立咖啡之冷卻係數的實作
A.你認為牛頓冷卻定律能不能描述上述的實況?(想想看我們要怎麼樣來回答這個問題。)
B.如果我們願意接受用牛頓冷卻定律為模型來描述實況中的冷卻過程,則你要怎麼樣獲得一個較符合的冷卻係數 r 值?
自己先想一想,如何定出 r 值(想不出來再看)
三、假設加入奶精只會簡單地把瓶中溫度降低攝氏五度,則問一瓶剛沖好攝氏 90 度的咖啡,要想快點達到開始可以品嚐的攝氏 75 度,你建議先加奶精或是後加奶精?
四、一個量的變化率與當時該量之大小有關的現象,還有什麼例子?
五、演算法的精確度與穩定性的問題。(原參考教科書內文)
利用電腦進行數值運算,其誤差的來源有二,其中一個是四捨五入誤差(又叫捨去誤差或捨入誤差,英文叫 round-off error 或 rounding error,它是發生在當電腦在利用其有限的位元處理有小數點的數值(如實數,又叫浮點數)傯會有需要四捨五入的情況,比方說若僅保留小數點後一位,則 1.1 乘以 1.1 的結果就要表示成 1.2 而不是更正確的 1.21,;另外一種誤差是來自演算法�媕Y所使用的近似,叫截斷誤差或修剪誤差,英文叫做 truncation error,會有這種名稱是因為演算法常用無窮級數展開的形式,其中很有名的比方說泰勒展開式(Tylar's expansion)。
進階閱讀:
Gould and Tobochnik, An Introduction to Computer Simulation Methods -- Applications to Physical Systems, Addison Wesley (1996) Chapter 2