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 :

Calcul d'une suite récurrente d'ordre p (amateur)


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2025
    Messages : 1
    Par défaut Calcul d'une suite récurrente d'ordre p (amateur)
    Bonjour, quelqu'un(s) !

    J'ai une vingtaine d'année et ait redécouvert Python il y a quelques jours. J'ai fait de mon mieux pour me reformer sur ce langage, mais j'ai un problème de calcul que je ne parviens pas à surmonter.
    En fait, je voudrais composer un programme capable de résoudre la suite U(n+1) = U(n)*2 - U(n-p) avec p un entier naturel choisi par l'utilisateur et U(0) = 1.
    J'arrive à lui faire calculer U(n+1) = U(n)*2 sans problèmes mais la deuxième portion de la soustraction me donne du fil à retordre. J'ai fait de mon mieux pour trouver une solution par les tutos, mais je suis est trop spécifique.
    Est-ce que vous sauriez comment procéder ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 577
    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 577
    Par défaut
    Citation Envoyé par Wend Offelag Voir le message
    Est-ce que vous sauriez comment procéder ?
    Comment feriez vous en écrivant les premiers items de cette suite sur une feuille de papier?
    Si vous ne savez pas faire ça comment arriver à le coder avec Python?
    D'où pour l'instant, difficile de coder quoi que ce soit... et vous pouvez aller chercher de l'aide dans un forum de maths ou d'algorithmique.

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

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Les calculs de récurrence ne sont pas très compliqués avec Python, et ils sont même assez amusants.
    Mais il y a quelque chose que je comprends pas dans l'énoncé et là, ce n'est pas de la programmation, mais des maths:

    U(0)=1 et prenons p=10
    U(1) = U(0)*2 - U(0-10)
    Mais U(0-10) est inconnu?

    L'obstacle au codage est donc pour l'instant purement mathématique.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

    Je profite de l'occasion pour vous souhaiter une bonne années et une bonne santé (et surtout la santé insiste-t-on dans mon coin).

    Citation Envoyé par tyrtamos Voir le message
    L'obstacle au codage est donc pour l'instant purement mathématique.
    papier-crayon disent que je sais calculer Un+1 = Un*2 - Un-p pour tout n >= p pourvu que la valeur des p premiers éléments de la liste soit définie (comme la valeur 1 est définie pour U0). Et pour l'instant, on n'a pas encore fait de maths, juste du français qui fait que le n dans l'écriture Un est le numéro attribué au nième items et de ce fait positif ou nul.

    Là où je fais des maths, c'est que je vais pouvoir écrire un algo. sans savoir ce que sont la valeur de ces p premiers items de la suite (j'en fait abstraction comme je peux travailler avec un concept comme un point de dimension nulle: inexistant, invisible,...).

    On part des p premiers éléments de la suite U0, U1, ... Up-1
    pour en faire un tableau/list à p positions appelée T.
    Du coup, le calcul de Un+1 = Un*2 - Un-p pour n=p devient Up = 2*T[-1] + T[0]
    Avant de calculer le suivant, je met à jour T pour refléter les p derniers éléments de la suite: suppression du premier élément et ajout de Up en dernière position.
    Le calcul de Up+1 sera alors de la même forme: 2*T[-1] + T[0]

    Jusqu'ici, j'ai traité un des détails de la réalisation du calcul des termes de la suite pour p > 0. Quand on va coder, il faudra tenir compte de conditions aux limites du genre p = 0 ou bien calculer les n premiers items où n est inférieur à p. En ce qui me concerne, pas besoin de papier-crayon:

    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
    def sequence(n=100, first_values=[]):
        p = len(first_values)
     
        if p == 0:
            return [1, ] * n
     
        if p > 0: assert first_values[0] == 1
     
        if n <= p:
            return first_values[:n]
     
        R = list(first_values)
        for _ in range(p, n):
            R.append(2*R[-1] - R[-p])
        return R
     
    if __name__ == '__main__':
        for z in range(2, 5):
            print(list(sequence(first_values=[1, z]))[-10:])
    note: si on n'a pas fait le travail papier-crayon, ce code peut paraitre "difficile" à lire.

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

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour wiztricks

    Bravo pour la tentative, mais il faut alors ajouter des données qui ne se trouvent pas dans l'énoncé initial.

    Connaissant U(0)=1, il faut en plus connaître de U(1) à U(p), et la 1ère valeur calculable est U(p+1)=U(p)-U(p-p)

    Si on n'ajoute pas ces données dans l'énoncé, comment calculer ces U(1)..U(p) ???
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 577
    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 577
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Connaissant U(0)=1, il faut en plus connaître de U(1) à U(p), et la 1ère valeur calculable est U(p+1)=U(p)-U(p-p)
    Absolument... mais papier crayon suppose aussi d'aller regarder l'état de l'art sur ce que sont les suites linéaires d'ordre p (ça c'est des maths) qui sont définies en fixant les p premiers termes (de la même manière qu'on fixe ici U0 = 1).

    Après il y a du travail côté maths suivant ces valeurs initiales mais ça nous mène très loin du problème initial (calculer les n premiers items de la suite).

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

Discussions similaires

  1. calcul d'une suite
    Par gagalive dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2011, 10h34
  2. aide pour un programme de calcul d'une suite
    Par sylar113 dans le forum Débuter
    Réponses: 10
    Dernier message: 02/11/2009, 00h39
  3. Réponses: 6
    Dernier message: 10/01/2009, 22h18
  4. [Excercice] Calcul d'une suite
    Par ilhamzinedine dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 23/11/2008, 17h10
  5. [Débutant] Fonction pour calcul d'une suite récurrente
    Par moimoi89 dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/10/2007, 18h08

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