數值方法
《數值方法》,副標題:C++與C#語言描述,王樂 著,出版社: 中國輕工業出版社。
中國輕工業出版社有限公司(簡稱「輕工出版社」)成立於1954年10月。多年來,輕工出版社秉承着「立足科技,專注生活」的出版理念,為我國的出版事業奉獻了一大批特色鮮明的圖書、期刊、音像製品及網絡電子出版物,深受廣大讀者喜愛,得到業內普遍認可和好評[1]。年出版圖書1500餘種,書刊碼洋近4億元[2]。
目錄
內容簡介
計算方法、科學計算、數值方法、數值分析中的主要內容基本相同,都是講解如何實現數值計算,只是側重點不盡相同,有的側重算法本身的精度和誤差分析,有的則側重程序的編寫與實現。數值計算的核心就是對數據的操作。而數據大多數以矩陣的形式存在。數值計算的算法即數值方法,大多數是公開透明的,只是實現過程需要的工作量比較大,有的較為複雜。進行數值計算的軟件平台非常多,常見的有 MATLAB、Mathematica、R、Python等 , 大多數實現過程也都很簡單,短短几行代碼就可以實現複雜的過程,根本不需要知道算法實現的細節。
關於數值方法(計算方法、數值分析、科學計算)的書籍非常多,也非常成熟。針對不同的數值問題,講解的主要內容都是相同的。各種教材更多關注算法本身相關的概念、步驟、精度、誤差等數學相關概念。而在如何將算法變成程序實現方面卻非常少。
講述數值計算程序實現的教材大多數以 MATLAB 為主,因為 MATLAB 具有強大而簡單的矩陣運算,聲明和使用矩陣都非常方便,因此學習數值方法算法的實現過程變得簡單。而與 MATLAB 相同的 Python,同樣作為解釋型語言,由於其完成矩陣的操作略顯麻煩,需要調用 numpy 模塊,目前沒有發現用 Python 語言講述數值計算方法的書籍,但是直接用 Python 進行科學計算的書籍卻不少。R 語言同樣作為解釋型數據分析語言,在國內的用戶非常少,更很難見到其實現數值計算。既然數值方法中的算法在大多數數值計算軟件中都可以直接簡單調用函數名稱實現,那為什麼還要學習數值計算方法自己編程實現科學計算呢?這是因為不經過編程實現數值計算算法的訓練過程,就不可能深入理解數值計算方法的實現過程與細節,
計算方法的編程能力與技巧得不到有效鍛煉,更不容易順利地編寫更多具有複雜數值算法的程序。數值方法編程是學習數值方法的有效和必然途徑,可以為提高數值計算水平打好基礎。
針對數值方法編程,在編譯型語言上實現更具有意義,因為編譯型語言應用範圍廣泛,手機移動端、個人用戶端、服務器端、各種環境下都會用到編譯型語言進行編程。編譯型語言中 C 語言、C++、C#、Visual Basic、Java 這幾種語言的使用者數量龐大。學習使用 C++ 與 C# 語言的人員,並不一定同時熟悉 MATLAB 或者 R 這類數值計算語言。在採用 C++ 和 C# 等語言編程過程中,直接遇到的數值計算問題非常不方便,解釋型語言雖然可以方便地處理數值計算問題,但是需要在編譯型語言與解釋型語言之間交互編程,而且這種交互編程由於 API 接口的開放程度限制並不能靈活處理特別複雜的計算問題。例如 C++ 或者 C# 與 MATLAB 之間交互編程,插值函數與優化函數都不能方便生成 .NET 組件與動態鏈接庫。所以在編譯型語言中實現數值計算很有必要,使得通用編程與數值計算編程有機結合起來。
本書採用編譯型語言作為數值計算方法的程序編寫語言,具體來講就是採用 C++語言和 C# 語言同時描述書中的算法。這主要是基於 C++ 和 C# 語言語法較為相似,而且建立矩陣類比較容易。一方面,使用 C++ 和 C# 語言編程的技術人員非常多,對理解數值計算方法的需求很大;另一方面,市場上關於 C++ 和 C# 描述數值方法的書籍非常有限,大多數需要參考基於 MATLAB 計算方法的書籍。因此,這裡同時採用兩種語言描述數值計算算法。語言只是描述方式,背後算法是相同的。
本書同時採用 C++ 與 C# 兩種流行的計算機語言實現數值計算方法,目的就是讓大家掌握計算方法的基本算法本身,把更多精力放在如何通過基本算法實現更複雜的數值計算問題上。增強使用計算機編程語言編寫數值計算程序的能力與信心。由於 C++ 與 C# 語言在實現算法的過程與效果上都是相同的,除了實現過程的微小差異,程序的主要內容是相同的。由於國內 C++ 的使用者更多,本書更多算法將以C++ 為主編寫,不再所有程序都同時採用 C++ 與 C# 程序實現一遍。在程序算法上如果沒有特別的差異,對於複雜問題不再以 C# 展示具體的程序。當然,C# 用戶也不必擔心,C++ 程序做微小改動即可轉變為 C# 程序並在 C# 平台上正常使用。即使沒有相應C# 版的程序也可以採用 C++/CLI 對 C++ 程序包裝,使用 C# 與 C++ 混合編程。
本書主要介紹數值計算方法的主要內容,包括非線性方程求解,線性方程組求解,插值與擬合,數值微分,數值積分,常微分方程(組)求解,數值優化,以及偏微分方程求解。同時本書將簡單介紹統計分析、神經網絡的基本內容。本書的定位不是 C++ 和 C# 語言的學習教程,同時因為作者能力所限,對於 C++ 和 C# 語言的介紹並不深入,使用的編程技巧也是夠用即可。同時,本書也不是單獨介紹數值方法的教程,由於講述數值方法的書籍浩如煙海,作者並不想只做文字的搬運工,故對其他書中常見的內容並不做過多的描述,總體原則就是將數值方法的內容講清楚即可。雖然本書中的程序沒有提供注釋,但是程序編寫規範,具有很強的自明性,了解計算方法的人必然很容易看懂程序。本書的意義是讓不熟悉數值計算的人變得熟悉數值計算,讓熟悉數值計算的人變得精通數值計算。如果讀者需要本書的計算程序,請通過電子郵箱聯繫發送。E-mail:wangleztri@outlook.com.
由於水平有限,書中難免存在疏漏之處,懇請廣大讀者批評指正,以便後續修訂完善。
參考文獻
- ↑ 我國出版社的等級劃分和分類標準,知網出書,2021-03-01
- ↑ 關於我們,中國輕工業出版社有限公司