matlab2010和2014语法,VS2010与matlab的混编配置

弄了大半天,终于搞定了VS210与matlab混编的配置问题,俗话说:磨刀不误砍柴工。如果配置出了问题,则多么好的程序也无济于事,因为无法编译运行啊!当然有些方案是在网站上搜到的啦:

matlab 版本:matlab7.1 环境: VS2010

配置:

1. 菜单:Project → Properties...

选择Configuration Properties下的 VC++ Directories。

在 Include

Directories栏目中添加matlab相关的include文件。例如..\MATLAB\R2010b\extern\include和..\MATLAB\R2010b\extern\include\win32

在 Library Directories栏目中添加matlab相关的lib文件。例如:C\program\MATLAB\R2010b\extern\lib\win32\microsoft。(为了保险,我把这个lib文件也加进去了:...\MATLAB\R2010b\lib\win32)

2. 菜单:Project → Properties...

选择Configuration Properties下的 Linker → Input。

在 AdditionalDependencies栏目中输入项目需要引用matlab的的lib文件库。例如:libeng.lib

libmx.liblibmex.lib等(其实这几个是可以自动加进去的)。如果要对所有的配置添加lib库文件,可先将左上角的Configuration

中的 Active(Debug) 设置为 Allconfigurations

3.菜单:Project → Properties... 选择

ConfigurationProperties下的 Linker → General。在 Additional include

Directories栏目中,添加库所在的目录名称。如:C:\Program

Files\MATLAB71\bin\win32这一步相当的重要,不然的话,各种dll文件找不到,lib文件找不到之类的报错,头都大死了。

现在就可以混编程序了~再也不用编译时出现好多 undefined 和xxx之类的错误哦~

如果在编译时出现 不能打开XX.lib之类的错误,肯定是配置出了问题

下面的程序以供参考:

#include

#include

using namespace std;

#include

#include

void main()

{

// 定义循环变量

int i = 0, j = 0;

//

状态变量

int nStatus

= 0;

// 定义MATLAB引擎指针

Engine *ep;

// 定义mxArray变量指针

mxArray *A, *B;

// 定义矩阵数组

//

注意:VC中矩阵的行列次序与MATLAB正好时相反,需要转置。

double arData[3][3] =

{{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}};

double arResData[3][3];

// 输出原矩阵

cout<

for(i = 0; i < 3; i++)

{

for(j = 0; j <

3; j++)

{

cout<

";

}

cout<

}

// 打开MATLAB引擎

ep = engOpen(NULL);

if(ep == NULL)

{

cout<

exit(EXIT_FAILURE);

}

//

是否显示MATLAB窗口:true-显示;false-隐藏。

nStatus =

engSetVisible(ep, false);

if(nStatus

!= 0)

{

cout<

exit(EXIT_FAILURE);

}

// 为mxArray变量分配空间

A = mxCreateDoubleMatrix(3,3,mxREAL);

B = mxCreateDoubleMatrix(3,3,mxREAL);

if(A == NULL || B == NULL)

{

cout<

exit(EXIT_FAILURE);

}

//

将数组中的数据写入到mxArray空间中

memcpy((void*)mxGetPr(A),(void*)arData,sizeof(arData)); //

将矩阵变量A写入到MATLAB引擎空间

nStatus =

engPutVariable(ep,"A",A);

if(nStatus

!= 0)

{

cout<

exit(EXIT_FAILURE);

}

//

执行引擎命令求矩阵A的逆矩阵

nStatus =

engEvalString(ep,"B=inv(A)");

if(nStatus

!= 0)

{

cout<

exit(EXIT_FAILURE);

}

//

从MATLAB引擎空间中读取执行结果

B =

engGetVariable(ep,"B");

//

将矩阵变量B复制到数组arResData中

memcpy((void*)arResData,(void*)mxGetPr(B),sizeof(arResData));

//

释放矩阵变量空间

mxDestroyArray(A);

mxDestroyArray(B);

//

关闭MATLAB引擎

engClose(ep);

//

输出计算结果

cout<

for(i = 0; i

< 3; i++)

{

for(j = 0; j < 3; j++)

{

cout<

";

}

cout<

}

//

暂停程序,查看结果

system("pause");

}

经过本人运行时完全可以的!下面为运行结果:

blog_4cccd8d30100zh6l.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值