@元胞内容引用自非元胞数组对象。
第一次发布文章,不对的地方敬请指正
主要针对于《matlab神经网络原理与实例精解》中的反馈神经网络中hopfield_newhop.m中,书上给出的代码无法正确运行,自己经过调试解决以及无法解决的问题。
书上的源代码如下:
% hopfield_newhop.m
% 定义吸引子
T=[-1,1;1,-1];
% 创建Hopfield网络
net=newhop(T);
% 用原平衡位置的坐标作为输入进行仿真
Y=sim(net,2,[],T);
fprintf('输入平衡中心得出的结果:');
disp(Y);
% 用新的值作为输入
rng(0);
N=10;
for i=1:N
y=rand(1,2)*2-1;
y(y>0)=1;
y(y<=0)=-1;
[Y,a,b]=sim(net,{1,5},[],y');
if(sum(abs(b))<1.0e-1)
b=[0,0]';
end
fprintf('第%d组测试数据:',i);
disp(y);
fprintf('网络输出: ');
disp(b');
end
但是运行的时候出现:
经过对源代码的分析,然后发现,仿真的时候返回参数中的b是一个细胞数组,无法直接参与运算。所以将第21行代码中修改为
if(sum(abs(b{1}))<1.0e-1)
再来看看运行结果:
这时发现运行结果与书上的结果大致相同,但是对于网络输出,如果不是输出[0,0],就会出现[2x1 double]。这是因为b是个细胞数组,但是在解决这个问题上,尝试使用b{1}来代替b的方式,却又发生元胞内容引用自非元胞数组对象。
该问题暂时没找到解决方法,大家可以互相交流!