2

在这种情况下,我的基础工作区中有一个神经网络 (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对象。那也没有用。似乎与编译器认为smxArray.

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('load')
s = load('net');
XBDDprime = s.net([F XB XBD XBDD]');

解决方案

我终于屈服并选择了 matlab 功能块,它看起来像上面的任何示例。

4

2 回答 2

1

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

于 2011-04-12T13:46:52.863 回答
-2

为神经网络仿真生成 Simulink 模块 语法 gensim(net,st) 获取帮助 键入 help network/gensim。

于 2011-09-17T10:28:47.460 回答