15 加熱
目前為止,我們研究的系統(tǒng)都是真實存在于這個世界之上的系統(tǒng)。但是,在一般意義上,這些系統(tǒng)并不能被稱為物理系統(tǒng)。在接下來的幾章里,我們會實現(xiàn)一些真正的物理系統(tǒng),例如熱力系統(tǒng)——也就是在其中,各物體的溫度會以熱量的形式進行交換。
15.1 咖啡冷卻問題
1977年,在Scientific American(《科學(xué)美國人》)中,Jearl Walker首次提出了咖啡冷卻問題[1] 。從那開始,這個問題就變成了建模與仿真中的一個基礎(chǔ)的例子。
下面是我對這個問題的改版:
我在上班前沖了一杯咖啡,手邊還有牛奶。假設(shè)我希望這杯咖啡在我開車到辦公室的時候盡可能的熱,請問,我是應(yīng)該現(xiàn)在就把牛奶加進去然后等著,還是在上班路上的某個時刻把牛奶加進去?
為了解決這個問題,我用放在不同容器里的咖啡和牛奶做了一次實驗,并進行了一些測量[2]:
- 咖啡剛沖好的溫度是90 °C,體積是300 mL。
- 牛奶的初始溫度是5 °C,體積大約50 mL。
- 我車里的溫度是22 °C。
- 裝咖啡的杯子保溫性能良好。30分鐘后當我到辦公室時,咖啡的溫度會降到70 °C。
- 裝牛奶的杯子并不能很好隔熱。15分鐘后,牛奶的溫度會升至20 °C,很接近車內(nèi)溫度。
為了利用這些數(shù)據(jù)解決問題,我們需要了解一些熱學(xué)的知識,并確定使用什么模型。
15.2 溫度與熱量
為了理解咖啡如何冷卻(牛奶升溫),我們需要一個熱學(xué)的模型。溫度是一個物體或者系統(tǒng)自帶的屬性,在國際標準單位中,溫度的單位是攝氏度()。溫度確定了一個物體究竟有有多熱、有多冷,這些也與物體里的分子熱運動相關(guān)。
當一個溫度高的物體與溫度低的物體的分子相遇,由于能量的轉(zhuǎn)移,熱的物體會變冷、冷的物體會變熱。這個轉(zhuǎn)移的能量就叫熱量,在國際標準單位中,它的單位是焦耳(J)。
熱量與溫度相關(guān),具體關(guān)系如下方公式(詳情見http://www.modsimpy.com/thermass):
公式中,是轉(zhuǎn)移的熱量,
是溫度的變化量,
是物體的熱容。熱容(熱質(zhì)量)確定了想要加熱或者冷卻這個物體單位溫度需要的熱量。在國際標準單位中,它的單位是焦耳每攝氏度(
)。
對于主要只由一種材料構(gòu)成的物體,熱質(zhì)量有如下公式:
是物體的質(zhì)量,
是構(gòu)成物體材料的比熱容(詳情見http://modsimpy.com/specheat)。
我們可以用這些公式估算一杯咖啡的熱質(zhì)量??Х鹊谋葻崛莺芙咏?,為。假設(shè)咖啡的密度也接近水,為
,那么300 mL的咖啡就是300 g,熱容就是1260 J/ °C。
咖啡從90 °C冷卻到70 °C,變化的溫度是20 °C,這就意味著有25200 J的熱量從咖啡轉(zhuǎn)移到周圍的環(huán)境中(例如杯座和車中的空氣)。
讓你直觀地感受一下這些熱量吧:如果你能利用這所有熱量來做功(實際上并不能[3]),你就能把一杯咖啡從海平面抬到8571 m的高度,這已經(jīng)很接近珠穆朗瑪峰的8848 m了。
假設(shè)杯子的重量小于咖啡,且其材料的比熱容也很小。這樣,我們就可以忽略杯子的熱質(zhì)量。而對于那些熱質(zhì)量很大的杯子,例如陶瓷杯,我們就需要一個分別計算咖啡和杯子溫度的模型。
15.3 熱傳遞
在像咖啡冷卻問題這樣的情況中,熱量從一個物體轉(zhuǎn)移到另一個的方法有三種(詳情見http://modsimpy.com/transfer):
- 熱傳導(dǎo):當兩個溫度不同的物體互相接觸時,高溫度物體快速運動的分子把它的動能傳遞給低溫度物體里低速運動的分子。
- 熱對流:氣體或者液體里的分子運動時都攜帶著熱量。流體流動有很多原因,可以是外部作用例如攪拌,也可以是內(nèi)部作用例如溫度的變化。比如說,你應(yīng)該聽說過熱的空氣會上升,這就是一種“自然熱對流”。
- 熱輻射:當物體分子由于熱能而運動時,它們會放出電磁輻射。輻射能量的多少取決于物體的溫度及表面材質(zhì)。
對于車里的一杯咖啡,熱輻射的影響要遠遠小于熱傳導(dǎo)和熱對流,所以我們可以忽視它。
熱對流實際上是一個很復(fù)雜的過程,因為它涉及三維空間內(nèi)的流體流動。但是在本問題中我們可以采取一種簡單的模型——“牛頓冷卻定律”。
15.4 牛頓冷卻定律
定律表明:當物體與周圍環(huán)境存在溫度差時,物體溫度的變化率與溫度差成比例。
這里的,是物體的溫度,也是時間
的函數(shù);
是環(huán)境的溫度,
是一個常數(shù),用來表示系統(tǒng)與環(huán)境進行熱交換的快慢。
這個定律是個典型的模型:它在一些情況下可以很好地近似,但在其他情況下則不行。
比如說,如果發(fā)生熱傳遞中的主要機制是熱傳導(dǎo),牛頓冷卻定律是“正確的”,也就是說 不隨溫度改變而改變。并且有時我們可以通過材料的性質(zhì)和物體的形狀估計
。
如果這個主要機制是熱對流, 就取決于溫度了,但是牛頓冷卻定律依然有用,至少在溫度變化不劇烈的時候。這種情況下
通常需要通過實驗測得,因為它取決于空氣的流動、蒸發(fā)等因素。
而如果主要機制是熱輻射時,定律就完全失效了。這種情況下物體會處于太空或者真空里,物體的溫度也會很高(幾百攝氏度)。
然而,對于咖啡冷卻問題,牛頓冷卻定律是可以勝任的。
15.5 代碼實現(xiàn)
開始之前,先暫時忘掉牛奶專注咖啡。我會創(chuàng)建一個State類的實例來表示初始溫度:
init = State(T=90)
和一個System類的實例來儲存參數(shù):
coffee = System(init=init,
volume=300,
r=0.01,
T_env=22,
t_0=0,
t_end=30,
dt=1)
所有參數(shù)的值都來源于問題描述。我隨便挑了一個r的值,待會我們會指出如何估計出它的值。
dt是我們用來模擬冷卻過程的時間間隔。嚴格來說,牛頓冷卻定律是一個微分方程,但在時間差較短的情況下我們可以用一個非微分方程代替它:
這里 是一個很小的時間間隔,
是這個時間間隔里溫度的變化量。
注意:我用 表示溫度的變化量,但是在一些地方你可能也會看見
用來表示物體與環(huán)境的溫度差。為了減少混淆,我會避免再次這樣使用它。
現(xiàn)在我們可以寫出一個更新函數(shù):
def update_func(state, t, system):
r, T_env, dt = system.r, system.T_env, system.dt
T = state.T
T += -r * (T - T_env) * dt
return State(T=T)
就像之前的更新函數(shù)一樣,這個函數(shù)接收一個State類,一個時間變量,一個System類。
如果我們運行
update_func(init, 0, coffee)
可以看出,一分鐘后咖啡的溫度是89.3 °C,所以溫度下降的速度大約是0.7 °C/min,至少在這個 下。
這里有一個run_simulation函數(shù),可以模擬從t_0到t_end的一系列時間間隔:
def run_simulation(system, update_func):
init = system.init
t_0, t_end, dt = system.t_0, system.t_end, system.dt
frame = TimeFrame(columns=init.index)
frame.row[t_0] = init
ts = linrange(t_0, t_end, dt)
for t in ts:
frame.row[t+dt] = update_func(frame.row[t], t, system)
return frame
這個函數(shù)很像run_simulation之前的版本。
有一個區(qū)別是它用linrange來生成一列從t_0到t_end以dt為間隔的數(shù)組。數(shù)組并不包括t_end,所以最后一個值是t_end - dt。
可以運行:
results = run_simulation(coffee, update_func)
函數(shù)的返回值是TimeFrame類,每一行是一個時間間隔,只有一列,為T。30分鐘后溫度降至72.3 °C,略高于問題描述的70 °C。我們可以通過不斷試錯逐步調(diào)整 ,但是下一章會有一個更簡單的方法。
首先我想把所有東西集成到一個函數(shù)里:
def make_system(T_init, r, volume, t_end):
init = State(T=T_init)
return System(init=init,
r=r,
volume=volume,
temp=T_init,
t_0=0,
t_end=t_end,
dt=1,
T_env=22)
make_system接受參數(shù)并把它們傳給一個System類?,F(xiàn)在我們可以像這樣進行仿真:
coffee = make_system(T_init=90, r=0.01,volume=300, t_end=30)
results = run_simulation(coffee, update_func)
在閱讀下一章之前,你可以閱讀一下本章的notebook,并且做做其中的練習(xí)題。關(guān)于下載、運行代碼的說明,請閱讀Section 0.4。
本書的中文翻譯由南開大學(xué)醫(yī)學(xué)院智能醫(yī)學(xué)工程專業(yè)2018級、2019級的師生完成,方便后續(xù)學(xué)生學(xué)習(xí)《Python仿真建?!氛n程。翻譯人員(排名不分前后):薛淏源、金鈺、張雯、張瑩睿、趙子雨、李翀、慕振墺、許靖云、李文碩、尹瀛寰、沈紀辰、迪力木拉、樊旭波、商嘉文、趙旭、連煦、楊永新、樊一諾、劉志鑫、彭子豪、馬碧婷、吳曉玲、常智星、陳俊帆、高勝寒、韓志恒、劉天翔、張藝瀟、劉暢。
整理校訂由劉暢完成,如果您發(fā)現(xiàn)有翻譯不當或者錯誤,請郵件聯(lián)系changliu@nankai.edu.cn。
本書中文版不用于商業(yè)用途,供大家自由使用。
未經(jīng)允許,請勿轉(zhuǎn)載。