MATLAB结合C/C++建立独立的应用程序

原创 2004年02月01日 23:22:00

MATLAB结合C/C++建立独立的应用程序

作者: CodeHunter

 

MATLAB提供了丰富的数学函数库,再加上MATLAB本身的工具箱函数,以及丰富的第三方开发的工具箱函数,大大降低了我们处理复杂数学运算模型时的难度。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

开发商业软件时,如果应用了MATLAB的函数库,必定使我们的开发效率大大提高,同时MATLAB函数库的高效率性、可维护性、可扩展性正好适应商业软件的开发需求。

 

但是在我们发布商业软件时不可能给每个使用者安装上一套MATLAB,那要付出极其昂贵的代价,到底怎样用MATLAB建立独立的应用程序呢?下文将结合简单的实例具体而微得阐述两个可供选择的方法。

 

本文将以Windows 2000 作为开发平台,Borland C++ Builder6(以下简称BCB)作为开发工具,结合MATLAB6.1来阐述MATLAB函数的应用。

1 准备工作

MATLAB为开发软件提供了一个开发人员工具箱,使用它提供的函数库,就能够开发出我们自己的程序。建立MALTLABBCB的开发环境是我们首要完成的工作。

1.1 MATLAB所提供的函数库的架构

首先我们要了解MATLAB的函数库的架构如图1.1,这样我们才能够清楚的知道,我们即将调用的函数来自哪里。

 

 

 

 

User Code

MATLAB M-File Math Library

MATLAB API Library

MATLAB Math Build-In Library

MATLAB Utility Library

ANSI C Library

MATLAB Graphics Library

MATLAB函数库的架构(图1.1

 

1.2 安装配置开发环境

第一步:安装MATLAB6.1

安装完成之后你就会得到开发所必需的文件。在<matlab>/extern目录下就是我们开发需要用到的Library和头文件。表1.2显示了开发所用到的目录及其作用对照表。

 

目录

作用

<matlab>/extern/include

C头文件

<matlab>/extern/include/cpp

C++

<matlab>/extern/lib/win32/Borland

针对各个版本的BCB所提供的lib文件

<matlab>/extern/lib/win32/microsoft

针对各个版本的MS Visual C++所提供的lib文件

<matlab>/extern/examples

MATLAB提供的例子

目录及其作用对照表1.2

 

: 如果你用的bcb6可以使用<matlab>/extern/lib/win32/borland/bc54下面的lib文件

 

第二步:配置bcb的开发环境。

假设你已经安装完了MATLAB6.1BCB,然后打开Project Options 对话框,在Directories/Conditionals面板中的Include Path里面增加<matlab>/extern/include这个路径,Libray path里面增加<matlab>/extern/lib/win32/borland这个路径。然后新建一个项目,并将如下文件加入到项目中去。

<matlab>/extern/lib/win32/borland/bc54/libmatlb.lib

<matlab>/extern/lib/win32/borland/bc54/libmatlbmx.lib

<matlab>/extern/lib/win32/borland/bc54/libmex.lib

<matlab>/extern/lib/win32/borland/bc54/libmmfile.lib

<matlab>/extern/lib/win32/borland/bc54/libmx.lib

如果用到了图形函数则还要把下面两个文件加入到项目中去。

<matlab>/extern/lib/win32/borland/bc54/sgl.lib

<matlab>/extern/lib/win32/borland/bc54/libmwsglm.lib

2 开发项目

经过上面的一番准备,我们已经有了一个开发环境,下文将给出两个简单的例子来阐述如何调用C Math函数和ToolBoxM文件里面定义的函数。

2.1 C Math函数的使用方法

新建一个控制台程序,主程序如下所示:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "matlab.h"                /*必要的头文件*/

int main()

{  

    double num1, num2;

    mxArray *volatile factors1 = NULL; /* 必须定义指向maArray的指针*/

    mxArray *volatile factors2 = NULL;

    mxArray *volatile common_factors = NULL;

    mlfEnterNewContext(0,0); /* 开启自动内存管理的功能*/

    printf("Enter a number: ");

    scanf("%lf", &num1);

    printf("Enter a second number: ");

    scanf("%lf", &num2);

    mlfTry /* 用于捕获错误信息 */

    {  

       mlfAssign(&factors1, mlfFactor(mlfScalar(num1))); /*mlfScalar函数将num1转换成maArray,然后调用mlfFactors生成num1的素数因子*/

       mlfAssign(&factors2, mlfFactor(mlfScalar(num2)));

       mlfAssign(&common_factors, /* factors1factors2的交集复制到common_factors数组中 */

          mlfIntersect(NULL, NULL, factors1, factors2, NULL));

       if (mlfTobool(mlfIsempty(common_factors))) /* 如果没有公因子*/

          printf("%0.0lf and %0.0lf are relatively prime/n",

                   num1, num2);

       else

       {

          printf("%0.0lf and %0.0lf share common factor(s):",

                   num1, num2);

          mlfPrintMatrix(common_factors);

       }

    } /* end mlfTry */

    mlfCatch/* 将捕获的错误显示*/

    {

       mlfPrintf("In catch block: /n");

       mlfPrintMatrix(mlfLasterr(NULL));

    }

    mlfEndCatch

    mxDestroyArray(factors1); /* 释放掉由mlfAssign所申请得maArray数组 */

    mxDestroyArray(factors2);

    mxDestroyArray(common_factors);

    mlfRestorePreviousContext(0,0); /* 关闭自动内存管理 */

    return(EXIT_SUCCESS);

}

 

编译并运行此程序,运行结果类似如下的输出:

Enter a number: 333

Enter a second number: 444

333 and 444 share common factor(s): 3     37

 

 

未完 待续

Matlab与C/C++混合编程接口及应用

http://www.cnblogs.com/lidabo/archive/2012/08/24/2654148.html   在参考文献基础上。补充和完善了。 Matlab与C/C++混合...
  • zoeyunjj
  • zoeyunjj
  • 2015年11月05日 17:36
  • 1859

C/C++与Matlab混合编程初探

Matlab 拥有丰富的功能,编程简单。不过,有些情况下,Matlab程序的执行速度比较慢。C/C++编译执行的程序速度比较快,编程难度上比Matlab要高一些。因此存在一种方案,就是使用Matlab...
  • bendanban
  • bendanban
  • 2014年07月15日 21:42
  • 27136

C/C++ 中调用matlab 的两种方式

matlab中在数值计算方面有很大优势,如:矩阵计算 求解方程等。 在C/C++开发中,我们实现相同的功能往往很复杂,我们可以在C/C++开发环境下调用matlab进行混合编程。 下面主要...
  • u013575812
  • u013575812
  • 2016年04月20日 14:27
  • 10435

Matlab转c与c++代码

作为一个强大的科学计算软件,matlab广泛运用于较多领域,以其简单的编程风格,便利的调试环境等等众多优点,在编写算法与测试的时候通常用到。然而很多的实际运用上matlab毕竟还不是很普及,相反还是c...
  • on2way
  • on2way
  • 2015年10月17日 15:36
  • 19131

Matlab与C/C++/Java的一些区别

Matlab与C/C++/Java的一些区别
  • jzj1993
  • jzj1993
  • 2014年02月08日 15:42
  • 2489

独立成分分析及Demo

独立成分分析
  • hit1524468
  • hit1524468
  • 2017年03月05日 12:03
  • 803

在Matlab中调用C/C++程序<一>

本文转载自:点击打开链接 师兄的博客。 在Matlab中调用C/C++程序有以下优点: (1)对于用C/C++语言编写好的程序,我们不需要再改写成Matlab程序; ...
  • LiFeitengup
  • LiFeitengup
  • 2013年06月17日 10:32
  • 8583

MEX文件调试—MATLAB调用C++程序—混合编程

转载:http://www.blogbus.com/shijuanfeng-logs/106781870.html MATLAB要调用C++程序步骤: 1. 在MATLAB命令行敲:m...
  • huixingshao
  • huixingshao
  • 2015年02月06日 14:21
  • 1817

matlab和C/C++混合编程--Mex (六)参数传递

最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题。现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加。首先讲讲写Mex的一些常规规定,然后我...
  • pursh0000
  • pursh0000
  • 2016年05月04日 13:54
  • 3470

设置 Matlab 的 C/C++ 编译器

在进行 Matlab 与 C/C++ 混合编程时,由于 Matlab 并不自带 C/C++ 编译器,要使用系统的编译器,因此就是涉及到给 Matlab 指定编译器的问题。但是很多时候系统默认的编译器的...
  • iceanter
  • iceanter
  • 2016年11月02日 14:25
  • 471
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MATLAB结合C/C++建立独立的应用程序
举报原因:
原因补充:

(最多只允许输入30个字)