前言
在大學階段,我們獲得知識的一般途徑是透過對教材的理論學習及對應的實驗驗證。具體到教材的每一節(章),大致上是先提出某個已被確定的理論,然後由簡入繁組織一些模式相似的例子,用於練習或驗證先前提出的理論,這種學習方法實際上就是對模型(model)的學習。
在學習數學的過程中,如果我們能逐步自我訓練,把每一節的學習當作一個模型去對待,理解這個模型的理論基礎,它能解決什麼樣的問題以及如何解決,這種訓練無疑比陷入題海或過分專注於一些技巧要好的多。累積的模型多了,在解決實際問題時才會更快的定位到正確或接近正確的解決模式上,也才有可能得到這個問題的確切解或近似解(解決方案),但如果用錯誤的模型去匹配一個未知問題,結果很可能大幅偏離正解,甚至南轅北轍。
科學計算是對已知理論或假設,運用特定演算法或程式,並對這一理論(假設)進行驗證或進一步探索的試驗過程,是手工計算在機器上的延伸與拓展,同時也是科技人員必須具備的一項技能。由此,我和我的同事撰寫了和「高等數學」(含「線性代數」)、「機率論與數理統計」和「作業研究」幾本傳統教材搭配的科學計算輔導用書。我們希望科學計算從這幾門基礎課開始生根。
Python是當下的第一選項,原因在於以下兩個方面:(1)就科學計算來說,基於Python的函數庫是相對完備且開放的,使用人群的基數也決定著學習資源的品質與多樣性;(2)相對於C、C++、Java等程式語言,Python對於非電腦類專業來講有著更為合適的生長土壤,我們不太可能用C語言來求解諸如熱處理問題、資源設定問題或實驗中某些因素的互動作用問題等。
數學為我們提供了豐富多彩的素材用以學習程式設計:從讀者已掌握的知識(例如繪製一個拋物線,計算一個函數的導數)到未知的領域(如求一個複雜函數的極值),這期間有驗證的快樂,也有探索的艱辛,在不斷重複這些活動的過程中學會熟練運用這一工具,工具的熟練使用反過來也會幫助我們對特定問題進行更為深入的探討與研究。
Visual Studio Code為我們提供了良好的工作環境。
基本理論和手工計算是根本,然後才可以使用機器進行實踐,切莫本末倒置。如果自己無法解釋程式或程式輸出,那就要調整為理論優先。建議讀者依據自身對基礎的理解,可以採用理論與實踐按節融合、按章融合或學期後融合的策略。
本書的第1~3章由賈愛娟老師撰寫,第4~6章由張靈帥老師撰寫,第7~9章由陳繼紅老師撰寫,第10~11章由郭曉玉撰寫,第12 章由楊懷霞老師撰寫,第13~21章由毛悅悅老師撰寫,第22~33章由我撰寫。文件的審核及校對由趙文峰、程方榮、崔紅新和時博老師完成。
畢文斌