-
Notifications
You must be signed in to change notification settings - Fork 0
/
estimaTeta_r.m
141 lines (137 loc) · 4.29 KB
/
estimaTeta_r.m
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
%ESTIMATETA Estimação de parâmetros de uma rede RBF com restrições de estrutura.
%Esta rotina estima os parâmetros de uma rede RBF, que são recebidos no vetor Teta.
%As variáveis de entrada no argumento da função ESTIMATETA são:
%c - Matriz contendo os centros. Esta matriz é composta de forma que cada linha contenha
%um centro. Assim, ela possui dimensão nr (número de centros) X nu + ny (soma dos máximos
%atrasos na entrada u(k) e na saída y(k)).
%nr - Número de centros.
%dp - Desvio padrão da função de base (nesta rotina utiliza-se como função de base a
%gaussiana).
%ut - Vetor de entradas para treinamento.
%Nt - Comprimento do vetor ut ou yt.
%yt - Vetor de saídas para treinamento.
%nu, ny - Máximos atrasos na saída e na entrada da parte linear, respectivamente.
%nurbf, nyrbf - Máximos atrasos na saída e na entrada das RBFs, respectivamente.
%linear - Se o valor de linear for igual a 1, a rotina estimará parâmetros para os termos
%lineares também. Senão, isto não ocorrerá e o modelo obtido não terá termos lineares.
%const - 1 para uma rede com termo de offset, 0 para uma rede sem offset
function Teta=estimaTeta_r(c, nr, dp, ut, Nt, yt, nu, ny, nurbf, nyrbf, const, linear)
%Primeiramente, verifica-se qual dos máximos atrasos é maior, para, à medida que vai se
%pegando dados nos vetores ut e yt, não extrapolar o limite destes.
if nu>=ny
%Nas linhas abaixo é montada a matriz Psi dos regressores.
Psi=ones(Nt-nu,1);
X=ones(Nt-nu,1);
for i=1:nu
X=[X ut(nu+1-i:Nt-i)];
end
for l=1:ny
X=[X yt(nu+1-l:Nt-l)];
end
X(:,1)=[];
if nurbf>0
Xrbf=X(:,1);
if nurbf>1
for m=2:nurbf
Xrbf=[Xrbf X(:,m)];
end
end
end
if nyrbf>0 & nurbf==0
Xrbf=X(:,nu+1);
if nyrbf>1
for n=nu+2:nu+1+nyrbf
Xrbf=[Xrbf X(:,n)];
end
end
end
if nyrbf>0 & nurbf>0
Xrbf=[Xrbf X(:,nu+1)];
if nyrbf>1
for n=nu+2:nu+1+nyrbf
Xrbf=[Xrbf X(:,n)];
end
end
end
if nr>0 %Esta linha testa a possibilidade de uma rede com somente os termos lineares.
for k=1:Nt-nu
for j=1:nr
V(k,j)=((Xrbf(k,:)-c(j,:))*((Xrbf(k,:)-c(j,:))'))^0.5;
%if V(k,j)==0
% V(k,j)=.0000001;
%end
end
end
%Fi=V.*V.*(log10(V));
Fi=exp(-1*V.*V*1/(dp^2));
%Fi(:,1) = exp(-1*V(:,1).*V(:,1)*1/(.9^2));
Psi=[Psi Fi];
end
%Nas três linhas abaixo é testado o valor de linear e, se acaso esta variável contiver
%o valor 1, são inclusos regressores dos termos lineares na matriz dos regressores.
if linear==1
Psi=[Psi X];
end
if const==0
Psi(:,1)=[];
end
%Finalizada a montagem da matriz Psi dos regressores, o vetor Teta é estimado a partir
%da solução do algoritmo dos Mínimos Quadrados.
Teta=((inv((Psi')*Psi))*(Psi'))*yt(nu+1:Nt);
%A partir daqui é seguido o mesmo procedimento, somente quando ny > nu.
else
%Montagem da matriz Psi de regressores.
Psi=ones(Nt-ny,1);
X=ones(Nt-ny,1);
for i=1:nu
X=[X ut(ny+1-i:Nt-i)];
end
for l=1:ny
X=[X yt(ny+1-l:Nt-l)];
end
X(:,1)=[];
if nurbf>0
Xrbf=X(:,1);
if nurbf>1
for m=2:nurbf
Xrbf=[Xrbf X(:,m)];
end
end
end
if nyrbf>0 & nurbf==0
Xrbf=X(:,nu+1);
if nyrbf>1
for n=nu+2:nu+1+nyrbf
Xrbf=[Xrbf X(:,n)];
end
end
end
if nyrbf>0 & nurbf>0
Xrbf=[Xrbf X(:,nu+1)];
if nyrbf>1
for n=nu+2:nu+1+nyrbf
Xrbf=[Xrbf X(:,n)];
end
end
end
if nr>0 %Teste para inclusão dos termos que compõem a forma generalizada de uma RBF.
for k=1:Nt-ny
for j=1:nr
V(k,j)=((Xrbf(k,:)-c(j,:))*((Xrbf(k,:)-c(j,:))'))^0.5;
end
end
Fi=exp(-1*V.*V*1/(dp^2));
%Fi(:,1) = exp(-1*V(:,1).*V(:,1)*1/(.9^2));
Psi=[Psi Fi];
end
%Teste para inclusão dos regressores dos termos lineares na matriz dos regressores.
if linear==1
Psi=[Psi X];
end
if const==0
Psi(:,1)=[];
end
%Após finalizada a montagem da matriz Psi dos regressores, os parâmetros são estimados
%a partir do algoritmo dos Mínimos Quadrados e recebidos no vetor Teta.
Teta=((inv((Psi')*Psi))*(Psi'))*yt(ny+1:Nt);
end