matlab engevalstring,Matlab 執行engEvalString命令介紹 | 學步園
MATLAB與VC混合編程指導書
在調用 Matlab 引擎之前,首先應在相關文件中加入一行: #include "enging.h" ,該文件包含了引擎 API 函數的說明和所需數據結構的定義。可以在 VC 中調用的引擎函數分別如下:
1、引擎的打開和關閉
engOpen -打開 Matlab engine
函數聲明:
Engine *engOpen(const char *startcmd);
參數 startcmd 是用來啟動 Matlab 引擎的字符串參數,在 Windows 操作系統中只能為 NULL 。
函數返回值是一個 Engine 類型的指針,它是在 engine.h 中定義的 engine 數據結構。
EngClose -關閉 Matlab 引擎
函數聲明:
int engClose(Engine *ep);
參數 ep 代表要被關閉的引擎指針。
函數返回值為 0 表示關閉成功,返回 1 表示發生錯誤。
例如,通常用來打開 / 關閉 Matlab 引擎的代碼如下:
Engine *ep; // 定義 Matlab 引擎指針。
if (!(ep=engOpen(NULL))) // 測試是否啟動 Matlab 引擎成功。
{
MessageBox("Can't start Matlab engine!" );
exit(1);
}
. …………
engClose(ep); // 關閉 Matlab 引擎。
2、 向 Matlab 發送命令字符串
engEvalString -發送命令讓 Matlab 執行。
函數聲明:
int engEvalString(Engine *ep, Const char *string);
參數 ep 為函數 engOpen 返回的引擎指針,字符串 string 為要 matlab 執行的命令。
函數返回值為 0 表示成功執行,返回 1 說明執行失敗(如命令不能被 Matlab 正確解釋或 Matlab 引擎已經關閉了)。
3、 獲取 Matlab 命令窗口的輸出
要在 VC 中獲得函數 engEvalString 發送的命令字符串被 Matlab 執行後在 matlab 窗口中的輸出,可以調用 engOUtputBuffer 函數。
函數聲明:
int engOutputBuffer(Engine *ep, char *p, int n);
參數 ep 為 Matlab 引擎指針, p 為用來保存輸出結構的緩衝區, n 為最大保存的字符個數,通常就是緩衝區 p 的大小。該函數執行後,接下來的 engEvalString 函數所引起的命令行輸出結果會在緩衝區 p 中保存。如果要停止保存,只需調用代碼:engOutputBuffer(ep, NULL, 0) 。
4、讀寫 Matlab 數據
從 Matlab 引擎工作空間中獲取變量。
mxArray *engGetVariable(Engine *ep, const char *name);
參數 ep 為打開的 Matlab 引擎指針, name 為以字符串形式指定的數組名。
函數返回值是指向name 數組的指針,類型為mxArray* ( mxArray 數據類型在本文後面詳細簡介)。
向 Matlab 引擎工作空間寫入變量。
int engPutVariable(Engine *ep, const char *name, const mxArray *mp);
參數 ep 為打開的 Matlab 引擎指針, mp 為指向被寫入變量的指針, name 為變量寫入後在 Matlab 引擎工作空間中的變量名。
函數返回值為 0 表示寫入變量成功,返回值為 1 表示發生錯誤。
5、 調用引擎時顯示 / 隱藏 Matlab 主窗口
默認情況下,以engine 方式調用 Matlab 的時候,會打開 Matlab 主窗口,可在其中隨意操作。但有時也會干擾應用程序的運行,可用以下設置是否顯示該窗口。
int engSetVisible(Engine *ep, bool value);
參數 ep 為打開的 Matlab 引擎指針, value 為是否顯示的標誌,取值 true (或 1 )表示顯示 Matlab 窗口,取值 false (或 0 )表示隱藏 Matlab 窗口。
函數返回值為 0 表示設置成功,為 1 表示有錯誤發生。
要獲得當前 Matlab 窗口的顯示 / 隱藏情況,可以調用函數:
int engGetVisible(Engine *ep, bool *value);
參數 ep 為打開的 Matlab 引擎指針, Value 為用來保存顯示 / 隱藏情況的變量(採用指針方式傳遞)。
函數返回值為 0 表示獲取成功,為 1 表示有錯誤發生。
、數據類型 mxArray 的操作
在上面的 Matlab 引擎函數中,所有與變量有關的數據類型都是 mxArray 類型。數據結構 mxArray 以及大量的 mx 開頭的函數,廣泛用於 Matlab 引擎程序和 Matlab C 數學庫中。 mxArray 是一種很複雜的數據結構,與 Matlab 中的 array 相對應,我們只需熟悉 Matlab 的 array 類型和幾個常用的 mxArray 函數即可。
在 VC 中,所有和 Matlab 的數據交互都是通過 mxArray 來實現的,在使用 mxArray 類型的程序中,應包含頭文件 matrix.h ,不過在引擎程序中,一般會包含頭文件 engine.h ,該文件裡面已經包含了 matrix.h ,因此無需重複包含。
6.1 創建和清除 mxArray 型數據
Matlab 有很多種變量類型,對應於每種類型,基本上都有一個函數用於創建,但它們都有相同的數據結構,就是 mxArray 。
數組的建立採用mxCreatexxx 形式的函數,例如新建一個double 類型數組,可用函數mxCreateDoubleMatrix ,函數形式如下:
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);
參數 m 和 n 為矩陣的函數和列數。 ComplexFlag 為常數,用來區分矩陣中元素是實數還是複數,取值分別為 mxREAL 和 mxCOMPLEX 。
例如,創建一個 3 行 5 列的二維實數數組,可用如下語句:
mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);
對應的,要刪除一個數組mxDestroyArray ,該函數聲明如下:
void mxDestroyArray(mxArray *array_ptr);
參數 array_ptr 為要刪除的數組指針。
例如,要刪除上面創建的數組 T ,可用如下語句:
mxDestroyArray(T);
類似的創建函數還有:
mxArray *mxCreateString(const char *str);
創建一個字符串類型並初始化為 str 字符串。
一般的在 VC 與 Matlab 交互中,以上兩種類型就夠了,其它類型數組的創建這裡不再介紹。
6.2 管理 mxArray 數據類型
6.2.1管理 mxArray 數據大小
要獲得 mxArray 數組每一維上元素的個數,可以用 mxGetM 和 mxGetN 函數。其中 mxGetM 用來獲得數組第一維的元素個數,對於矩陣來說就是行數。
int mxGetM(const mxArray *array_ptr); // 返回 array_ptr 對應數組第一維的元素個數(行數)
int mxGetN(const mxArray *array_ptr); // 返回 array_ptr 對應數組其它維的元素個數,對於矩陣來說是列數。對於多維數組來說是從第 2 維到最後一維的各維元素個數的乘積。
要獲得某一特定維的元素個數,則要用函數:
const int *mxGetDimensions(const mxArray *array_ptr);
該函數返回array_ptr 各維的元素個數保存在一個int 數組中返回。對於常用的矩陣來說,用 mxGetM 和 mxGetN 兩個函數就可以了。
另外還可以通過mxGetNumberOfDimensions 來獲得數組的總的維數,用 mxSetM 、 mxSetN 設置矩陣的行數和列數,函數說明如下:
int mxGetNumberOfDimensions(const mxArray *array_ptr); // 返回數組的維數
void mxSetM(mxArray *array_ptr, int m); // 設置數組為 m 行
void mxSetN(mxArray *array_ptr, int n); // 設置數組為 n 列
6.2.2 判斷 mxArray 數組類型
在對 mxArray 類型的變量進行操作之前,可以驗證以下其中的數組的數據類型,比如是否為double 數組、整數、字符串、邏輯值等,以及是否為某種結構、類、或者是特殊類型,比如是否為空數組,是否為 inf 、 NaN 等。常見的判斷函數有:
bool mxIsDouble(const mxArray *array_ptr);
bool mxIsComplex(const mxArray *array_ptr);
bool mxIsChar(const mxArray *array_ptr);
bool mxIsEmpty(const mxArray *array_ptr);
bool mxIsInf(double value);
…… ……
這些函數比較簡單,意義自明,不再解釋。
6.2.3 管理 mxArray 數組的數據
對於常用的 double 類型的數組,可以用mxGetPr 和 mxGetPi 兩個函數分別獲得其實部和虛部的數據指針,這兩個函數的聲明如下:
double *mxGetPr(const mxArray *array_ptr); // 返回數組 array_ptr 的實部指針
double *mxGetPi(const mxArray *array_ptr); // 返回數組 array_ptr 的虛部指針
這樣,就可以通過獲得的指針對 mxArray 類型的數組中的數據進行讀寫操作。例如可以用函數 engGetVariable 從 Matlab 工作空間讀入 mxArray 類型的數組,然後用 mxGetPr 和 mxGetPi 獲得數據指針,對並其中的數據進行處理,最後調用 engPutVariable 函數將修改後的數組重新寫入到 Matlab 工作空間。
小結
本文詳細的介紹了 Matlab 引擎使用方法並演示了一個簡單的利用 VC 調用 Matlab 畫圖的程序實例。大多數時候,程序員可以利用 Matlab 強大的數據讀寫、顯示能力和 VC 編程的高效率。例如,在 Matlab 中要讀入一幅任意格式的圖像均只需一條命令i=imread('test.jp'); 圖像數據矩陣便存放在了二維數組 i 中,可以通過 VC 讀入該數組進行相關處理再調用 Matlab 顯示,這種混合編程方式能大大提高工作效率。
當然,利用 VC 編譯的 Matlab 引擎程序,運行環境中還必須 Matlab 的支持,如果要編譯完全脫離 Matlab 的程序,可採用其它方式,如利用第三方 Matcom 程序編譯獨立的可執行程序等。
matlab engevalstring,Matlab 執行engEvalString命令介紹 | 學步園相关推荐
- 使用C#調用外部程式或是執行DOS命令
在.NET裡要如何調用外部程式呢?? 在.net裡,提供了Process類,提供我們強大的調用外部工具功能,並透過重新導向輸入與輸出,可以取得執行結果,下面就用一個例子來示範在一個WinForm裡輸入 ...
- java中exec命令,使用Java中的Runtime.exec()執行Windows命令
Runtime.getRuntime().exec()方法主要用於執行外部的程序或命令.Runtime.getRuntime().exec共有六個重載方法 : 其中public Process exe ...
- matlab colorbar采用对数,matlab colorbar的使用 | 學步園
1:請問matlab中畫多張圖如何使用同一範圍的colorbar? 例如生成了圖1,2,3 生成圖1時,使用 temp1=caxis; 將圖1的z值的取值範圍(即colorbar的取值範圍)取出. 生 ...
- matlab怎么用wavedec,Matlab中wavedec使用學習及詳解 | 學步園
最近在使用對ECG訊號進行小波係數的提取,所以用到了wavedec這個matlab中內置函數.然後盡心學習,發現還挺高深,不是我學到的衹是一點皮毛,因爲要對一段波形進行特徵提取,所以我要看哪個小波係數 ...
- matlab ellip,IIR濾波器設計(調用MATLAB IIR函數來實現) | 學步園
% IIR濾波器設計 % 目的:設計一個採樣頻率為1000Hz.通帶截止頻率為50Hz.阻帶截止頻率為100Hz的低通濾波器,並要求通帶最大衰減為1dB,阻帶最小衰減為60dB. clc;clear; ...
- Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
在 Azure 中的 Linux RDMA 叢集以 Microsoft HPC Pack 執行 OpenFoam 07/22/2016 本文內容 重要 傳統 Vm 將于2023年3月1日淘汰. 如果您 ...
- matlab 矩阵命令,matlab中的矩阵的基本运算命令
matlab中的矩阵的基本运算命令 (2013-07-19 08:45:49) 1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数 diag 格式 X = d ...
- Matlab Tips: 高效实用的快捷命令
目录 0. 概要 1. 注释与反注释:Ctrl+R, Ctrl+T 2. 代码格式化:Ctrl+I 3. 代码自动补全 3.1 自动显示函数接口 3.2 Tab键自动补全 4. 代码分块执行 5. 查 ...
- refresh matlab path,Matlab 习惯常用命令收集 转
(1)管理命令和函数 addpath :添加目录到MATLAB搜索路径 doc :在Web浏览器上现实HTML文档 help :显示Matlab命令和M文件的在线帮助 helpwin helpdesk ...
最新文章
- 关于卷积神经网络的思考:将CNN视作泛函拟合
- thinkphp 模型的创建
- 直线矩阵数学之路(2)-四大神器-R(18)
- 怎么知道文本前后空格的字符格式_JDK 14的新特性:文本块Text Blocks
- 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)
- 设计模式在Netty中的应用-观察者模式源码举例
- Multi-catch parameters are not allowed for source level below 1.7 解决方法
- Linux htop工具使用详解
- 【Maven】win10系统安装Maven
- cpu超频软件_AMD 锐龙7 3700X(默频)全面对决i7-9700K(超频至5.0GHz)
- Atitit 文件系统概论 艾提拉著 目录 1. NTFS系统	1 1.1. NTFS文件系统概述	1 1.2. 1.1 文件系统简介 1.2 NTFS文件系统	1 1.3. 第2章
- 如何用vb制作“简单”的表白软件
- 偏向锁java_Java偏向锁
- linux下journalctl日志在哪,journalctl---系统日志
- 【渝粤题库】陕西师范大学163208 饭店管理 作业
- tableau public使用形状文件进行数据可视化
- 计算机网络自顶向下方法 第三章 运输层 3.4 可靠数据传输原理
- BlueTooth: 蓝牙基带数据传输机理分析
- android查询火车票接口,火车票查询信息接口
- direct wifi 投屏_告别Wifi直接投AOC无线投屏显示器轻松用
热门文章
- Light OJ 1316 A Wedding Party 最短路+状态压缩DP
- 【知乎】神回答,我们吐的不是槽 233
- html标签整合和css框架处理
- STL map常用操作简介
- django之关系及查询,数据类型,约束,分页
- 方法的形式参数是类名的时候如何调用
- JN_0005:PS改变图片指定内容颜色
- 【HDU2825】Wireless Password【AC自动机,状态压缩DP】
- Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法...
- 高校网络中心主任挨骂冤不冤?