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 :

sommes inégales matrice vs. vecteur !


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut sommes inégales matrice vs. vecteur !
    Bonjour à toutes et à tous,
    Je me heurte à une problème que j'ai du mal à comprendre. Pour résumer la chose, je copie les valeurs d'un vecteur dans une matrice à des emplacements aléatoires.

    La somme de la matrice diffère de la somme de vecteur après assignement. De peu (on est proche de la précision, de l'ordre de e-12) mais quand même, je ne comprends pas d'ou vient ce problème. Un petit exemple pour mieux comprendre:

    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
     
    n = 10;
    taillemat = 10;
    W = rand(n,1);
     
    %Génération d'indices aléatoires:
    W = [ceil(rand(size(W,1),2) * taillemat), W];
     
    P = zeros(taillemat,taillemat);
    %Assigne les valeurs dans une matrice:
    for i=1:size(W,1)
       P(W(i,1), W(i,2)) = W(i,3);
    end
     
    sum(sum(P)) == sum(W(:,3)) %==0 ????
    Est-ce du au typage des matrices qui serait différent du typage d'un tableau n-dim? (on passerait du double au long double dans matlab ou quelque chose dans ce gout la?)

    Merci par avance pour vos idées, et vos remarque,

    Gian

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Cela n'a rien de choquant :

    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
    >> X = rand(500);
    >> S1 = sum(sum(X,2));
    >> S2 = sum(sum(X,1));
    >> [S1 S2]
     
    ans =
     
      1.0e+005 *
     
        1.2508    1.2508
     
    >> S1==S2
     
    ans =
     
         0
     
    >> abs(S1-S2)
     
    ans =
     
      2.9104e-011
    C'est toujours une conséquence du calcul avec les nombres en virgule flottante (problème de précision et d'arrondis)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut
    Tout d'abord merci pour ton retour rapide.
    J'ai quand même un peu de mal à saisir. Ton exemple me semble très clair, rien à dire la dessus, je suis tout à fait d'accord avec ce que tu proposes pour illustrer les pbs de précision.

    Ce que je fais benoitement (pardon à tous les benoîts) c'est juste assigner les valeurs d'un vecteur à une matrice.
    Malgré les pbs de précision ces valeurs devraient être identiques. Pourquoi une différence?

    Edit: je crois avoir compris: c'est la précision de la somme qui pose problème?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Giansolo Voir le message
    Edit: je crois avoir compris: c'est la précision de la somme qui pose problème?
    Voila, c'est l'associativité de l'addition qui n'est pas assurée ici et donc par conséquent la précision de chaque terme
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Ca vient de l'ordre dans lequel tu fais l'addition. Si tu additionne les petits d'abord, ils vont s'accumuler en gardant toute leur précision.

    Si tu additionne les gros d'abord, puis les petits, les petits seront tronqués (oui : tronqués, et pas arrondis. les chiffres qui rentrent pas dans la place disponible sont tronqués puisque justement, il n'y a pas de place pour eux)

    imagines par exemple que tu ne soit pas capable de retenir plus que 3 chiffres significatifs :

    0.999 + 0.999 = 1.99
    1.99 + 0.999 = 2.98
    2.98 + 100 = 102

    mais dans l'autre sens :
    100 + 0.999 = 100
    100 + 0.999 = 100
    100 + 0.999 = 100
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut
    Ok, merci bien pour les explications.
    J'en retiens que les deux approximations sum(sum()) diffèrent de l'approximation sum() pour les même données, ce qui parait logique en lisant vos explications
    bon à savoir tout ca en tous cas.
    Merci!

Discussions similaires

  1. Matrice de vecteurs de points 2D
    Par K@rim dans le forum Débuter
    Réponses: 3
    Dernier message: 24/01/2009, 01h08
  2. [IML] Somme de matrice
    Par stefsas dans le forum SAS IML
    Réponses: 2
    Dernier message: 14/05/2008, 09h13
  3. Passage d'une matrice à un vecteur colonne
    Par feynman dans le forum Fortran
    Réponses: 1
    Dernier message: 26/03/2008, 08h42
  4. Problème dans boucle avec matrice et vecteur
    Par lilyla dans le forum MATLAB
    Réponses: 9
    Dernier message: 26/11/2007, 19h45
  5. valeurs propres d'une matrice et vecteurs propres
    Par la_fantomas dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/05/2005, 15h35

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