内容简介
《常用数值算法及其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,有效地管理渲染状态、缓冲区对象和着色器程序,以确保在有限的计算预算内实现高帧率的视觉体验。本书也简要涉及了后处理效果(如深度模糊、运动模糊)在提升沉浸感中的作用。 本书的特点在于理论的深度与实现的实践性相结合,为希望深入理解计算机图形学并在相关领域进行研发的读者提供了坚实的理论基石和实用的技术指导。