Você está na página 1de 1

clear; close all; clc

load datos.txt % cargamos la data2 en el programa


a=datos(:,1); % almacenamos la primera columna de la data2
b=datos(:,2); % almacenamos la segunda columna de la data2
c=datos(:,3); % almacenamos la tercera columna de la data2
Kp=datos(:,4); % almacenamos la cuarta columna de la data2
Ki=datos(:,5); % almacenamos la quinta columna de la data2
Kd=datos(:,6); % almacenamos la sexta columna de la data2
P=[a';b';c']; % creamos el vector de entrada(P) para la red neuronal
T=[Kp';Ki';Kd'];%creamos el vector de objetivo(T) para la red neuronal
N1=3; N2=3; %neuronas de capa oculta y capa de salida
%%% Creamos la red feed-forward backpropagation %%%
net=newff(P,T,[N1 N2],{'tansig','purelin'},'trainlm');
W=randn(N1,N1); % W toma valores aleatorios
V=randn(N2,N1); % V toma valores aleatorios
bW=randn(N1,1); % bW toma valores aleatorios
bV=randn(N2,1); % bV toma valores aleatorios
net.iw{1,1}=W; % pesos sipnaticos
net.lw{2,1}=V; % pesos sipnaticos
net.b{1}=bW; % bias
net.b{2}=bV; % bias
%%% Entrenar la red lineal %%%
net.trainParam.epochs=300; % numero de epocas
net.trainParam.goal=1e-5; % objetivo de error
net.trainParam.show=50; % muestra epoch/50
[net,tr]=train(net,P,T);
%%% Validar el entrenamiento ingresando una planta P(s) %%%
%coeficientes ai,bi,ci
ai=input('ingrese a1 :')
bi=input('ingrese b1 :')
ci=input('ingrese c1 :')
pla=tf(ai,[1 bi ci]); %funcion de transferencia de la planta
Pv=[ai;bi;ci]; %vector de validacion
a=sim(net,Pv);
Kp=a(1,:); Ki=a(2,:); Kd=a(3,:); %lectura de Kp, Ki y Kd
PID=tf([Kd Kp Ki],[1 0]); %funcion de transferencia del PID
%LAZO DIRECTO
L=PID*pla;
%LAZO CERRADO
F=L/(L+1);
%SIMULACION
t=0:0.001:1;
r=ones(size(t));
y=lsim(F,r,t);
plot(t,r,'k--',t,y,'m')