C++调用matlab数学函数问题

下面是书上说的实现方法:VisualC++中使用MATLAB语言C,C++数学函数库MATLAB开发环境的C,C++数学函数库以mwArray结构体为数据核心,使用mcc... 下面是书上说的实现方法:

Visual C++中使用MATLAB语言C,C++数学函数库

MATLAB开发环境的C,C++数学函数库以mwArray结构体为数据核心,使用mcc命令将M文件转换成的C/C++文件可以直接在Viusal C++开发环境中使用,但是编译后的C,C++文件一般程序冗长,代码可读性较差。在熟练掌握C, C++数学函数库的基础上,读者可以使用mwArray结构体自行编写基于应用程序接口(API)函数库C, C++数学库的C/C++文件,可以极大优化程序代码,减少程序代码存储空间,提高程序代码的执行效率和执行速度。在下文的讲述中,将通过一个简单实例来演示如何利用mcc命令创建独立与MATLAB平台运行的exe文件。

首先使用MATLAB的M语言建立用户所需要的特定功能M 文件,在这里,为了简单而言,建立一个实现魔方阵功能的M文件magicCreat.m。

function y = magicCreat(n)
y = magic(n)

然后从%matlabroot%\ extern\examples\compiler (%matlabroot%为读者计算机系统中MATLAB的安装路径,本文中为

C:\Program Files\MATLAB\R2006a\extern\examples\compiler)

路径下拷贝main_for_lib.c和main_for_lib.h.到当前的工作路径下,以便mcc编译命令调用。然后创建调用magicCreat.m文件的C语言程序如下:

#include "stdio.h"
#include "math.h"
#include "libPkg.h" //编译建立的库头文件
main( int argc, char **argv )
{
mxArray *N; /* 输入变量矩阵指针 */
mxArray *R = NULL; /* 结果矩阵指针 */
int n; //默认的M文件输入变量数值
/* 获取命令行参数,如果命令行输入小于2,则输入参数默认为5 */
if (argc >= 2) {
n = atoi(argv[1]);
} else {
n = 5;
}
//初始化MCR和libPkg函数库
mclInitializeApplication(NULL,0);
libPkgInitialize();
/* 得到输入参量的数值 */
N = mxCreateDoubleScalar(n);
/*调用magicCreat.m编译后的文件mlfMagicCreat*/
mlfMagicCreat(1, &R, N);
/* 释放内存空间*/
mxDestroyArray(N);
mxDestroyArray(R);
//结束libPkg库和MCR
libPkgTerminate();
mclTerminateApplication();
}

其中libPkg.h为mcc命令编译后的库文件。该文件结构清晰,首先程序代码包含相关必要的头文件和libPkg.h文件,主程序入口,变量的定义,然后初始化MCR和libPkg函数库,调用magicCreat.m编译后的文件mlfMagicCreat,调用结果用矩阵R存储,最后释放内存空间,并结束libPkg库和MCR。在程序结束之前及时地释放内存空间是一个很好的编程习惯。将该程序存储为magicCreatCFile.c,接下来使用mcc命令编译该文件,在MATLAB命令行窗口中输入:

mcc -W lib:libPkg -T link:exe magicCreat magicCreatCFile.c main_for_lib.c

经过mcc命令编译后,可以发现在当前路径下,出现一个magicCreat.exe文件,为一个可执行程序文件,在MATLAB命令行窗口输入:
>> !magicCreat

Extracting CTF archive. This may take a few seconds, depending on the
size of your application. Please wait...
...CTF archive extraction complete.
y =

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

程序正常运行,由于命令行输入变量个数小于2,因此M文件输入参数默认值为5,程序产生一个5阶的魔方阵,如果需要输入第2个输入参数,则可以按照以下方式在MATLAB命令行窗口中输入:
>> !magicCreat 3 %创建一个3阶的魔方阵

y =

8 1 6
3 5 7
4 9 2

但是 在%matlabroot%\ extern\examples\compiler 下面找不到说说的文件……链接libPkg.h出错……

麻烦解决下

20分先放这,会追加的~~
展开
 我来答
jackone32123
2009-10-14 · TA获得超过441个赞
知道小有建树答主
回答量:327
采纳率:0%
帮助的人:280万
展开全部
楼主的matlab是哪版,貌似05b以后就不能在c中直接调用MATLAB数学函数库了。
能用的只有在c中创建一个matlab engine,通过调用engine实现条用相应的数学函数。不过很慢,不建议使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5舍213
2009-10-03 · TA获得超过109个赞
知道答主
回答量:59
采纳率:0%
帮助的人:51.2万
展开全部
怎么会找不到呢?安装目录找对了吗?我的目录是:
D:\program files\MATLAB\R2007a\extern\examples\compiler
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
日向淳正
2009-10-06 · TA获得超过2811个赞
知道大有可为答主
回答量:2770
采纳率:0%
帮助的人:1407万
展开全部
搜索该头文件,复制到你的工程中去,然后添加。再编译试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式