您的位置:首页 > 编程语言 > MATLAB

c语言调用matlab

2016-03-30 22:02 357 查看
很多种方法啊,我知道啊

可是我的matlab激活不彻底,无法直接编译成dll、lib

让别人帮忙编译,结果32位和64位,平台又不对

所以最好用的matlab engine

环境配置

包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include

库目录增加:C:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft

然后是新增64位平台

这是一个matlab生成dll的文章,里面环境配置说的很清楚

代码

我用的还是engine

百度文库的文章,将如何用引擎的

#include <stdlib.h>
#include<stdio.h>
#include "engine.h"
#include<string.h>
#include<math.h>
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")

#define TEST_SIZE 192
#define RESULT_SIZE 96

void SAE_MATLAB(double * frame,double * result)
{
Engine *ep; //定义Matlab引擎指针。
int i;
mxArray *test_x = mxCreateDoubleMatrix(1,TEST_SIZE, mxREAL); //matlab 数组 test_x
if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
printf("Can't start Matlab engine!\n");

}
else
printf("success\n");

memcpy(mxGetPr(test_x), frame, TEST_SIZE*sizeof(double)); //将数组frame复制到mxarray数组test_x中。

engEvalString (ep, "cd E:\\SAE_MATLAB"); //进入m文件所在文件夹
engPutVariable(ep, "test_x",test_x); //将mxArray数组test_x写入到Matlab工作空间,命名为test_x。
engEvalString (ep, "result=sae_c(test_x)");
memcpy(result,mxGetPr(engGetVariable(ep,"result")), RESULT_SIZE*sizeof(double)); //将result结果存到result数组中。
engClose(ep);
}

int main()
{
int i;
double test_x[TEST_SIZE];
double test_y[RESULT_SIZE];
for(i=0;i<TEST_SIZE;i++)
{
test_x[i]=(i+2.0)/200;
}
SAE_MATLAB(test_x,test_y);

return 0;
}


不过啊,这个要保证你的matlab要完整了

有输入代入matlab,然后输出传回c

其实就感觉就是传值啊

进入m文件文件夹,然后将要用的变量保存到命名空间

然后调用函数

最后回传

也折腾了我快一天了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: