贡献者: addis
在当今时代,数值计算已经成为理科生不可或缺的技能。利用计算机程序计算理论模型,处理实验数据,绘制各种图表等都在学习和研究中都扮演非常重要的角色。虽然一些简单的计算用计算器就可以完成,但许多时候我们需要数以万计的计算量,用计算器就显得不实际了。
计算机的指令等信息在其数字电路中是以二进制 0 和 1(对应低电压和高电压)传输的,然而这样的语言显然不适合人类阅读和编写。为了让计算机按照指定的规则进行运算,我们可以用某种计算机语言(由英文单词,符号和数字组成)写下代码,计算机会把这种代码转换为二进制指令进行相应的运算。
科学计算中,目前比较流行的高级语言有 Matlab,Python,Mathematica 等1。这些语言除了可以进行传统的数值计算外,还有符号计算的功能,例如可以对解析表达式进行不定积分和求导等运算。一般来说,Mathematica 主要用于符号计算,Matlab 和 Python 主要用于数值计算。
本章的数值计算以讲解算法(Algorithm)为主,使用 Matlab 编程,且尽量使用简单的语法,这样即使读者熟悉的编程语言不是 Matlab,也能轻易地改写出相应的代码。本章使用的所有 Matlab 语法都会在前几篇文章中介绍,不要求读者有任何编程基。
本章的符号计算使用 Mathematica 软件和 Wolfram Alpha 网站2。见 “Mathematica 基础”。符号计算主要用于计算解析问题(如复杂的不定积分)或者获得高精度的数值结果(例如计算 $\pi$ 的一万位)。其使用频率远没有数值计算多。
为了让读者熟悉一些科学计算中常用的算法,顺便熟悉 Matlab 编程,本章还介绍了用于求函数根值的二分法 和多区间二分法,用于排序的冒泡法,用于搜索多元函数局部最小值的 Nelder-Mead 算法,以及用于曲线拟合的最小二乘法。
微分方程在物理中无处不在,力学中最基本的牛顿第二定律就是一个常微分方程。虽然我们都希望能得到方程的精确解析解,然而往往只有最简单的一些问题才存在。对于没有精确解析解的问题,我们要么加入一些近似条件得到近似的解析解,要么求助于数值计算,也可以是二者结合3。本章中我们会学习如何计算常微分方程(组)的数值解。
我们先用一阶微分近似的方法举例介绍一般的思路,再介绍更精确的中点法 和四阶龙格—库塔法。
1. ^ 高级语言可以理解为自动化程度较高的语言,优点是编程和调试等较简单,易学易用,缺点是效率较低。比上述语言更低级的语言有 Fortran,C++,C 等,更适合做高性能数值计算。一些大计算量的物理问题可能运行一次需要数小时乃至数星期的时间,这时运行效率是首要考虑因素,而编程和调试的难易反而相对次要。
2. ^ Wolfram Alpha 相当于 Matheematica 的简单网页版,优势在于无需安装软件,用有网络浏览器的设备(包括手机和平板)可随时访问。网址为 wolframalpha.com。
3. ^ 对于一些复杂的问题(尤其在量子力学中)有时即使用数值计算也不能在合理的时间内解出微分方程,这时就要先使用近似化简问题。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利