Fonction somme et equation differentielle (Python)
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Fonction somme et equation differentielle (Python)



  1. #1
    cmole

    Fonction somme et equation differentielle (Python)


    ------

    Bonjour,

    Premier post dans cette section, donc si la question est mal posée, au mauvais endroit, ou peu explicite surtout n'hésitez pas à me le faire savoir !

    Pour résoudre un problème de physique j'utilise un petit algo' Python que j'ai écrit, sauf que... je suis très novice à ce niveau donc je bloque (surement pour quelque chose d'assez trivial, en plus).
    Voici mon problème: j'ai une équation différentielle x" = f(x) + f(x') à résoudre. Jusque là pas de soucis, j'utilise solve_ivp et tout se passe bien. Sauf qu'en généralisant mon étude l'équation devient de la forme x" = Σf((x-ia/b)) + Σf((x'-ia/b)) où a et b sont des constantes, considérées connues : et là je bloque, lorsque i > 0 je ne sais absolument pas comment m'y prendre. Dans mon idée il faudrait définir la fonction à résoudre "explicitement", mais puisque "i" est une donnée rentrée par l'utilisateur, je ne sais pas comment m'y prendre. J'aurais tendance à vouloir utiliser une boucle "for", mais pour définir une fonction je ne sais pas comment faire.

    J'ai bien conscience que tout cela est assez flou, voire brouillon, mais j'espère que cela permettra à certains de m'aiguiller.

    Merci d'avance !

    -----

  2. #2
    gts2

    Re : Fonction somme et equation differentielle (Python)

    Bonjour,

    Oui, c'est assez flou :
    1- a b sont des constantes, i est un paramètre entrée par l'utilisateur donc ia/b est constante et on a juste remplacé x par x'=x-ia/b.
    2- la somme porte sur quoi il y a une variable x et des constantes i a b, donc qu'est ce qui dépend de l'indice de boucle ?
    3- je ne vois où le signe de i joue un rôle.

    Sinon personne ne vous empêche de mettre une boucle dans la définition d'une fonction.

    def f(x,a,b):
    z = 0
    for i in range(4):
    z=x+i*b+a
    return z

  3. #3
    pm42

    Re : Fonction somme et equation differentielle (Python)

    Et si le problème est uniquement de transformer une fonction qui dépend d'un n rentré par l'utilisateur en une fonction qui dépend de x, on a plusieurs solutions :

    Code:
    from functools import partial
    
    def f(x,a,b, n):
      z = 0
      for i in range(n):
        z=x+i*b+a
      return z
    
    
    print("Enter n")
    n = int(input())
    f1=lambda x, a, b: f(x, a, b, n)
    f2 = partial(f, n=n)
    Et on peut utiliser f1 ou f2 pour le passer à solve_ivp. La solution lambda, f1, est la plus simple et très flexible. f2 est une solution alternative qui marche parfois quand la librairie qu'on veut utiliser n'accepte pas les lambda.

  4. #4
    polo974

    Re : Fonction somme et equation differentielle (Python)

    et une 3ème sans lambda ni partial mais un exec...:
    Code:
    ...
    n=5
    exec("def f1(x, a, b): return f(x,a,b, %d)" % n)
    f1(1,2,3)
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Fonction somme et equation differentielle (Python)

    Citation Envoyé par polo974 Voir le message
    et une 3ème sans lambda ni partial mais un exec...:
    Ca marche très bien mais ce n'est pas ce que je recommanderais : c'est plus lourd vu qu'on appelle l'interpréteur Python, ça ne marche que dans les langages comme ça et on rajoute une fonction dans l'espace global de nommage ce qui crée un risque de conflit.

    Globalement, la programmation dynamique où on modifie le code à la volée est à utiliser avec précaution.

    Mais je chipote vu le contexte du fil.

  7. #6
    polo974

    Re : Fonction somme et equation differentielle (Python)

    Oui, c'est sûr que le exec, ça peut faire mal...


    Sinon, on peut passer par une classe. Une fonction pour positionner i, et une autre pour évaluer...


    Au fait en python, il y a sympy pour faire du symbolique.
    https://www.sympy.org/en/index.html
    Jusqu'ici tout va bien...

  8. #7
    pm42

    Re : Fonction somme et equation differentielle (Python)

    Citation Envoyé par polo974 Voir le message
    Sinon, on peut passer par une classe. Une fonction pour positionner i, et une autre pour évaluer...
    Oui avec la méthode __call__, on peut faire qu'une classe se comporte comme une fonction en effet. C'est sans doute ce qu'il y a de plus puissant même si c'est plus lourd qu'une simple lambda pour la plupart des cas.

    Citation Envoyé par polo974 Voir le message
    Au fait en python, il y a sympy pour faire du symbolique.
    https://www.sympy.org/en/index.html
    On peut tout faire en python en effet. Il faut juste que l'équa diff en question puisse être résolue comme ça.

  9. #8
    cmole

    Re : Fonction somme et equation differentielle (Python)

    Avec un peu de recherche de mon côté (c’est quand même sacrément bien documenté Python) vous avez tous parfaitement répondu à mon problème, un très grand merci !

Discussions similaires

  1. Intégration d'équation différentielle sous python pour un TIPE
    Par Tim6714 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 21/05/2022, 13h13
  2. Équation différentielle sur python
    Par HSbF6 dans le forum Programmation et langages, Algorithmique
    Réponses: 20
    Dernier message: 26/04/2022, 14h11
  3. Fonction Python : retourne une somme égale à
    Par zalio2012 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 03/11/2016, 18h28
  4. Résolution d'équation différentielle sur python
    Par Jungo33 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 11/06/2015, 22h08
  5. Réponses: 10
    Dernier message: 06/10/2011, 06h48