【vc++精品源码栏目提醒】:网学会员--在 vc++精品源码编辑为广大网友搜集整理了:利用VC_封装MATLAB6_5C_数学库探讨测量平差软件的开发 - 技术总结绩等信息,祝愿广大网友取得需要的信息,参考学习。
第28卷第5期2008年9月海 洋 测 绘HYDROGRAPHICSURVEYINGANDCHARTINGVol128No15Sep12008收稿日期:2007212228修回日期:2008204228作者简介:袁建东19822男河南新野人硕士研究生主要从事3S集成技术的应用研究。
利用VC封装MATLAB615C数学库探讨测量平差软件的开发袁建东张耀民西安科技大学测量工程系陕西西安 710054 摘要:根据测量数据处理的特点:常常要面对大量的矩阵运算和海量的数据处理尤其是矩阵的相乘和求逆。
通过对VC610和MATLAB615特点的分析探讨了利用VC调用MATLAB615C/C数学库快速开发测量平差软件的必要性和可行性简要地总结和分析了两者联合编程的实现方法。
较详细地介绍了作者用VC调用MATLAB615C/C数学库开发测量平差软件的过程解决了高程网间接平差的计算。
关键词:VC610MATLAB615C/C数学库测量数据处理矩阵计算编译环境数据转换中图分类号:P20712 文献标识码:B 文章编号:0805200692041 引 言分析、处理测量数据如测量平差、GPS高程与水准高程换算、遥感图像处理、坐标换算等都涉及到线性代数、最优控制、超定方程组的求解问题常常要面对大量的矩阵运算和海量的数据处理尤其是矩阵的相乘和求逆。
以往国内外是用C或FORTRAN等语言需要编写相应的子程序模块处理矩阵运算要消耗大量的时间和精力还有可能犯错。
如果希望系统能绘制、生成和保存图形那么开发工作量就更是惊人。
采用VC610和MATLAB615联合编程解决这个问题可以提高软件的开发效率大大缩短软件的开发周期。
目前国内外VC和MATLAB615的混合编程越来越多地被应用在土木、建筑等工程领域的数值计算中因为这样可以充分发挥各自优势提高计算效率节省大量的人力物力。
MATLAB615应用于测绘领域主要是在数据处理和成果可视化方面应用不够广泛且实践少。
基于MATLAB615的测量平差数据的处理程序可以在最短的时间内完成测量平差的算法预设计与验证以及一些特殊的矩阵计算如Kalman滤波、白滤波、小波变换1等。
利用现在流行的面向对象编程的语言如VisualBasic、VisualC等编制界面再利用接口技术调用VC环境中封装的MATLAB615数学函数库最大限度地利用现有软件开发平台尤其是跨平台进行专业软件的开发可以充分高效地利用不同软件平台各自的优势势必能有效的缩短开发周期提高系统性能。
2 简述VC610和MATLAB615环境VC610良好的开发环境方便人们开发Windows程序即使对C/C不是很熟悉根据向导操作也可以很快开发出较理想的单文档或多文档图形操作界面实现一些简单的Windows功能。
但是应用C去编制数值处理模块和生成图形以及保存图形远没有MATLAB615方便和简捷。
MATLAB615在数值分析和处理上是第一流的尤其擅长矩阵运算。
如方阵A的求逆只要一个简单的命令invA广义逆为PinvA矩阵A和B的相乘也只要输入CA3B就可实现1。
在MATLAB615中一个一定格式存储的数据文件用load命令可以直接赋值给一个数值变量无需像其他高级语言中要求的进行数组循环赋值从而大大提高了编程效率。
如测量控制网间接平差计算中的参数估计模型XATPA-1ATPL1只要输入xinvA′PAA′pl2就可求出全部待估参数并保存到向量X中。
MATLAB615功能强大的图形句柄系统和二维/三维数据可视化让开发人员可以非常直观地查看变量MATLAB615提供的全面的工具箱函数以及他人编写的相关专业的函数集合可以让开发者大大地缩短仿真周期。
MATLAB615编程也有它的不足编制的M文件需要一定的运行环境而且程序是解释性运行这海 洋 测 绘第28卷大大降低了其计算速度对大规模的数值计算和分析力不从心而运行的高效率则正是C、C程序的优势。
另外MATLAB615保存的M文件是源程序代码不利于算法和数据的保密。
而且MATLAB615程序不能脱离其运行环境因此不适于开发商用软件。
所以如果想利用它开发适合工程需要的高效率测量数据处理软件就需要探讨结合其他高级语言如VC610实行联合编程的方法。
这样就可以把一些计算过程留给MATLAB615而应用VC610进行函数调用和开发可视化图形操作界面联合编译生成软件系统。
3 比较目前VC610与MATLAB615联合编程的几种方法3 要实现联合编程关键是VC610与MATLAB615的接口这里简单地叙述并比较以下几种方法。
311 通过MATLAB615Engine方式4MATLAB615Engine是指一组MATLAB615提供的接口函数支持C语言MATLAB615Engine采用C/S客户机/服务器模式MATLAB615作为后台服务器而C程序作为前台客户机通过Windows的动态控件与服务器通信向MATLAB615Engine传递命令和数据信息从MATLAB615Engine接受数据信息。
用户可以在前台应用程序中调用这些接口函数实现对MATLAB615Engine的控制。
采用这种方法几乎能利用MATLAB615全部功能引擎应用程序也可以直接使用API函数MATLAB615提供了一系列例程方便其他应用程序调用。
但是需要在机器上安装MATLAB615软件而且执行效率低因此在实际应用中不采用这种方法在软件开发中也不可行适合个人使用或做演示用因此本文不做介绍。
312 采用动态连接库DLL1在MATLAB615提供的两个DLL文件:libmat1dll、libmx1dll。
其中封装有可供C程序调用的API函数集。
DLL是Windows的一种特别的可执行文件多个Windows应用程序可以同时访问它具有固定的共享数据段。
而且该数据段在Windows卸载它之前会一直保留在内存中因此可以通过DLL实现用户程序和MATLAB615的数据传输和函数调用。
通过利用MATLAB615的32位动态连接库DLL生成相应的可被C调用的DLL文件然后在用户程序中加载该DLL这样用户程序就可以操作该DLL数据段中的数据故用户程序实现了对MATLAB615的调用。
313 使用MATCOM工具翻译MATLAB615源代码5这是个第三方控件很小8M多原本属于Mathtool公司后来被MathWorks公司合并了使用该工具可以将m脚本文件和m函数转化成相同功能的CC文件。
314 使用MATLAB615的Combuilde工具6COM是componentobjectmodule的简称它是一种通用的对象接口任何语言只要按照这种接口标准就可以实现调用它。
MATLAB615新推出来的Combuilder就是把用MATLAB615编写的程序做成Com组件供其他语言调用。
该方法实现简单通用性强而且几乎可以使用MATLAB615的任何函数注意:不支持脚本文件脚本文件使用时要改为函数文件因此在程序较大、调用工具箱函数或调用函数较多时推荐使用。
315 用MATLAB615自带的MATLAB615Compiler7MATLAB615Compiler的作用是将m文件转化成C/C代码也就是通常所用的mcc命令这种源代码需要用C/C编译器编译连接成独立应用程序在将m文件转成独立应用程序的过程中生成的C/C文件原则上是可以被其他的C/C代码调用的编译器可以通过设置mcc命令的选项将m文件编译成动态链接库文件、C/C文件、可执行文件等一系列文件。
316 直接调用MATLAB615的C/C数学函数库8本文采用此方法MATLAB615中提供了可以供C/C语言调用的C/C数学函数库其中包含了大量用CC语言重新编写的MATLAB615数学函数并且函数库中提供了大量各种矩阵操作函数在VC中可以直接使用这些函数通过这些函数可以在VC中方便地实现在MATLAB615中矩阵运算功能。
这种方法可以很灵活的调用MATLAB615来编写应用程序但要求读者对CC语言比较熟悉。
4 利用VC调用MATLAB615C数学库开发测量平差软件411 编译环境的配置本文直接调用MATLAB615的C/C数学函数库首先需要配置编译环
上一篇:
孙鑫C 视频教程
下一篇:
变味的朋友圈,你烦不烦?