这段代码是C++调用matab引擎的过程,代码的目的很简单,在C++中创建一个vector数组,然后将这个vector数组单位化。写这个代码的目的是学些C++与matlab之间的数据交互,以供日后参考。
#include <iostream>
#include <cstdio>
#include <vector>
#include <math.h>
#include <time.h>
#include "engine.h"
#include<Eigen/Dense>
using namespace Eigen;
using namespace std;
vector<double> vecA;
void createA(int m );
int main()
{
const int num = 10;
createA( num );//创建原始矩阵vecA
double * pa = new double[10];
for( int i = 0; i < num; i++)
{
pa[i] = vecA[i];
}
Engine * m_engine;//matlab引擎
m_engine = NULL;//初始化matlab引擎
if((!m_engine && !(m_engine = engOpen(NULL))))// 打开amatlab引擎,失败则退出
{
return -1;
}
engSetVisible(m_engine,1);//设置matlab窗口在调用时的可见性,为a1时可见?
//把需要计算的数据传入matlab
mxArray *VecA= mxCreateDoubleMatrix(10, 1, mxREAL);//创建10行1列的实数,组数组类型是matlab特有的
memcpy((void *) mxGetPr(VecA), (void *) pa, 10 * sizeof(double));//将C++中D的数据传入matlab
engPutVariable(m_engine, "vec", VecA);//赋值语句,vec是matlab代码中的输入参数y,VecA是C++传入的参数
//buffer用来接收调试信息,当matlab代码有错时,可以输出buffer查看错误信息
char buffer[255];
buffer[254] = '\0';
engOutputBuffer(m_engine, buffer, 255);
engEvalString(m_engine, "cd('D:\\code\\TestEigen\\Testeigen\\mat_code')");//打开matlab代码所在文件夹,注意路径中是双反斜杠
engEvalString(m_engine,"normalV = normalizeVec(vec);");//这是matlab中的调用语句,注意,matlab的.m文件名要与调用的函数名一致,否则会找不到要调用的函数
printf("%s", buffer);//当matlab代码出错时,用来输出调试信息
//接下来把matlab的计算结果传回给C++
mxArray * mvec = NULL; //同样声明一个matlab中的阵阵类型
mvec = engGetVariable(m_engine, "normalV");
double * cvec= NULL;//声明一个C++中的指针
cvec= (double*)mxGetData(mvec);//将matlab中的数据赋给C++中的数据
for( int i = 0; i<num; i++)
{
cout<< cvec[i] << " ";
}
mxDestroyArray(VecA); //销毁matlab数组
mxDestroyArray(mvec);
return 0;
system("pause" );
}
void createA(int m )
{
srand(time(NULL));
for( int i = 0; i < m; i++ )
{
vecA.push_back(rand()%4 + 1);
cout << vecA[i]<<" ";
}
cout <<endl<<"-----------------------"<<endl;
}
输出结果:
Matlab代码:
%功能是实现一个向量的单位化
function normalV = normalizeVec(vec)
normalV = vec/sqrt(sum(vec.^, ));
end
出现错误时,看到提示信息如下,
然后知道是normaozeVe函数没定义,发现是调用语句写错了.
C++调用matlab实例的更多相关文章
-
使用Java程序调用MatLab
Java代码实现的计算难免会显得不够高效.而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便.或者有些时候会涉及到使用Java调用MatLab展现一些二维三 ...
-
java调用matlab绘图
一 注意事项 1: MatLab的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder). 2: 运 ...
-
【转】C++调用Matlab的.m文件
原文地址 Matlab是一个强大的数学计算/仿真工 具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matla ...
-
MATLAB实例:PCA降维
MATLAB实例:PCA降维 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. iris数据 5.1,3.5,1.4,0.2,1 4.9,3.0,1 ...
-
MATLAB实例:PCA(主成成分分析)详解
MATLAB实例:PCA(主成成分分析)详解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 主成成分分析 2. MATLAB解释 详细信息请看: ...
-
C#调用Matlab生成的Dll
问题描述:最近开发需要调用matlab生成的DLL,在New MWNumericArray 对象的时候报错,提示未将对象引用到对象的实例. 问题分析:因为MWArray.dll是Matlab提供的DL ...
-
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
-
WPF调用Matlab函数方法
有的时候用C#写图像处理方法,比较费事,不如Matlab简单,但是Matlab又做不出WPF那样的好看界面,怎么办呢. 今天正好我要实现这个功能,就顺便写个小例子,给需要的人做个借鉴. 想要用WPF调 ...
-
Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
1.问题: 在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...
随机推荐
-
c语言表白程序代码
双十一要到了,好激动啊!!! 是时候准备出手了! 花了一天的时间写的表白代码. 表示自己弱弱的..... 看了网上好多都是js写的,感觉碉堡了!js用的不熟,前端不好,java,Python写起来 ...
-
tangram2.6(XE2)\Demo\notify\notifyGroup.groupproj
1.以下此异常,为exe没有加载到Tangram_Core.bpl 放到exe当前文件夹下即可 2.此例子的接口实现在exe中,exe中下发通知到dll,dll 中 as 获取接口传窗体到exe中: ...
-
AOJ673 聪明的输入法(字典树)
#include<cstdio> #include <cstdlib> #include <cstring> #include <iostream> # ...
-
Starling性能优化技巧十五则
Starling的性能优化要点 一.尽可能减少状态变更 如您所知,Starling使用Stage3D来渲染所有的可见对象.这就意味着所有的绘制都是GPU完成的. 现在,Starling可以一个接一个的 ...
-
导出EXCEL数据时防止数值变科学计数的办法
网上有很多说法,最简单直接正确的做法是判断一下是否为数值以及长度,然后给单元格加上以下CSS即可: mso-generic-font-family:auto; mso-font-charset:1 ...
-
(原)lua使用ffi调用c程序的函数
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5812763.html 参考网址: http://luajit.freelists.narkive.co ...
-
让innerHTML方法添加到元素里的js可以被解析执行
<!DOCTYPE html> <html> <head> </head> <body> <div id="test&quo ...
-
采用ToolRunner执行Hadoop基本面分析程序
为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...
-
Loadrunner常用目录、组成部分及负载测试流程
常用目录 bin:存放一些可执行程序 classes:可能用到的jar包 My Template:存放一些自己创建的模板 include:头文件(可以编写自定义函数,保存成.h的头文件形式并放在这个目 ...
-
Springboot学习06-Spring AOP封装接口自定义校验
Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...