Python modélisation équation
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Python modélisation équation



  1. #1
    Oceane2233

    Python modélisation équation


    ------

    Bonjour à tous,

    Je suis nouvelle dans le domaine de la programmation, et j'aimerai savoir comment il serait possible de modéliser différentes équations à partir du langage Python, et en faire des courbes sur le même graphique?

    Par exemple prenons l'équation : Y' = a*(K^n/K^n+X^n) - bY
    Je connais les valeurs de mes paramètres a,K,n,b,X,et j'aurais voulu définir mon axe Y par Y = np.arange(0,2,0.01), le problème est que lorsque j'essaye de plot mon graphique, par exemple plt.plot(Y,Y'),je me retrouve avec différentes longueurs,comment faire dans ce cas la pour pouvoir plot ma dérivé de Y en fonction de Y?

    Cordialement,et merci d'avance pour la précieuse aide que vous pourrez m'apporter !

    -----

  2. #2
    umfred

    Re : Python modélisation équation

    le code complet pourrait aider à comprendre peut-être, peut-être par exemple une mauvaise valeur dans la boucle de calcul de Y' ?

  3. #3
    Oceane2233

    Re : Python modélisation équation

    En fait je cherche à modéliser le changement de la production, et de la dégradation de la protéine Y en fonction de la concentration en facteur de transcription répresseur (que l'on nomme X).
    Je me retrouve donc avec le code suivant: (le problème étant que je n'ai pas la même longueur pour X et Y et que je ne sais pas comment le corriger)

    Code:
    ## Code 
    
    ## Package importation
    import matplotlib.pyplot as plt
    import numpy as np
    
    ## Définition des variables
    beta = 1  # production rate
    alpha = 1 # degradation rate
    n=1
    
    K= beta/alpha
    
    X_low = 0.5
    X_medium = 1
    X_high = 1.5
    
    Y = np.arange(0,2,0.01) 
    production_1 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_low,n))
    production_2 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_medium,n))
    production_3 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_high,n))
    
    plt.plot(Y, production_1, linewidth = 2, color = 'black', label = 'production1')
    plt.plot(Y, production_2, linewidth = 2, color = 'black', label = 'production2')
    plt.plot(Y, production_3, linewidth = 2, color = 'black', label = 'production3')
    plt.plot(Y, alpha*Y, linewidth = 2, color = 'red', label = 'degradation')
    
    
    plt.xlabel('Y')
    plt.ylabel('Rates')
    
    plt.legend()
    Dernière modification par JPL ; 12/10/2022 à 17h57. Motif: Ajout de la balise Code

  4. #4
    umfred

    Re : Python modélisation équation

    tes calculs vont donner des points, et tu n'utilises pas Y dans ces calculs. tu peux afficher tes courbes en utilisant X_low, X_medium et X_high
    tu veux 3 courbes ? une par X ?
    dans ta formule Y' = a*K^n/(K^n+X^n) - bY, l'ensemble a*K^n/(K^n+X^n) est donc constant selon le X ? (d'ailleurs, il y avait une erreur de parenthèse si je me fie au code)
    la partie -bY est manquante dans ton code.
    et tu sembles utiliser alpha pour ce que tu as appelé b et beta pour ce que tu as appelé a (ils ont la même valeur ici mais ça me semblerai plus logique que alpha soit le a et beta le b, non?)
    Sinon, en multipliant production_1 (2,3) par un vecteur de 1 de même dimension que Y, on va obtenir quelque chose de cohérent en terme de dimension
    Code:
    ## Code 
    
    ## Package importation
    import matplotlib.pyplot as plt
    import numpy as np
    
    ## Définition des variables
    beta = 1  # production rate
    alpha = 1 # degradation rate
    n=1
    
    K= beta/alpha
    
    X_low = 0.5
    X_medium = 1
    X_high = 1.5
    
    Y = np.arange(0,2,0.01) 
    production_1 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_low,n))
    production_2 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_medium,n))
    production_3 = beta * np.power(K,n) /(np.power(K,n) + np.power(X_high,n))
    
    Y1=production_1*np.ones(Y.size)-alpha*Y
    Y2=production_2*np.ones(Y.size)-alpha*Y
    Y3=production_3*np.ones(Y.size)-alpha*Y
    
    plt.plot(Y, Y1, linewidth = 2, color = 'black', label = 'production1')
    plt.plot(Y, Y2, linewidth = 2, color = 'black', label = 'production2')
    plt.plot(Y, Y3, linewidth = 2, color = 'black', label = 'production3')
    plt.plot(Y, alpha*Y, linewidth = 2, color = 'red', label = 'degradation')
    
    
    plt.xlabel('Y')
    plt.ylabel('Rates')
    
    plt.legend()
    plt.show() # si nécessaire
    Dernière modification par umfred ; 12/10/2022 à 18h39.

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

    Re : Python modélisation équation

    Oui c'est bien ce que je voulais une courbe pour chaque X effectivement.En fait j'ai 3 courbes représentant la production et 1 représentant la dégradation (et uniquement cette courbe dépend de Y).
    L'utilisation de np.ones m'a en effet permis de corriger mon problème merci beaucoup à vous !!!

    J'aurais du coup une autre question : Comment puis-je utiliser spicy.integrate, afin d'avoir une résolution d'équation pour chaque X (dont je possède les valeurs fixées : low,medium,high),et je voudrais ainsi avoir les trois courbes sur le même graphique.

    Voici le code que j'ai réalisé pour X_low (et que je voudrais ainsi uniformiser pour avoir avec X_medium,et X_high):
    J'ai au passage pour condition initiale y(0)= 0

    Code:
    from scipy.integrate import solve_ivp
    from scipy.integrate import odeint
    
    ## Valeurs des paramètres
    beta = 2
    K = 3.5 
    n = 1 
    alpha = 1.5 
    
    X_low = 0.5
    X_medium = 1
    X_high = 1.5
    
    t = np.arange(0,100,.1) 
    
    def f(t,y,b,K,n,X_low,a): return beta * np.power(K,n) /(np.power(K,n) + np.power(X_low,n)) - alpha*y
    
    sol = solve_ivp(f, [0, 100], [0.], args=[beta,K,n,X_low,alpha])
    #sol = solve_ivp(f, [0, 100], [0.], args=[alpha, mu], t_eval=t)
    #sol = solve_ivp(f, [0, 100], [0.], args=[alpha, mu], method='LSODA')


    Je pensais utiliser ce code mais cela ne fonctionne pas :


    Code:
    from scipy.integrate import solve_ivp
    from scipy.integrate import odeint
    
    ## Valeurs des paramètres
    beta = 2
    K = 3.5 
    n = 1 
    alpha = 1.5 
    
    X_low = 0.5
    X_medium = 1
    X_high = 1.5
    
    t = np.arange(0,100,.1) 
    
    def f(t,y,beta,K,n,X_low,alpha): return beta * np.power(K,n) /(np.power(K,n) + np.power(X_low,n)) - alpha*y,
                                                            beta * np.power(K,n) /(np.power(K,n) + np.power(X_medium,n)) - alpha*y
                                                            beta * np.power(K,n) /(np.power(K,n) + np.power(X_high,n)) - alpha*y
    
    sol = solve_ivp(f, [0, 100], [0.], args=[beta,K,n,X_low,X_medium,X_high,alpha])
    Dernière modification par JPL ; 14/10/2022 à 14h17. Motif: ajout de la balise Code (#) pour garder l’indentation

  7. #6
    umfred

    Re : Python modélisation équation

    pourquoi pas 3 lignes ? une pour chaque X ?
    Sinon ta fonction f ne passe pas en paramètre X_medium et X_high (pas d'erreur ici car ce sont des variables "globales", mais pas la bonne pratique)

  8. #7
    pm42

    Re : Python modélisation équation

    Juste pour dire : apprendre à utiliser les balises CODE aiderait à rendre le code lisible.

Discussions similaires

  1. Équation différentielle sur python
    Par HSbF6 dans le forum Programmation et langages, Algorithmique
    Réponses: 20
    Dernier message: 26/04/2022, 15h11
  2. résolution équation Python
    Par invite049950e2 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 12/01/2019, 13h53
  3. Python: résolution d'équation
    Par invite6a370218 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 20/05/2018, 19h27
  4. Modélisation 3D sous python
    Par invitea84e7dad dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 09/11/2017, 18h50
  5. Résolution d'équation différentielle sur python
    Par invite6c178e0f dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 11/06/2015, 23h08