C++ 2010 与MATLAB2014a混合编程教程(1)

1、按照点击打开链接 里面的方法设置好环境


2、在MATLAB中定义函数test.m 
function s =test(a,b)
s=a+b; 
end


3、定义.cpp 文件,编译运行即可

/** 
* @author 程晓
* @date 创建时间:2016/01/10
* @version MATLAB2014a + Microsoft Visual 2010
*/ 
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string>
#include <engine.h>//添加必要的头文件;以下4个都是MATLAB和C++混合编程常用的头文件
#include <matrix.h>
#include <mat.h>
#include <mex.h>
using namespace std;
int main(int argc, char** argv) {
//在这部之前设置了一些环境,具体参考 /*http ://www.doc88.com/p-458271665677.html */
Engine* m_pEngine; //调用MATLAB引擎
m_pEngine = engOpen(NULL); //打开MATLAB简易窗口
if( m_pEngine == NULL ) {
cout<<"error!"<<endl;
exit(-1);
}
//在简易MATLAB命令窗口可以用pdw查看MATLAB当前工作路径将MATLAB路径设为m文件所在位置,注意路径的表达
engEvalString (m_pEngine,"cd C:\\Users\\Administrator\\Documents\\MATLAB"); 


double aval[]={1},bval[]={2};//aval,bval 是C++里面的变量
mxArray *a=mxCreateDoubleMatrix(1,1,mxREAL);//定义a,b两个指针,也是在C++里面的变量,但是是mxarrays类型,可以和MATLAB传递数值
mxArray *b=mxCreateDoubleMatrix(1,1,mxREAL);
//mxSetPr(a ,&aval);//不要使用,win7下会有报错
//mxSetPr(b ,&bval);
memcpy(mxGetPr(a), aval, 1*sizeof(double)); //将数组aval复制到mxarray数组a中。作用:转为了可以向MATLAB传递的数据类型
memcpy(mxGetPr(b), bval, 1*sizeof(double)); 
engPutVariable(m_pEngine,"a",a);//正式将C++里面的数值定义在MATLAB变量空间里面,双引号内的就是MATLAB变量空间里面的变量名
engPutVariable(m_pEngine,"b",b);
engEvalString (m_pEngine,"s=test(a,b)");//调用MATLAB自定义函数
engEvalString (m_pEngine,"x=0:0.01:5*3.14;y=sin(x);plot(x,y)");//直接在C++里面写MATLAB代码
mxArray *s=engGetVariable(m_pEngine,"s");//定义一个可以接收从MATLAB传递给C++数值的数据类型 
double c=*mxGetPr(s);//接收MATLAB传递给C++数值
cout<<c<<endl;
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(s);//这些数据都是一个中间变量,最后我们销毁它们
system("pause");
engClose(m_pEngine);//程序的最后,把MATLAB也关了
return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值