計算物理導航

閱讀原文

   在當今時代,數值計算已經成為理科生不可或缺的技能.利用計算機程序計算理論模型,處理實驗數據,繪製各種圖表等都在學習和研究中都扮演非常重要的角色.雖然一些簡單的計算用計算器就可以完成,但許多時候我們需要數以萬計的計算量,用計算器就顯得不實際了.

計算機語言

   計算機的指令等信息在其數字電路中是以二進位 0 和 1(對應低電壓和高電壓)傳播的,然而這樣的語言顯然不適合人類閱讀和編寫.為了讓計算機按照指定的規則進行運算,我們可以用某種計算機語言(由英文單詞,符號和數字組成)寫下代碼,計算機會把這種代碼轉換為二進位指令進行相應的運算.

   科學計算中,目前比較流行的高級語言有 Matlab,Python,Mathematica 等1.這些語言除了可以進行傳統的數值計算外,還有符號計算的功能,例如可以對解析表達式進行不定積分和求導等運算.一般來說,Mathematica 主要用於符號計算,Matlab 和 Python 主要用於數值計算.

   本章的數值計算以講解演算法(Algorithm)為主,常式使用 Matlab 代碼,且盡量使用簡單的語法,這樣即使讀者使用的編程語言不是 Matlab,也能輕易地改寫出相應的代碼.本章使用的所有 Matlab 語法都會在前幾個詞條中介紹, 不要求讀者有任何編程基.

   本章的符號計算使用 Mathematica 軟體和 Wolfram Alpha 網站2.見 「Mathematica 基礎」.符號計算主要用於計算解析問題(如複雜的不定積分)或者獲得高精度的數值結果(例如計算 pi 的一萬位).其使用頻率遠沒有數值計算多.

常用演算法

   為了讓讀者熟悉一些科學計算中常用的演算法, 順便熟悉 Matlab 編程, 本章還介紹了用於求函數根值的二分法 和多區間二分法, 用於排序的冒泡法, 用於搜索多元函數局部最小值的 Nelder-Mead 演算法, 以及用於曲線擬合的最小二乘法.

微分方程數值解

   微分方程在物理中無處不在,力學中最基本的牛頓第二定律就是一個常微分方程.雖然我們都希望能得到方程的精確解析解,然而往往只有最簡單的一些問題才存在.對於沒有精確解析解的問題,我們要麼加入一些近似條件得到近似的解析解,要麼求助於數值計算,也可以是二者結合3.本章中我們會學習如何計算常微分方程(組)的數值解.

(剩下部分見頂部的「閱讀原文」)

推薦閱讀:

冒泡法
最小二乘法曲線擬合
Matlab 的判斷與循環
Nelder-Mead 演算法
Matlab 的變數與矩陣

TAG:物理學 | 計算物理學 | 編程 |