MATLAB函数接口错误

时间:2016-05-26 15:48:46

标签: matlab simulink

我已经在matlab脚本文件中训练了神经网络,并将训练过的数据保存到.mat文件中。因此,在Simulink用户定义函数中加载.mat文件后,我可以使用此训练数据来测试输入。 但我得到运行时错误

  

调用Matlab函数中止:调用Matlab函数'sim'时出错。按“确定”打开调试器。

并且在调试器中错误是

  

MATLAB函数接口错误:调用MATLAB函数'sim'时出错。块神经网络功能(#108)执行时:无

代码为

function [tau1p,tau2p]  = Nntwork(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd)
coder.extrinsic('load');
coder.extrinsic('sim');
net=load('trainednet.mat');
a=zeros(1,2);
a=sim(net,[theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]);

如果有人可以帮我解决此错误。

1 个答案:

答案 0 :(得分:0)

我要检查的第一件事是你的变量net实际上是一个NN对象。您用于load的语法将mat文件中的所有变量加载到名为net的结构中,您很可能需要使用net.net来提取net变量来自net结构。 (当然,如果是这种情况,那么你不应该调用结构(即loadnet的输出,因为它会非常混乱。

但是,我建议最好的方法是将代码包装到另一个函数中,然后从MATLAB功能块中调用该函数。即。

使MATLAB功能块像:

function [tau1p,tau2p]  = NntworkWrapper(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd)
coder.extrinsic('Nntwork');
a=zeros(1,2);
a=Nntwork([theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]);

然后在单独的m文件中添加此附加功能:

function a = Nntwork(theta_data)
load('trainednet.mat');
a=sim(net,theta_data);

这样的设置将使您能够独立于Simulink运行和测试NN代码,但也可以在需要时从Simulink调用它。