bonjour ,
j'ai essayé de programmer la methode de gradient pour l'identification de retard mais j'ai pas trouvé des resultats voulu ,et j'ai pas compri le lieu de l'erreur
merci d'avance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
%%%%%%%%%%%%%%%%methhode de gradient%%%%%%%%%
close all;
clear all;
clc
%%%%identification%%%%
load com.mat
load sva.mat
u=coma;
e=seq;
B=[0 0.2 0.02];
A=[1 -0.8 -0.04];
C=[1 0.5];
d=0;som1=0;som2=0;xsi=[];
F=1000*eye(5)
teta=[0 0 0 0 0]';
d=0;m=0;retrec=[]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%saisie de y
for k=1:6
    y(k)=0;
end
for k=6:100
    y(k)=-A(2)*y(k-1)-A(3)*y(k-2)+B(2)*u(k-4)+B(3)*u(k-5)+e(k)+C(2)*e(k-1);
end
for k=101:200
    y(k)=-A(2)*y(k-1)-A(3)*y(k-2)+B(2)*u(k-5)+B(3)*u(k-6)+e(k)+C(2)*e(k-1);
end
for k=201:300
    y(k)=-A(2)*y(k-1)-A(3)*y(k-2)+B(2)*u(k-6)+B(3)*u(k-7)+e(k)+C(2)*e(k-1);
end
plot(y);hold on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ret=0;
% ye(1)=0;
% ye(2)=0;
% ye(3)=0;
TET=[];
retent=[];
for k=1:5
    ye(k)=0
end
for k=ret+3:300
    phi=[-y(k-1) -y(k-2) u(k-1-ret) u(k-2-ret) e(k-1)]';
    teta=teta+((F*phi)/(1+(phi'*F*phi)))*(y(k)-phi'*teta);
    F=F-((F*phi*phi'*F)/(1+(phi'*F*phi)));
    ye(k)=teta(1)*y(k-1)+teta(2)*y(k-2)+teta(3)*u(k-1-ret)+teta(4)*u(k-2-ret)+e(k)+teta(5)*e(k-1);
    TET=[TET teta]
    xsip=y(k)-ye(k);
    xsi=[xsi xsip];
    som1=som1+xsip*(ye(k)-ye(k-1));
    som2=som2+(0.1+ye(k)-ye(k-1));
    m=(1-0.5)/(som2*som2);
    d=d-m*som1;
    retrec=[retrec d];
    ret=floor(d);
    retent=[retent ret];
end
plot(ye,'-r')
retrec
figure(2)
plot(retrec);hold on ;
plot(retent)