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程序編譯獨立的可執行程序等。

 


免責聲明!

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



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