地球物理专业Matlab 课程教学
2020-12-30中国地质大学北京地球物理与信息技术学院叶高峰
中国地质大学(北京)地球物理与信息技术学院 叶高峰 金 胜
Matlab 软件是由美国的Clever Moler 博士于20 世纪70 年代开发的第四代计算机语言,设计者的初衷是解决线性代数课程的矩阵运算问题,但由于其可扩充性,Matlab 已经不仅仅是一个“矩阵实验室”了。它集科学计算及计算结果可视化、图像处理、声音处理于一身,并提供了丰富的Windows 图形界面设计方法,已经广泛应用于工程学科的研究领域。Matlab 在美国已经成为工科大学生必学的四种计算机编程语言之一。20 世纪90 年代以来,Matlab 语言已在我国逐渐推广使用,现在已应用于各学科研究和许多高等院校。
地球物理专业是地质类院校的主干专业,相对地质学等专业而言,对学生的计算机应用能力、程序设计能力要求很高。Matlab 软件丰富的函数库、文件操作功能以及高级低级兼备的科学计算结果可视化功能能够很好地满足专业需求。特别是灵活多变、高级与低级兼备的计算结果可视化功能方便绘制各类图件,有利于加深学生对专业知识的理解。
一、Matlab 简介
Matlab 是直译式语言,简单易懂且语法限制不严格,对于有一定编程基础的学生而言,非常容易掌握。变量命名规则也和其他程序设计语言类似,运算符同样包括算术运算符、关系运算符、逻辑运算符及特殊运算符等几大类。就结构化程序设计而言,包含if-else、if-end 分支和switchcase-end 分支,for-end 当型循环和while-end 直到型循环。总体上而言,Matlab 语法规则较为简单,具体规则和C、Fortran 等语言基本一致。
不同之处在于,Matlab 所定义的运算都是矩阵之间的运算,需要满足矩阵运算规则。另外,Matlab 语言所编写的代码,即M 文件(后缀为“.m”),并不需要编译生成可执行文件,直接就可以在Matlab 环境下运行或调用,即分别为脚本M 文件和函数M 文件。Matlab 本身的函数库便是由一系列函数M 文件组成(核心函数为dll 动态链接库),某一领域的一些函数M 文件便构成了Matlab 在该领域的工具包。正是基于这种扩充性,Matlab 在各个科学领域都可以有很好的发展与延伸,比如,可以编写地球物理领域的数据处理或反演解释工具包。
二、计算结果可视化
地球物理专业所需绘制的图件主要为一维曲线图及部分特殊图件、二维平面等值线图或色块图以及三维数据绘制切片图。另外,有时需要绘制三维表面图件。对于这些图件,Matlab 都有一些对应函数实现。
一维曲线图绘制函数plot 是Matlab 绘图函数的基础,几乎所有其他Matlab 绘图函数都是在plot 的基础上扩充的。比如,要绘制一条正弦函数曲线,在M-editor 下输入“x=0:0.1:2*pi;y=sin(x);plot(x,y,’bs’);”,然后保存为一个M 文件即可运行生成正弦曲线,x 变量的步长为0.1,在数据点上绘制颜色为“b”即蓝色、线性为“s”即方块的曲线,可以方便地改变步长和线条颜色和线型。Matlab 会根据x、y 坐标的值域自动生成坐标轴,此外还可用xlabel、ylabel、title、legend 函数在图件上放置x 轴和y 轴,标注图名以及图例。semilogx、semilogy 及loglog 函数是plot函数的扩展,可分别实现x 轴、y 轴单对数坐标成图及双对数坐标作图。最后,Matlab 还可以绘制统计直方图(bar)、阶梯图(stairs)、向量场图(quiver)、火柴棒图(stem)、玫瑰图(rose)以及误差棒图(errorbar)等特殊图件。地球物理专业能用该类绘图功能绘制的图件主要有测深曲线、地震波速、走向角度统计图等图件。
二维图件绘制函数主要为contour 和pcolor,前者可以绘制等值线图,比如等高线、视电阻率或视极化率等值线、波速等值线、重磁异常等值线等,后者可以绘制色块图,比如反演得到的电阻率模型或波速、密度模型,以某一颜色代表某一数值,对断面进行填充。同样,Matlab 函数可以轻易实现图件的修饰和标注。
此外,对于地球物理领域的三维数据体,比如电法勘探三维反演结果,可以采用三维切片图绘制函数slice 来绘制数据体不同部位的二维切片,也可以采用surf 函数来绘制三维表面图,突出某些重要信息。
最后,若需要对图件进行一些符合行业规范的定制,可以采用matlab 的句柄绘图功能,把所绘制图件的轴对象、线对象或面对象等分别赋给句柄变量,采用set 函数来任意设置这些句柄以达到定制图件的目的。
三、文件操作
地球物理仪器设备自动化程度非常高,绝大多数仪器都可以自动记录数据文件,但不同的仪器设备记录格式通常各不相同,因此经常需要编写代码读写文件。由于Matlab 提供了大量的文件操作函数,且所有变量都以双精度矩阵保存,在文件操作上相对其他软件具有较大优势。
Matlab 文件打开函数为fopen,如“fid=fopen(‘test.dat’,‘r’)”,其中“test.dat”为文件名,“r”指定文件打开方式为读取,也可指定打开为“w”或“a”,分别表示写入与在文件结尾附加内容,“fid”为文件号,用于以后对文件的操作;文件关闭函数为fclose,如“fclose(fid)”。对ASCII 文件内容的读取、写入函数分别为fscanf 和fprintf,对二进制文件内容的读写函数分别为fread 和fwrite。一般程序设计语言对文件的读写都要以循环的方式逐行进行,但Matlab 可以矩阵的方式读入数据体,对规则数据体文件可以一次性读写。最后,Matlab 有很多文件读写的辅助函数,例如行读入函数(fgetl)、判断文件结尾函数(feof)等,这些函数结合一些字符串处理函数如字符串替换(strrep)、字符串转为数值(str2num)、字符串查找(findstr)等,能够很好地读写一些字符串较多的固定格式文件或根据特殊字符读写文件的某一部分。
如上所述,Matlab 软件的文件读写函数众多,提供了大量二进制文件、明码格式文件的读写手段,且其对字符的操作和对数据的运算功能明显优于常规的编程语言或软件,可以方便地应用在地球物理专业固定格式文件的读写中,结合丰富的绘图函数,输入或输出的结果可以迅速实现各种形式的可视化,例如野外采集数据的实时回放、科学计算结果的可视化和输出等。
四、图形用户界面设计
地球物理专业作为一个传统但科技含量很高的地学专业,分支方法众多,需要大量专业知识,且在资料处理、反演解释过程中需要大量输入参数,若设计一些图形用户界面可以方便非专业用户操作和使用。
图形用户界面的设计原则是要兼顾简单性(Simplicity)、一 致 性(Consistency) 和习惯性(Familiarity),对一些专业软件还要考虑其他因素。Matlab 中,可以采用GUIbuilder 进行控件拖放式界面设计,也可以采用编写代码的方式来构建图形用户界面。代码式构建图形用户界面主要包括界面菜单函数(uimenu)、上下文菜单函数(uicontextmenu)和控件函数(uicontrol),其中控件主要有单选框、多选框、按钮、静态文本、输入框、列表框和滚动条等10 余种。最后,Matlab还有不少对话框函数可供调用,如询问对话框(questdlg)、错误对话框(errordlg)、警告对话框(warndlg)和输入对话框(inputdlg)等,可以为参数选择或输入提供很多提示和便捷。
地球物理专业有一些较为复杂的数据处理、反演软件,这些软件都需要专业的输入文件,如数据文件、模型文件、参数文件等,输出文件也为固定格式文件。因此,用Matlab 的图形用户界面控件编写一些界面,供用户可视化生成输入文件、输出文件成图,有利于学生在学习过程中的理解和掌握,提高学习效率。
对地球物理专业学生的Matlab 教学具有重要现实意义。学生在专业课学习期间需要进行大量的课堂实习、专业实习,Matlab 能够很好地实现文件操作、科学计算以及计算结果的可视化等工作,能够让学生把主要精力投入专业课的学习与实践中,并加深对所学专业方法和相关物理意义的理解。
此外,大多数学生在毕业设计期间都用到了Matlab 的可视化功能,部分学生甚至直接以Matlab 开发一些应用作为毕业论文的主要内容。可以毫不夸张地说,Matlab 是地球物理专业学生在本科学习阶段最重要的计算机课程,是完成专业知识学习必备的工具软件,地球物理专业应该加大对该课程的投入与扶持。