Simulink:如何在嵌入式matlab函数中使用工作区中的对象实例?
在本例中,我的基本工作区中有一个神经网络(NN)实例,我希望在Simulink模拟中使用它。我将NN的使用包装在一个嵌入式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从工作区读取变量时遇到的问题:
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 我尝试从工作区使用
,但它似乎只支持双倍的标量或向量数据。我尝试从工作区使用,但它似乎只支持双倍的标量或向量数据。