Witam. mam pewien problem otóż potrzebuję zmodyfikować to co już mam w taki sposób aby dla metody zapisanej w "trainpid" mozna było uzywać sieci wielowarstwowej (w funkcji "newff" wówczas w nawiasie kwadratowym jest liczba podająca ile neuronów jest w warstwie/warstwach ukrytej)

% uczenie neuronu metoda PID
k=1;
Ti=1;
Td=1;
X=[2  7  8  10 15  -4 0 10  -6 -10
   11 10 16 -6  -10  6 7  -15 -7 -4
   1   1  1  1   1   1 1   1   1  1];
Z=[0 0 0 0 0 1 1 1 1 1];
W(1)=rand;
W(2)=rand;
W(3)=rand;
I_suma=0;
delta_old=0;
j=1;
E=mse(Z-logsig(W*X));
j=0; %liczba epok
while E(length(E)) > 0.001 & j < 1000
    ii=randperm(10);
    for k=1:length(ii)
      i=ii(k);    
      u=W*X(:,i);
      y=logsig(u);
      delta=Z(i)-y;
        W=W+k*(delta+(I_suma+delta/Ti)+Td*(delta_old-delta))*X(:,i)';
    end
    e=mse(Z-logsig(W*X));
    E=[E e];
    j=j+1;
end 


%plot(E,'r') 
clear all
P=[2  7  8  10 15  -4 0 10  -6 -10
   11 10 16 -6  -10  6 7  -15 -7 -4
   ];
T=[0 0 0 0 0 1 1 1 1 1];

net=newff(P,T,[3],{'purelin','tansig'},'trainpid'); 
net.trainParam.Td=1;
net.trainParam.k=1;
net.trainParam.Ti=1;
net.trainParam.min_grad=1e-1000;
net.trainParam.epochs=1000;
net.trainParam.show=1;
net.trainParam.max_fail=10;
net.trainParam.goal=0.000001;
net.trainParam.lr=0.1;
net.divideParam.trainRatio=100; % jaki procent zbioru jest wykorzystywany do uczenia
net.divideParam.valRatio=0; % do walidacji
net.divideParam.testRatio=0;
net=train(net,P,T);
 

Funkcje które są wykorzystywane bezpośrednio kończą sie na "pid"