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 :

Produit matriciel (associativité)..


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut Produit matriciel (associativité)..
    Bonjour,
    j'ai une question qui concernent l'une des propriétés de la multiplication matricielle : l'associativité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    N = 1000;                                             
     A = rand(N); B = rand(N); C = rand(N); D = rand(N);
     
    for k=1:2, t1=A*B*C*D; end;
    for k=1:2, t2=(A*(B*(C*D))); end;
    max(max(t1-t2))
    Résultat :
    Est ce que la virgule flottante est la responsable de cette différence ?

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Bonjour,

    A priori oui.
    rmq: ne vois pas l’intérêt des boucles
    Peut être que redéfinir le produit comme la moyenne des produits calculés sur toutes les associations possibles réduira l'ordre de grandeur de l'erreur, mais de toutes façon, la comparaison de floats (quelle que soit la dimension) se heurte à des problèmes de précision

    en passant, la norme euclidienne norm(t1-t2) est surement plus optimiste que ta norme sup

  3. #3
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    Citation Envoyé par VV33D Voir le message
    rmq: ne vois pas l’intérêt des boucles
    En fait pour ces boucles là je les ai utilisées pour un autre test mais je les oubliées (je vous montre cet exemple mais par contre j'ai une autre question)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    clc
    clear all
    N = 1000;                                             
    A = rand(N); B = rand(N); C = rand(N); D = rand(N,1);
     
    tic
    for k=1:20, t1=A*B*C*D; end; 
    toc
    tic
    for k=1:20, t2=(A*(B*(C*D))); end;
    toc
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Elapsed time is 4.920143 seconds.
    Elapsed time is 0.039373 seconds.
     
    ans =
     
       2.5332e-07
    Dans cet exemple, je pense que j'ai une explication :
    Dans le premier boucle le calcul se fait de gauche à droite et dans les trois premières multiplications on a que des matrices, ce qui nécessite, forcément, un peux plus de temps que dans le deuxième boucle, là où on a que des multiplications : matrices vecteurs.
    ça serai intéressant que ces deux codes nous donnaient les mêmes valeurs.
    Ou bien, d'après vous, la quelle des ces deux lignes de code donne le bon résultat ?

  4. #4
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    je pense que le meilleur résultat est donné par le deuxième boucle, vu qu'on a moins d'opération

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Fais attention, le calcul de la précision doit se faire en valeur absolue :

    ce qui donne l'erreur maximale.

    Pour le reste, tout ce que je dirais pour ma part, c'est que pour N=1000, la précision entre l'une ou l'autre des méthodes, est de moins de 10-6.

    Maintenant, cela n'a rien à voir avec la précision par rapport à un résultat voulu.

    Si par exemple, la méthode 1 donne comme résultat 10.1 et la méthode 2 donne comme résultat 10.0, la précision entre les deux méthodes est de 0.1.
    Mais si le résultat théorique est par exemple 100, ben les deux méthodes sont loin de donner le bon résultat

    Bref voici un code te permettant de mieux faire la comparaison entre les deux méthodes :
    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
    clc
    clear all
     
    Nmax = 1000;
    k = 1;
     
    for N = 100:100:Nmax
     
            A = rand(N); B = rand(N); C = rand(N); D = rand(N,1);
     
        tic
        for i = 1:20
            M1 = A*B*C*D;
        end
        t1(k) = toc;
     
        tic
        for i = 1:20
            M2 = A*(B*(C*D));
        end
        t2(k) = toc;
     
        err(k) = max(abs(M1(:)-M2(:)));
     
        k = k+1;
    end
    whos
    N = 100:100:Nmax;
     
    figure
    % [ax,h1,h2]= plotyy([N;N].',[t1;t2].',N,err,'semilogy','plot');
    [ax,h1,h2]= plotyy([N;N].',[t1;t2].',N,err,'plot','plot');
    set([h1;h2],'linewidth',2)
    ylabel(ax(1),'t (s)');
    ylabel(ax(2), 'err');
    xlabel(ax(1), 'N');
    legend([h1;h2],{'t1' 't2' 'err (max)'},'Location','NorthWest')
    Images attachées Images attachées  

  6. #6
    Membre émérite
    Avatar de soft001
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2008
    Messages
    409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 409
    Par défaut
    Citation Envoyé par Dut Voir le message
    Fais attention, le calcul de la précision doit se faire en valeur absolue :

    ce qui donne l'erreur maximale.
    Oui tu as raison, je demande comment ça m'a échappé de la tête.

    Citation Envoyé par Dut Voir le message
    Pour le reste, tout ce que je dirais pour ma part, c'est que pour N=1000, la précision entre l'une ou l'autre des méthodes, est de moins de 10-6.

    Maintenant, cela n'a rien à voir avec la précision par rapport à un résultat voulu.

    Si par exemple, la méthode 1 donne comme résultat 10.1 et la méthode 2 donne comme résultat 10.0, la précision entre les deux méthodes est de 0.1.
    Mais si le résultat théorique est par exemple 100, ben les deux méthodes sont loin de donner le bon résultat

    Oui je suis d'accord avec toi, DutMATLAB, que l'erreur mentionné précédemment représente l'erreur entre les deux méthodes mais ça nous donne aussi une idée sur l'erreur qui s'ajoute l'erreur par rapport au résultat théorique si on choisi la mauvaise méthode (la première, je pense ???).
    Une autre chose je pense pas que l'erreur par rapport à la théorie soit très grand puisque on a des simples multiplications .
    Je reviens au erreur entre les deux méthodes, j'ai pensé que le problème vient du fait quand manipule des réels alors j'ai fait le test avec des entiers mais vraiment c'est pire :

    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
    clc
    clear all
     
    Nmax = 1000;
    k = 1;
     
    for N = 100:100:Nmax
     
            A = randi(1000,N); B = randi(1000,N); C = randi(1000,N);
            D = randi(1000,N,1);
     
        tic
        for i = 1:20
            M1 = A*B*C*D;
        end
        t1(k) = toc;
     
        tic
        for i = 1:20
            M2 = A*(B*(C*D));
        end
        t2(k) = toc;
     
        err(k) = max(abs(M1(:)-M2(:)));
     
        k = k+1;
    end
    whos
    N = 100:100:Nmax;
     
    figure
    % [ax,h1,h2]= plotyy([N;N].',[t1;t2].',N,err,'semilogy','plot');
    [ax,h1,h2]= plotyy([N;N].',[t1;t2].',N,err,'plot','plot');
    set([h1;h2],'linewidth',2)
    ylabel(ax(1),'t (s)');
    ylabel(ax(2), 'err');
    xlabel(ax(1), 'N');
    legend([h1;h2],{'t1' 't2' 'err (max)'},'Location','NorthWest')
    Images attachées Images attachées  

Discussions similaires

  1. fonction Produit Matriciel non booleen
    Par roman.nedellec dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2007, 10h35
  2. Réponses: 268
    Dernier message: 07/11/2007, 11h11
  3. [Débutant] Difficulté avec un produit matriciel
    Par david_Montreal dans le forum MATLAB
    Réponses: 6
    Dernier message: 13/07/2007, 22h06
  4. Produit matriciel booléen en VB pour Excel
    Par v4np13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/11/2006, 12h39
  5. Problème: produit matriciel
    Par v4np13 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 17/05/2005, 17h23

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