当前位置:文档之家› 基于MATCOM 平台的VC++与MATLAB混合编程地震正演模拟(完整版)

基于MATCOM 平台的VC++与MATLAB混合编程地震正演模拟(完整版)

基于MATCOM 平台的VC++与MATLAB混合编程地震正演模拟摘要:正演模拟是地震勘探的重要方法之一。

为解决基于Matcom4.5的VC++与Matlab接口程序的地震正演模拟问题,通过用Matcom4.5与VC++结合编程的新方法实现EDA介质中的地震波正演模拟的实例,结果显示通过Matcom实现VC++与Matlab混合编程的可行性并提高了编程效率。

关键词: Matcom;VC++; Matlab;混合编程;正演模拟MIXED PROGRAMMING OF SEISMIC FORW ARD MODELING BETWEEN VC++Abstract: Forward modeling is one of the important means in seismic exploration. This paper in order to solve the interface program of seismic forward modeling between Matlab and VC++ based on Matcom4.5,by using an example which achieved the results of simulate the wave equation in EDA media by a new method which is mixed programming between Matcom4.5 and VC++,the results show the advantage of efficiency by mixed programming between Matlab and VC++ based on Matcom4.5.Keywords: Matcom;VC++;Matlab;Mixed programming;Forward modeling0引言近年来,随着勘探程度深入化和勘探目标的复杂化,地震勘探无论在采集、处理还是解释技术方面都面临越来越多的挑战。

复杂构造油气田、岩性油气藏和裂缝性油气藏等隐蔽性油气藏的勘探与开发越来越受到地球物理工作者的重视。

为此,需要发展复杂介质的地震波传播理论,使其进一步接近地下介质的实际情况。

正演模拟研究对复杂介质中波的传播具有指导意义[1]。

目前在地震数据处理中应用比较广泛的软件是MATLAB,但由于MATLAB本身的程序编写的一些局限,使得它在处理许多应用问题时灵活性不够。

本文引入MATCOM软件平台,它的功能相当强大,可提供近千个MATLAB的基本功能函数,通过必要的设置,可以直接实现与C++的混合编程,而不必再依赖MATLAB;笔者基于MATCOM4.5的VC++与MATLAB的接口技术实现EDA介质中的地震波正演模拟,此方法提高了代码的使用效率,说明MATCOM与VC++混合编程的可行性,取得较好的效果,为技术人员提供了另一种实现正演模拟的途径,同时也为开展相应其他研究工作奠定了基础[2]。

1VC++与MATLAB接口Visual C++是Windows平台下主要的应用程序开发环境之一,它能方便地实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。

C++与其他高级语言相比具有很高的编译效率。

但在地震信号的图形、图像处理一类的应用中,当程序中涉及到对矩阵的运算时,编程就变得非常复杂。

MATLAB是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,在地震数据的计算、图形和图像处理方面,MATLAB具有其他软件无法比拟的优势。

但是MATLAB使用的是解释性语言,大大限制了它的执行速度,并且源代码的公开不利于算法和数据的保密,局限于MATLAB运行环境而不能用于开发商业软件。

采用VC++和MATLAB混合编程,可以实现两者的优势互补,提高对地震数据处理的效率,具有更广泛的使用范围,为科学研究和工程技术提供更强的技术支持。

MATLAB开发环境提供了丰富的应用接口程序(API)函数库,包括MAT函数库、MEX函数库、MX函数库、Engine函数库,实现与其他工作环境的接口[3]。

1.1 通用VC++与MATLAB接口技术1.1.1 MATLAB编译器(compiler)使用MATLAB Compiler可以将M文件转化为C、C++和MEX文件。

首先使用mex -setup和mbuild -setup命令配置MATLAB Compiler的编译环境,使用mcc 命令将m文件转化为可独立于MATLAB开发环境的动态链接库文件(dll文件)和.exe文件。

在充分熟悉MATLAB开发环境的C/C++数学库前提下,可以实现在C++语言中直接调用MATLAB的C/C++数学库相关命令,从而优化mcc命令自动编译生成的C、C++程序代码。

但是这种方法不能处理嵌套调用脚本m文件,不支持MATLAB对象,不能编译MATLAB的一些内联函数,并且转换代码的可读性较差。

1.1.2 MATLAB引擎技术MATLAB应用程序接口(API)同时提供了一组引擎函数来启动和调用MATLAB 函数。

通过MATLAB引擎技术,可以保持C++编程语言的高效性并可以直接调用MATLAB丰富的工程应用函数,包括复杂的数学分析和信号处理函数等。

MATLAB Engine采用客户机/服务器模式,C/C++程序作为前台客户机,MATLAB作为计算引擎,利用Engine实现MATLAB的强大功能,引擎程序和C++程序各自作为一个进程单独运行,通过进程间的通信机制进行交互。

这种方法,需要在机器上安装MATLAB软件,而且程序执行效率低。

1.1.3 直接调用MATLAB C/C++ Math Library数学函数库MATLAB中提供了可以供C/C++语言调用的C/C++数学函数库,在VC++中可以直接使用这些函数[4]。

但使用这种方法调用MATLAB的工具箱函数有很大困难,适合对C/C++语言比较熟悉的用户使用,且不支持MATLAB中丰富的图形句柄处理函数。

1.2 MATCOM实现MATLAB与Visual C++接口当前MATCOM的最高版本是MATCOM4.5版本,可以支持与Visual C++的混合代码编译。

MATCOM提供了Visual MATCOM工具来实现在Visual C++环境下编译、运行MATLAB的m文件,MATCOM是一个非常有用的.m文件编译器,它有4大优点:①MATCOM是MATHTOOL公司推出的一种MATLAB编译平台,可以对MATLAB函数进行文本编译、直接运行,或者将MATLAB开发环境的m文件编译成.exe文件和.dll 文件,它与VC++有良好的接口,只要包含必要的库文件和头文件即可实现对MATLAB函数的调用,而无需运行MATLAB。

MATCOM转换过程简单,不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件,它还支持一定的图形显示;②在Visual C++中启用Visual MATCOM Add-in插件,可以直接将MATLAB的m文件导入Visual C++环境中,并自动转化为对应的.h头文件和.cpp文件,与MATLAB 自带的编译器(Compiler)相比,MATCOM将m文件转化后的.cpp文件简单、易读,程序代码可读性好;③MATCOM提供了.m文件的方便快捷的编译调试环境,可以使用step、watch、breakpoint等各种调试手段;④MATCOM同时也提供了自带的Matrix <LIB> C++数学库,该数学库包含众多的数学函数,可以实现在Visual C++中使用这些数据函数进行数学分析、信号处理和图像处理等,使用Matrix<LIB>的C++数学库进行C++编程可以极大提高程序代码效率。

MATCOM的矩阵运算部分是基于一个名为Matrix<lib>的C++数学库,这个库提供了绝大多数的关于矩阵类、矩阵操作函数、数值计算函数、数学函数等的定义,在MATCOM中是以lib目录下的*.lib以及windows/system/对应名称的dll 文件提供的。

MATCOM的另一大部分就是图形部分,它是用一种非常流行的绘图OCX控件Teechart来实现的,这种控件对于一般的绘图功能都可以实现,但也存在一定缺陷。

绘图函数功能主要在lib文件和window/system/ago*.dll中定义[5]。

MATCOM编译.m文件时先将.m文件按照与MATCOM的cpp库的对应关系,翻译为cpp源代码,然后用对应版本的C编译器将该cpp文件编译为exe或dll文件,所以,在第一次运行时指定C Compiler的路径是必需的,否则将无法编译。

指定好的C Compiler信息写在Matcom/bin/matcom.ini文件中。

以MATCOM4.5、MATLAB2010b、VC++6.0和Windows7操作系统为例,Visual MATCOM的安装过程为:①安装MATCOM4.5;②拷贝<MATCOM45>\bin\usertype.dat文件到<Visual C++ 6.0>\ Common\ MSDev98\Bin目录下(<MATCOM45>、<Visual C++6.0>分别指MATCOM4.5和VC++6.0的安装路径);③运行Visual C++6.0,从菜单条中选择“工具/定制/附加项和宏文件”,选择“浏览”,改变文件类型为Add-ins(.dll),选定<MATCOM45>\ bin\mveide.dll文件,确信Visual MATCOM Add-in被选定,点击“关闭”;④此时,可以在Visual C++的开发环境中看到Visual MATCOM工具栏,表明安装成功;⑤点击VC环境中Visual MATCOM工具栏第一个或第二个按钮实现m文件向C/C++文件的转换[6-8]。

2基于MATCOM的EDA介质中的地震波正演模拟实例地震波正演模拟是研究复杂地层的重要手段。

数值模拟的方法主要有两类:波动方程法和几何射线法。

波动方程数值模拟实质是求解波动方程,它模拟的地震波场包含了地震波传播的所有信息,为研究地震波的传播机理和复杂地层的解释提供了更多的佐证,所以波动方程数值模拟方法在地震模拟中占有更重要的地位[9]。

2.1 实例首先要建立一个EDA介质模型,进行正演模拟的EDA介质模型大小为t∆=,⨯个网格点,纵波速度为2540m/s,横波速度为1430m/s,1ms 400400∆=∆=∆=。

相关主题