在这种情况下,我的基础工作区中有一个神经网络 (NN) 实例,我希望在 Simulink 仿真中使用该实例。我将 NN 的使用包装在嵌入式 Matlab 函数中,其中输入参数应由网络使用。
原则上我希望做这样的事情:
function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');
net
目标是从基础工作区(这是 class 的一个实例)中获取对象network
。
这是我过去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 功能块,它看起来像上面的任何示例。