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 :

produit scalaire vecteurs


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut produit scalaire vecteurs
    Bonjour a tous
    je dois realiser un programme pour calculer le cosinus de deux vecteurs dans deux listes
    j'ai fait ceci mais ca ne fonctionne pas pouvez-vous m'aidez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from math import*
    x1=float(input ("saisir un x1="))
    y1=float(input ("saisir un y1="))
    z1=float(input ("saisir un z1="))
    x2=float(input ("saisir un x2="))
    y2=float(input ("saisir un y2="))
    z2=float(input ("saisir un z2="))
    L1=[x1,y1,z1]
    L2=[x2,y2,z2]
    alpha=((L1*L2)/(sqrt(L1*L1)*sqrt(L2*L2))
    print('alpha=',alpha)
    Merci de votre réponse

  2. #2
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Bonsoir briguiiii
    Si cela peut aider
    Trouvé ici http://revue.sesamath.net/spip.php?article385

    Le calcul du produit scalaire de deux vecteurs représentés par des listes s’effectue en utilisant les primitives sum et zip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> u = [1, 4, 7, 8, -2]
     
    >>> v = [0, 11, -7, 1, -3]
     
    >>> sum([x * y for x, y in zip(u, v)])
     
    9

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    je ne comprends pas a quoi correspond la commande sum et zip

  4. #4
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    zip voir:
    La fonction zip est une fonction très simple nous venant des langages fonctionnels tels que Objective Caml ou Haskell, et permettant de combiner plusieurs listes en une seule, de manière à rendre les itérations plus efficaces.

    En effet, imaginons que nous voulions itérer sur deux listes. La solution naïve venant à l'esprit est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in xrange(min(len(liste1), len(liste2))):
     
        e1, e2 = liste1[i], liste2[i]
     
        # Actions en utilisant e1 et e2
    Cependant, comme il a été dit dans la partie sur enumerate, les indices sont à éviter le plus possible dans ce genre de contexte. Pour réaliser cela, on a donc recours à la fameuse fonction zip qui nous permet de faire cette itération sur deux listes facilement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for e1, e2 in zip(liste1, liste2):
     
     # Actions en utilisant e1 et e2
    Ceci s'explique par la définition de zip que l'on peut trouver dans la documentation de Python.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    zip(...)
     
        zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
     
        Return a list of tuples, where each tuple contains the i-th element
     
        from each of the argument sequences. The returned list is truncated
     
        in length to the length of the shortest argument sequence.
    zip réalise donc la fonction suivante : pour une liste [a, b, c] et une autre liste [d, e, f], zip nous donnera une liste [(a, d), (b, e), (c, f)]. En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> zip(['a', 'b', 'c'], ['d', 'e', 'f'])
     
    [('a', 'd'), ('b', 'e'), ('c', 'f')]

  5. #5
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    voir ici (site :/www.science-emergence.com)
    Pour sommer tous les éléments d'une liste sous python il existe la fonction "Built-in" sum(), illustration:

    >>> list = [1,2,3,4]
    >>> sum(list)
    10

  6. #6
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut Une solution
    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
     
    from math import*
     
    L1=[1, 4, 7]
    L2=[0, 11, -7]
    Liste_produits=[x*y for x, y in zip(L1,L2)]
    produitScalaire=sum(Liste_produits)
    print(Liste_produits)
    print(produitScalaire)
    L1Carre=[x*x for x in L1]
    L2Carre=[x*x for x in L2]
    normeL1=sqrt(sum(L1Carre))
    normeL2=sqrt(sum(L2Carre))
    print(normeL1, normeL2)
    Cos_alpha=produitScalaire/(normeL1*normeL2)
     
    print('cos(alpha)=',Cos_alpha)

  7. #7
    Membre Expert

    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
    Par défaut
    Je dirais surtout que tu n'utilises pas les bonnes structures...

    Les listes en python, ce sont des listes. Pas des vecteurs.
    Donc lorsqu'on écrit une addition ou une multiplication par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=[1,2,3]
    print(A+A) ### [1,2,3,1,2,3]
    print(2*A) ### [1,2,3,1,2,3]
    ## print(A*A)  ### ERROR
    et bien on concatène. On aurait plutot envie que notre addition se comporte comme une somme terme à terme. Pour ca il y a numpy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import numpy as np
    A=np.array([1,2,3])
    print(A+A)  ### [2,4,6]
    print(2*A)  ### [2,4,6]
    print(A*A)  ### [1,4,9]

    PS : D'ailleurs numpy possède des fonctionalités pour calculer les produits scalaires et les cosinus tous seuls, sans que tu n'es besoin de les recoder.

  8. #8
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    je crois deviner que tu nous demandes de réfléchir à ta place ! Loin de moi de vouloir faire le père laMorale mais cette façon de faire ne t'apportera rien!
    Si je te donne la réponse toute faite, j'aurai utilisé mes méninges et cela n'arrangera pas les tiens !
    Au début, c'est compliqué pour tout le monde mais on fini par y arriver
    Pour ton deuxième exercice (qui a mystérieusement disparu durant la rédactionde ce post mais, bon, je laiise ma réponse), tu poses la question en dehors de la boucle de test et donc en en cas d'erreur, la valeur dans la boucle n'est pas modifiée, l'erreur persiste et le programme tourne indéfiniment.
    Essaye de mettre la question au bon endroit (éventuellement à deux endroits si nécessaire)

    Pour le premier problème, si mon hypothèse de départ est vraie (tu débutes) voici une solution sans sum et zip
    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
     
    from math import*
     
    L1=[1, 4, 7]
    L2=[0, 11, -7]
    produitScalaire=0
    L1Carre=0
    L2Carre=0
    for i in range(0, 3):
        produitScalaire+=L1[i]*L2[i]
        L1Carre+=L1[i]*L1[i]
        L2Carre+=L2[i]*L2[i]
    normeL1=sqrt(L1Carre)
    normeL2=sqrt(L2Carre)
    cosAlpha=produitScalaire/(normeL1*normeL2)
    print('produit scalaire =',produitScalaire)
    print('norme de L1=',normeL1,'  norme de L2= ',normeL2)
    print('Cos(alpha) = ',cosAlpha)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 5
    Par défaut
    La commande produitScalaire+ est une commande lambda ou elle fait le produit scalaire ?
    de meme pour L1Carre+?
    Lorsque je les change de nom je ne trouve pas les mêmes résultats

  10. #10
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produitScalaire+=L1[i]*L2[i]
    Signifie: la variable produitScalaire est incrémentée (opérateur +=) du résultat de L1[i]*L2[i]
    On aurait pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    produitScalaire=produitScalaire + L1[i]*L2[i]
    Comme cette opération est dans une boucle, on a finalement l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produitScalaire=L1[1]*L2[1]+L1[2]*L2[2]+L1[3]*L2[3]

  11. #11
    Membre émérite

    Homme Profil pro
    linux, pascal, HTML
    Inscrit en
    Mars 2002
    Messages
    649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : linux, pascal, HTML
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 649
    Billets dans le blog
    1
    Par défaut
    désolé, je viens de corriger une grosse coquille dans mon dernier post où il fallait bien lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produitScalaire=produitScalaire + L1[i]*L2[i]

Discussions similaires

  1. Produit scalaire de vecteurs
    Par SRoiya dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/03/2017, 14h38
  2. produits scalaire entre vecteur et matrice?
    Par FATENMRABET dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/10/2013, 15h26
  3. Produit scalaire de deux vecteurs
    Par adrian07 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/06/2012, 10h55
  4. produit scalaire de 2 vecteurs
    Par aroua dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 07/04/2008, 13h06

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