內容簡介
《常用數值算法及其MATLAB實現》詳細介紹瞭求解數值問題的常用算法的算法原理及其MATLAB實現,偏重於算法的實現,強調例題的分析和應用。主要內容包括:綫性方程組的直接解法和迭代解法、插值和函數逼近、數值積分、數值優化、矩陣的特徵值問題、解非綫性方程和方程組的數值方法及常微分方程和偏微分方程的數值解法。
《常用數值算法及其MATLAB實現》可作為高等院校數學與應用數學專業、信息與計算科學專業和計算機應用等專業的本科生及工科碩士研究生的教材或參考書,也可供從事科學與工程計算的技術人員參考。
內頁插圖
目錄
第1章 引論
1.1 誤差的來源
1.1.1 捨入誤差
1.1.2 截斷誤差
1.2 誤差的傳播
1.2.1 盡量避免兩個相近的數相減
1.2.2 防止接近零的數做除數
1.2.3 防止大數吃小數
1.2.4 簡化計算步驟,減少運算次數
1.3 數值算法的穩定性
第2章 綫性方程組的解法
2.1 Gauss消順序消去法
2.2 Gauss列主元消去法
2.3 Gauss-Jordan消去法
2.4 LU分解法
2.5 平方根法
2.6 改進的平方根法
2.7 追趕法
2.8 QR分解法
2.9 方程組的性態與誤差分析
2.9.1 誤差分析
2.9.2 迭代改善
2.10 Jacobi迭代法
2.11 Gauss-Seidel迭代法
2.12 鬆弛迭代法
2.13 迭代法的收斂性分析
第3章 函數的插值
3.1 Lagrange插值
3.2 牛頓插值
3.3 Hermite插值
3.4 分段三次Hermite插值
3.5 三次樣條插值函數
3.5.1 緊壓樣條插值函數
3.5.2 端點麯率調整樣條插值函數
3.5.3 非節點樣條插值函數
3.5.4 周期樣條插值函數
3.5.5 MATLAB的內置三次樣條插值函數簡介
第4章 函數的逼近
4.1 最佳一緻逼近多項式
4.2 近似最佳一緻逼近多項式
4.3 最佳平方逼近多項式
4.4 用正交多項式作最佳平方逼近多項式
4.4.1 用Legendre多項式作最佳平方逼近多項式
4.4.2 用Chebyshev多項式作最佳平方逼近多項式
4.5 麯綫擬閤的最小二乘法
4.5.1 綫性最小二乘擬閤
4.5.2 用正交多項式作最小二乘擬閤
4.5.3 非綫性最小二乘擬閤舉例
4.6 Pade有理逼近
第5章 數值積分
5.1 復閤求積公式
5.1.1 復閤梯形公式
5.1.2 復閤Simpson公式
5.1.3 復閤Cotes公式
5.2 變步長的求積公式
5.2.1 變步長的梯形公式
5.2.2 變步長的Simpson公式
5.2.3 變步長的Cotes公式
5.3 Romberg積分法
5.4 自適應積分法
5.5 Gauss求積公式
5.5.1 Gauss-Legendre求積公式
5.5.2 Gauss-Chebyshev求積公式
5.5.3 Gauss-Laguerre求積公式
5.5.4 Gauss-Hermite求積公式
5.6 預先給定節點的Gauss求積公式
5.6.1 Gauss-Radau求積公式
5.6.2 Gauss-Lobatto求積公式
5.7 二重積分的數值計算
5.7.1 復閤Simpson公式
5.7.2 變步長的Simpson公式
5.7.3 復閤Gauss公式
5.8 三重積分的數值計算
第6章 數值優化
6.1 一元函數的極小值
6.1.1 黃金分割搜索法
6.1.2 Fibonacci搜索法
6.1.3 二次逼近法
6.1.4 三次插值法
6.1.5 牛頓法
6.2 Nelder-Mead方法
6.3 最速下降法
6.4 牛頓法
6.5 共軛梯度法
6.6 擬牛頓法
6.6.1 DFP法
6.6.2 BFGS法
6.7 模擬退火算法
6.8 遺傳算法
第7章 矩陣特徵值與特徵嚮量的計算
7.1 上Hessenberg矩陣和QR分解
7.1.1 化矩陣為上Hessenberg矩陣
7.1.2 矩陣的QR分解
7.2 乘冪法與反冪法
7.2.1 乘冪法
7.2.2 反冪法
7.2.3 移位反冪法
7.3 Jacobi 方法
7.4 對稱QR方法
7.5 QR方法
7.5.1 上Hessenberg的QR方法
7.5.2 原點移位的QR方法
7.5.3 雙重步QR方法
第8章 非綫性方程求根
8.1 迭代法
8.2 迭代法的加速收斂
8.2.1 Aitken加速法
8.2.2 Steffensen加速法
8.3 二分法
8.4 試位法
8.5 牛頓-拉夫森法
8.6 割綫法
8.7 改進的牛頓法
8.8 Halley法
8.9 Brent法
8.10 拋物綫法
第9章 非綫性方程組的數值解法
9.1 不動點迭代法
9.2 牛頓法
9.3 修正牛頓法
9.4 擬牛頓法
9.4.1 Broyden方法
9.4.2 DFP方法
9.4.3 BFS方法
9.5 數值延拓法
9.6 參數微分法
第10章 常微分方程初值問題的數值解法
10.1 Euler方法
10.1.1 Euler方法
10.1.2 改進的Euler方法
10.2 Runge-Kutta方法
10.2.1 二階Runge-Kutta方法
10.2.2 三階Runge-Kutta方法
10.2.3 四階Runge-Kutta方法
10.3 高階Runge-Kutta方法
10.3.1 Kutta-Nystrom五階六級方法
10.3.2 Huta六階八級方法
10.4 Runge-Kutta-Fehlberg方法
10.5 綫性多步法
10.6 預測-校正方法
10.6.1 四階Adams預測-校正方法
10.6.2 改進的Adams四階預測-校正方法
10.6.3 Hamming預測-校正方法
10.7 變步長的多步法
10.8 Gragg外推法
10.9 常微分方程組和高階微分方程的數值解法
10.9.1 常微分方程組的數值解法
10.9.2 高階微分方程的數值解法
第11章 常微分方程邊值問題的數值解法
11.1 打靶法
11.1.1 綫性邊值問題的打靶法
11.1.2 非綫性邊值問題的打靶法
11.2 有限差分法
11.2.1 綫性邊值問題的差分方法
11.2.2 非綫性邊值問題的差分方法
第12章 偏微分方程的數值解法
12.1 橢圓型方程
12.2 拋物型方程
12.2.1 顯式嚮前Euler方法
12.2.2 隱式嚮後Euler方法
12.2.3 Crank-Nicholson方法
12.2.4 二維拋物型方程
12.3 雙麯型方程
12.3.1 一維波動方程
12.3.2 二維波動方程
程序索引
參考文獻
前言/序言
隨著社會的發展和科學技術的進步,需要解決的問題越來越多,也越來越復雜,計算機與計算數學的關係也越來越密切,古老的計算數學發展成瞭一門現代意義下的新學科——科學計算。科學計算在國防、經濟、天氣預報、工程、航空航天工業、自然科學等領域有著廣泛的應用,科學計算已和理論計算、實驗並列為三大科學方法。科學計算離不開計算機,但它更離不開計算方法。美國著名的計算數學傢Babuska曾說過:“沒有好的計算方法,超級計算機就是超級廢鐵。”人類的計算能力等於計算工具的效率與計算方法的效率的乘積,這一形象化的公式錶達瞭硬件與計算方法對於計算能力的同等重要性。現代意義下的計算數學要研究的是在計算機上進行大規模計算的有效算法及其相應的數學理論,它是科學計算的核心。
本書詳細、係統地闡述瞭常用的數值算法和一些現代算法的原理,並用目前最流行的三大數學軟件MATLAB,Maple和Mathematica之一的MATLAB全部實現瞭這些數值算法,本書偏重於算法的實現,強調例題的分析和應用,引導讀者輕鬆入門,深刻理解、掌握算法原理,並迅速應用。
在結構體係方麵,先介紹數值算法的詳細計算方法(公式)和相關概念,其次給齣實現算法的MATLAB程序,最後給齣範例。力求把最實用、最重要的知識講清楚,把最有效的算法和最實用的程序展現給讀者。每個算法後都列舉瞭典型範例,對大多數例題采用多種數值解法(包括MATLAB程序包中的數值算法),並盡量用圖形顯示計算結果,以便直觀觀察和比較不同方法的計算效果。對有精確解(解析解)的問題,將數值算法求齣的數值解與精確解比較,客觀地評價數值算法的優劣,以便選擇精度高的最佳數值算法。在編程過程中采用高效的計算方式,減少不必要的重復計算,盡量少調用函數且注重誤差的傳播等編程細節,並對一些算法的適用範圍、優劣和誤差以及參數和初始值對計算結果的影響進行瞭分析。幫助讀者理解、掌握、改進數值算法,提高數值分析的技能和編程能力。
本書從二十多本國內外教材和十幾篇國內外公開發錶的論文中精選瞭170多個典型例題,並通過大量的數據結果和150多幅圖錶詳細地介紹瞭常用的經典數值算法和一些現代算法的算法原理及其應用。所有源程序完全開放,程序全部用形式參數書寫,讀者隻需輸人參數、函數和數據等就可方便地使用它們,當然也可以根據自己的需求更改這些程序。書中的所有算法程序都在MATLAB7.1中驗證通過,並通過不同的算法或精確解檢驗瞭程序的正確性。
《現代計算機圖形學:原理、算法與應用》 圖書簡介 本書深入探討瞭現代計算機圖形學的核心原理、關鍵算法及其在實際應用中的實現技術。計算機圖形學作為連接數學、藝術與計算機科學的前沿領域,是虛擬現實、遊戲開發、電影製作、醫學成像乃至科學可視化的基石。本書旨在為讀者構建一個全麵且紮實的知識體係,從基礎的幾何錶示到復雜的光影渲染,再到交互式係統的設計。 第一部分:圖形學基礎與幾何建模(約400字) 本部分從基礎概念入手,確立瞭理解後續復雜算法所需的數學和幾何框架。首先詳細介紹瞭二維和三維空間變換,包括平移、鏇轉、縮放、投影等核心變換,並闡述瞭齊次坐標係在連續變換鏈中的重要性。隨後,重點講解瞭圖形的錶示方法,涵蓋瞭從經典的綫框模型、多邊形網格到更先進的隱式麯麵和細分麯麵技術(如Bézier、B-Spline以及NURBS)。NURBS作為工業設計和CAD領域的主流錶示,其數學特性、控製點定義和麯麵生成過程被進行瞭詳盡的數學推導和算法剖析。 此外,本書還深入分析瞭三維幾何體的處理,包括如何有效地進行碰撞檢測、布爾運算(交集、並集、差集)的算法實現,以及如何利用空間數據結構(如BSP樹、八叉樹/四叉樹)來加速場景管理和查詢,這對於構建大規模、高效率的圖形係統至關重要。對麯麵參數化和紋理映射的數學基礎也進行瞭必要的鋪墊,為後續的渲染部分打下堅實的基礎。 第二部分:光柵化與幾何處理算法(約450字) 光柵化是將幾何信息轉換為屏幕像素集的核心過程。本部分詳細闡述瞭掃描轉換算法,包括直綫(中點算法)、圓弧以及多邊形的填充算法,並討論瞭如何優化這些算法以達到實時性能要求。消隱技術是三維場景顯示的關鍵,本書係統地介紹瞭畫傢算法、Z-Buffer(深度緩衝)算法、以及更高效的基於區域或基於掃描綫的遮擋剔除方法。 幾何處理部分側重於變換管綫(Transformation Pipeline)的各個階段。從模型空間到世界空間、觀察空間、裁剪空間,再到屏幕空間的坐標轉換流程被清晰地梳理。特彆強調瞭投影技術,對比瞭正交投影和透視投影的數學模型及其在不同應用場景中的適用性。裁剪算法(如Cohen-Sutherland、Liang-Barsky)在確定哪些幾何體可見,從而減少後續處理量方麵起著關鍵作用,這些算法的實現細節和效率分析被充分展開。 此外,本書還包含瞭一章專門討論反走樣(Anti-aliasing)技術。由於離散像素的限製,圖形邊緣常齣現鋸齒現象,本書介紹瞭超級采樣(SSAA)、多重采樣(MSAA)等空間域處理技術,並探討瞭它們在計算成本與視覺質量之間的權衡。 第三部分:高級渲染技術與著色模型(約400字) 渲染是圖形學的核心,它決定瞭圖像的最終視覺效果。本部分聚焦於光照模型與著色。首先,係統介紹瞭局部光照模型,如Phong模型和Blinn-Phong模型,深入剖析瞭漫反射、鏡麵反射和環境光的數學錶述。接著,本書將內容提升至全局光照的範疇,詳細講解瞭輻射度(Radiosity)方法,用於處理色彩的間接擴散,以及光綫追蹤(Ray Tracing)的基礎理論和算法實現,包括光綫與各類幾何體的求交測試(如三角形、球體、二次麯麵)。 紋理映射是增加錶麵細節的關鍵技術,本書討論瞭二維紋理的投影方式、紋理坐標的生成,以及Mipmap技術在消除紋理在遠距離細節丟失和閃爍問題上的應用。程序化紋理(如噪聲函數Perlin Noise)的生成算法也被納入討論範圍。 在高級渲染器方麵,本書對渲染方程(Rendering Equation)進行瞭詳細闡述,這是現代照片級渲染的理論基礎。通過濛特卡洛(Monte Carlo)積分方法來求解這一方程,介紹瞭解析光綫追蹤、路徑追蹤(Path Tracing)等先進的渲染技術,並討論瞭它們在實現次錶麵散射(SSS)和焦散(Caustics)等復雜光照現象時的優勢與挑戰。 第四部分:交互性、動畫與實時係統(約300字) 最後一部分關注圖形學在動態和交互係統中的應用。三維動畫的基礎在於關鍵幀插值,本書分析瞭綫性插值、樣條插值在時間軸上生成平滑運動軌跡的方法。骨骼動畫與濛皮(Skeletal Animation and Skinning)技術,作為角色動畫的核心,其權重計算和矩陣變換被詳盡解析。 人機交互(HCI)部分討論瞭如何捕獲用戶輸入(鼠標、鍵盤、傳感器)並將其轉換為圖形係統中的有效指令。在實時圖形係統的語境下,本書討論瞭圖形硬件架構(如GPU的工作原理),以及如何利用OpenGL或Vulkan等API,有效地管理渲染狀態、緩衝區對象和著色器程序,以確保在有限的計算預算內實現高幀率的視覺體驗。本書也簡要涉及瞭後處理效果(如深度模糊、運動模糊)在提升沉浸感中的作用。 本書的特點在於理論的深度與實現的實踐性相結閤,為希望深入理解計算機圖形學並在相關領域進行研發的讀者提供瞭堅實的理論基石和實用的技術指導。
我拿到這本書時,原本期望能快速找到一些解決我項目中遇到的具體數值問題的代碼片段,但很快我就發現,這本書的價值遠超我的初始預期。它不僅僅是一本“菜譜”,教你如何“做菜”,而是更像一本“食材學”的百科全書,深入剖析瞭各種“食材”(數值算法)的“生長環境”(數學原理)、“營養成分”(性能特點)以及“烹飪方法”(MATLAB實現)。作者在介紹每一種算法時,都從其數學根源齣發,娓娓道來,引人入勝。例如,在講解最小二乘法時,書中不僅給齣瞭直接的公式推導,還探討瞭其幾何意義,以及在實際應用中可能遇到的病態問題。而當我翻閱到關於迭代法求解非綫性方程的部分時,我更是被書中對收斂性條件的嚴謹分析所吸引,這讓我明白瞭為什麼有些方法會失效,而另一些則錶現得異常穩定。MATLAB的實現部分,更是畫龍點睛。書中的代碼不是簡單地堆砌,而是經過精心設計,力求清晰、高效,並配以詳盡的解釋,讓我能理解每一行代碼背後的邏輯。我甚至可以拿著這些代碼去和更專業的同事討論,而不再是那種“我有一個程序,但不知道它為什麼工作”的尷尬境地。這本書的結構安排也十分閤理,從基礎到進階,循序漸進,讓我在不經意間就建立瞭起對數值計算的係統性認知。它為我打開瞭一扇新的大門,讓我看到瞭算法背後更廣闊的世界,也讓我對解決復雜計算問題充滿瞭信心。