% MLTC2NARX multilayer time-course to narx network % [narx] = mltc2narx(net,d) % net : multilayer time-course network % d : delay lines % narx : narx network %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [narx] = mltc2narx(net,d) % Get input range for real inputs R = net.inputs{1}.range; n = size(R,1)-length(d); Pr = R(1:n,:); % Get layer dimensions for all but first two h = zeros(1,net.numLayers-2); for i = 1:length(h) h(i) = net.layers{i+2}.dimensions; end % Get transfer functions for all but first two TF = cell(1,net.numLayers-2); for i = 1:length(TF) TF{i} = net.layers{i+2}.transferFcn; end % Create narx network narx = newnarx(Pr,0,d,h,TF); nl = narx.numLayers; narx.biasConnect = zeros(nl,1); % Disconnect all layers narx.layerConnect = zeros(size(narx.layerConnect)); % Set input weights narx.IW{1} = net.LW{3,2}; % Connect feedforward layers and assign weights for i = 2:size(narx.layerConnect,1) narx.layerConnect(i,i-1) = 1; narx.LW{i,i-1} = net.LW{i+2,i+1}; end % Set biases for i = 1:nl if net.biasConnect(i+2) narx.b{i} = net.b{i+2}; end end % Connect delay layers and assign weights for i = 1:nl if net.layerConnect(i+2,1) narx.layerConnect(i,nl) = 1; narx.layerWeights{i,nl}.delays = d; narx.LW{i,nl} = net.LW{i+2,1}; end end