zoukankan      html  css  js  c++  java
  • 实现VC与Matcom的接口步骤

    实现VC与Matcom的接口步骤

      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)拷贝\bin\usertype.dat文件(指Matcom的安装路径)到\Common\MSDev98\Bin目录(指VC的安装路径)下。

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

      (3)这样,可以在Visual C++的开发环境中看到一个如图1所示的Visual Matcom工具栏,表明安装成功。
    下面以一个线性方程组的求解过程为例,介绍通过Matcom实现VC对Matlab程序的调用,运行环境:Win2000、Matlab6.1、Matcom4.5、Visual C++6.0

      (1)Matlab运行环境中编写程序equation.m,其代码如下:

    %equation 求解线性方程组的解
    %线性方程组形如:A*X = B
    function X = equation(A, B)
    X = A\B;


      (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\n",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();就可以了。
  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/yunbo/p/532849.html
Copyright © 2011-2022 走看看