matlab引擎函数,Matlab引擎库函数
Matlab引擎庫包含了一系列從外部應用程序調(diào)用和控制Matlab引擎的函數(shù)。下表列舉了C語言的引擎庫函數(shù),這些函數(shù)后使用了eng前綴名
表 1?C語言引擎函數(shù)庫
引擎函數(shù)
功能描述
engOpen
啟動Matlab計算引擎
engGetArray
從Matlab引擎獲得一個Matlab矩陣,用于數(shù)據(jù)交換
engPutArray
從應用程序向Matlab引擎發(fā)送一個Matlab矩陣,用于數(shù)據(jù)交換
engEvalString
執(zhí)行一個Matlab命令
engOutputBuffer
創(chuàng)建字符緩沖區(qū),以獲得Matlab文本輸出
engOpenSingleUse
打開一個單獨的非共享的Matlab計算引擎
engClose
關閉Matlab引擎
engSetVisible
設置Matlab引擎
engGetVisible
返回Matlab顯示狀體
engGetVariable
從Matlab工作區(qū)(Workspace)獲得一個變量
engPutVariable
將指定名稱的Matlab變量存入Matlab工作區(qū)
關于這些函數(shù)的調(diào)用方式,可參閱Matlab的幫助文件。一般來說,在程序中調(diào)用Matlab計算引擎包含如下3個步驟:
(1)?打開Matlab計算引擎。
(2)?在引擎中執(zhí)行Matlab命令,或者傳遞數(shù)據(jù)等。
(3)?關閉Matlab計算引擎。
打開Matlab計算引擎需要調(diào)用engOpen函數(shù),成功打開Matlab引擎后,將
在程序中獲得指向該引擎的指針。通過這個指針,就可以調(diào)用引擎來執(zhí)行Matlab命令了,這需要調(diào)用engEvalString函數(shù)。完成對Matlab計算引擎的調(diào)用之后,應該關閉該引擎,這需要調(diào)用engClose。
1.?engOpen
函數(shù)原型:extern Engine *engOpen(const char *startcmd)
參數(shù)說明:輸入?yún)?shù)為一個字符指針,函數(shù)通過該指針指向的字符串所包含
的命令與Matlab簡歷一個連接,打開一個Matlab進程,返回一個Matlab引擎類型的指針。
2.?engEvalString
函數(shù)原型:extern int engEvalString(Engine *ep, const char
*string)
參數(shù)說明:ep為engOpen打開的engine指針。String為字符串,指向一個需
要在Matlab計算引擎的工作區(qū)中執(zhí)行的字符串。函數(shù)返回0表示成功執(zhí)行,返回1則表示ep對應的Matlab Engine
已經(jīng)關閉。
3.?engClose
函數(shù)原型:extern int engClose(Engine *ep)
參數(shù)說明:輸入?yún)?shù)ep為已經(jīng)打開的Matlab計算引擎。返回0表示成功關
閉,返回1表示返回出錯。
關于更多的引擎函數(shù)的具體定義可以參見幫助文件。
1.2.?Visual C++調(diào)用Matlab引擎時的環(huán)境設置
當在Visual
C++環(huán)境下調(diào)用Matlab引擎時,編譯接口環(huán)境的配置較為簡單,主要有一下兩步(本地計算機Matlab安裝在目錄C:\MATLAB下)
1.?添加Matlab引擎庫的頭文件和庫函數(shù)的路徑
打開菜單“Tools”,選取“Options…—>Direction”。在“Show
directories for”選項卡選取“Include
files”,添加“C:\MATLAB\EXTERN\LIB\WIN32\MICROSOFT\MSVisual
C++60”(如圖3所示),因為這些引擎庫用到的動態(tài)鏈接庫都在此目錄下。
2.?完成Matlab引擎對應的靜態(tài)鏈接庫的導入工作
在菜單“Project—>Setting”下,選取“Link”選項卡,在“Objecct/Library
Modules”里添加libmx.lib、libmex.lib和libeng.lib。注意三個文件名中間以空格分開(如圖4所示)
經(jīng)實驗發(fā)現(xiàn),還可以將此步設置改為:在Visual C++ 6.0環(huán)境中,選擇“Project”菜單中的“Add to
Project”命令,然后選擇Files選項,將“C:\MATLAB\EXTERN\INCLUDE\LIB\WIN32\MICROSOFT\MSVC60”目錄下的liteng.lib,limex.lib,libmx.lib文件加到工程中。它同樣可以將三個靜態(tài)鏈接庫添加到當前工程中來。
圖 4 ?Include files 路徑配置對話框
圖 5?Engine方式靜態(tài)鏈接庫設置
1.3.?Visual C++調(diào)用Matlab引擎實例
下面通過一個簡單的實例來說明Matlab引擎的使用,它是一個基于對話框的MFC應用程序,Visual
C++下利用Matlab工具箱進行信號處理和圖形顯示的操作。
啟動Visual C++,建立一個新工程,選擇MFC
AppWizard,工程名為MATLABEngine。而后選擇“Dialog
based”,即生成一個基于對話框的MFC應用程序。其余各項采用默認設置。
使用庫的頭文件matlib.h。首先添加Matlab引擎庫的頭文件和庫函數(shù)的路徑,然后在MATLABEngineDlg.cpp中添加engine.h。
添加Matlab引擎庫對應的靜態(tài)鏈接庫文件
在對話框窗體中添加一個按鈕,如下圖所示設置按鈕的標題和控件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("單擊確定按鈕,系統(tǒng)重新顯示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引擎的工作區(qū)
engPutVariable(ep, "T", T);
//通過Matlab引擎執(zhí)行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占用的內(nèi)存空間
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引擎,系統(tǒng)將退出Matlab應用程序!",
"Matlab引擎", MB_OK|MB_ICONINFORMATION);
engClose(ep); //關閉Matlab引擎,退出Matlab
}
按F7鍵編譯后再執(zhí)行,將會出現(xiàn)對話框。單擊“MATLABEngine”按鈕,將會出現(xiàn)Windows的標準信息框,出現(xiàn)“單擊確定按鈕,Windows正在準備啟動Matlab引擎!”提示信息。單擊“確定”按鈕,可以看到任務欄出現(xiàn)Matlab的圖標,它表示Matlab已經(jīng)啟動。然后會出現(xiàn)“隱藏Matlab”的信息提示框,同樣單擊“確定”按鈕,可以看到任務欄上的Matlab圖標立即隱藏。此時Matlab仍在后臺運行。然后,按照提示進行操作,系統(tǒng)會在任務欄出現(xiàn)“重新顯示Matlab的圖標”信息,并先后出現(xiàn)下面各圖的實驗結(jié)果。
圖 7?實驗結(jié)果一
可以看出,Matlab引擎工作方式實質(zhì)上是Visual
C++等通過編程平臺實現(xiàn)了和Matlab的交互,它將需要在Matlab環(huán)境中執(zhí)行的命令預先“存儲”在Visual
C++的應用程序中,然后自動的送給Matlab執(zhí)行。當然,可以通過向Matlab引擎工作空間讀取或?qū)懭胱兞繉崿F(xiàn)Matlab和Visual
C++的數(shù)據(jù)交互。
圖 8?實驗結(jié)果二
總結(jié)
以上是生活随笔為你收集整理的matlab引擎函数,Matlab引擎库函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php扩展dio,PHP Dio扩展新函
- 下一篇: matlab中fir1中的边界频率,FI