分享
 
 
 

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

王朝c/c++·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

作者: CodeHunter

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

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

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

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

1 准备工作

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

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.1和BCB,然后打开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函数和ToolBox及M文件里面定义的函数。

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, /* 将factors1和factors2的交集复制到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

未完 待续

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有