预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第6卷第7期2006年4月科学技术与工程Vol.6No.7Apr.2006 1671-1815(2006)07-0886-04S科cienc学eTec技hnolo术gyan与dEng工ineer程ingc2006Sci.Tech.Engng6.卷 C++Builder与Matlab混合编程的两种方法 杜高鹏翟正军1*徐隽 (西北工业大学软件学院,西安710065;dgp_2003@126.com;西北工业大学计算机学院1,西安710072) 摘要详细论述了C++Builder与Matlab混合编程的两种实现方法。一是在C++Builder中使用COM技术调用Matlab数据。二是脱 离Matlab环境,通过动态连接库方式实现对Matlab工具箱函数的调用。分别给出一个详细的例子。这两种方法都充分发挥了C++ Builder与Matlab的优势,为科学研究和工程技术提供了更强的技术支持。 关键词C++BuilderMatlabCOM组件Mediva软件平台DLL 中图法分类号TP312文献标识码B Matlab是一个高度集成的系统,它把数值计算 1C++Builder与Matlab混合编程的实现方法 和可视化环境集成到一起,非常直观,而且提供了 大量的函数,使其越来越受到人们的喜爱。它集科C++Builder与Matlab混合编程有两种实现方法。 学计算、图象处理、声音处理于一体,具有极高的一种是基于Matlab环境支持,通过在C++Builder中使 编程效率。近年来,Matlab已经从最初的“矩阵实验用COM技术调用Matlab数据实现;另一种则是完全 室”渗透到科学与工程计算的多个领域,在自动控脱离Matlab环境,通过动态连接库方式实现对Matlab 制、信号处理、神经网络、模糊逻辑、小波分析等多工具箱函数的调用,这可以通过一种开发平台 个方向,都有着广泛的应用。BorlandC++Builder是Mediva来实现。相对来说,前者的限制因素较多,而 一种新颖的可视化编程语言,它既具有C++语言的后者则较为方便灵活。 灵活性、高效性,又具有可视化编程的便利性,功能1.1COM方法的实现 丰富强大,界面友好,使用十分方便,但是在矩阵运COM是组件对象模型的简称,是Windows对象 算、数值分析、工程计算等方面,功能则稍嫌不足;的二进制标准。为Windows提供了统一的,面向对象 在工程应用中,我们一般用C++Builder语言编写应的,可扩充的通讯协议。这意味着描述一个对象的 用程序,实现交互界面、数据采集和端口操作等,可执行代码(.dll或.exe文件的代码)可以被其它对象 但C++Builder在数值处理分析和算法工具等方面,执行。即使两个对象使用不同语言来编写的,他们 其效率远远低于Matlab语言。在准确方便地绘制数可以用COM标准来进行通信。在C++Builder中使用 据图形方面,Matlab语言更具有无可比拟的优势。COM技术调用Matlab数据实现方法如下: 此外,Matlab还提供功能强大的工具箱。但Matlab的(1)根据实际需要在Matlab中开发算法,写成函 缺点是不能实现端口操作和实时控制。因此,若能数文件的形式(注意:不能是脚本文件,必须是函数 将两者结合运用,实现优势互补,将大大提高工作文件); 效率。(2)利用Matlab的COMBuilder将M函数编译为 COM组件; (3)在C++Builder中调用COM组件,得到输出。 2005年12月2日收到下面给出一个实例加以分析。 第一作者简介:杜高鹏(1980—),男,陕西西安人,硕士研究生,研究 问题:实验对象为:G(s)=1/(Js2+Bs)在Matlab中 方向:计算机网络及数据库。 *通讯作者简讯:翟正军,(1965—),男,教授,硕士生导师。研究方采用M函数的形式,利用ODE45求解对象方程,然后 向:计算机测控与仿真。在C++Builder中进行仿真,跟踪给定信号。 7期杜高鹏,等:C++Builder与Matlab混合编程两法887 1)在Matlab中编写程序genzong.m和cha.m} 其代码如下:双击Timer1,添加如下代码: functionb=genzong(a);void__fastcallTForm1::Timer1Timer(TObject*Sender) xk=[a(1);a(2)];{k=k+1; para=a(3);ts=a(4);tspan=[0ts];SDZ=sin(2*3.1415*k*ts);//给定信号 [tt,xx]=ode45('cha',tspan,xk,[],para);doublesrc[4];doubleout[2];//传出数据数组 xk=xx(length