主要内容

matlab:引擎::MATLABEngine

评估MATLAB函数从c++程序

描述

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

类细节

名称空间:

matlab:发动机
包括: MatlabEngine.hpp

成员函数

函数宏指令

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::data::Array feval(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())
matlab::data::Array feval(const matlab::engine::String &function, const matlab::data::Array &arg, const std::shared_ptr &output = std::shared_ptr(), const std::shared_ptr &error = std::shared_ptr())
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++。

输入和输出可以是由MATLAB Data Array API定义的类型,也可以是原生c++类型。

参数

const matlab::engine::字符串和函数

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

返回num_t

返回值的数目

const std::vector &args

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

const matlab::data::Array

单输入参数传递给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::数据::数组从double类型数值的向量中得到2乘3的维数。

  • 启动共享的MATLAB会话。

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

包括“matlabdata .hpp”,使用命名空间matlab::engine;
std::vector cppData{4,8,12,16,20,24};//创建一个2乘3的matlab数据数组matlab::data::ArrayFactory工厂;auto inputArray = factory。createArray({2,3}, cppData.cbegin(), cppData.cend());//启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//将数据数组传递给MATLAB的平方根函数//返回结果。auto result = matlabPtr->feval(u"sqrt", inputArray);

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

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
//同步启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//调用sqrt函数double result = matlabPtr->feval(u"sqrt", double(27));

对于返回多个输出参数的函数,可以使用MATLAB数据API,如果使用c++类型,则可以使用anstd::元组.有关示例,请参见使用原生c++类型调用函数

fevalAsync

FutureResult> fevalAsync(const matlab::engine::String &function, const size_t numReturned, const std::vector &args, const std::shared_ptr(), const std::shared_ptr &error = std::shared_ptr())
FutureResult 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 fevalAsync(const matlab::engine::String &function, const matlab::data::Array &arg, const std::shared_ptr & output = std::shared_ptr(), const std::shared_ptr & error = std::shared_ptr())
FutureResult fevalAsync(const matlab::engine::String &function, const std::shared_ptr &output, const std::shared_ptr &error, RhsArgs&&…rhsArgs)
FutureResult fevalAsync(const matlab::engine::String &function, RhsArgs&&…rhsArgs)
描述

异步计算MATLAB函数的输入参数和返回值。

参数

const matlab::engine::字符串和函数

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

返回num_t

返回值的数目

const std::vector &args

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

const matlab::data::Array

单输入参数传递给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函数的结果。

异常

没有一个

例子

本例将标量double 12.7传递给MATLAB√6异步功能。的FutureResult然后用于获取结果。

包括“matlabdata .hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::数据::ArrayFactory工厂;matlab::data::Array参数= factory.createScalar(12.7);FutureResult future = matlabPtr->fevalAsync(u"sqrt", std::move(参数));...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::engine::String &statement

MATLAB语句求值

const std::shared_ptr &output

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

const std::shared_ptr &error

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

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

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

matlab:引擎::MATLABSyntaxException

MATLAB语句语法错误。

例子

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

A =根号(12.7);

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

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlabPtr->eval(u"a =√(12.7);");
相关的话题

从c++评估MATLAB语句

evalAsync

FutureResult evalAsync(const matlab::engine::String &str, const std::shared_ptr &output = std::shared_ptr (), const std::shared_ptr &error = std::shared_ptr ())
描述

异步地将MATLAB语句计算为字符串。

参数

const matlab::engine::String& str

MATLAB语句求值

const std::shared_ptr & output

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

const std::shared_ptr & error

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

返回值

FutureResult

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

异常

没有一个

例子

本示例异步计算以下MATLAB语句。

A =根号(12.7);

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

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();FutureResult future = matlabPtr->evalAsync(u"a = sqrt(12.7);");
相关的话题

从c++评估MATLAB语句

getVariable

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

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

参数

const matlab::engine::String& 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基础工作空间。

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::data::Array varName = matlabPtr->getVariable(u"varName");

getVariableAsync

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

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

参数

const matlab::engine::String& 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基础工作区。

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();FutureResult future = matlabPtr->getVariableAsync(u"varName");...matlab::data::Array varName = future.get();

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::engine::String& varName

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

const matlab::data::Array

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

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

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

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

例子

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

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlab::data::Array data = factory。createArray({1,3}, {4,8,6});matlabPtr - > setVariable (u“数据”,数据);

setVariableAsync

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

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

参数

const matlab::engine::String& varName

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

const matlab::data::Array

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

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

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

异常

没有一个

例子

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

#包含“MatlabEngine.hpp”,使用命名空间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);

getProperty

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

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

参数

const matlab::data::Array &objectArray

MATLAB对象数组

数组和对象

标量MATLAB对象

size_t指数

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

const字符串&propertyName

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

返回值

matlab::数据::数组

指定属性的值

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

属性不存在。

例子

这个例子在try/catch块中使用MATLABEngine: eval.的MATLABEngine: getVariable成员函数返回异常对象。MATLABEngine: getProperty返回异常消息物业价值为matlab:: data:: CharArray

#包含“MatlabEngine.hpp”,使用命名空间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

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

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

参数

const matlab::data::Array &objectArray

MATLAB对象数组

数组和对象

标量MATLAB对象

size_t指数

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

const matlab::engine::String &propertyName

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

返回值

FutureResult

FutureResult用于同步操作的对象。

异常

没有一个

例子

这个例子在try/catch块中使用MATLABEngine: eval.的MATLABEngine: getVariable成员函数返回异常对象。MATLABEngine: getPropertyAsync返回一个FutureResult用来获取异常消息物业价值为matlab:: data:: CharArray

#包含“MatlabEngine.hpp”,使用命名空间matlab::engine;
std::unique_ptr matlabPtr = startMATLAB();matlabPtr - > eval (u”尝试;(4)冲浪;抓我,结束”);matlab::data::Array mException = matlabPtr->getVariable(u"me");FutureResult future = matlabPtr->getPropertyAsync(mException, u"message");matlab::data::CharArray message = future.get();std::cout << "messages is: " << message.toAscii() << std::endl;

setProperty

void setProperty(matlab::data::Array &objectArray, size_t索引,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指数

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

const matlab::engine::String &propertyName

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

const matlab::data::Array &propertyValue

赋给属性的值

异常

matlab:引擎::MATLABNotAvailableException

MATLAB会话不可用。

matlab:引擎::MATLABExecutionException

属性不存在。

例子

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

#包含“MatlabEngine.hpp”,使用命名空间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"LineStyle", LineStyle);

setPropertyAsync

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

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

参数

matlab::数据::&objectArray数组

MATLAB对象数组

matlab::数据::数组对象

标量MATLAB对象

size_t指数

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

const matlab::engine::String &propertyName

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

const matlab::data::Array &propertyValue

赋给属性的值。

异常

没有一个

例子

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

#包含“MatlabEngine.hpp”,使用命名空间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(":");FutureResult future = matlabPtr->setPropertyAsync(lineHandle, u"LineStyle", LineStyle);

版本历史

在R2017b中引入