主要内容

matlab:引擎::MATLABEngine

评估MATLAB函数来自c++程序

描述

matlab:引擎::MATLABEngine类使用MATLAB®过程作为一个计算引擎的c++。这个类提供了c++语言和MATLAB之间的接口,使您能够从c++程序中计算MATLAB函数和表达式。

类细节

名称空间:

matlab:发动机
包括: MatlabEngine.hpp

工厂方法

matlab:引擎::MATLABEngine类提供了同步或异步启动MATLAB和连接到共享MATLAB会话的方法。

不支万博1manbetx持的启动选项

引擎不支持这些MATLAB启动选项:万博1manbetx

  • - h

  • -

  • -?

  • - n

  • - e

  • -softwareopengl

  • 日志文件

有关MATLAB启动选项的信息,请参见常用启动选项.关于如何在启动引擎应用程序时使用MATLAB启动选项的示例,请参见用启动选项启动MATLAB

方法总结

成员函数

函数宏指令

用参数同步评估MATLAB函数

fevalAsync

用参数异步地评估MATLAB函数

eval

同步评估MATLAB语句作为一个字符串

evalAsync

作为一个字符串异步地评估MATLAB语句

getVariable

从MATLAB基础工作空间同步获取变量

getVariableAsync

从MATLAB基础工作空间异步获取变量

setVariable

同步将变量放入MATLAB基础工作空间

setVariableAsync

将变量异步放入MATLAB基工作区

getProperty

获取对象属性值

getPropertyAsync

异步获取对象属性值

setProperty

设置对象属性值

setPropertyAsync

异步设置对象属性值

成员函数的细节

函数宏指令

std::vector feval(const matlab::engine::String &function, const size_t numReturned, const std::vector &args, const std::shared_ptr &output = std::shared_ptr(),const std::shared_ptr &error = std::shared_ptr())
matlab::数据::数组函数宏指令(const matlab::引擎::字符串函数,const std::向量数组< matlab::数据::> args, const std::要查看< matlab::引擎::StreamBuffer >和输出= std::要查看< matlab::引擎::StreamBuffer > (), const std::要查看< matlab::引擎::StreamBuffer > & error = std::要查看< matlab::引擎::StreamBuffer > ())
matlab::数据::数组函数宏指令(const matlab::引擎::字符串函数,常量matlab::数据::数组参数,const std::要查看< matlab::引擎::StreamBuffer >和输出= std::要查看< matlab::引擎::StreamBuffer > (), const std::要查看< matlab::引擎::StreamBuffer > & error = std::要查看< matlab::引擎::StreamBuffer > ())
ResultType feval(const matlab::engine::String &function, const std::shared_ptr &output, const std::shared_ptr &error, RhsArgs&& &…rhsArgs)
ResultType feval(const matlab::engine::String &function, RhsArgs&&…rhsArgs)
描述

用输入参数同步地计算MATLAB函数。当你想从c++传递参数给MATLAB,或者想从MATLAB返回一个结果给c++时,使用feval。

输入和输出可以是MATLAB数据数组API定义的类型,也可以是本地c++类型。

参数

const matlab::引擎::字符串函数

要计算的MATLAB函数或脚本的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const size_t numReturned

返回值的数量

const std::向量< matlab::数据::>数组参数

函数中的多个输入参数传递给MATLAB函数std::向量.在MATLAB中将矢量转换为列数组。

const matlab::数据::数组参数

传递给MATLAB函数的单一输入参数。

const std::shared_ptr &output = std::shared_ptr()

流缓冲区用来存储MATLAB函数的标准输出。

const std::shared_ptr &error = std::shared_ptr()

用于存储来自MATLAB函数的错误消息的流缓冲区。

RhsArgs&&……rhsArgs

用于函数输入的本地c++数据类型。函数宏指令接受这些c++数据类型的标量输入:保龄球int8_tint16_tint32_tint64_tuint8_tuint16_tuint32_tuint64_t浮动

返回值

std::向量数组< matlab::数据::>

MATLAB函数返回的输出。

matlab::数据::数组

从MATLAB函数返回的单个输出。

ResultType

作为用户指定类型的MATLAB函数返回的输出。可以是一个std::元组如果返回多个参数。

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

函数中存在MATLAB运行时错误。

matlab:引擎::TypeConversionException

MATLAB函数的结果不能转换为指定的类型。

matlab:引擎::MATLABSyntaxException

在MATLAB函数中有一个语法错误。

例子

这个例子将一个数值数组传递给一个MATLAB函数。代码执行以下步骤:

  • 创建一个matlab::数据::数组尺寸为2乘3,由double类型的数值向量组成。

  • 启动一个共享的MATLAB会话。

  • 将数据数组传递给MATLAB√6函数并将结果返回给c++。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::vector cppData{4,8,12,16,20,24};//创建一个2 × 3的matlab数据数组matlab::data::ArrayFactory factory;auto inputArray = factory。createArray({2,3}, cppData.cbegin(), cppData.cend());//启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//将数据数组传递给MATLAB sqrt函数//并返回结果。自动结果= matlabPtr->feval(u"sqrt", inputArray);

当调用函数宏指令使用本机c++类型时,输入参数被限制为标量值。例如,这段代码返回标量值的平方根。

#include "MatlabEngine.hpp" using namespace matlab::engine;
//同步启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//调用sqrt函数double result = matlabPtr->feval(u"sqrt", double(27));

对于返回多个输出参数的函数,可以使用MATLAB数据API,如果使用c++类型,也可以使用std::元组.例如,请参见使用本地c++类型调用函数

fevalAsync

FutureResult> fevalAsync(const matlab::engine::String &function, const size_t numReturned, const std::vector &args, const std::shared_ptr &output = std::shared_ptr(),const std::shared_ptr &error = std::shared_ptr())
fevalAsync(const matlab::engine::String &function, const std::vector &args, const std::shared_ptr &output = std::shared_ptr(),const std::shared_ptr &error = std::shared_ptr())
FutureResult < matlab::数据::数组> fevalAsync (const matlab::引擎::字符串函数,常量matlab::数据::数组参数,const std::要查看< matlab::引擎::StreamBuffer > &输出= std::要查看< matlab::引擎::StreamBuffer > (), const std::要查看< matlab::引擎::StreamBuffer > &错误= std::要查看< matlab::引擎::StreamBuffer > ())
fevalAsync(const matlab::engine::String &function, const std::shared_ptr &output, const std::shared_ptr &error, RhsArgs&& &…rhsArgs)
fevalAsync(const matlab::engine::String &function, RhsArgs&&…rhsArgs)
描述

用输入参数和返回值异步地评估MATLAB函数。

参数

const matlab::引擎::字符串函数

要计算的MATLAB函数或脚本的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const size_t numReturned

返回值的数量

const std::向量< matlab::数据::>数组参数

函数中的多个输入参数传递给MATLAB函数std::向量.在MATLAB中将矢量转换为列数组。

const matlab::数据::数组参数

传递给MATLAB函数的单一输入参数。

const std::shared_ptr &output = std::shared_ptr()

流缓冲区用来存储MATLAB函数的标准输出。

const std::shared_ptr &error = std::shared_ptr()

用于存储来自MATLAB函数的错误消息的流缓冲区。

RhsArgs&&……rhsArgs

用于函数输入的本地c++数据类型。函数宏指令接受这些c++数据类型的标量输入:保龄球int8_tint16_tint32_tint64_tuint8_tuint16_tuint32_tuint64_t浮动

返回值

FutureResult

一个FutureResult对象,用于获取调用MATLAB函数的结果。

异常

没有一个

例子

这个例子将标量双精度12.7传递给MATLAB√6异步功能。的FutureResult然后用于获得结果。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::数据::ArrayFactory工厂;matlab::data::Array参数= factory.createScalar(12.7);FutureResult future = matlabPtr->fevalAsync(u"sqrt", std::move(argument));...matlab::data::TypedArray result = future.get();
相关的话题

异步调用函数

eval

void eval(const matlab::engine::String &statement, const std::shared_ptr &output = std::shared_ptr (), const std::shared_ptr &error = std::shared_ptr ())
描述

同步地计算一个MATLAB语句作为一个字符串。

参数

const matlab::引擎::字符串的声明

MATLAB语句求值

const std::要查看< matlab::引擎::StreamBuffer >和输出

用于存储MATLAB语句的标准输出的流缓冲区。

const std::要查看< matlab::引擎::StreamBuffer > & error

用于存储来自MATLAB命令的错误消息的流缓冲区。

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

在MATLAB语句中有一个运行时错误。

matlab:引擎::MATLABSyntaxException

在MATLAB语句中有一个语法错误。

例子

这个例子计算下面的MATLAB语句。

一个= sqrt (12.7);

语句创建变量一个在MATLAB基础工作空间。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlabPtr - > eval (u = sqrt(12.7);”);
相关的话题

评估MATLAB语句从c++

evalAsync

FutureResult <空白> evalAsync (const matlab::引擎::字符串str, const std::要查看< matlab::引擎::StreamBuffer >和输出= std::要查看< matlab::引擎::StreamBuffer > (), const std::要查看< matlab::引擎::StreamBuffer > & error = std::要查看< matlab::引擎::StreamBuffer > ())
描述

异步计算一个MATLAB语句作为一个字符串。

参数

const matlab::引擎::字符串str

MATLAB语句求值

const std::shared_ptr &输出

用于存储MATLAB语句的标准输出的流缓冲区。

const std::shared_ptr & error

用于存储来自MATLAB命令的错误消息的流缓冲区。

返回值

FutureResult

一个FutureResult对象,用于等待MATLAB语句完成。

异常

没有一个

例子

这个例子异步地计算下面的MATLAB语句。

一个= sqrt (12.7);

语句创建变量一个在MATLAB基础工作空间。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();FutureResult <空白>未来= matlabPtr - > evalAsync (u = sqrt(12.7);”);
相关的话题

评估MATLAB语句从c++

getVariable

getVariable(const matlab::engine::String &varName, matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE)
描述

从MATLAB基础或全局工作区中获取一个变量。

参数

const matlab::引擎::字符串varName

在MATLAB工作空间中变量的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE

MATLAB工作空间(BASE或GLOBAL)来获取变量。有关更多信息,请参见全球

返回值

matlab::数据::数组

变量从MATLAB库或全局工作空间获得

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

所请求的变量在指定的MATLAB基础或全局工作区中不存在。

例子

这个例子获得一个名为varName从MATLAB基础工作空间。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::data::Array varName = matlabPtr->getVariable(u"varName");
相关的话题

传递变量从MATLAB到c++

getVariableAsync

getVariableAsync(const matlab::engine::String &varName, matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE)
描述

从MATLAB基础或全局工作区异步获取一个变量。

参数

const matlab::引擎::字符串varName

在MATLAB工作空间中变量的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE

MATLAB工作空间(BASE或GLOBAL)来获取变量。有关更多信息,请参见全球

返回值

FutureResult

一个FutureResult对象,您可以使用它来获得从MATLAB工作空间中获得的变量matlab.data.Array

异常

没有一个

例子

这个例子获得一个名为varName从MATLAB基础工作空间异步。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB(); future = matlabPtr->getVariableAsync(u"varName");...matlab::data::Array varName = future.get();
相关的话题

传递变量从MATLAB到c++

setVariable

void setVariable(const matlab::engine::String &varName, const matlab::data::Array &var, matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE)
描述

将一个变量放入MATLAB库或全局工作区中。如果在MATLAB工作空间中存在同名变量,setVariable覆盖它。

参数

const matlab::引擎::字符串varName

要在MATLAB工作空间中创建的变量的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const matlab::数据::数组var

要在MATLAB工作空间中创建的变量的值

matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE

将变量放入MATLAB BASE或全局工作区中。有关更多信息,请参见全球

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

例子

这个例子将变量命名为数据在MATLAB基础工作空间。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::data::Array data = factory。createArray({1,3}, {4,8,6});matlabPtr - > setVariable (u“数据”,数据);
相关的话题

传递变量从c++到MATLAB

setVariableAsync

futurerresult  setVariableAsync(const matlab::engine::String &varName, const matlab::data::Array var, matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE)
描述

将一个变量异步地放入MATLAB库或全局工作区中。如果在MATLAB基础工作空间中存在同名变量,setVariableAsync覆盖它。

参数

const matlab::引擎::字符串varName

要在MATLAB工作空间中创建的变量的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const matlab::数据::数组var

要在MATLAB工作空间中创建的变量的值

matlab::engine::WorkspaceType WorkspaceType = matlab::engine::WorkspaceType::BASE

将变量放入MATLAB BASE或全局工作区中。有关更多信息,请参见全球

异常

没有一个

例子

这个例子将变量命名为数据在MATLAB基础工作空间。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::data::Array data = factory。createArray({1,3}, {4.})8。,6. }); FutureResult future = matlabPtr->setVariableAsync(u"data", data);
相关的话题

传递变量从MATLAB到c++

getProperty

matlab::data::Array getProperty(const matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName)
getProperty(const matlab::data::Array &object, const matlab::engine::String &propertyName)
描述

获取对象属性的值。如果对象输入参数是一个对象数组,请指定数组元素的索引,该数组元素对应于您想要获取其属性值的对象。

参数

const matlab::数据::&objectArray数组

MATLAB对象数组

const matlab::数据::数组对象

标量MATLAB对象

size_t指数

对象数组中的从零开始的索引,指定该数组中返回属性值的对象

常量字符串&propertyName

属性的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

返回值

matlab::数据::数组

指定属性的值

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

该属性不存在。

例子

这个例子在try/catch块中计算MATLAB语句MATLABEngine: eval.的MATLABEngine: getVariable成员函数返回异常对象。MATLABEngine: getProperty返回异常消息属性值作为matlab:: data:: CharArray

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlabPtr - > eval (u”尝试;浏览(4);抓住我;端”);matlab::data::Array mException = matlabPtr->getVariable(u"me");matlab::data::CharArray message = matlabPtr->getProperty(mException, u"message");std::cout << "messages is: " << message.toAscii() << std::endl;

getPropertyAsync

getPropertyAsync(const matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName)
getPropertyAsync(const matlab::data::Array &object, const matlab::engine::String &propertyName)
描述

异步获取对象属性的值。如果对象输入参数是一个对象数组,请指定数组元素的索引,该数组元素对应于您想要获取其属性值的对象。

参数

const matlab::数据::&objectArray数组

MATLAB对象数组

const matlab::数据::数组对象

标量MATLAB对象

size_t指数

对象数组中的从零开始的索引,指定该数组中返回属性值的对象

&propertyName const matlab::引擎::字符串

属性的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

返回值

FutureResult

FutureResult对象,该对象用于同步操作。

异常

没有一个

例子

这个例子在try/catch块中计算MATLAB语句MATLABEngine: eval.的MATLABEngine: getVariable成员函数返回异常对象。MATLABEngine: getPropertyAsync返回一个FutureResult用来获取异常的消息属性值作为matlab:: data:: CharArray

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlabPtr - > eval (u”尝试;(4)冲浪;抓我,结束”);matlab::data::Array mException = matlabPtr->getVariable(u"me");} / / / / / / / / / / / / / / / / / /matlab::data::CharArray message = future.get();std::cout << "messages is: " << message.toAscii() << std::endl;

setProperty

void setProperty(matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
void setProperty(matlab::data::Array &object, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
描述

设置对象属性的值。如果对象输入参数是一个对象数组,请指定数组元素的索引,该数组元素对应于要设置其属性值的对象。

参数

matlab::数据::&objectArray数组

MATLAB对象数组

matlab::数据::数组对象

标量MATLAB对象

size_t指数

对象数组中的从零开始的索引,指定该数组中设置了属性值的对象

&propertyName const matlab::引擎::字符串

要设置的属性的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const matlab::数据::propertyvalue数组

分配给财产的价值

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

该属性不存在。

例子

这个例子展示了如何设置一个MATLAB对象属性。它创建一个MATLAB图形并返回行句柄对象。设置直线的值线型属性设置为字符在MATLAB中修改线对象的属性值,并更新图形的线样式。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::数据::ArrayFactory工厂;matlab::data::Array yData = factory。createArray <二> ({1,5},{4.0,11.0,4.7,36.2,72.3});matlab::data::Array lineHandle = matlabPtr->feval(u"plot", yData);matlab::data::CharArray lineStyle = factory.createCharArray(":");matlabPtr - > setProperty (lineHandle u“线型”,线型);
相关的话题

设置MATLAB对象的属性

setPropertyAsync

FutureResult setPropertyAsync(matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
futurerresult  setPropertyAsync(matlab::data::Array &object, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
描述

异步设置对象属性的值。如果对象输入参数是一个对象数组,请指定数组元素的索引,该数组元素对应于要设置其属性值的对象。

参数

matlab::数据::&objectArray数组

MATLAB对象数组

matlab::数据::数组对象

标量MATLAB对象

size_t指数

对象数组中的从零开始的索引,指定该数组中设置了属性值的对象

&propertyName const matlab::引擎::字符串

要设置的属性的名称。将名称指定为std:: u16string.也可以将此参数指定为std:: string

const matlab::数据::propertyvalue数组

分配给财产的价值。

异常

没有一个

例子

这个例子展示了如何异步设置一个MATLAB对象属性。它创建一个MATLAB图形并返回行句柄对象。设置行线型属性设置为字符在MATLAB中修改对象的属性值,并更新图形的线条样式。

#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::数据::ArrayFactory工厂;matlab::data::Array yData = factory。createArray <二> ({1,5},{4.0,11.0,4.7,36.2,72.3});matlab::data::Array lineHandle = matlabPtr->feval(u"plot", yData);matlab::data::CharArray lineStyle = factory.createCharArray(":");setPropertyAsync(lineHandle, u"LineStyle", LineStyle);
相关的话题

设置MATLAB对象的属性

介绍了R2017b