Bonjour tout le monde,
Je suis confronter au problème suivant :
Je dois estimer des paramètres en minimisant une fonction, sauf que ces paramètres sont des éléments de matrices.
J'ai tout essayé et je tombe toujours sur l'erreur :
??? Input argument "a0" is undefined.
Ma fonction à minimiser : Kalman_filter(y,Z,D,VV,T,B,U,a0,P0,H,Q),
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Error in ==> Kalman_filter at 24 at = a0; Error in ==> fminunc at 227 f = feval(funfcn{3},x,varargin{:}); Error in ==> optim at 46 par= FMINUNC(@Kalman_filter,x0) Caused by: Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue.
par= FMINUNC(@Kalman_filter,x0), en ajoutant les arguments j'obtiens l'erreur :
Mes fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ??? Error: File: optim.m Line: 46 Column: 28 Unbalanced or unexpected parenthesis or bracket.
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 function optim x0 =[0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0]; timevar=0; y = [ 1 6 ; 2 7 ; 3 12 ]; VV = [ 3 4 ; 1 6 ; 12 7 ]; U = [ 1 2 0 3 5 6 ; 3 4 2 1 1 2 ; 0 1 2 2 3 1 ]; a0 = [ 0 ; 0 ;0 ;0;0]; P0 = [ 0 0 0 0 0 ; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0]; H = [ 0.1 0 ; 0 0.4 ]; Q = [ 1 0 0 0 0 ; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1]; Z = zeros(2,5); D = zeros(2,2); T = zeros(5,5); B = zeros(5,6); par = zeros (1,16); Z(1,1)=par(1); Z(1,2)=par(2); Z(1,3)=par(3); Z(2,1)=-1; Z(2,4)=1-par(4); D(1,1)=par(5); D(2,2)=par(6); T(1,1)=par(7); T(2,2)=par(8); T(4,4)=1; T(4,5)=1; T(2,2)=par(9); B(2,1)=par(10); B(2,2)=par(11); B(2,6)=par(12); B(3,3)=par(13); B(3,4)=par(14); B(3,6)=par(15); B(2,2)=(1-par(9))*par(16); par= FMINUNC(@Kalman_filter(y,Z,D,VV,T,B,U,a0,P0,H,Q),x0)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 function mlogl = Kalman_filter(y,Z,D,VV,T,B,U,a0,P0,H,Q) % ------------------------------------------------------------------------- % yt=Z*at+D*VVt H % at=T*at-1+B*Ut Q %-------------------------------------------------------------------------- %Exemple %y = [ 1 6 ; 2 7 ; 3 12 ]; %Z = [ 1 1 1 0 0 ; -1 0 0 1 0 ]; %D = [ 1 0 ; 0 3 ]; %VV = [ 3 4 ; 1 6 ; 2 7 ]; %T = [ 1 0 0 0 0 ; 0 1 0 0 0; 0 0 0 0 0; 0 0 0 1 1; 0 0 0 0 1 ]; %B = [0 0 0 0 0 0 ; 1 1 0 0 0 1;0 0 1 1 0 1; 0 0 0 0 0 0; 0 0 0 0 1 0 ]; %U = [ 1 2 0 3 10 6 ; 3 4 2 1 1 2 ; 0 1 2 2 3 1 ]; %a0 = [ 0 ; 0 ;0 ;0;0]; %H = [ 0.1 0 ; 0 0.4 ]; %Q = [ 1 0 0 0 0 ; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1]; %P0 = [ 0 0 0 0 0 ; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0]; nobs = size(y,1); % rows n = size(y,2); % cols slogl = 0; at = a0; at_1 = a0; Pt = P0; Pt_1 = P0; logl = zeros(nobs,1); m=size(Z,2); % placeholders y_cond = zeros(nobs,n); v = zeros(nobs,n); a_cond = zeros(nobs,m); a = zeros(nobs,m); P_cond = zeros(nobs,m*m); P = zeros(nobs,m*m); F = zeros(nobs,n*n); Zt=Z; Dt=D; Ht=H; Tt=T; Bt=B; Qt=Q; for i=1:nobs yt=y(i,:)'; % y(t) VVt=VV(i,:)'; Ut=U(i,:)'; % Prediction Equations at_1 = Tt*at+Bt*Ut; Pt_1 = Tt*Pt*Tt' + Qt; % Innovations yt_1 = Zt*at_1 + Dt*VVt ; vt = yt-yt_1; % Updating Equations Ft = Zt*Pt_1*Zt' + Ht; % F(t) inv_Ft = Ft\eye(size(Ft,1)); % Inversion de Ft at = at_1 + Pt_1*Zt'*inv_Ft*vt ; Pt = Pt_1 - Pt_1*Zt'*inv_Ft*Zt*Pt_1 ; % Save results y_cond(i,:) = yt_1'; v(i,:) = vt'; a(i,:) = at'; a_cond(i,:) = at_1'; P(i,:)=reshape(Pt,1,25); P_cond(i,:)=reshape(Pt_1,1,25); F(i,:)=reshape(Ft,1,4); % Likelihood dFt=det(Ft); if dFt<=0 dFt=1e-10; end logl(i)=-(n/2)*log(2*pi)-0.5*log(dFt)-0.5*vt'*inv_Ft*vt; slogl= slogl+logl(i); end mlogl=-slogl;
Partager