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 :

Modélisation fonction exponentielle


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut Modélisation fonction exponentielle
    pour modéliser une fonction polynomiale on peut utiliser la fonction polyfit

    comment peut-on faire pour modéliser une fonction exponentielle ?

    je précise une modélisation à partir de valeurs contenues dans une liste

    merci pour votre aide

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

    Si vous partez d'une liste de points, vous aurez un polynome.... même si cette liste de points sort d'une exponentielle (qui peut être approchée par un polynome de Lagrange).

    notez que polyfit a été remplacé par polynomial dans les versions récentes.... et que c'est à vous de choisir la méthode à utiliser (en fonction des données et du domaine).

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    je vous copie le programme que j'utilise pour une régression linéaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    t=np.array(t)
    T=np.array(T)
    coeff=np.polyfit(t, T,1)
    Tmodel = coeff[0]*t+coeff[1]
    print(T={0:.1f}'.format(coeff[0]),'x t+{0:.1f}'.format(coeff[1]))
    je récupère ainsi une équation du type y = ax + b.

    je veux savoir s'il est possible de faire (et comment) la même chose avec des valeurs qui suivent une fct exponentielle du type y = A.exp(k x) + B (bon le plus B je peux m'en passer si besoin)

    le but est de récupérer l'équation de la modélisation

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par cmaurat Voir le message
    le but est de récupérer l'équation de la modélisation
    Si vos points sont alignés, le "modèle" sera une droite de la forme y = ax + b.
    Mais si ce n'est pas le cas, forcer polyfit à retourner un polynôme de degré 1 est discutable.

    Citation Envoyé par cmaurat Voir le message
    je veux savoir s'il est possible de faire (et comment) la même chose avec des valeurs qui suivent une fct exponentielle du type y = A.exp(k x) + B (bon le plus B je peux m'en passer si besoin)
    A priori, vous ne savez pas quelle fonction a permis de générer vos points... puisque le but est d'en faire un approximation via un polynôme qui va passer par l'ensemble des points.

    edit: prenez un nuage de points, le polynome de degré 1 retourné par polyfit sera une extrapolation linéaire... qui pourra être utilisé comme "modèle" modulo une erreur plus ou moins importante. La machine se contente de faire les calculs que vous lui demandez, à vous d'être assez intelligent pour évaluer la pertinence de ce qu'elle sort comme "modèle".

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

  5. #5
    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
    Avec scipy.optimize.curve_fit, vous pouvez étant donné un nuage de point et une fonction que vous avez vous même défini, trouver les meilleurs paramètres de cette fonction pour qu'elle soit le plus proche possible de votre nuage de points. Vous pouvez donc en particulier lui demander un "fit" avec une fonction exponentielle.

    Après comme dit précédemment, si vos données n'ont pas vraiment une forme exponentielle alors cette méthode va fournir un résultat, mais résultat qui sera très peu pertinent.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    ok je m'approche de ce que je veux faire mais dans ce lien si j'ai bien compris (car je n'ai pas compris toutes les lignes) ils ont une idée de ce que qu'ils vont obtenir et les coefficients sont saisis (2.5 1.3 et 0.5) puis optimisés par Python

    moi j'ai une série de valeur et je ne connais pas l'équation, je sais juste qu'elle est de la forme y = a x exp(bx) + c.

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = np.array([1, 2, 3, 4])
    y = np.array([34,223,1619,11929])
    et je veux sortir l'équation modèle de ça sous la forme y = a x exp(bx) + c et que Python me calcule les coeff a ; b et c que je ne connais pas d'avance

    ici par exemple c'est de la forme y = 4 x exp(2x) +5.

    les valeurs x et y sont bidons la vraie situation c'est un TP de physique où je mesure la température de refroidissement de l'eau en fonction du temps (loi phénoménologique de Newton)

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 245
    Par défaut
    Hello,
    Citation Envoyé par cmaurat Voir le message
    et je veux sortir l'équation modèle de ça sous la forme y = a x exp(bx) + c et que Python me calcule les coeff a ; b et c que je ne connais pas d'avance

    ici par exemple c'est de la forme y = 4 x exp(2x) +5.

    les valeurs x et y sont bidons la vraie situation c'est un TP de physique où je mesure la température de refroidissement de l'eau en fonction du temps (loi phénoménologique de Newton)
    Voici comment par exemple utiliser curve_fit dans ton cas de figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import numpy as np
    from scipy.optimize import curve_fit
    ###définition de la fonction à trouver
    def fonc(x, a, b, c):
        return a * np.exp(b * x) + c
    ###valeurs expérimentales
    valeurs_x = [1, 2, 3, 4]
    valeurs_y = [34,223,1619,11929]
     
    ###recherche des valeurs optimales et de la covariance
    popt,pcov = curve_fit(fonc, valeurs_x, valeurs_y)
    print(popt)
    print(pcov)
    Résultat :
    [4.00806722 1.99951261 4.39047525]
    [[ 3.26662429e-08 -2.01155168e-09 -1.43470119e-06]
    [-2.01155168e-09 1.23980694e-10 8.68693128e-08]
    [-1.43470119e-06 8.68693128e-08 1.27109443e-04]]
    Vérification pour 2 par exemple :
    In[1]: (4.00806722*np.exp(2* 1.99951261)) + 4.39047525
    Out[1]: 223.01032051810336
    Rappel de l'équation de la loi de refroidissement de Newton :
    T(t) = Ta + (T(0) − Ta).exp( − k.t)
    La loi de refroidissement de Newton stipule que le taux de perte de chaleur d'un corps est directement proportionnel à la différence de température entre le corps et son environnement.


    Ami calmant, J.P

  8. #8
    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 cmaurat Voir le message
    ok je m'approche de ce que je veux faire mais dans ce lien si j'ai bien compris (car je n'ai pas compris toutes les lignes) ils ont une idée de ce que qu'ils vont obtenir et les coefficients sont saisis (2.5 1.3 et 0.5) puis optimisés par Python

    Le code d'exemple de la doc est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    xdata = np.linspace(0, 4, 50)
    y = func(xdata, 2.5, 1.3, 0.5)
    rng = np.random.default_rng()
    y_noise = 0.2 * rng.normal(size=xdata.size)
    ydata = y + y_noise
    plt.plot(xdata, ydata, 'b-', label='data')
    popt, pcov = curve_fit(func, xdata, ydata)
    plt.plot(xdata, func(xdata, *popt), 'r-', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
    Donc non, au moment où curve_fit est appelé, ils cette méthode n'a aucune idée des paramètres. Là on se donne des paramètres juste pour générer des données, que l'on bruite pour avoir un ydata, et puis après étant donné ce ydata, en oubliant tous le reste, on se demande si on est capable de retrouver les paramètres (ou presque à peu de chose près) que l'on s'était donné au départ pour générer les données. C'est une manière maligne de vérifier que l'algo fonctionne.
    Si vous avez directement ydata, bon et bien très bien les 3 dernières lignes de code vous suffisent, et ça répond pleinement à votre besoin !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    ok cela a l'air de fonctionner, je vais tester avec des valeurs extraites de la carte arduino; je vous dirai ce que cela donne

    merci

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    bon la modélisation n'a pas marché avec mes mesures expérimentales, le programme donnait 1 pour chaque paramètre

    je retesterai en important un fichier csv de mesures car un peu long de tester en direct

    mais merci pour votre aide la modélisation avec la liste saisie manuellement dans le programme fonctionne

  11. #11
    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
    Si ca fonctionne lorsque vous rentrez les valeurs à la main, c'est que la partie optimisation des paramètres de la fonction exponentielle fonctionne. Donc si avec le csv ça ne marche pas, c'est que vous avez un souci en amont. Ca peut être la structure de vos données, leur type, etc .... Faites des print pour vous rendre compte de ce qu'il y a dans les variables de votre programme.

Discussions similaires

  1. Modéliser une fonction exponentielle
    Par Kevin9193 dans le forum R
    Réponses: 0
    Dernier message: 08/07/2021, 17h36
  2. [Modélisation] Fonction Valide si
    Par TonyRc dans le forum Modélisation
    Réponses: 2
    Dernier message: 28/03/2008, 10h19
  3. Fonction exponentiel
    Par virtuadrack dans le forum C
    Réponses: 4
    Dernier message: 26/03/2007, 02h24
  4. Réponses: 5
    Dernier message: 28/01/2007, 15h12
  5. VBA excel, fonction exponentiel
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/09/2006, 10h33

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