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

Calcul scientifique Python Discussion :

Déterminant d'une Matrice


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    CPGE
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : CPGE
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Déterminant d'une Matrice
    Bonjour à tous,
    Me voilà coincé avec un exercice d'informatique que nous as donné notre prof de maths (je suis en première année de sup et donc encore un débutant de python).
    Voici mon problème (et mon programme)(les indentations sont correctement mise dans le porgamme):


    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
    import numpy as np
     
    def permutation(A,i,k):
        A[i], A[k] = A[k], A[i]
        return
     
    def transvection(A,i,k,c):
        m = len(A[0])
        for j in range (0,m):
            A[k][j] -= c*A[i][j]
        return A
     
    def recherche_pivot(A,i):
        n = len(A)
        maxi, pivot = abs(A[i][i]), i
        for k in range (i+1,n):
            elem = abs(A[k][i])
            if elem > maxi:
                maxi, pivot = elem, k
        return (pivot)
     
     
    from copy import deepcopy   
    def triangularisée(A):
        n, m = len(A), len(A[0])
        p = 0
        M = deepcopy(A)
        if n != m:
            Z = np.zeros((n,m))
            s = 0
            return (Z, s) 
        for i in range(n-1):
            k = recherche_pivot(M, i)
            if k != i:
                permutation(M,i,k)
                p += 1
            for k in range(i+1, n):
                transvection(M, i, k, M[k][i] / M[i][i])
        if type(p / 2) != int:
            s = -1
        else:
            s = 1
        return (M, s)
     
    def determinant(A):
        Mat = deepcopy(A)
        Mat = triangularisée(Mat)
        n = len(Mat)
        det = 1
        for k in range(0,n-1):
            u = Mat[k][k]
            det *= u
        return (det)
    En essayant avec une matrice :

    A=array([[ 1., 4., 7.],
    [ 0., 5., 8.],
    [ 0., 0., 5.]])
    determinant(A)

    J'obtiens : array([ 1., 4., 7.])

    Où se situe mon problème d'indexation?

    Merci par avance !!!

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2017
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Calculer le déterminant d'une matrice avec python et numpy
    Tu peux faire ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=[[ 1., 4., 7.],[ 0., 5., 8.],[ 0., 0., 5.]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print numpy.linalg.det(A)
    ou bien si tu veux utiliser une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def determinant(A):
        return numpy.linalg.det(A)

  3. #3
    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
    Citation Envoyé par pouletbiencuit Voir le message
    Tu peux faire ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=[[ 1., 4., 7.],[ 0., 5., 8.],[ 0., 0., 5.]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print numpy.linalg.det(A)
    ou bien si tu veux utiliser une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def determinant(A):
        return numpy.linalg.det(A)
    Je présume que justement, le but de son exercice pédagogique c'est de ne pas utiliser la fonction toute faite pour ca. pouletbiencuit pourrait éventuellement l'utiliser pour vérifier que la fonction qu'il crééra fournira bien la même chose que celle de numpy.

    Ensuite, tu nous parle de déterminant. Dans ton code je vois des fonctions de pivots et de triangularisations. On n'a pas besoin de tout ça pour calculer un déterminant ... Sans avoir lu le code plus que ça, je me dis que sa serait pas une diagonalisation là que tu calculerais ?

    Le plus intuitif j'aurais dit que c'était la méthode récursive en utilisant les cofacteurs. Le déterminant d'une matrice de taille 2*2 c'est a*d-b*c et après pour une matrice de taille n, vous pouvez écrire son déterminant comme une combinaison de déterminant de matrice plus petite. Là vous utiliser probablement une autre méthode. soit.

    Dans tous les cas, faites des print de vos variables plus régulièrement pour voir ce qu'elles valent et identifier plus précisément où est le bog. Car là vous en etes au stade il y a un bog dans mon programme. Mieux serait de savoir il y un bug dans telle fonction, voire même idéallement, il y a un bug sur telle ligne.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    CPGE
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : CPGE
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Je présume que justement, le but de son exercice pédagogique c'est de ne pas utiliser la fonction toute faite pour ca. pouletbiencuit pourrait éventuellement l'utiliser pour vérifier que la fonction qu'il crééra fournira bien la même chose que celle de numpy.

    Ensuite, tu nous parle de déterminant. Dans ton code je vois des fonctions de pivots et de triangularisations. On n'a pas besoin de tout ça pour calculer un déterminant ... Sans avoir lu le code plus que ça, je me dis que sa serait pas une diagonalisation là que tu calculerais ?

    Le plus intuitif j'aurais dit que c'était la méthode récursive en utilisant les cofacteurs. Le déterminant d'une matrice de taille 2*2 c'est a*d-b*c et après pour une matrice de taille n, vous pouvez écrire son déterminant comme une combinaison de déterminant de matrice plus petite. Là vous utiliser probablement une autre méthode. soit.

    Dans tous les cas, faites des print de vos variables plus régulièrement pour voir ce qu'elles valent et identifier plus précisément où est le bog. Car là vous en etes au stade il y a un bog dans mon programme. Mieux serait de savoir il y un bug dans telle fonction, voire même idéallement, il y a un bug sur telle ligne.
    C'est exacte, il s'agissait de créer un programme par nous même, sans utiliser la fonction prévu à cet effet. De plus, il nous est demandé de triangularisé la matrice (avec un pivot de Gauss) pour ensuite ne devoir faire que le produit des termes de la diagonales de la matrice triangulaire supérieure (qui donne le déterminant).
    Je souhaiterai donc calculer le produit des coefficients diagonaux mais je n'y arrive pas...

    Merci dejà pour votre aide et pour avoir prit le temps de répondre!!

  5. #5
    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
    Citation Envoyé par lg_53 Voir le message
    Dans tous les cas, faites des print de vos variables plus régulièrement pour voir ce qu'elles valent et identifier plus précisément où est le bog.
    Je viens de reprendre votre code et j'ai fais exactement ce que je vous avais dis de faire. Et paf, le premier truc que j'essaie je vois tout de suite où est la faute...

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    C'est vraiment débile de demander l'utilisation du pivot de Gauss en ayant donné une matrice avec des flottants.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    CPGE
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : CPGE
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    C'est vraiment débile de demander l'utilisation du pivot de Gauss en ayant donné une matrice avec des flottants.
    Il s'agit ensuite de comparer l'efficacité(précision) avec une matrice d'entier et de flottants.

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