% Estructura de entrada-salida: % Se pretende crear un modelo de la forma % y1(t)= f1[y1(t-1), y2(t-1), y1(t-2), y2(t-2), % u1(t), u2(t)] % y2(t)= f2[y1(t-1), y2(t-1), y1(t-2), y2(t-2), % u1(t), u2(t)] % Se generan los datos utilizando el modelo % Se crean las matrices para la red >> x=xudx(:,1:6)'; >> y=xudx(:,7:8)'; % Se determinan los intervalos de entrada >> interv=minmax(x); % Se define el número de salidas >> numsal=2; % Se define el factor de aprendizaje >> fa=0.01; % Se define el filtro lineal >> net=newlin(interv, numsal, [0], fa); % Se verifica número de entradas >> net.inputs{1} size: 6 % Se verifica número de salidas >> net.outputs{1} size: 2 % Se verifica valor de los pesos, que debe ser: % IW=[numsal,nument]=[2, 6] y % b=[1,numsal]=[0, 2] >> net.IW{1} ans = 0 0 0 0 0 0 0 0 0 0 0 0 >> net.b{1} ans = 0 0 % Se realizará procesamiento por lotes (train) >>net.trainParam.epochs = 5000; % Épocas >>net.trainParam.goal = 0.01; % Error deseado >> net.trainFcn='traingd'; % Entrenamiento % por gradiente % Se entrena la red >> net = train(net,x,y); % Se visualizan resultados >> ynet=sim(net,x)'; >> y=y'; >> plot(y(:,1)) % Salida 1 >> hold on >> plot(ynet(:,1),'g') % Incluyendo el error: % >> err1=y(:,1)-ynet(:,1); plot(err1); % >> err2=y(:,2)-ynet(:,2); plot(err2); % Se verifican los parámetros del filtro >> net.IW{1} 1.1120 0.4014 -0.6451 -0.3868 1.4313 -0.6267 -0.1575 -0.2305 -0.0873 0.2244 0.8708 0.5734 >> net.b{1} -0.1135 0.0705 % Núcleo estimador identificado % y1(t)= 1.11y1(t-1)+0.4y2(t-1)-0.6y1(t-2) % -0.3y2(t-2)+1.4u1(t)-0.6u2(t)-0.11 % y2(t)= -0.1y1(t-1)-0.2y2(t-1)-0.08y1(t-2) % +0.2y2(t-2)+0.8u1(t)-0.5u2(t)+0.07 |