trainingdata.inputs = [-1:0.13:1]';
trainingdata.schedin = trainingdata.inputs;
N = length(trainingdata.inputs(:,1));
trainingdata.outputs = sin(10*pi*(trainingdata.inputs(:,1)+ ...
ones(N,1)).*sin(trainingdata.inputs(:,1)/2).^3)+ ...
0.02*randn(N,1);
inputstest = [-1:0.05:1]';
spacing = 0.99*0.25;
centres = [-0.95:spacing:0.95]';
width = 0.2;
widths = ones(size(centres))*(width.^2);
M = length(centres);
N = length(trainingdata.outputs);
basis_act = exp(-((trainingdata.inputs*ones(1,M)-ones(N,1)*centres').^2)...
./(ones(N,1)*widths'));
W = pinv(basis_act)*trainingdata.outputs;
y_est = basis_act*W;
figure(1)
clf
subplot(2,1,1)
plot(trainingdata.inputs,y_est,':',...
trainingdata.inputs,trainingdata.outputs,'.')
title('Model output and training data')
subplot(2,1,2)
plot(trainingdata.inputs,basis_act)
title('Basis functions')
figure(2)
clf
plot(trainingdata.inputs, basis_act.*(ones(N,1)*W'))
hold on
plot(trainingdata.inputs,y_est,':')
hold off
title('Basis functions weighted by weighting constants, and sum (model output)')