matlab練習程序(c/c++調用matlab


就我目前了解的c++調用matlab有兩種方法。

第一種是通過matlab引擎調用,也就是這里用到的方法。

第二種是用matlab將m文件編譯為相應的h/lib/dll文件再加以調用。

使用engine所用到的h和lib文件基本在D:\Program Files\MATLAB\R2010b\extern里面,當然不同的機器安裝的地方都不一樣。

頭文件只需engine.h即可。lib文件需要這三個:libmx.lib/libmat.lib/libeng.lib。至於如何配置我就不介紹了,方法很多。

引擎相應的部分函數如下:

engOpen:啟動Matlab引擎

engClose:關閉Matlab引擎

engGetArray:從Matlab引擎中獲得一個Matlab矩陣,用於數據交換

engPutArray:從應用程序向Matlab引擎發送一個Matlab矩陣,用於數據交換

engEvalString:執行一個Matlab命令

engOutputBuffer:創建一個用於存儲Matlab文本輸出的字符緩沖區

相應例程:

#include <iostream>
#include <math.h>
#include "engine.h"
using namespace std;
void main()
{
    Engine *ep; //定義Matlab引擎指針。
    if (!(ep=engOpen(NULL))) //測試是否啟動Matlab引擎成功。
    {
        cout <<"Can't start Matlab engine!" <<endl;
        exit(1);
    }

    //下面是將c++格式數據轉換為matlab格式可用數據
    double data[4]={1.0,2.0,3.0,4.0};
    mxArray *Y=mxCreateDoubleMatrix(1,4,mxREAL);

    memcpy(mxGetPr(Y),data,sizeof(data));
    engPutVariable(ep,"Y",Y);

    engEvalString(ep,"plot(Y,'o')");    //顯示數據
    mxDestroyArray(Y);            

    engEvalString(ep,"figure");        //開一個新的顯示窗口

//////////////////////////////////////////////////////////
    //下面是從matlab格式數據轉換為c++格式可用數據
//    mxArray *filename=NULL;
//    const char *name="D:/Program Files/MATLAB/R2010b/bin/win32/lena.jpg";
//    filename=mxCreateString(name);
//    engPutVariable(ep,"filename",filename);

    engEvalString(ep,"X=imread('D:/Program Files/MATLAB/R2010b/bin/win32/lena.jpg');");    //在engine中讀取一張圖片
    engEvalString(ep,"imshow(X)");        //顯示圖片
    mxArray *X=engGetVariable(ep,"X");    //從engine獲得真正的數組X
    
    int ndims=mxGetNumberOfDimensions(X);    //獲得這個數組的維數
    cout<<ndims<<endl;

    int *dims=new int[ndims];    
    memcpy(dims,mxGetDimensions(X),ndims*sizeof(int));    //獲得數組每一維的大小
    for (int i=0;i<ndims;i++)
    {
        cout<<dims[i]<<"  ";
    }
    cout<<endl;
/*
    double *p=(double*)mxGetData(X);    //指向數組X的指針以便能訪問數組元素,圖像數據量太大,這里就不顯示了
    for (int i=0;i<dims[0];i++)
    {
        for (int j=0;j<dims[1];j++)
        {
            cout<<p[i*dims[1]+j]<<"  ";
        }
        cout<<endl;
    }
*/
    delete[] dims;
    mxDestroyArray(X);

    cout <<"good job." <<endl;
    cin.get();
    engClose(ep); //關閉Matlab引擎。

}

由於整個環境離不開matlab,所以程序還需相應的dll文件才能運行。

matlab的結構實在復雜,所以我也不太清楚究竟需要哪些dll,我就圖簡單了,直接把生成的文件移到了matlab可執行目錄下了。

通常是這個目錄:D:\Program Files\MATLAB\R2010b\bin\win32


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM