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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于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 modeling

0引言

近年来,随着勘探程度深入化和勘探目标的复杂化,地震勘探无论在采集、处理还是解释技术方面都面临越来越多的挑战。复杂构造油气田、岩性油气藏和裂缝性油气藏等隐蔽性油气藏的勘探与开发越来越受到地球物理工作者的重视。为此,需要发展复杂介质的地震波传播理论,使其进一步接近地下介质的实际情况。正演模拟研究对复杂介质中波的传播具有指导意义[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 C++数学库,该数学库包含众多的数学函数,可以实现在Visual C++中使用这些数据函数进行数学分析、信号处理和图像处理等,使用Matrix的C++数学库进行C++编程可以极大提高程序代码效率。

MATCOM的矩阵运算部分是基于一个名为Matrix的C++数学库,这个库提供了绝大多数的关于矩阵类、矩阵操作函数、数值计算函数、数学函数等的定义,在MATCOM中是以lib目录下的*.lib以及windows/system/对应名称的dll 文件提供的。MATCOM的另一大部分就是图形部分,它是用一种非常流行的绘图OCX控件Teechart来实现的,这种控件对于一般的绘图功能都可以实现,但也存在一定缺陷。绘图函数功能主要在lib文件和window/system/ago*.dll中定义[5]。

相关文档
最新文档