计算物理学是基于物理原理,运用计算数学的方法,借助计算机编制程序或应用程序进行数值计算和模拟,以研究复杂物理问题的一门学科。计算物理与理论物理、实验物理一样,在物理研究中具有重要的作用。
本书的计算物理学主要以Matlab语言为基础,介绍数值计算、符号运算、图形处理相关的编程语句、结构化程序设计、计算方法程序实现,进而给出多个计算物理问题实例的数值计算程序编制、程序运行、数值结果显示以及结果图示,为计算物理的相关工作奠定基础。
(1)成为了联系理论物理和实验物理的桥梁;
(2)渗透到了物理学的各个领域;
(3)是揭示多层次复杂体系物理规律的重要手段。
(1)工业革命:机械是对体力的延伸;
(2)信息革命:计算机是对脑力的延伸;
(3)计算物理:计算模拟是对物理研究方法的延伸。
(1) Matlab计算语言及其编程:
①数值计算;
②符号运算;
③图形处理;
④程序设计。
(2)基本数值计算方法的Matlab程序实现。
(3)物理问题的计算、模拟实例。
(1)是否与预估结果一致?是否合理?
(2)与已知的解析解或在极端条件下的解是否相符?
(3)仔细检查程序以确保结果正确。
以下举例说明Matlab中的数值计算、符号运算以及图形处理。从简单的三个实例可以看出:Matlab语言简单,程序编制容易,犹如在演草纸上书写数学公式或文字;数值计算快捷,可实现向量、矩阵、数组所有元素的计算;简单定义符号量后,可实现符号的相关运算;绘图功能强大,二维、三维图形的绘制简单易行,并配有与数值相应的颜色。
例 1.1 数值计算:计算水在温度为 0、20、40、60、80 摄氏度时的黏度。已知水的黏度随温度的变化公式为: u = u 0 /(1 + aT + bT 2 ),其中 u 0 为 0 摄氏度水的黏度,其值为 1.785 ×10 -3 ,参数 a =0.03368, b =0.000221。
解 :根据题意,对参数 a 、 b 和 u 0 直接赋值,向量 T 给出多个温度值,直接由黏度随温度变化的表达式计算不同温度水的黏度 u ,计算由Matlab程序ex1_1.m实现。
Matlab程序ex1_1.m如下。
可以看出,Matlab语言编程如同在演草纸上书写等式或表达式,同一行可以有多条程序语句,程序编制清晰、简单、易行。但在程序书写中,大多数标点符号都有运算作用,例如:“%”后的内容为注释,“;”表示运行结果不在命令行窗口显示,“./”表示点除运算,即矩阵(数组)元素的除法运算,等等。
Matlab命令行窗口运行程序ex1_1.m,得到数值结果和结果图 1-1。
图 1-1 例 1.1 结果图:水的黏度 u 随温度 T 的变化
从程序ex1_1.m运行的数值结果可以看出,水温度分别为 0、20、40、60、80 摄氏度时,计算得到的黏度分别为 1.785 ×10 -3 、1.013 ×10 -3 、6.609 ×10 -4 、4.677 ×10 -4 、3.494 ×10 -4 ,这些数值结果以向量 u 和 uT 在工作窗口显示, u 是默认的保留至小数点后 4 位数字显示, uT 是科学计算法的形式保留至小数点后 3 位数字显示,这些计算结果如图 1-1 所示。
例 1.2 符号运算:求方程 3 x 2 -exp( x )=0 的精确解和不同精度的近似解。
解 :若所需求解的方程有解析解,在Matlab环境中可调用内置函数solve,得到方程的符号解,由此得到方程的精确解、不同精度的近似解。
本题求解中,将方程定义为符号函数equ(x),直接调用solve内置函数,得到待求解的方程在[-1,1]内的符号解,通过符号的数值结果显示、符号绘图函数ezplot和fplot的调用,得出不同精度的数值结果和结果图示。
编制的Matlab程序ex1_2.m如下。
在Matlab的命令行窗口运行程序ex1_2.m,得到数值结果和结果图 1-2。
图 1-2 例 1.2 结果图:非线性方程 3 x 2 -exp( x )=0 的解
程序ex1_2.m在Matlab环境下运行,得到非线性方程 3 x 2 -exp( x )=0 的两个符号解(精确解)结果和结果图 1-2。从结果可以看出,s以符号形式显示,si以符号的数值形式显示32 位有效数值,s6 以符号的数值形式显示 6 位有效数值,其结果分别是 0.910008 和-0.458962;从结果图 1-2 可以看出,非线性函数 3 x 2 -exp( x )与 x 轴有三个交点,而数值结果只显示了两个,这是因为调用solve得到的结果默认状态下是在[-1,1]范围内,第三个解在该区域范围外。
例 1.3 图形处理:绘制 z = x ·exp(- x 2 - y 2 )的三维图,其中:-2≤ x ≤2,-2≤ y ≤2。
解 :通过调用二维网格划分内置函数meshgrid,给出变量 x 和 y 在范围[-2,2]内等间距0.1 的节点矩阵,由函数表达式 z = x ·exp(- x 2 - y 2 )直接计算与 x 和 y 同维的节点上的函数值 z ,调用三维点图函数plot3 和面图函数surf,绘出函数 z 随 x 和 y 变化的两个三维图,第一个子图 subplot (1,2,1)是三维点连线图,第二个子图 subsurf (1,2,2)是三维面图,其第三维 z 的值与颜色棒的值对应。
Matlab程序ex1_3.m如下。
在Matlab的命令行窗口运行程序ex1_3.m,得到结果图 1-3。
图 1-3 例 1.3 结果图:函数 z = x ·exp(- x 2 - y 2 )的三维图
从图 1-3 可以看出,第一个子图plot3 给出各个 x 节点位置上 z 随 y 值变化的一系列曲线,曲线颜色由系统默认颜色依次变化;第二个子图surf给出 x 、 y 取值区域范围内各个节点上 z 值连成的曲面, z 值与颜色棒的值对应。