www.gusucode.com > nnet 案例源码 matlab代码程序 > nnet/demop6.m

    %% Linearly Non-separable Vectors
% A 2-input hard limit neuron fails to properly classify 5 input vectors because
% they are linearly non-separable.
%
% Copyright 1992-2011 The MathWorks, Inc.

%%
% Each of the five column vectors in X defines a 2-element input vectors, and a
% row vector T defines the vector's target categories.  Plot these vectors with
% PLOTPV.

X = [ -0.5 -0.5 +0.3 -0.1 -0.8; ...
      -0.5 +0.5 -0.5 +1.0 +0.0 ];
T = [1 1 0 0 0];
plotpv(X,T);

%%
% The perceptron must properly classify the input vectors in X into the
% categories defined by T.  Because the two kinds of input vectors cannot be
% separated by a straight line, the perceptron will not be able to do it.
%
% Here the initial perceptron is created and configured. (The configuration
% step is normally optional, as it is performed automatically by ADAPT
% and TRAIN.)

net = perceptron;
net = configure(net,X,T);

%%
% Add the neuron's initial attempt at classification to the plot.  The
% initial weights are set to zero, so any input gives the same output and the
% classification line does not even appear on the plot.

hold on
plotpv(X,T);
linehandle = plotpc(net.IW{1},net.b{1});

%%
% ADAPT returns a new network after learning on the input and target data,
% the outputs and error. The loop allows the network to repeatedly adapt,
% plots the classification line, and stops after 25 iterations.

for a = 1:25
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);  drawnow;
end;

%%
% Note that zero error was never obtained.  Despite training, the perceptron has
% not become an acceptable classifier.  Only being able to classify linearly
% separable data is the fundamental limitation of perceptrons.