第17章 Fortran与其他语言 由于纯粹的Fortran语言在图形操作能力上的缺陷,为了使数值计算程序能够通过图形用户界面(GUI)与用户进行即时的交互,通常会采用多种语言混合编程的方式来处理。 不同的程序设计语言在处理不同的变量类型特别是子程序的参数传递处理方式上有很大的不同,只要在混合编程时注意变量类型和参数传递的处理方式,就能够充分利用不同程序设计语言的优势。Fortran语言在数值计算方面具有突出的优势,能够利用Fortran语言进行混合编程以提高数据处理方式的其他程序设计语言。包括:C/C++、Delphi、MASM、Visual Basic等。其中较为常见的是与MATLAB、Visual Basic语言进行混合编程,提高这两种语言工具在进行大批量数据处理时的效率。 本节主要介绍Fortran语言同MATLAB、Visual Basic语言的混合编程方法以及编程过程中需要了解的一些注意事项。
17.1 Fortran与MATLAB MATLAB的名称来源于Matrix Laboratory(即矩阵实验室),它是MathWorks公司开发的一款优秀科学计算软件。MATLAB将优秀的数值计算、符号运算和图形环境结合起来,广泛的应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作之中。自1984年第一代MATLAB软件问世以来,MATLAB就一直在不断的发展和丰富,功能和应用领域都有了很大的扩展。目前最新的MATLAB版本已经发展到了R2007b(7.5.0)版。 Fortran语言的一大弱点就是图形操作能力较差,通常需要借助别的程序设计语言或是利用编译器扩展来实现图形图像的操作。尽管MATLAB在工程和科研领域应用较多,而且图形处理能力相当突出,但是在一些规模较大的实际应用上面缺乏足够的效率。如果配合Fortran语言在数值计算方面的优势,加上MATLAB在图形显示方面的长处,则可以在Fortran程序中调用MATLAB的功能来实现计算结果的实时显示。
17.1.1 系统配置 在MATLAB中通过MEX文件来使用Fortran,需要对系统配置有一个必要的了解:系统需要安装MATLAB应用程序的接口组件及相应的工具;使用的Fortran编译器必须能够支持32位的动态链接库(即能够编译生成Windows系统下的DLL文件或Linux系统下的O文件)。具备了上述基本软件条件后,还需要对MATLAB进行一些必要的配置。首先,在MATLAB命令行窗口中输入如下命令来对MEX文件的应用进行配置: mex -setup 接下来MATLAB会询问用户是否需要它自动定位已经安装的编译器: Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers [y]/n?
17.1.2 MEX文件的编写 配置成功MATLAB的外部文件接口之后,就可以使用Fortran语言编写MEX文件了。Fortran语言版本的MEX文件源程序主要由两大部分组成——入口子程序和计算子程序。这两种子程序在外部文件接口程序中分别用于完成不同的任务,下面分别进行说明。 1.入口程序和计算子程序 2.MEX文件的实例一 3.MEX文件的运行 4.MEX文件的实例二 5.MEX文件的实例三
17.1.3 MEX文件调用MATAB Fortran语言的MEX文件除了可以调用Fortran源代码外,还可以通过MATLAB提供的API函数mexCallMATLAB来完成对MATLAB内部函数、运算符、M文件的调用。
17.1.4 Fortran调用MATLAB 除了在MATLAB中通过MEX文件来调用Fortran源代码外,还可以通过对编译器进行设置来实现在Fortran中调用MATLAB引擎。这种应用通常用于Fortran语言作为计算前端进行数据的处理,而使用MATLAB作为图形处理或是其他处理功能后端的领域。这一类型的文件接口又被称为MAT文件。 1.MATLAB引擎的配置 下面就来说明在系统中如何配置使用MATLAB引擎。首先也需要在MATLAB命令常口中使用如下命令来配置相应的环境: mex –setup 2.配置Compaq Visula Fortran编译环境 3.应用实例 4.实例的运行 在Compaq Visual Fortran中编译通过上述程序代码或是在MATLAB命令行窗口中输入如下命令进行编译: mex –f %MATLAB%\bin\win32\mexopts\cvf66engmatopts.bat %PATH%fengdemo.f
17.2 Fortran与VB 在视窗程序开发工具中,Microsoft公司推出的Visual Basic在易学性、易用性和开发速度方面的优势较为突出。配合使用Fortran编写计算内核,使用Visual Basic编写用户界面是工程开发中比较好的选择。而且使用Visual Basic同样可以实现漂亮的图形显示结果,当然这需要对Visual Basic的图形编程较为熟悉。 微软公司开发的Visual Basic是相当流行的视窗应用程序开发工具。这是一个完全基于事件编程模式的可视化程序设计语言,在功能上已经远远超出了它的原型——BASIC语言。目前该软件开发工具已经发展了好几版,最新的版本是Visual Basic 2008,该版本中的Express版是一个供个人用户免费使用版本,可以在Microsoft公司的主网上免费下载。
17.2.1 供VB调用的Fortran源代码 下面先给出将要在Visual Basic中应用的Fortran源代码,其中的各个子函数将会分别用于处理变量、数组、字符串等常用数据类型。 (详细内容请参照本书) 上面的代码中总共编写了3类函数,涉及了程序设计中经常会遇到的变量、数组和字符串等基本数据类型的处理。Fortran语言在编译后会将过程名默认转化为大写的形式,如果不想采用这种形式,则可以在源代码中加入编译设置选项。 !DEC$ ATTRIBUTES ALIAS : “Calculate_Area” :: CALCULATE_AREA 这段编译器设置语句的目的就是通过ALIAS选项将过程名CALCULATE_AREA改写成Calculate_Area。
17.2.2 VB中的管理代码 在Visual Basic中调用Fortran语言编写的过程时,只需要在声明过程时写清楚要调用的过程放在哪个DLL文件中,并且将参数的类型正确编写出来就可以了。 下面给出使用Visual Basic语言编写的主程序,该程序用于响应用户在图形界面上的输入,例如单击按钮、输入数据等,并负责调用正确的计算函数来进行相应的数值处理。
17.2.3 程序的运行说明 程序的初始运行界面如图所示: