码迷,mamicode.com
首页 > 其他好文 > 详细

c程序中调用matlab

时间:2015-07-14 15:33:58      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

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接口-编程与实例》

 

 

c程序中调用matlab

标签:

原文地址:http://www.cnblogs.com/hzwackerman/p/4645427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!