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 :

Fonction périodique en Python


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut Fonction périodique en Python
    Bonjour,

    Commençons par définir la fonction f_L définie sur l'intervalle [0,𝐿]. Je choisis ici la forme d'une corde de guitare pincée à une distance 𝛼𝐿 (alpha * L) avec un champ d'élongation 𝑎 (a). Il s'agit d'une fonction affine par morceaux. Je prends 𝐿=1m dans toute la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    L = 1 # m
    alpha = .25
    a = .1 # m
     
    def f_L(x):
        if x < alpha * L:
            return a * x / alpha
        else:
            return (a / (alpha - 1)) * ( x / L - 1)
    Ensuite, on définit la fonction f_2L définie sur l'intervalle [−𝐿,𝐿] comme ( (si 𝑥∈[0,𝐿], alors 𝑓2𝐿(&#119909=𝑓𝐿(&#119909, sinon 𝑓2𝐿(&#119909=−𝑓𝐿(−&#119909).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def f_2L(x):
        if x >= 0:
            return f_L(x)
        else:
            return -f_L(-x)


    C'est là que mes difficultés commencent Enfin, on définit la fonction f définie sur ]−∞,+∞[ comme décrit dans la vidéo en périodisant la fonction 𝑓2𝐿. Pour cela, on utilise la fonction partie entière (np.floor) qui permet de ramener un réel 𝑥 dans l'intervalle [−𝐿,𝐿].

    Pourquoi écrit-on la relation suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def f(x):
        return f_2L(x - np.floor((x + L)/ (2 * L)) * 2 * L)
    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par beckhton Voir le message
    Pourquoi écrit-on la relation suivante ?
    Pourquoi? à priori, c'est vous même qui dites:

    Citation Envoyé par beckhton Voir le message
    Pour cela, on utilise la fonction partie entière (np.floor) qui permet de ramener un réel 𝑥 dans l'intervalle [−𝐿,𝐿].
    Donc la question pourrait être est-ce que çà fait bien ce qu'on attend ou pas... et pour çà, on peut dans un premier temps tester (çà fait ce qu'on attend...) puis dans un second temps prendre un papier et un crayon pour essayer de comprendre comment çà fonctionne.


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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Merci de la réponse mais je me suis mal exprimé.
    Les explications sont celles que j'ai trouvées avec le code fourni sinon je ne serai pas là.

    Je me demande simplement pourquoi le terme np.floor(...)*2L dans l'expression fournie pour construire la fonction périodique. On n'a pas ce genre de réflexion avec un cosinus ou un sinus...

    Quant au crayon et au papier je cherche à l'établir en fouillant du côté de la partie entière mais rien ne vient...

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par beckhton Voir le message
    Je me demande simplement pourquoi le terme np.floor(...)*2L dans l'expression fournie pour construire la fonction périodique. On n'a pas ce genre de réflexion avec un cosinus ou un sinus...
    Parce que vous n'avez pas une fonction périodique définie sur ]−∞,+∞[ mais ne fonction définie sur ]−L,+L[ qu'on force a être périodique en associant (de cette façon là) n'importe quel x de ]−∞,+∞[ à un x dans ]−L,+L[.

    Et ce que je dis là n'est guère différent de:
    Pour cela, on utilise la fonction partie entière (np.floor) qui permet de ramener un réel 𝑥 dans l'intervalle [−𝐿,𝐿]
    Après côté papier crayon, prenez la fonction sinus, vous avez des tables pour ses valeurs dans [0, 2π[. Mais si on vous donne un x en dehors de cet intervalle, sachant que c'est une fonction périodique, qu'allez vous faire pour trouver le sinus de ce x là....

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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Re,

    merci de m'aider. Si je comprend la dernière demande basée sur l'exemple de la fonction sinus

    Par exemple sin(pi/6) = 1/2 avec 0 < pi/6 < 2pi
    Si on me demande sin(13pi/6) avec 13pi/6 en dehors de l'intervalle, il me suffit de rajouter 2pi à pi/6. On fait un tour sur le cercle trigonométrique et on retrouve la même valeur...

    Je ne sais pas si je réponds mais si c'est le cas je n'établis ps le lien avec la partie entière

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par beckhton Voir le message
    Je ne sais pas si je réponds mais si c'est le cas je n'établis ps le lien avec la partie entière
    En prenant des multiples de pi, vous passez à côté du problème.
    Prenez un vrai x genre 30, pour trouver le x dans [0, 2π[ tel que sin(30) = sin(x),
    il faut chercher un entier k tel que 30 = x + 2kπ.
    Et voilà d'où sort la partie entière...

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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Ah mais oui ! Avec k = (30-x)/(2pi) et c'est entier donc partie entière c'est ca ?

    mais dans mon cas d'où vient le x+L au numérateur de la partie entière ?

    Merci encore

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par beckhton Voir le message
    mais dans mon cas d'où vient le x+L au numérateur de la partie entière ?
    Maintenant que vous avez compris une partie du problème à résoudre, il faut avoir la curiosité et la patience de coder la solution qui va avec et regarder ce que çà donne sur un jeu d'essai. Essayer d'explorer le problème par soi-même est beaucoup plus formateur (c'est votre cerveau que vous entraînez) que de regarder des vidéos sur Internet ou attendre qu'on vous mâche le travail.

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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Si vous saviez... Mais une fois encore cela se termine toujours par une leçon de morale.

    Merci quand même !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boost.Python utiliser fonction C++ dans Python
    Par Balmung dans le forum Boost
    Réponses: 0
    Dernier message: 29/06/2009, 20h26
  2. Fonction périodique d'exécution d'un script
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2008, 08h26
  3. Appel d'un fonction C sous Python et blocage des autres threads
    Par mkrzemin dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 07/02/2008, 14h52
  4. Réponses: 1
    Dernier message: 09/08/2006, 16h04
  5. Fonction addslashes sous Python ?
    Par ecocentric dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2006, 18h27

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