【发布时间】:2011-04-12 13:41:51
【问题描述】:
在这种情况下,我的基础工作区中有一个神经网络 (NN) 实例,我希望在 Simulink 仿真中使用它。我将 NN 的使用封装在嵌入式 Matlab 函数中,并带有网络应该使用的输入参数。
原则上我希望做这样的事情:
function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');
目标是从基础工作区(network 类的一个实例)获取 net 对象。
这是我使用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 函数块,它看起来像上面的任何示例。
【问题讨论】: