精通VC与Matlab联合编程(五)

2016-01-29 12:26 12 1 收藏

精通VC与Matlab联合编程(五),精通VC与Matlab联合编程(五)

【 tulaoshi.com - C语言心得技巧 】

精通VC与Matlab联合编程(五)

作者:邓科

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)


浅析VC与MATLAB联合编程<一
浅析VC与MATLAB联合编程<二
浅析VC与MATLAB联合编程<三
浅析VC与MATLAB联合编程<四

  在前面的介绍中,只是简介绍了VC与Matlab程序设计的几个简单例子,很多关键性的知识都没有介绍(例如函数的输入输出格式,VC中调用工具箱函数,编译器的使用,几种方法的混合使用等等)在以后的文章中,将会对这些知识进行介绍(因此标题也改了一下,呵呵,如果有错误的地方,还望大家多多指点)VC调用Matlab的方法有多种,为了对混合编程有一个大概认识,将常用的几种方法中介绍一下:

一、通过Matlab Engine方式
  Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。

二、直接调用Matlab的C/C++数学函数库
  Matlab中提供了可以供C/C++语言调用的C/C++数学函数库,其中包含了大量用CC++语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。可以看出用这种方法可以很灵活的调用Matlab来编写应用程序,但要求读者对CC++语言比较熟悉,可以看出使用这种方法调用Matlab的工具箱函数有很大困难。适合对CC++语言比较熟悉的用户使用,

三、用Matlab自带的Matlab Compiler
  Matlab Compiler的作用是将m文件转化成C/C++代码(也就是通常所用的mcc命令),这种源代码需要用C/C++编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C++文件,原则上是可以被其它的C/C++代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C++文件、可执行文件等一系列文件。到matlab R21.1为止,Matlab Compiler的m程序转换成C/C++代码功能有很多限制:不能转换脚本m文件,只能转换m函数;不能使用matlab对象;不能用input或者eval操作matlab空间变量;不能动态地命名变量,然后用load或者save命令来操作;不能处理具有嵌套调用其他m文件的m文件;不能使用MATLAB内联函数;

四、使用matlab的combuilde工具
  COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。

五、使用matcom工具。
  这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的CC++文件,相比其它方法使用matcom具有如下优点: 转换过程简单(由matcom工具自动实现),容易实现;可以方便的生成动态链接库文件(dll)和可执行文件(exe);不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件;设置环境后,可以使用Matlab的工具箱函数;

但matcom也有以下不足:对struct等类的支持有缺陷,对class数据类型;部分绘图语句无法实现或得不到准确图象,尤其是三维图象;

因此在不涉及到三维做图以及m文件不大的情况下推荐使用。

  以上几种方法可以单独使用,也可以混合使用。这里简单的介绍了VC和matlab接口的几种方法,读者可以根据需要选择适合自己的方法。需要说明的是上以上几种方法并不是相互独立的,而是有相互联系的,比如使用C/C++函数库与使用编译器,对于实现相同功能的程序,直接调用函数库与使用编译器最终生成的代码可能相差不大,只不过一个是直接在VC中写C/C++代码,一个是在Matlab中写好m代码,然后通过编译器将m代码转化成相同功能的C/C++代码,而

来源:http://www.tulaoshi.com/n/20160129/1486108.html

延伸阅读
首先必须初始化网络,可以在app的InitInstance()中用AfxSocketInit()或者直接用 WSAStartup( MAKEWORD(1,1),&wsaData) WORD wVersionRequested WSADATA 初始化 winsock WSACleanUp 然后是初始化套接字的方法,有tcp和udp两种tcp下: SOCKET(AF_INET,SOCK_STREAM,0) bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//同下面的代...
一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OsVersionInf...
1. 如何提取部分网页数据 a. 使用IHTMLDocument2的getElementByTagName,不过你需要IWebBrowser2这个组件来加载网页 b. IXMLHTTPRequest读取网页数据,存入CString,再根据标查找 2. 我需要在固定时间提取网页上的相关信息. 例如:今日油假:4.90元/升 IWebBrowse2 得到IHTMLDocument2指针, IHTMLDocument2指针得到IHTMLElementCollection, ...
首先建议读者明白网络、IP地址、协议等概念。应用层协议TeLnet,FTP,HTTP,DNS,SMTP,POP3等。传输层协议TCP(面向连接、可靠),UDP(无连接不可靠)。UDP实时性好,故广泛使用.网络层协议IP,ICMP(互联网控制报文协议),IGMP(Internet组管理协议). 数据封装:每一层都会加上自己的信息头或者称为协议头.有的层也会加入尾部.传输可以看成为一个在发送端...
1. 显示和隐藏标题栏 方法一:使用API实现 //隐藏TitleBar LONG lStyle = ::GetWindowLong(this-m_hWnd, GWL_STYLE); ::SetWindowLong(this-m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION); ::SetWindowPos(this-m_hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAM...

经验教程

485

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部