第二週上課綱要
本次電腦模擬實驗課我們要有系統且快速地向大家介紹 Fortran (77) 的一些最基本的指令,有了這些指令大家就可以薦各式各樣的電腦計算程式。我們也會留時間給大家做程式撰寫(用 vi)與編譯的演練,除了Fortran 之外另一個大重點是 pgplot 繪圖副程式庫的詳細介紹與使用示範。
用 vi 寫 Fortran 程式在 Linux 下編譯的練習:
電腦計算部分
a. 整數從 1 加到 10 並且把答案在螢幕印出
偷看一下參考範例程式
b. 把上題改為向使用者詢問從 1 加到 N 的 N 值,並且把答案在螢幕印出
偷看一下參考範例程式
c. 同上,但把整數從 1 加到 N 的結果寫到檔案
偷看一下參考範例程式
d. 把上述程式的連加部分寫成一個副程式
偷看一下參考範例程式
電腦繪圖(pgplot)部分
e. 呼叫 pgplot 副程式來畫幾個點
偷看一下參考範例程式
f. 呼叫 pgplot 副程式來畫連筆曲/折線
偷看一下參考範例程式
g.呼叫 pgplot 副程式來畫一個圓
偷看一下參考範例程式
h.呼叫 pgplot 副程式來作動畫
偷看一下參考範例程式
(上課當天的實際進度是到這��)
第一個演算法:咖啡冷卻問題
問題:冷卻現象
物理量:溫度隨時間而變化的關係,T(t)
數學模型:牛頓冷卻定律,溫度變化率與
數學問題:一階常微分方程式:知道斜率的話,能推得原函數嗎?
零斜率的原函數是
常數斜率的原函數是
x 一次方斜率的原函數是
Eular 演算法:把積分離散化
原函數 y(x) 在 x0 處的斜率值 g(x0) 是
[ y(x0+dx) - y(x0-dx) ] / 2x0,也可寫作
[ y(x0+dx) - y(x) ] / dx (反正 dx 很小)
,因此
y(x0+dx) = y(x0) + g(x0) dx
如果我們定一格 xn 到下一格 xn+1 之間的間格是 dx ,則上式變成
y(xn+1) = y(xn) + g(xn) dx
而這正是 Eular 演算法,告訴我們如何從斜率函數一步步推出原函數。
Eular 副 程式:把現在的 x、y、g、dx 值傳入來獲得 下一個 y 的副程式
subroutine eular (y,x,dx)
real x, y, dx
real slope
slope = 2*x
y = y + slope*dx
end
冷卻係數 r 的設定:如可從實驗所量測到的值來定出?
解決問題:求出溫度隨時間的變化 T(t),並回答相關的問題
演算法的進一步運用:力學中的落體問題
無空氣阻力之自由落體:等加速度運動
示範(下次之實作):多顆粒子的分子動力學模擬