zoukankan      html  css  js  c++  java
  • VC++与Matlab混合编程之引擎操作详解(5)数据类型mxArray的操作

    5. 程序实例

    对大部分软件研发人员来说利用VC编程方便、高效,但是要显示数据图形就不那么容易了,这时候不防借助Matlab引擎辅助画图做数据分析。下面通过实例演示如何利用VC调用Matlab绘图,程序的主要功能是在VC中对数组x计算函数值ysin(x) ±log(x),然后调用Matlab绘制yx的图形。

     

    VC中新建工程,编写代码如下:

     

    #include <iostream>

    #include <math.h>

    #include "engine.h"

    using namespace std;

    void main()

    {

    const int N = 50;

    double x[N],y[N];

    int j = 1;

    for (int i=0; i<N; i++) //计算数组xy

    {

    x[i] = (i+1);

    y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];

    j *= -1;

    }

    Engine *ep; //定义Matlab引擎指针。

    if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

    {

    cout <<"Can't start Matlab engine!" <<endl;

    exit(1);

    }

    //定义mxArray,为行,N列的实数数组

    mxArray *xx = mxCreateDoubleMatrix(1,N, mxREAL);

    mxArray *yy = mxCreateDoubleMatrix(1,N, mxREAL); //同上。

     

    memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。

    memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。

     

    engPutVariable(ep, "xx",xx); //mxArray数组xx写入到Matlab工作空间,命名为xx

    engPutVariable(ep, "yy",yy); //mxArray数组yy写入到Matlab工作空间,命名为yy

     

    //Matlab引擎发送画图命令。plotMatlab的画图函数,参见Matlab相关文档。

    engEvalString(ep, "plot(xx, yy); ");

     

    mxDestroyArray(xx); //销毁mxArray数组xxyy

    mxDestroyArray(yy);

     

    cout <<"Press any key to exit!" <<endl;

    cin.get();

    engClose(ep); //关闭Matlab引擎。

    }

    编译并运行程序得结果入下图:

    本文详细的介绍了Matlab引擎使用方法并演示了一个简单的利用VC调用Matlab画图的程序实例。大多数时候,程序员可以利用Matlab强大的数据读写、显示能力和VC编程的高效率。例如,在Matlab中要读入一幅任意格式的图像均只需一条命令i=imread('test.jp');图像数据矩阵便存放在了二维数组i中,可以通过VC读入该数组进行相关处理再调用Matlab显示,这种混合编程方式能大大提高工作效率。

     

    当然,利用VC编译的Matlab引擎程序,运行环境中还必须Matlab的支持,如果要编译完全脱离Matlab的程序,可采用其它方式,如利用第三方Matcom程序编译独立的可执行程序等。

     

  • 相关阅读:
    Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
    控制‘控制台应用程序’的关闭操作
    详解for循环(各种用法)
    敏捷软件开发
    Sql Server的一些知识点
    在SharePoint 2010 中配置Remote Blob Storage FILESTREAM Provider
    使用LotusScript操作Lotus Notes RTF域
    JOpt Simple 4.5 发布,命令行解析器
    John the Ripper 1.8.0 发布,密码破解工具
    PacketFence ZEN 4.0.1 发布,网络接入控制
  • 原文地址:https://www.cnblogs.com/nktblog/p/2435689.html
Copyright © 2011-2022 走看看