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 :

Empty matrix output


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Empty matrix output
    Salut les amis,
    j'ai défini une fonction intitulée "matrix_exp" qui retourne une matrice x de dimension (T-m,2*p+8) avec T, m et p sont connus. Lorsque j'ai appelé cette fonction et en choisissant p=4, j'ai obtenu une matrice x:"empty 0 by 16".
    Cependant, lorsque j'ai copié les lignes définissant cette fonction dans un autre fichier, j'ai obtenu une matrice x bien définie ( càd je l'ai obtenue sans aucun appel de la fonction matrix_exp). J'ai conclu que ce que j'ai écrit pour définir cette fonction est juste mais je ne sais pas où réside le problème.
    Esq vous pouvez m'aider svp. Merci d'avance.
    George.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Fais nous voir ta function.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Voilà Phryte, je vous donne la fonction ainsi que le fichier à partir duquel je l'ai appelée

    Merci.

    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
    function x=matrix_exp(y,p,d_F,s_F,d_G,s_G,gamma_1_F,gamma_2_F,c_1_F,  c_2_F,gamma_1_G,gamma_2_G, c_1_G,  c_2_G)
     
     
     
     
    global T m
     
     
    stdS=inv(std(s_F));
    stdG=inv(std(s_G));
    f=(exp(-gamma_1_F*stdS*(s_F-c_1_F))+exp(gamma_2_F*stdS*(s_F-c_2_F)))./(1+exp(-gamma_1_F*stdS*(s_F-c_1_F))+exp(gamma_2_F*stdS*(s_F-c_2_F)));
    g=(exp(-gamma_1_G*stdG*(s_G-c_1_G))+exp(gamma_2_G*stdG*(s_G-c_2_G)))./(1+exp(-gamma_1_G*stdG*(s_G-c_1_G))+exp(gamma_2_G*stdG*(s_G-c_2_G)));
     br=zeros(T-m,4);
    for k=1:T-m
         for j=1:4
            if k==j
                br(k,j)=1;
            elseif rem(abs(k-j),4)==0
                br(k,j)=1;
            else
                br(k,j)=0;
            end
         end
    end
    brf=zeros(length(br),4);
    for i=1:length(br)
    for k=1:4
        brf(i,k)=br(i,k)*f(i,1);
    end
    end
    x=zeros(T-m,2*p+8);
    for i=1:T-m
      for j=1:4
     x(i,j)=br(i,j);
      end
    end
     
    for i=1:T-m
      for j=5:8
    x(i,j)=brf(i,j);
      end
    end
     
    for i=1:T-m
      for j=1:p
        x(i,j+8)=y(m+1-j,1);
        x(i,j+p+8)=x(i,j+1)*g(i,1);
      end
      end
    return
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    yy=[10 11 10 11 12 13 14 15 16 12 11 12 14 15 16 17 13 14 15 16 17 18 17 20 21 22 20 21 23 24 25 26 20 16 17 18 19 30 31 32 30 33 34 35 31 29 28 27 31 33 36 30 ]';
    zz=zeros(length(yy),1);
    for i=5:length(yy)
        zz(i)=yy(i)-yy(i-4);
    end
    y=yy(5:length(yy));
    s_F=zz(5:length(zz));
    s_G=y;
    d_F=1;d_G=2;p=4;
    gamma_1_F=0.1;gamma_2_F=0.1;c_1_F=0;  c_2_F=0;gamma_1_G=0.1;gamma_2_G=0.1; c_1_G=0;  c_2_G=0;
    T=length(y);
    m=max([p d_F d_G]);
    x=matrix_exp(y,p,d_F,s_F,d_G,s_G,gamma_1_F,gamma_2_F,c_1_F,  c_2_F,gamma_1_G,gamma_2_G, c_1_G,  c_2_G)

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    C'est l'utilisation de GLOBAL qui est mauvaise.
    Quand tu arrives dans ta fonction T et m sont vides.

    Il faut éviter d'utiliser les variables globales, on se retrouve dans ce genre de situation après.
    Pourquoi ne passes-tu pas T et m en paramètres de ta fonction : cela résoudra ton problème dans un 1er temps.

    Mais pas dans un 2nd puisque ça donne une autre erreur.
    A mon avis ton code doit pouvoir être amélioré.
    Si j'ai du temps je regarde.

    [EDIT] quelques améliorations :
    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
    function truc()
    yy=[10 11 10 11 12 13 14 15 16 12 11 12 14 15 16 17 13 14 15 16 17 ...
        18 17 20 21 22 20 21 23 24 25 26 20 16 17 18 19 30 31 32 30 33 ...
        34 35 31 29 28 27 31 33 36 30 ]';
    y=yy(5:end);
    s_F=y-yy(1:end-4);
    s_G=y;
    d_F=1;
    d_G=2;
    p=4;
    gamma_1_F=0.1;
    gamma_2_F=0.1;
    c_1_F=0;
    c_2_F=0;
    gamma_1_G=0.1;
    gamma_2_G=0.1;
    c_1_G=0;
    c_2_G=0;
    x=matrix_exp(y,p,d_F,s_F,d_G,s_G,gamma_1_F,gamma_2_F,c_1_F,  c_2_F,gamma_1_G,gamma_2_G, c_1_G,  c_2_G);
     
     
    function x=matrix_exp(y,p,d_F,s_F,d_G,s_G,gamma_1_F,gamma_2_F,c_1_F,  c_2_F,gamma_1_G,gamma_2_G, c_1_G,  c_2_G)
    T=length(y);
    m=max([p d_F d_G]);
    %global T m
     
    stdS=inv(std(s_F));
    stdG=inv(std(s_G));
    f=(exp(-gamma_1_F*stdS*(s_F-c_1_F))+exp(gamma_2_F*stdS*(s_F-c_2_F)))./...
        (1+exp(-gamma_1_F*stdS*(s_F-c_1_F))+exp(gamma_2_F*stdS*(s_F-c_2_F)));
    g=(exp(-gamma_1_G*stdG*(s_G-c_1_G))+exp(gamma_2_G*stdG*(s_G-c_2_G)))./...
        (1+exp(-gamma_1_G*stdG*(s_G-c_1_G))+exp(gamma_2_G*stdG*(s_G-c_2_G)));
    % br=zeros(T-m,4);
    % for k=1:T-m
    %      for j=1:4
    %         if k==j
    %             br(k,j)=1;
    %         elseif rem(abs(k-j),4)==0
    %             br(k,j)=1;
    %         else
    %             br(k,j)=0;
    %         end
    %      end
    % end
    %**
    %"diagonales" à 1
    %Hypothèse FORTE : T-m est un multiple de 4
    minS = min(size(br));
    maxS = max(size(br));
    br = repmat(eye(minS),maxS/minS,1);
    %**
    brf=zeros(length(br),4);
    for i=1:length(br)
        for k=1:4
            brf(i,k)=br(i,k)*f(i,1);
        end
    end
     
    x=zeros(T-m,2*p+8);
    x(1:T-m,1:4) = br(1:T-m,:);
    % for i=1:T-m
    %     for j=1:4
    %         x(i,j)=br(i,j);
    %     end
    % end
     
    x(1:T-m,5:8) = brf(1:T-m,:);
    % for i=1:T-m
    %     for j=5:8
    %         x(i,j)=brf(i,j-4);
    %     end
    % end
     
    for i=1:T-m
        for j=1:p
            x(i,j+8)=y(m+1-j,1);
            x(i,j+p+8)=x(i,j+1)*g(i,1);
        end
    end
    return

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Merci bien Caroline,
    j'ai utilisé l'expression " global T m", parce que j'ai d'autres fonctions qui utilisent en commun ces paramètres. Je vais essayer de supprimer cette expression.

Discussions similaires

  1. [Débutant] [bwselect] Improper assignment with rectangular empty matrix.
    Par Nideis dans le forum Images
    Réponses: 8
    Dernier message: 03/03/2009, 10h56
  2. Réponses: 2
    Dernier message: 24/09/2008, 17h22
  3. [exist] Spécifier un élément "Empty matrix: 0-by-1"
    Par bernard6 dans le forum MATLAB
    Réponses: 5
    Dernier message: 12/07/2007, 12h27
  4. Réponses: 4
    Dernier message: 12/06/2007, 00h31
  5. [Optimisation] Hardware Matrix Stack
    Par Blustuff dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/02/2004, 14h45

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