实现VC与Matcom的接口步骤

2016-02-19 16:18 6 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享实现VC与Matcom的接口步骤,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

实现VC与Matcom的接口步骤

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

  Matcom是Mathworks公司推出的第一个由Matlab到C++的编译开发软件平台,它的可视化界面,方便丰富的调试功能和对数学库的强大支持受到广大技术人员的重视。现在的最高版本为Matcom4.5。

  我们可以通过在Matcom中file菜单下的compile to exe or dll调用.m文件编译,在Matcom的debug目录下找到生成的cpp、exe、dll文件。把需要的文件加到VC开发环境的工程中,再包含头文件就可以实现调用。也可以直接在VC环境下使用科学运算库,即Matcom的Matrix,它是按照Matcom的语法在VC中实现类似于Matlab函数的方法。但是这里还有一种将Matcom集成到VC环境的方法,即安装Visual Matcom的方式,这种方式操作更加简便易行,只需要熟悉Matlab编程,经过简单的步骤就可以轻松实现VC环境中调用Matlab。下面介绍Visual Matcom开发环境的安装。

  (1)拷贝inusertype.dat文件(指Matcom的安装路径)到CommonMSDev98Bin目录(指VC的安装路径)下。

  (2)运行Visual C++,从菜单条中选择Tools/Customize/Add-ins and Macro Files,选择Browse,改变文件类型为Add-ins(.dll),选定inmvcide.dll文件,确定。

  (3)这样,可以在Visual C++的开发环境中看到一个如图1所示的Visual Matcom工具栏,表明安装成功。

下面以一个线性方程组的求解过程为例,介绍通过Matcom实现VC对Matlab程序的调用,运行环境:Win2000、Matlab6.1、Matcom4.5、Visual C++6.0  (1)Matlab运行环境中编写程序equation.m,其代码如下:

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

%equation 求解线性方程组的解%线性方程组形如:A*X = Bfunction X = equation(A, B)X = AB;
 
  (2)这里以一个简单的控制台程序为例,其它程序基本相同。在VC环境中建立一个名为Test的Win32 Console Application工程。  (3)点击Visual Matcom工具栏上的m++图标,选择保存过的Matlab文件equation.m进行转化。如果看到的转化信息提示没有错误就可以观察到此时在FileView标签中多了m-files,C++files created from m-files,Matrix等文件。并且该工程目录下增加了equation.h,equation.cpp,equation.mak,equation.r等的4个文件。这时会在VC中出现一个转换完毕的文件,文件中如果报告有错误就要考虑是否程序有问题,可以双击C++files文件夹下的equation.m进行修改,再重新转化直到没有错误报告为止。  (4)在Test工程下建立一个文件test.cpp调用转化的Matlab函数,代码为:
#include "stdio.h" #include "matlib.h" //提供转化后C++代码中使用的数据类型,函//数原型及常数#include "equation.h" void main(){ /*解线性方程组: X =  */ initM(MATCOM_VERSION); //初始化matlib库 Mm a,b,x; //使用矩阵类Mm构造矩阵a,b,x. a = (BR(1),2,3,semi,4,5,6,semi,7,8,1); //给矩阵a赋值,BR是Matrix库的一个 //宏,用于定义一个矩阵的开始;semi是库的//一个常量,用于分隔不同行的矩阵元素 b = zeros(3,1); //初始化矩阵b为零矩阵3行1列 b(1,1) = 37; b(2,1) = 85; b(3,1) = 69; //给矩阵b赋值 x = equation(a,b); //调用转化的函数,求解线性方程组的解 for (int i = 1; i = x.rows(); i++) //把解矩阵X的元素显示出来 {  for (int j=1;j=x.cols();j++)   printf("x(%d,%d)=%f",i,j,x.r(i,j)); } exitM(); //结束对matlib库的调用 return;}
 
  注意:程序中涉及到了两个成员函数.rows()和.cols(),它们分别返回矩阵的行数和列数;x.r(i,j)代表矩阵x的第i行第j列的元素。  (5)编译运行后结果为x(1,1) = 3.000000 x(2,1) = 5.000000 x(3,1) = 8.000000与实际结果一致。  总结:如果需要转换的.m文件不是一个函数,只是一些Matlab命令的集合,则要在工程目录下找到转换文件的.cpp文件,将其中的C代码拷贝到需要调用它的函数里面。Matcom克服了mcc命令只能编译一个独立.m文件的缺点,当所编译的.m文件依赖于其他.m文件时,只要把被调用的.m文件与要编译的.m文件放在同一目录下,生成的被调用文件的.h和.cpp文件插入到VC开发的工程中就可以了。  上面只是一个简单的控制台工程的例子,我们也可以建立其它类型的工程,只要在需要调用转换后函数的程序中包含matlib.h并且在响应函数中初始化matlib库initM(MATCOM_VERSION);结束调用后做结束工作exitM();就可以了。

注:转自天极网。

来源:http://www.tulaoshi.com/n/20160219/1611598.html

延伸阅读
导读: 摘要: 本文主要介绍了多任务管理中的多进程管理技术,对进程的互斥运行、子进程的创建与结束等作了较详细的阐述。 关键词: VC++6.0;进程;环境变量;子进程 进程 进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内...
VC界面的实现 作者:wwei 下载源代码 微软C++开发工具VC++由于其界面友好,实用而被许多软件开发者所模仿,但是直接用MFC来实现VC界面不仅要耗费大量时间,而且在实现类似VC工具条停靠,拉伸算法,菜单项和工具条按钮自定义功能时,由于涉及到很多关于 MFC 本身实现的细节问题很容易使程...
无论是sqlserver的用户,还是pb的用户,作为c/s结构开发环境,他们在网络通信的实现上,都有一种共同的方法——命名管道。由于当前操作系统的不惟一性,各个系统都有其独自的通信协议,导致了不同系统间通信的困难。 !-- frame contents -- !-- /frame contents -- 尽管tcp/ip协议目前已发展成为internet的标准,但仍不能保证c/s应...
    PhotoShop的图像处理功能很强,其中有一个功能是将灰度图像转换为彩色图像,数字图像处理中,也经常要遇到灰度图像与彩色图像相互转换的问题,如何自己解决这个问题,值得大家探讨,现将我解决这类问题的方法陈述如下: 工程应用中经常要遇到需要把彩色图像到灰度图像的变换的问题,采集卡过来的图像为彩色图像,为加...
java的比较器有两类,分别是Comparable接口和Comparator接口。 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口。 让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下: 代码如下: class Student im...

经验教程

650

收藏

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