can anyone offer control of state space system using Iterative Learning Control in command window in MATALB
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mohamed Eshag
le 30 Nov 2018
Commenté : mazin alseadi
le 3 Nov 2020
can anyone offer control of state space system using Iterative Learning Control in command window in MATALB
4 commentaires
Réponse acceptée
Mark Sherstan
le 7 Déc 2018
Here is an example that should push you in the correct direction. I havent completed it as I dont know what your reference signal is or if you need to add noise, disturbances, pure time delay, etc... but it is basically complete. Refer to the comments to follow what is going on.
function [ ] = ILC()
%[Ad Bd Cd Dd] = ssdata(sys);
Ad = [0 1 0; 3 0 1; 0 1 0];
Bd = [1; 1; 3];
Cd = [1 1 1];
Dd = [0];
% Set Ts, initial condition x0, time range t, pure time delay n0, relative
% degree r, and matrix size N
Ts = 1;
x0 = 0;
t = 0:Ts:60;
n0 = 0;
r = 1;
N = length(t);
% Define input vector U and reference J
U = [zeros(1,15) 10*ones(1,15) zeros(1,15) 10*ones(1,16)];
Rj = [zeros(1,15) 20*ones(1,15) zeros(1,15) 20*ones(1,16)]';
% G0 not formulated as initial condition is 0
% Formulate G
Gvec = zeros(N,1);
rvec = ((r-1):(N-n0-1))';
for ii = 1:length(rvec)
ApowVec = Ad^rvec(ii);
Gvec(ii) = Cd*ApowVec*Bd;
end
G = tril(toeplitz(Gvec));
% Set up ILC
jmax = 25;
l0 = 0.95;
q0 = 1;
L = l0 * eye(N,N);
Q = q0 * eye(N,N);
I = eye(N);
Uj = zeros(N,1); Ujold = Uj;
Ej = zeros(N,1); Ejold = Ej;
e2k = zeros(jmax,1);
% Run ILC and plot the response for each iteration
for ii = 1:jmax
Uj = Q*Ujold + L*Ejold;
Yj = G*Uj;
Ej = Rj - Yj; Ej(1) = 0;
Ejold = Ej;
Ujold = Uj;
plotter(ii,t,Ej,Yj,Uj,Rj,U)
e2k(ii) = Ej'*Ej;
end
end
function [] = plotter(ii,t,Ej,Yj,Uj,Rj,U)
figure(1)
% Plot the error Ej of the current itteration
subplot(1,3,1);
plot(t,Ej,'LineWidth',1.5);
title('Error, Ej','FontSize',16);
ylabel('Error Response','FontSize',16);
% Plot the input Uj of the current itteration
subplot(1,3,2);
plot(t,Uj,t,U,'-k','LineWidth',1.5);
title({['Iteration: ', num2str(ii)],'Input, Uj'},'FontSize',16);
xlabel('Time (s)','FontSize',16);
ylabel('Input Response','FontSize',16);
% Plot the output Yj of the current itteration
subplot(1,3,3);
plot(t,Yj,t,Rj,'-k','LineWidth',1.5);
title('Output, Yj','FontSize',16);
ylabel('Output Response','FontSize',16);
pause(0.1);
end
2 commentaires
mazin alseadi
le 3 Nov 2020
Dear Mohamed Eshag
Have you developed or did this codes to be worked successfuly ? if you did, so please could you kindly send me this files ?
with respect and appreciate
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Control System Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!