C#科学计算实践:从基础到高级算法

5星 · 超过95%的资源 需积分: 32 23 下载量 160 浏览量 更新于2024-07-27 1 收藏 7.04MB PDF 举报
"C#科学计算讲义,宋叶志编著,人民邮电出版社,内容涵盖C#在科学计算中的应用,包括线性方程组解法、正交变换、最小二乘、随机数、插值、非线性方程、最优化、微分方程数值解等算法。" 在科学计算领域,C#作为一种现代化的编程语言,正逐渐被用于数值运算,特别是在.NET框架的支持下。虽然传统的Fortran语言在数值计算中占据重要地位,但C#因其易读性、面向对象的特性以及安全性,逐渐成为一种可行的选择。C++虽然在矩阵处理上相对不便,但可以通过自定义类和构造函数来优化。C#吸取了C++和Java的优点,避免了它们的一些常见错误,使得程序员能够更高效地构建数值计算程序。 本讲义详细介绍了多种科学计算方法的C#实现,包括但不限于: 1. **线性方程组的解法**:讲解了迭代解法(如高斯-赛德尔迭代、雅可比迭代)和直接解法(如高斯消元法、LU分解)。这些方法在解决大型线性系统时尤为重要。 2. **正交变换与最小二乘计算**:涉及QR分解、Gram-Schmidt正交化过程,以及最小二乘问题的求解,适用于数据拟合和优化问题。 3. **鲁棒估计**:探讨在存在异常值或噪声的情况下,如何进行数据处理和参数估计,确保计算结果的稳定性。 4. **随机数的产生**:介绍了各种随机数生成器,如线性同余法、Mersenne Twister等,用于模拟实验和概率模型。 5. **插值法**:如拉格朗日插值、牛顿插值,用于近似未知函数,构建光滑曲线。 6. **非线性方程求解**:包括牛顿法、二分法等,解决单变量或多变量的非线性方程问题。 7. **多元非线性最优化算法**:如梯度下降法、拟牛顿法,用于寻找函数的极值点。 8. **微分方程数值方法**:如欧拉法、龙格-库塔方法,用于求解常微分方程初值问题。 此外,本书还强调了源代码的开放性,读者可以自由获取并研究这些算法的实现,以加深理解并应用于实际项目中。作者的长远目标是建立一个跨语言的算法库,覆盖数值代数、逼近理论、统计分析、机器学习等多个领域,为科研和工程实践提供便利。 通过阅读《C#科学计算讲义》,开发者不仅可以学习到科学计算的基本概念,还能掌握将这些概念转化为C#代码的技能,从而在C#环境下进行高效、准确的科学计算。这本书对于希望将C#应用于科学计算领域的程序员来说,是一份宝贵的参考资料。
2013-10-22 上传
C#科学计算讲义光盘源码,找了好久才收集到, VS2010版. 引言 1 第1章 C#程序设计基础 9 1.1 计算机、程序设计与算法 9 1.1.1 计算机结构 9 1.1.2 操作系统 10 1.1.3 机器语言与高级语言 10 1.1.4 程序设计与算法 10 1.2 C#历史与概述 11 1.2.1 C语言:结构化编程语言的高峰 11 1.2.2 C 语言; 面向对象与大型程序 11 1.2.3 Java语言:可移植、安全性与Internet 11 1.2.4 C#;.NET主打语言 12 1.3 集成开发环境介绍 12 1.4 面向对象程序设计 16 1.4.1 封装 16 1.4.2 多态 16 1.4.3 继承 17 1.5 数据类型与运算符 17 1.5.1 简单数据类型 17 1.5.2 数组 17 1.5.3 运算符 17 1.5.4 赋值运算符 18 1.6 程序控制结构 18 1.6.1 顺序结构 18 1.6.2 分支结构 18 1.6.3 循环结构 20 1.6.4 控制结构的嵌套 21 1.7 类的设计及对象实现 21 1.7.1 定义类 22 1.7.2 创建对象 22 1.7.3 方法 22 1.7.4 构造函数 23 1.7.5 析构函数与垃圾回收 23 1.8 运算符重载及索引器 24 1.8.1 运算符重载 24 1.8.2 索引器 26 1.8.3 面向对象思想在C#程序设计中的重要性 27 1.9 GUI编程 28 1.10 本章小结31 第2章 线性方程组迭代解法 32 2.1 Jacobi 迭代法 32 2.1.1 基本原理 32 2.1.2 实验内容与数据 33 2.1.3 程序源代码 33 2.1.4 实验结论 37 2.2 Gauss-Seidel迭代法 38 2.2.1 基本原理 38 2.2.2 实验内容与数据 39 2.2.3 程序源代码 39 2.2.4 实验结论 43 2.3 逐次超松弛迭代法44 2.3.1 基本原理 44 2.3.2 实验内容与数据 44 2.3.3 程序源代码 45 2.3.4 实验结论 49 2.4 Richardson迭代法 50 2.4.1 基本原理 50 2.4.2 实验内容与数据 50 2.4.3 程序源代码 50 2.4.4 实验结论 54 2.5 广义Richardson迭代法 55 2.5.1 基本原理 55 2.5.2 实验内容与数据 55 2.5.3 程序源代码 55 2.5.4 实验结论 60 2.6 Jacobi超松弛迭代法 60 2.6.1 基本原理 60 2.6.2 实验内容与数据 61 2.6.3 程序源代码 61 2.6.4 实验结论 65 2.7 最速下降法 66 2.7.1 基本原理 66 2.7.2 实验内容与数据 66 2.7.3 程序源代码 67 2.7.4 实验结论 71 2.8 共轭梯度法 72 2.8.1 基本原理 72 2.8.2 实验内容与数据 72 2.8.3 程序源代码 72 2.8.4 实验结论 77 2.9 本章小结 77 第3章 线性方程组的直接解法 78 3.1 三角方程组 78 3.1.1 基本原理 78 3.1.2 实验内容与数据 79 3.1.3 程序代码 79 3.1.4 实验结论 83 3.2 高斯消去法 83 3.2.1 基本原理 83 3.2.2 实验内容与数据 84 3.2.3 程序源代码 84 3.2.4 实验结论 89 3.3 选主元消去法 90 3.3.1 基本原理 90 3.3.2 实验内容与数据 90 3.3.3 程序源代码 90 3.3.4 实验结论 96 3.4 Crout分解 97 3.4.1 基本原理 97 3.4.2 实验内容与数据 98 3.4.3 程序源代码 98 3.4.4 实验结论 103 3.5 Doolittle分解 103 3.5.1 基本原理 103 3.5.2 实验内容与数据 104 3.5.3 程序源代码 104 3.5.4 实验结论 108 3.6 追赶法计算三对角方程 109 3.6.1 基本原理 109 3.6.2 实验内容与数据 110 3.6.3 程序源代码 110 3.6.4 实验结论 114 3.7 行列式的计算 115 3.7.1 基本原理 115 3.7.2 实验内容与数据 115 3.7.3 程序源代码 115 3.7.4 实验结论 119 3.8 本章小结 120 第4章 正交变换与最小二乘计算方法 121 4.1 对称正定阵的Cholesky分解 121 4.1.1 基本原理 121 4.1.2 实验内容与数据 122 4.1.3 程序源代码 122 4.1.4 实验结论 126 4.2 不开平方的Cholesky分解 127 4.2.1 基本原理 127 4.2.2 实验内容与数据 127 4.2.3 程序源代码 127 4.2.4 实验结论 132 4.3 QR分解之Householder镜像变换方法 133 4.3.1 基本原理 133 4.3.2 实验内容与数据 134 4.3.3 程序源代码 134 4.3.4 实验结论 140 4.4 修正的Gram-Schimdt正交化方法 141 4.4.1 基本原理 141 4.4.2 实验内容与数据 142 4.4.3 程序源代码 142 4.4.4 实验结论 147 4.5 求解法方程计算最小二乘问题 147 4.5.1 基本原理 147 4.5.2 实验内容与数据 149 4.5.3 程序源代码 149 4.5.4 实验结论 157 4.6 QR分解法计算最小二乘问题 158 4.6.1 基本原理 158 4.6.2 实验内容与数据 159 4.6.3 程序源代码 159 4.6.4 实验结论 167 4.7 加权最小二乘与Gauss-Markov估计 167 4.7.1 基本原理 167 4.7.2 实验内容与数据 169 4.7.3 程序源代码 169 4.7.4 实验结论 178 4.8 具有先验信息的贝叶斯估计 178 4.8.1 基本原理 178 4.8.2 实验内容与数据 179 4.8.3 程序源代码 179 4.8.4 实验结论 189 4.9 工程应用中最小二乘法的实用方法 191 4.10 本章小结 192 第5章 鲁棒估计 193 5.1 M估计的IGGI方案 193 5.1.1 基本原理 193 5.1.2 实验内容与数据 194 5.1.3 程序源代码 196 5.1.4 实验结论 208 5.2 Hampel函数作标准等价权 210 5.2.1 基本原理 210 5.2.2 实验内容与数据 210 5.2.3 程序源代码 212 5.2.4 实验结论 224 5.3 Huber估计 227 5.3.1 基本原理 227 5.3.2 实验内容与数据 227 5.3.3 程序源代码 229 5.3.4 实验结论 241 5.4 本章小结 243 第6章 随机数 244 6.1 乘同余法均匀分布随机数发生器 244 6.1.1 基本原理 244 6.1.2 实验内容与数据 244 6.1.3 程序源代码 244 6.1.4 实验结论 248 6.2 混合同余法均匀分布随机数发生器 249 6.2.1 基本原理 249 6.2.2 实验内容与数据 249 6.2.3 程序源代码 249 6.2.4 实验结论 253 6.3 正态分布随机数 253 6.3.1 基本原理 253 6.3.2 实验内容与数据 254 6.3.3 程序源代码 254 6.3.4 实验结论 261 6.4 蒙特卡罗方法介绍 261 6.4.1 基本原理 261 6.4.2 实验内容与数据 262 6.4.3 程序源代码 262 6.4.4 实验结论 265 6.5 本章小结 265 第7章 插值法 266 7.1 拉格朗日插值 266 7.1.1 基本原理 266 7.1.2 实验内容与数据 266 7.1.3 程序源代码 266 7.1.4 实验结论 270 7.2 牛顿插值法 271 7.2.1 基本原理 271 7.2.2 实验内容与数据 271 7.2.3 程序源代码 271 7.2.4 实验结论 276 7.3 Hermite插值法 276 7.3.1 基本原理 276 7.3.2 实验内容与数据 277 7.3.3 程序源代码 277 7.3.4 实验结论 281 7.4 本章小结 281 第8章 非线性方程数值解法 282 8.1 Picard迭代法 282 8.1.1 基本原理 282 8.1.2 实验内容与数据 283 8.1.3 程序源代码 283 8.1.4 实验结论 285 8.2 牛顿迭代法 285 8.2.1 基本原理 285 8.2.2 实验内容与数据 286 8.2.3 程序源代码 286 8.2.4 实验结论 289 8.3 割线法 289 8.3.1 基本原理 289 8.3.2 实验内容与数据 290 8.3.3 程序源代码 290 8.3.4 实验结论 293 8.4 重根时的迭代改进 293 8.4.1 基本原理 293 8.4.2 实验内容与数据 294 8.4.3 程序源代码 294 8.4.4 实验结论 297 8.5 应用范例:债券到期收益率的计算 297 8.5.1 基本原理 297 8.5.2 实验内容与数据 298 8.5.3 程序源代码 298 8.5.4 实验结论 304 8.6 本章小结 304 第9章 非线性最优化 305 9.1 一维搜索之黄金分割法 305 9.1.1 基本原理 305 9.1.2 实验内容与数据 306 9.1.3 程序源代码 306 9.1.4 实验结论 310 9.2 连续抛物线插值法 311 9.2.1 基本原理 311 9.2.2 实验内容与数据 312 9.2.3 程序源代码 312 9.2.4 实验结论 316 9.3 多维非线性最优化牛顿下山法 317 9.3.1 基本原理 317 9.3.2 实验内容与数据 318 9.3.3 程序源代码 318 9.3.4 实验结论 325 9.4 最速下降法 327 9.4.1 基本原理 327 9.4.2 实验内容与数据 327 9.4.3 程序源代码 327 9.4.4 实验结论 333 9.5 变尺度之DFP方法 333 9.5.1 基本原理 333 9.5.2 实验内容与数据 335 9.5.3 程序源代码 335 9.5.4 实验结论 341 9.6 拟牛顿之BFGS方法 341 9.6.1 基本原理 341 9.6.2 实验内容与数据 342 9.6.3 程序源代码 342 9.6.4 实验结论 349 9.7 本章小结349 第10章 常微分方程(组)的数值方法350 10.1 经典Rung-Kutta方法 350 10.1.1 基本原理 350 10.1.2 实验内容与数据 351 10.1.3 程序源代码 351 10.1.4 实验结论 353 10.2 Gill方法 354 10.2.1 基本原理 354 10.2.2 实验内容与数据 355 10.2.3 程序源代码 355 10.2.4 实验结论 357 10.3 Rung-Kutta方法计算微分方程组 358 10.3.1 基本原理 358 10.3.2 实验内容与数据 359 10.3.3 程序源代码 359 10.3.4 实验结论 363 10.4 Adams-Bashforth三步三阶方法 364 10.4.1 基本原理 364 10.4.2 实验内容与数据 365 10.4.3 程序源代码 365 10.4.4 实验结论 371 10.5 Adams-Bashforth四步四阶方法 372 10.5.1 基本原理 372 10.5.2 实验内容与数据 372 10.5.3 程序源代码 372 10.5.4 实验结论 379 10.6 三阶Adams预测校正方法(PECE) 380 10.6.1 基本原理 380 10.6.2 实验内容与数据 381 10.6.3 程序源代码 381 10.6.4 实验结论 387 10.7 四阶Adams预测校正方法(PECE) 388 10.7.1 基本原理 388 10.7.2 实验内容与数据 389 10.7.3 程序源代码 389 10.7.4 实验结论 396 10.8 辛结构与哈密顿系统的辛算法介绍 397 10.8.1 基本原理 397 10.8.2 实验内容与数据 400 10.8.3 程序源代码 400 10.8.4 实验结论 405 10.9 本章小结 406 附录A C# 数值代数类的抽象与设计 408 附录B 动态链接库与混合编程 428 B.1 静态链接库与动态链接库 428 B.2 C#调用Fortran动态链接库范例 428 B.3 调用可执行函数 433 附录C Linux下C#开发与跨平台编程介绍 444 C.1 Mono简介 444 C.2 Linux下C#IDE开发范例 444