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 :

Pourquoi ma condition if n'est pas trouver ?


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut Pourquoi ma condition if n'est pas trouver ?
    Bonjour,

    Je sollicite vos paires d'yeux J'ai fait un code qui calcul la distance de hausdorff, voir ici pour savoir comment on fait: http://cgm.cs.mcgill.ca/~godfried/te...mand/main.html

    Mon code est le suivant:

    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
    % From A To B
    D_init=0;
    D_old=D_init;
     
    for i = 1:size(A,1)
        for j = 1:(size(A,2))
     
            d_init = 10000
     
            if (A(i,j)==1)
                d_old = d_init
     
            for m = 1:size(B,1)
                for n = 1:size(B,2)
     
                    if (B(m,n)==1)
                    d_new = sqrt((i-m)*(i-m)+(j-n)*(j-n));
                    d_new
     
                    if (d_new < d_old) 
                        d_old = d_new;
                    end
     
                    d_old
     
                    end
                end
            end
     
             D_new = d_old;
             D_new
     
            end
                if (D_new) > (D_old)
                D_old = D_new;
                end    
     
        end
     
    end
     
    H1 = D_old;
    H1
    Ce que je ne comprends pas c'est que pour un A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> A=[0,0,0;0,1,0;0,0,0]
     
    A =
     
         0     0     0
         0     1     0
         0     0     0
    et B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> B=[0,0,0;0,1,1;0,1,1]
     
    B =
     
         0     0     0
         0     1     1
         0     1     1
    j'obtiens cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> hausdorff2
     
    d_init =
     
           10000
     
    Undefined function or variable 'D_new'.
     
    Error in hausdorff2 (line 27)
                if (D_new) > (D_old)
    Donc il entre pas dans mon premier "if" pourtant il y a un "1" dans la matrice A, pourquoi ne le detecte t'il pas ? Si quelqu'un pouvait voir la subtilite ici ??

    Merci a vous.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Certes il y a un 1 dans ta matrice A, mais à la première itération, A(1,1) = 0 donc tu ne rentreras effectivement pas dans ton if. Ce n'est que lorsque tu auras i=2 et j=2 que tu rentreras bien dans ta condition A(i,j) == 1
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Gooby Voir le message
    Bonjour,

    Certes il y a un 1 dans ta matrice A, mais à la première itération, A(1,1) = 0 donc tu ne rentreras effectivement pas dans ton if. Ce n'est que lorsque tu auras i=2 et j=2 que tu rentreras bien dans ta condition A(i,j) == 1
    Ok, donc je decalle mon second if a la fin du 1r. Je vais faire des tests pour verifier ca et je reviens vers vous.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci encore Gooby,

    ca fonctionne parfaitement du coup.

    Pour ceux qui cherchent un code Matlab qui calcul la distance de Hausdorff voici le code que j'ai fait et qui fonctionne, je l'ai teste sur des cas trouve sur le net. C'est un code pas optimal, mais il fonctionne bien et surtout contrairement au code trouver sur le web (en dehors du fait que celui-la fonctionne) il est surtout lisible facilement apres avoir compris l'algo. voir mon 1r billet.

    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    % Hausdorff distance
    % version 1.5
     
    % Inputs
    B=[0,0,0,1;0,0,1,1;0,0,0,0];
    A=[0,0,0,0;0,0,0,0;0,0,1,1];
     
     
    % From A To B
    D_init=0;
    D_old=D_init;
     
    for i = 1:size(A,1)
        for j = 1:(size(A,2))
            d_init = 10000;
            if (A(i,j)==1)
                d_old = d_init;
                for m = 1:size(B,1)
                    for n = 1:size(B,2)
                        if (B(m,n)==1)
                            d_new = sqrt((i-m)*(i-m)+(j-n)*(j-n));
                            d_new;
     
                            if (d_new < d_old)
                                d_old = d_new;
                            end
                            d_old;
                        end
                    end
                end
                D_new = d_old;
                D_new;
     
                if (D_new) > (D_old)
                    D_old = D_new;
                end
     
            end
     
     
        end
     
    end
     
    H1 = D_old;
    H1;
     
    % From B to A
    for i = 1:size(B,1)
        for j = 1:(size(B,2))
            d_init = 10000;
            if (B(i,j)==1)
                d_old = d_init;
                for m = 1:size(A,1)
                    for n = 1:size(A,2)
                        if (A(m,n)==1)
                            d_new = sqrt((i-m)*(i-m)+(j-n)*(j-n));
                            d_new;
     
                            if (d_new < d_old)
                                d_old = d_new;
                            end
                            d_old;
                        end
                    end
                end
                D_new = d_old;
                D_new;
     
                if (D_new) > (D_old)
                    D_old = D_new;
                end
     
            end
     
     
        end
     
    end
    H2 = D_old;
    hausdorff=max(H1,H2);
     
    % Display 
    fprintf('\n');
    fprintf('\n');
    fprintf('Hausdorff Distance is:');
    hausdorff
    fprintf('-----------------');
    fprintf('\n');
    fprintf('From A to B ->');
    H1
    fprintf('From A to B ->');
    H2
    fprintf('-----------------');

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/06/2008, 23h20
  2. [C#] ftp : pourquoi mon fichier à uploader n'est pas accessible ?
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/09/2006, 14h52
  3. Réponses: 5
    Dernier message: 01/07/2006, 12h52
  4. Réponses: 1
    Dernier message: 09/06/2006, 21h02

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