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

Python Discussion :

Déterminant d'une matrice 3×3


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Maroc

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Déterminant d'une matrice 3×3
    Bonjour tout le monde,
    J'ai calculé le déterminant de la matrice:
    [[5 4 2]
    [1 7 8]
    [6 2 3]
    de 2 façons différentes:
    Manuellement , j'ai trouvé : 125
    Avec np.linalg.det(),
    j'ai trouvé :124,999999...
    Je cherche la cause qui est à l'origine de cette différence.
    Merci.

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Ceci vient de la représentation binaire des nombres flottants dans votre machine, et de sa précision limitée.
    C'est exactement la même raison pour laquelle 0.1+0.1+0.1==0.3 retourne False.

  3. #3
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Maroc

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Ceci vient de la représentation binaire des nombres flottants dans votre machine, et de sa précision limitée.
    C'est exactement la même raison pour laquelle 0.1+0.1+0.1==0.3 retourne False.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par nizarito Voir le message
    Je cherche la cause qui est à l'origine de cette différence.
    La machine représente ses nombres par des sommes de puissance de 2. Ainsi 6 sera 2^2+2^1 soit 0110 en binaire. Et c'est pareil en décimal. Ainsi 0.625=1/2+1/8=2^(-1) + 2^(-3) soit 0.101.
    Mais parfois (souvent) le décimal ne tombe pas juste. Et par exemple 0.65 sera un tout petit peu plus grand que 1/2+1/16+1/32 mais un tout petit peu plus petit que 1/2+1/16+1/32+1/64 donc entre 0.10011 et 0.100111 sans jamais tomber juste.
    C'est ce qu'on appelle l'imprécision des flottants. Dans 90% des cas c'est pas vraiment grave et quand ça le devient (gestion de comptes bancaires par exemple) on passe par le module "decimal" qui, lui, calcule comme au primaire (0.65 sera décomposé en "0", "6" et "5") ce qui donne des calculs plus longs mais sans erreur.
    C'est pour cette raison que le COBOL (langage des années 1970 qui lui-aussi calculait chiffre par chiffre) est encore utilisé dans différentes applications monétaires (impôts, banques, etc).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Maroc

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci d'avoir répondu à ma question.
    Est ce qu'on peut résoudre ce problème ?

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nizarito Voir le message
    Est ce qu'on peut résoudre ce problème ?
    Citation Envoyé par Sve@r Voir le message
    et quand ça le devient (gestion de comptes bancaires par exemple) on passe par le module "decimal" qui, lui, calcule comme au primaire (0.65 sera décomposé en "0", "6" et "5") ce qui donne des calculs plus longs mais sans erreur.
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 282
    Points : 36 769
    Points
    36 769
    Par défaut
    Citation Envoyé par nizarito Voir le message
    Merci d'avoir répondu à ma question.
    Est ce qu'on peut résoudre ce problème ?
    Il faut apprendre à faire avec (et quand c'est plus compliqué, vous avez toute une branche des mathématiques qui s'appelle calcul numérique pour çà).

    note: numpy ne supporte pas trop les décimaux Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Citation Envoyé par nizarito Voir le message
    Bonjour tout le monde,
    J'ai calculé le déterminant de la matrice:
    [[5 4 2]
    [1 7 8]
    [6 2 3]
    de 2 façons différentes:
    Manuellement , j'ai trouvé : 125
    Avec np.linalg.det(),
    j'ai trouvé :124,999999...
    Je cherche la cause qui est à l'origine de cette différence.
    Merci.
    si c'est l'affichage qui te gêne, tu peut utiliser la fonction around de numpy pour arrondir à l'affichage avec le nombre de décimals de précision que tu veux :
    exemple :
    avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import numpy as np
    a = np.array(([5,  4,  2], [1,  7,  8], [6,  2,  3]))
    det = np.linalg.det(a)
    print('det= ', det)
    print('around decimals=0 -> ', np.around(det, decimals=0))
    print('around decimals=5 -> ', np.around(det, decimals=5))
    print('around decimals=13 -> ', np.around(det, decimals=13))
    print('around decimals=14 -> ', np.around(det, decimals=14))
    j'obtiens ceci :
    det= 124.99999999999994
    around decimals=0 -> 125.0
    around decimals=5 -> 125.0
    around decimals=13 -> 125.0
    around decimals=14 -> 124.99999999999994
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Maroc

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2021
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Merci infiniment pour votre réponse.
    Citation Envoyé par jurassic pork Voir le message
    hello,


    si c'est l'affichage qui te gêne, tu peut utiliser la fonction around de numpy pour arrondir à l'affichage avec le nombre de décimals de précision que tu veux :
    exemple :
    avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import numpy as np
    a = np.array(([5,  4,  2], [1,  7,  8], [6,  2,  3]))
    det = np.linalg.det(a)
    print('det= ', det)
    print('around decimals=0 -> ', np.around(det, decimals=0))
    print('around decimals=5 -> ', np.around(det, decimals=5))
    print('around decimals=13 -> ', np.around(det, decimals=13))
    print('around decimals=14 -> ', np.around(det, decimals=14))
    j'obtiens ceci :


    Ami calmant, J.P

Discussions similaires

  1. Déterminant d'une matrice
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 05/11/2007, 15h41
  2. Déterminant d'une matrice
    Par sarrou dans le forum C
    Réponses: 5
    Dernier message: 28/11/2006, 10h57
  3. Inversion et déterminant d'une matrice
    Par coline dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 23/06/2006, 09h01
  4. [Matrices] Comment calculer le Déterminant d'une matrice 4x4
    Par cyber_N dans le forum Algorithmes et structures de données
    Réponses: 70
    Dernier message: 19/08/2005, 15h47
  5. [Débutant] Calculer le déterminant d'une matrice
    Par v4np13 dans le forum Mathématiques
    Réponses: 7
    Dernier message: 30/05/2005, 17h24

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