matlab引擎函数,Matlab引擎库函数
Matlab引擎庫包含了一系列從外部應用程序調用和控制Matlab引擎的函數。下表列舉了C語言的引擎庫函數,這些函數后使用了eng前綴名
表 1?C語言引擎函數庫
引擎函數
功能描述
engOpen
啟動Matlab計算引擎
engGetArray
從Matlab引擎獲得一個Matlab矩陣,用于數據交換
engPutArray
從應用程序向Matlab引擎發送一個Matlab矩陣,用于數據交換
engEvalString
執行一個Matlab命令
engOutputBuffer
創建字符緩沖區,以獲得Matlab文本輸出
engOpenSingleUse
打開一個單獨的非共享的Matlab計算引擎
engClose
關閉Matlab引擎
engSetVisible
設置Matlab引擎
engGetVisible
返回Matlab顯示狀體
engGetVariable
從Matlab工作區(Workspace)獲得一個變量
engPutVariable
將指定名稱的Matlab變量存入Matlab工作區
關于這些函數的調用方式,可參閱Matlab的幫助文件。一般來說,在程序中調用Matlab計算引擎包含如下3個步驟:
(1)?打開Matlab計算引擎。
(2)?在引擎中執行Matlab命令,或者傳遞數據等。
(3)?關閉Matlab計算引擎。
打開Matlab計算引擎需要調用engOpen函數,成功打開Matlab引擎后,將
在程序中獲得指向該引擎的指針。通過這個指針,就可以調用引擎來執行Matlab命令了,這需要調用engEvalString函數。完成對Matlab計算引擎的調用之后,應該關閉該引擎,這需要調用engClose。
1.?engOpen
函數原型:extern Engine *engOpen(const char *startcmd)
參數說明:輸入參數為一個字符指針,函數通過該指針指向的字符串所包含
的命令與Matlab簡歷一個連接,打開一個Matlab進程,返回一個Matlab引擎類型的指針。
2.?engEvalString
函數原型:extern int engEvalString(Engine *ep, const char
*string)
參數說明:ep為engOpen打開的engine指針。String為字符串,指向一個需
要在Matlab計算引擎的工作區中執行的字符串。函數返回0表示成功執行,返回1則表示ep對應的Matlab Engine
已經關閉。
3.?engClose
函數原型:extern int engClose(Engine *ep)
參數說明:輸入參數ep為已經打開的Matlab計算引擎。返回0表示成功關
閉,返回1表示返回出錯。
關于更多的引擎函數的具體定義可以參見幫助文件。
1.2.?Visual C++調用Matlab引擎時的環境設置
當在Visual
C++環境下調用Matlab引擎時,編譯接口環境的配置較為簡單,主要有一下兩步(本地計算機Matlab安裝在目錄C:\MATLAB下)
1.?添加Matlab引擎庫的頭文件和庫函數的路徑
打開菜單“Tools”,選取“Options…—>Direction”。在“Show
directories for”選項卡選取“Include
files”,添加“C:\MATLAB\EXTERN\LIB\WIN32\MICROSOFT\MSVisual
C++60”(如圖3所示),因為這些引擎庫用到的動態鏈接庫都在此目錄下。
2.?完成Matlab引擎對應的靜態鏈接庫的導入工作
在菜單“Project—>Setting”下,選取“Link”選項卡,在“Objecct/Library
Modules”里添加libmx.lib、libmex.lib和libeng.lib。注意三個文件名中間以空格分開(如圖4所示)
經實驗發現,還可以將此步設置改為:在Visual C++ 6.0環境中,選擇“Project”菜單中的“Add to
Project”命令,然后選擇Files選項,將“C:\MATLAB\EXTERN\INCLUDE\LIB\WIN32\MICROSOFT\MSVC60”目錄下的liteng.lib,limex.lib,libmx.lib文件加到工程中。它同樣可以將三個靜態鏈接庫添加到當前工程中來。
圖 4 ?Include files 路徑配置對話框
圖 5?Engine方式靜態鏈接庫設置
1.3.?Visual C++調用Matlab引擎實例
下面通過一個簡單的實例來說明Matlab引擎的使用,它是一個基于對話框的MFC應用程序,Visual
C++下利用Matlab工具箱進行信號處理和圖形顯示的操作。
啟動Visual C++,建立一個新工程,選擇MFC
AppWizard,工程名為MATLABEngine。而后選擇“Dialog
based”,即生成一個基于對話框的MFC應用程序。其余各項采用默認設置。
使用庫的頭文件matlib.h。首先添加Matlab引擎庫的頭文件和庫函數的路徑,然后在MATLABEngineDlg.cpp中添加engine.h。
添加Matlab引擎庫對應的靜態鏈接庫文件
在對話框窗體中添加一個按鈕,如下圖所示設置按鈕的標題和控件ID:
圖 6?按鈕控件的標題和控件ID設置對話框
通過Visual C++的ClassWizard,添加按鈕的單擊響應事件,并添加如下代碼。
void CMATLABEngineDlg::OnMATLABEngine
{
Engine *ep; //定義Matlab引擎變量
MessageBox("單擊確定按鈕,Windows正在準備啟動Matlab引擎!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
if (!(ep=engOpen("\0")))?//打開Matlab引擎
{
fprintf(stderr, "\n Matlab引擎啟動失敗!\n");
MessageBox("Matlaby引擎啟動失敗!", "Matlab引擎",
MB_OK|MB_ICONERROR);
exit(-1);
}
MessageBox("單擊確定按鈕,隱藏Matlab!", "Matlab引擎",
MB_OK|MB_ICONINFORMATION);
engSetVisible(ep, 0); //隱藏Matlab窗口
MessageBox("單擊確定按鈕,系統重新顯示Matlab!", "Matlab引擎",
MB_OK|MB_ICONINFORMATION);
engSetVisible(ep, 0); //重新顯示Matlab窗口
mxArray *T=NULL;
double time[10]={0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
//生成矩陣
T=mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
//將矩陣變量寫入Matlab引擎的工作區
engPutVariable(ep, "T", T);
//通過Matlab引擎執行Matlab命令
engEvalString(ep, "D=0.5*(-9.8).*T.^2");
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs.Time for falling
object');");
engEvalString(ep, "xlabel('Time(seconds)');");
engEvalString(ep, "ylabel('Position(meters)');");
engEvalString(ep, "grid on;");
//釋放矩陣變量T占用的內存空間
mxDestroyArray(T);
MessageBox("通過例程,說明Matlab的圖形顯示能力!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
//畫一朵花
engEvalString(ep, "x=-8:0.5:8;");
engEvalString(ep, "y=x;");
engEvalString(ep, "[Y,X]=meshgrid(y,x);");
engEvalString(ep, "R=sqrt(X.^2+Y.^2)+eps;");
engEvalString(ep, "Z=2*sin(R)./R;");
engEvalString(ep, "surf(X,Y,Z);");
MessageBox("關閉Matlab引擎,系統將退出Matlab應用程序!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
engClose(ep); //關閉Matlab引擎,退出Matlab
}
按F7鍵編譯后再執行,將會出現對話框。單擊“MATLABEngine”按鈕,將會出現Windows的標準信息框,出現“單擊確定按鈕,Windows正在準備啟動Matlab引擎!”提示信息。單擊“確定”按鈕,可以看到任務欄出現Matlab的圖標,它表示Matlab已經啟動。然后會出現“隱藏Matlab”的信息提示框,同樣單擊“確定”按鈕,可以看到任務欄上的Matlab圖標立即隱藏。此時Matlab仍在后臺運行。然后,按照提示進行操作,系統會在任務欄出現“重新顯示Matlab的圖標”信息,并先后出現下面各圖的實驗結果。
圖 7?實驗結果一
可以看出,Matlab引擎工作方式實質上是Visual
C++等通過編程平臺實現了和Matlab的交互,它將需要在Matlab環境中執行的命令預先“存儲”在Visual
C++的應用程序中,然后自動的送給Matlab執行。當然,可以通過向Matlab引擎工作空間讀取或寫入變量實現Matlab和Visual
C++的數據交互。
圖 8?實驗結果二
總結
以上是生活随笔為你收集整理的matlab引擎函数,Matlab引擎库函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php扩展dio,PHP Dio扩展新函
- 下一篇: matlab中fir1中的边界频率,FI