Simulink:如何在嵌入式matlab函数中使用工作区中的对象实例?

Simulink:如何在嵌入式matlab函数中使用工作区中的对象实例?,matlab,simulink,Matlab,Simulink,在本例中,我的基本工作区中有一个神经网络(NN)实例,我希望在Simulink模拟中使用它。我将NN的使用包装在一个嵌入式Matlab函数中,其中包含了网络应该使用的输入参数 原则上,我希望这样做: function XBDDprime = NN(F, XB, XBD, XBDD) %#eml global net; XBDDprime = net([F XB XBD XBDD]'); 其中目标是从基本工作区(它是类网络的实例)获取网络对象 这是我使用evalin从工作区读取变量时遇到的问题:

在本例中,我的基本工作区中有一个神经网络(NN)实例,我希望在Simulink模拟中使用它。我将NN的使用包装在一个嵌入式Matlab函数中,其中包含了网络应该使用的输入参数

原则上,我希望这样做:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');
其中目标是从基本工作区(它是类
网络
的实例)获取
网络
对象

这是我使用
evalin
从工作区读取变量时遇到的问题:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('evalin');
net = evalin('base', 'net'); %Fetch net from workspace
XBDDprime = net([F XB XBD XBDD]'); %Error!
这不会编译,因为simulink似乎认为net是一个数组,
net(…)
是数组订阅(实际错误消息:不支持订阅mxArray)

在我看来,Simulink需要对用于编译嵌入式matlab函数的任何对象有一个完整的定义,对吗?有解决办法吗?我是否可以使用
Simulink.Signal
以某种方式包装NN并将其作为参数添加到函数块中

编辑 我尝试使用
load
从文件中加载序列化的
net
对象。那也没用。在编译器认为
s
mxArray
的情况下,似乎存在相同的问题

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('load')
s = load('net');
XBDDprime = s.net([F XB XBD XBDD]');
解决方案
最后,我放弃了matlab函数块,它看起来像上面的任何一个例子。

您可以将
net
参数定义为
NN
函数的输入,并使用
From Workspace
块将其输入到您的模型中。我不确定这是否适用于
嵌入式MATLAB函数
块,您可能需要切换到
m code
块。

您可以将
net
参数定义为
NN
函数的输入,并使用
From Workspace
块将其输入到您的模型中。我不确定这是否适用于
嵌入式MATLAB函数
块,您可能需要切换到
m code
块。

为神经网络模拟生成Simulink块 语法 gensim(净,圣) 求助
键入帮助网络/gensim

为神经网络模拟生成Simulink块 语法 gensim(净,圣) 求助
键入帮助网络/gensim

我尝试从工作区使用
,但它似乎只支持双倍的标量或向量数据。我尝试从工作区使用
,但它似乎只支持双倍的标量或向量数据。