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 :

Erreur sur Edupython - Méthode de Monte-Carlo


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Par défaut Erreur sur Edupython - Méthode de Monte-Carlo
    Bonjour,

    Lorsque je fais tourner ce programme (approximation de pi par la méthode de Monte-Carlo) j'ai ce message d'erreur que je comprends pas.
    Visiblement l'erreur vient de la fonction sqrt. Pourtant lorsque j'isole la partie du script qui la fait intervenir, pas de pb (le quart de cercle est bien tracé).

    Merci de votre aide.

    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
    """
    UNE APPROXIMATION DE pi PAR LA
    METHODE DE MONTE-CARLO
    """
     
    """
    Visualisation de la question précédente
    """
     
    from math import*
    from random import*
    import matplotlib.pyplot as plt
     
    N=int(input("combien de simulations souhaitez-vous faire?"))
    # Tracé du quart de cercle
    h=1/N
    x=[k*h for k in range (N)]
    y=[sqrt(1-(k*h)**2) for k in range (N)]
     
    X=[]
    Y=[]
    Q=0
     
    for i in range(N):
        X.append(random())
        Y.append(random())
        if (X[i]**2+Y[i]**2)<1:
            plt.scatter(X,Y,"b.",ms=3)  # pour des points du nuage (X;Y) non reliés
            Q=Q+1
        else:
            plt.scatter(X,Y,"r.",ms=3)
     
    frequence=Q/N
    print(frequence)
    approx_pi=4*frequence
    print("une approximation de pi est ",approx_pi)
     
    plt.axis(Xmin=0,Xmax=1,Ymin=0,Ymax=1)
    plt.plot(x,y)       # pour des points du nuage (x;y) reliés par des segments
    plt.scatter(X,Y,"b.",ms=3)    # pour des points du nuage (X;Y) non reliés
     
    title="Monte-Carlo pour ",N," simulations: pi égal " ,approx_pi, " environ"
    plt.title(title)
    plt.grid()
    plt.show()

    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
    *** Console de processus distant Réinitialisée *** 
    Traceback (most recent call last):
      File "Z:\Users\christophe\Documents\WORK\COURS MATHS\ - LYCEE\1Spé_1920\11. Python\chapitre_TP3_p287  PI Monte Carlo\chap_9_TP3p287_Q2_perso_bis -c.py", line 31, in <module>
        plt.scatter(X,Y,"r.",ms=3)
      File "C:\EduPython\App\lib\site-packages\matplotlib\pyplot.py", line 3475, in scatter
        edgecolors=edgecolors, data=data, **kwargs)
      File "C:\EduPython\App\lib\site-packages\matplotlib\__init__.py", line 1867, in inner
        return func(ax, *args, **kwargs)
      File "C:\EduPython\App\lib\site-packages\matplotlib\axes\_axes.py", line 4334, in scatter
        alpha=alpha
      File "C:\EduPython\App\lib\site-packages\matplotlib\collections.py", line 929, in __init__
        self.set_sizes(sizes)
      File "C:\EduPython\App\lib\site-packages\matplotlib\collections.py", line 902, in set_sizes
        scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor
    TypeError: ufunc 'sqrt' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
    >>>
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Essaie de faire :
    Sinon, il le prend dans matplotlib.

  3. #3
    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
    Le message est assez clair: vous filez un truc a matplotlib qui n'est pas du bon type. Et vu la trace, je dirais que c'est sur un problème de taille. Je dirais la taille de vos points. Surtout que dans la notice de pyplot
    https://matplotlib.org/api/pyplot_api.html
    , si je fait un Ctrl+F pour rechercher l'argument "ms", je tombe sur :

    markersize or ms : float
    et vous donner des int ...

    ms = 3.0 devrait fonctionner


    PS1: Il faut utiliser la balise code pour poster du code. C'est le bouton avec le # lorsque vous rédiger votre message.

    PS2: Je rejoins la remarque précédente qui est souvent source d'erreur et qui aurait pu être la raison ici. De manière générale éviter de faire des import *. Faites from truc import ce_dont_j_ai_besoin. Si vous avez besoin de plusieurs choses, vous séparez par des virgules. Mais banissez l'étoile !

  4. #4
    Candidat au Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Par défaut
    Merci pour votre réponse et pour les PS (je suis nouveau sur le site !).
    Malheureusement, ça bug toujours

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Je ne sais pas.
    Voici un de mes codes :
    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
    import random
    from math import pi
    import numpy
    from matplotlib import pyplot as plt
     
    a = 1
    aire_carre = (2*a)**2
    aire_disque = pi*a**2
    print(aire_disque/(aire_carre))
    print("Valeur théorique de Pi / 4 : %0.5f" %(pi/4))
     
    num_tir = 0
    num_tir_disque = 0
     
    liste_x_carre=[]
    liste_y_carre=[]
    liste_x_disque=[]
    liste_y_disque=[]
     
    while (num_tir < 100000):
    	num_tir = num_tir + 1
    	x = random.uniform(-1,1)
    	y = random.uniform(-1,1)
    	if (x*x+y*y <= 1):
    		num_tir_disque = num_tir_disque + 1
    		liste_x_disque.append(x)
    		liste_y_disque.append(y)
    	else:
    		liste_x_carre.append(x)
    		liste_y_carre.append(y)
     
    Pi_exp = 4*num_tir_disque / num_tir
    print("Valeur expérimentale de Pi : %0.5f" %Pi_exp)
     
    plt.axis('equal')
    plt.plot(liste_x_carre,liste_y_carre,'ro')
    plt.plot(liste_x_disque,liste_y_disque,'bo')
    plt.show()

  6. #6
    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
    Citation Envoyé par bobbybob.bobbybob Voir le message
    Merci pour votre réponse et pour les PS (je suis nouveau sur le site !).
    Malheureusement, ça bug toujours

    Il faut être plus précis. Quel est le nouveau code que vous avez essayé qui plante toujours ? A quel ligne exactement ? Sachant que si je me contente de copier coller votre code, j'ai une erreur déjà avant ...

    Effectivement ce que je vous ai dit ne résout pas tout à fait le problème, mais il faut lire les notices et ça vous aurait résolu votre problème. En l'occurence vous confondez la syntaxe de la fonction plot, et celle de la fonction scatter.

    Soit on écrit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plt.scatter(X,Y,color='b',marker=".", s=3.0)
    soit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plt.plot(X,Y,'b.', ms=3.0)
    mais si vous mettez du 'b.' ainsi que du ms à scatter normal qu'il n'aime pas.

    Notez que le code s'éxécute mais vous allez probablement avoir un graphique différent de celui auquel vous vous attendriiez, car il y a un bug dans ce que vous tracez.

  7. #7
    Candidat au Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Par défaut
    Merci de ta réponse.
    J'avais essayé... Sans succès.


    Citation Envoyé par marco056 Voir le message
    Essaie de faire :
    from math import sqrt
    Sinon, il le prend dans matplotlib.

Discussions similaires

  1. [AC-2003] Erreur sur TransferText méthode
    Par PacoE dans le forum VBA Access
    Réponses: 11
    Dernier message: 24/01/2013, 10h53
  2. Méthode de Monté Carlo, pour le nombre Pi, sous Vba
    Par Quentin21000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/02/2012, 19h47
  3. Calcul d'intégrale par la méthode de Monte Carlo
    Par physicslover dans le forum Fortran
    Réponses: 5
    Dernier message: 29/01/2009, 11h02
  4. Erreurs sur les méthodes ApplicationClass et Application
    Par Invité dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/04/2008, 17h39
  5. [PHPMailer] Erreur sur la méthode isHtml
    Par Curby dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/03/2007, 23h16

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