Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Python, tracé de fonction

Posté par
alb1du29
04-06-17 à 16:11

Bonjour, voici mon code

import matplotlib.pyplot as plt
from math import*
x=[23.9,26.2,29.3,33.3,37.9,43.2,48.9,54.9,61,67.7,73.8,80.1,83.4,92.5,98.2,102.7,103,103.1,103.1,103.1]
y=[106.3,97.92,89.28,78.81,65.12,55.03,46.26,38.99,32.22,26.57,21.71,18.15,15.21,13.03,10.9,9.55,9.45,9.45,9.45,9.45]
plt.plot(x, y, color='g', linestyle='-',marker='o')
plt.ylabel('Resistance en Ohm')
plt.xlabel("Temperature (C)")
plt.show()

def f(x):
    return 37,936*exp(10,082/x)
    
X = np.arange(20, 105, 10000)
Y = [ f(x) for x in X ]
plt.plot(X, Y, color='g', linestyle='-',marker='o')
plt.show()


Je voudrai associer à un ensemble de point une fonction. Mon modèle est de la forme A*exp(B/T).  Et je voudrai ensuite afficher ma liste de point ainsi que le modèle sur le même graphique.
Mais lorsque je lance le programme Python me dit qu'il y a un problème au niveau de l'exponentielle (    return 37,936*exp(10,082/x)
                           ^
SyntaxError: invalid token)

De plus, je pense qu'il y aura un problème au niveau de l'affichage des deux courbes en même temps.

Quelqu'un pourrait m'aider ?
Merci d'avance

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 16:20

bonjour.

la virgule...

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 16:41

un conseil... utiliser une régression exponentielle pour trouver ton modèle.

Python, tracé de fonction

Posté par
alb1du29
re : Python, tracé de fonction 04-06-17 à 16:49

Merci beaucoup pour la virgule, ça me sauve!!!
Oui j'ai trouvé une modèle de la forme 37,936*exp(10,082/x).
Mais je n'arrive pas à afficher les deux en même temps, lorsque j'affiche ma fonction pour le modèle, il ne m'affiche qu'un point...

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 17:17


# module pour le systeme d'exploitation
import os

# module specifique pour le systeme
import sys

import numpy as np

import matplotlib.pyplot as plt

# effacement de l'ecran
os.system('cls')

x=[23.9,26.2,29.3,33.3,37.9,43.2,48.9,54.9,61,67.7,73.8,80.1,83.4,92.5,98.2,102.7,103,103.1,103.1,103.1]
y=[106.3,97.92,89.28,78.81,65.12,55.03,46.26,38.99,32.22,26.57,21.71,18.15,15.21,13.03,10.9,9.55,9.45,9.45,9.45,9.45]

T_MIN = 20.0
T_MAX = 105.0
T_NB = 100

T = np.linspace(T_MIN, T_MAX, T_NB)

# modele
M = 37.936 * np.exp(10.082 / T)

plt.plot(T, M, color = 'r', linestyle = '-')

plt.plot(x, y, color = 'g', linestyle = '-', marker = 'o')

plt.ylabel('Resistance en Ohm')
plt.xlabel("Temperature (C)")

# traces
plt.show()

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 17:19

2 courbes...

Python, tracé de fonction

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 18:04

petite modif...


# module pour le systeme d'exploitation
import os

# module specifique pour le systeme
import sys

import numpy as np

import matplotlib.pyplot as plt

# effacement de l'ecran
os.system('cls')

x = np.array([23.9,26.2,29.3,33.3,37.9,43.2,48.9,54.9,61,67.7,73.8,80.1,83.4,92.5,98.2,102.7,103,103.1,103.1,103.1])
y = np.array([106.3,97.92,89.28,78.81,65.12,55.03,46.26,38.99,32.22,26.57,21.71,18.15,15.21,13.03,10.9,9.55,9.45,9.45,9.45,9.45])

[A, B] = np.polyfit(x, np.log(y), 1)

T_MIN = 20.0
T_MAX = 105.0
T_NB = 100

T = np.linspace(T_MIN, T_MAX, T_NB)

# modele
M = np.exp(B) * np.exp(A * T)

plt.plot(T, M, color = 'r', linestyle = '-')

plt.plot(x, y, color = 'g', linestyle = '', marker = 'o')

plt.ylabel('Resistance en Ohm')
plt.xlabel("Temperature (C)")

# traces
plt.show()

Python, tracé de fonction

Posté par
alb1du29
re : Python, tracé de fonction 04-06-17 à 21:02

Oh merci beaucoup!!

Mais je ne comprends pas bien la différence entre vos deux messages : dans le second vous avez fait la régression linéaire avec Python ?
Pour ma part j'ai utilisé LatisPro qui m'a donné les deux valeurs que j'ai indiqué. Mais qu'importe le logiciel, le model devrait être le meme non ?

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 21:19

j'ai effectivement :

1/ transformé les listes x et y en array (cf. np.array)
2/ utilisé la librairie numpy  pour une régression

en principe, nous devrions avoir les mêmes résultats.

Ici, on a y = exp(5,346519) * exp(-0,030302 * t)

Posté par
bbomaths
re : Python, tracé de fonction 04-06-17 à 21:28

un conseil, utilisez les grilles :

import matplotlib.ticker as ticker
...

# axes
ax = plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(10))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(10))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(1))

# grille
plt.grid(True, which = "major", linestyle = 'solid', linewidth = 1, color = 'grey')

# traces
plt.show()

Posté par
alb1du29
re : Python, tracé de fonction 04-06-17 à 23:16

D'accord, merci beaucoup je vais essayer de travailler ce que vous m'avez donné!

Je voudrai savoir s'il était aussi possible de faire une régression linéaire en exp(1/x) (je dois vérifier un modèle de cette forme).
J'ai voulu remplacé [A, B] = np.polyfit(x, np.log(1/y), 1)  et M = np.exp(B) * np.exp(A * (1/T))
mais cela ne fonctionne pas...

Et nos 2 régressions linéaire (la mienne sur latispro et la votre sur python) sont finalement assez différentes ; la mienne est bien moins précise....

Posté par
bbomaths
re : Python, tracé de fonction 05-06-17 à 09:11

Bonjour.

Adaptation à vos données (TP sur CTN ?) avec utilisation du module scipy


#*******************************************************************************
# IMPORT ***********************************************************************
#*******************************************************************************

# module pour le systeme d'exploitation
import os

# module specifique pour le systeme
import sys

# module numpy
import numpy as np

# module scipy
from scipy.optimize import curve_fit

# module matplotlib pour le trace de courbe
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

#*******************************************************************************
# DONNEES MESUREES *************************************************************
#*******************************************************************************

# mesures de temperature en °C
t = np.array([ 23.9,  26.2,  29.3,  33.3,  37.9,
               43.2,  48.9,  54.9,  61.0,  67.7,
               73.8,  80.1,  83.4,  92.5,  98.2,
              102.7, 103.0, 103.1, 103.1, 103.1])

# mesures de resistance en ohms
r = np.array([106.30, 97.92, 89.28, 78.81, 65.12,
               55.03, 46.26, 38.99, 32.22, 26.57,
               21.71, 18.15, 15.21, 13.03, 10.90,
                9.55,  9.45,  9.45,  9.45,  9.45])

#*******************************************************************************
# DEF **************************************************************************
#*******************************************************************************

# modele
def fonction_modele(t, a, b) :

	# attention : passage en Kelvins
	return a * np.exp(b / (t + 273.15))

#*******************************************************************************
# MAIN *************************************************************************
#*******************************************************************************

# effacement de l'ecran
os.system('cls')
print "\n"

# recherche des coefficients du modele
popt, pcov = curve_fit(fonction_modele, t, r)

# definition de la plage des temperature en °C
T_MIN = 20.0
T_MAX = 110.0
T_NB = 100

# vecteur temperature sur l'axe des x
vec_T = np.linspace(T_MIN, T_MAX, T_NB)

# definition de la plage des resistances en ohms
R_MIN = 0.0
R_MAX = 120.0

# trace du modele
plt.plot(vec_T, fonction_modele(vec_T, *popt), color = 'b', linestyle = '-')

# trace des couples de mesures r = f(t)
plt.plot(t, r, color = 'g', linestyle = '', marker = 'o')

# X-label
X_XLABEL = r"${\bf Temp\'erature\ (\degree C)}$"

plt.xlabel(X_XLABEL)

# Y-label
Y_XLABEL = r"${\bf R\'esistance\ (\Omega)}$"

plt.ylabel(Y_XLABEL)

# plage des resistances sur l'axe Y
plt.ylim(R_MIN, R_MAX)

# axes
ax = plt.axes()
ax.xaxis.set_major_locator(ticker.MultipleLocator(10))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(10))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(1))

# grille
plt.grid(True, which = "major", linestyle = 'solid', linewidth = 1, color = 'grey')

# traces
plt.show()


Ce qui donne :
Python, tracé de fonction

Posté par
alb1du29
re : Python, tracé de fonction 05-06-17 à 16:19

Oui c'est tout à fait ça, c'est pour des CTN

En tout cas, merci infiniment, j'ai pu obtenir l'équation R=1,6.10^{-3} \times \exp(\dfrac{3,3.10^{3}}{T})
Encore merci!

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !