IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Minimisation avec paramètres dans des matrices


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut Minimisation avec paramètres dans des matrices
    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.

    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.
    Ma fonction à minimiser : Kalman_filter(y,Z,D,VV,T,B,U,a0,P0,H,Q),

    par= FMINUNC(@Kalman_filter,x0), en ajoutant les arguments j'obtiens l'erreur :
    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.
    Mes fonctions :


    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;

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La fonction fminunc (en minuscules : MATLAB est sensible à la casse, d'autant plus sur les versions récentes qui donnent directement une erreur) prend en paramètre une fonction prenant un paramètre :
    Citation Envoyé par doc fminunc
    The function to be minimized. fun is a function that accepts a vector x and returns a scalar f, the objective function evaluated at x. The function fun can be specified as a function handle for a file


    where myfun is a MATLAB® function such as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function f = myfun(x)
    f = ...            % Compute function value at x
    Il faut donc à l'aide du symbole @ lui passer le handle d'une fonction ne prenant qu'un argument, que j'ai l'impression que tu as justement oublié dans ta fonction Kalman_filter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    par= fminunc(@(x) Kalman_filter(x,y,Z,D,VV,T,B,U,a0,P0,H,Q),x0)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 53
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appeler une méthode avec paramètre dans une page JSP
    Par javasmif dans le forum Struts 2
    Réponses: 1
    Dernier message: 06/12/2007, 10h48
  2. Imprimer des formes dans des matrices
    Par timous dans le forum MATLAB
    Réponses: 8
    Dernier message: 09/08/2007, 09h18
  3. [Tableaux] Lien avec paramètre dans un tableau
    Par leeloo1902 dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2007, 16h02
  4. Réponses: 3
    Dernier message: 20/04/2007, 14h06
  5. Problème avec paramètres dans un <messagebundle>
    Par imagine64 dans le forum JSF
    Réponses: 6
    Dernier message: 12/02/2007, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo