c程序中调用matlab

c程序调用matlab

方法一: 在c程序中调用matlab引擎(相当于打开一个精简版matlab然后往里输入命令,即客户机/服务器模式, c程序为客户机,matlab作为本地服务器)

方法二:将m文件打包成dll文件,然后在c语言环境下调用

优缺点分析:

方法一,易于实现,可以实时监控程序的运行,但独立性差,速度慢,需要安装完整版matlab,且每次调用都会启动matlab.exe进程;

方法二,实现复杂,调试麻烦,但只需要安装mcr(matlab component runtime),耗费资源较少;还有就是便于发布,在没有安装matlab的电脑中,利用最少的资源即可运行matlab程序。

demo(方法一)

1. vs配置(vs2008为例)

选择“工具”-----> “选项”----->”VC++目录“, 如下图所示添加路径。注意选择对应的平台(x64平台为例)

2. matlab配置

在matlab命令行中输入如下命令,按提示选择编译器

mex    -setup

mbuild  -setup

3. 添加PATH系统环境变量(根据自己的matlab安装路径,重启机器)

4. 新建工程,添加如下代码 (注意选择工程的活动解决方案平台)

// matlab.cpp : 定义控制台应用程序的入口点。

//

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "engine.h"

#pragma comment(lib, "libeng.lib")

#pragma comment(lib, "libmx.lib")

#pragma comment(lib, "libmat.lib")

int main(int argc, char* argv[])

{

//

Engine *ep;

if (!(ep = engOpen(NULL))) {

fprintf(stderr, "\nCan‘t start MATLAB engine\n");

return EXIT_FAILURE;

}

int Nsample = 50;

const double PI = 3.1415926;

double *t = new double[Nsample];

for(int i = 0; i < Nsample; i++)

{

t[i] = i * 2 * PI / Nsample;

}

mxArray *T = NULL, *result = NULL;

T = mxCreateDoubleMatrix(1, Nsample, mxREAL);

memcpy((void *)mxGetPr(T),(void *)t, Nsample*sizeof(t[0]));

engPutVariable(ep, "T", T);

engEvalString(ep, "Y=sin(T);");

engEvalString(ep, "plot(T,Y);");

engEvalString(ep, "title(‘y=sin(t)‘);");

engEvalString(ep, "xlabel(‘t‘);");

engEvalString(ep, "ylabel(‘y‘);");

printf("Hit return to continue\n\n");

fgetc(stdin);

mxDestroyArray(T);

engEvalString(ep, "close;");

engClose(ep);

return EXIT_SUCCESS;

//printf("hello, world\n");

}

5. 编译,运行,结果如下 :

首先会启动matlab 命令行,并完成绘图。

详细函数及数据类型参考:《c语言与matlab接口-编程与实例》

时间: 2024-10-10 21:49:38

c程序中调用matlab的相关文章

在android程序中调用shell命令与脚本

最近做android的一个功能就是调用shell命令来进行一些系统级别的操作,比如说是关机开机之类的,现在总结一下具体的用法以及遇到的坑(基于我所用到的,没用到的我就不说了) (1) Runtime.getRuntime().exec("ls"); 这是最简单的一种,你输入后就能就会执行ls命令,如果要获得输出的话可以这样写 Process p = Runtime.getRuntime().exec("ls"); String data = null; Buffer

如何在程序中调用Caffe做图像分类

Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的接口.Caffe的数据层可以从数据库(支持leveldb.lmdb.hdf5).图片.和内存中读入.我们要在程序中使用,当然得从内存中读入.参见http://caffe.berkeleyvision.org/tutorial/layers.html#data-layers和MemoryDataLay

[Python-MATLAB] 在Python中调用MATLAB的API

可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for-python.html MATLAB Engine API的使用文档: http://cn.mathworks.com/help/matlab/matlab-engine-for-python.html 原材料: 1.MATLAB 2015a  32位的 2.Python 2.7.13    32位

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文

Live555 中的客户端动态库.so的调用方式之一 程序中调用

1.  打开动态链接库:    #include <dlfcn.h>    void *dlopen(const char *filename, int flag);    该函数返回操作句柄,如:    void *pHandle = dlopen(strSoFilePath, RTLD_LAZY); 2.  取动态对象地址:    #include <dlfcn.h>    void *dlsym(void *pHandle, char *symbol);    dlsym根据

Java中调用MatLab返回值

当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N个变量值,其中有单个的数值.一维数组.二维数组等. 在Java中,使用Object[] rs=cmatlab.matlabfun(n , ....);接受返回的参数.其中rs[k]代表返回列表中第k个返回的变量的值. 如果rs[k]是单个数值,比如Double型.则使用下面的方法转换为Java中的D

WinCE平台的C#程序中调用MessageBeep发出一些系统自带的声音,而不用使用playsound

[DllImport("coredll.dll", EntryPoint = "MessageBeep")] public static extern bool MessageBeep(int iType); int i = 0x00000040; ClassPublicFunction.MessageBeep(i); 声音的类型 public enum BeepType {  SimpleBeep = -1,  IconAsterisk = 0x00000040,

VC++中调用MATLAB中的数据

网上的帖子都是如何将VC++数据添加进入MATLAB中,而VC++调用MATLAB中的数据几乎没有,再次记录一点东西吧 配置好编程环境,本文环境为:VS2012+MATLAB2012b. 首先要了解的是Matlab Engine API函数 接下来贴代码和效果: void test2() { Engine *ep; if (!(ep = engOpen(NULL))) { cout<<"Can't start MATLAB engine"<<endl; //Me

C++程序中调用WebService的实现

前言 因为最近的项目中需要运用到在MFC程序中调用WebService里面集成好了的函数,所以特意花了一天的时间来研究WebService的构建以及如何在MFC的程序中添加Web引用,进而来实现在C++ MFC中调用那些WebService中写好的函数,中间也是遇到了一些不懂和不解的地方,好在通过度娘上的一些资料和自己的研究逐一的解决了,写这篇文章的主要目的是,第一:让自己记得更清楚,也方便以后不记得了可以及时回想起来.第二:让其他的一些和我碰到一样问题的朋友能更好的解决此问题.内容仅供参考,如