CPGE TSI Lycée P.-P. Riquet St-Orens de Gameville - 1 -
Informatique
TP4 Chapitre 3 : FONCTIONS
APPLICATION AU CALCUL APPROCHE D'UNE INTEGRALE SUR UN SEGMENT
Nous avons déjà rencontré des fonctions, par exemple la fonction print(), la fonction abs(), des fonctions du module math
comme sqrt(). Nous pouvons aussi définir et utiliser nos propres fonctions.
I/ LES FONCTIONS EN PYTHON
1/ Définition d'une fonction
Fonction NomDeLaFonction(paramètres formels) se traduit par : def Fonction(parametres formels):
Début sequence
Séquence return resultat
Retourne résultat
Fin
Le return est facultatif. En fait, s'il est absent, la fonction retourne le résultat None.
2/ Exemple
On étudie le mouvement vertical d’une balle lancée en l’air. La position verticale de la balle à l’instant t est donnée par y(t) = v0.t
½.g.t2, où v0 est la vitesse initiale et g l’accélération due à la gravité (environ 9,81). finir dans l'éditeur une fonction position par :
def position(v0, t):
return v0*t - 0.5 * 9.81 * t**2
Faire F5, puis tester la fonction en l'appelant dans la console pour : v0 = 10 m/s et t = 1s v0 = 20 m/s et t = 2s
Position de la balle ?
Tester dans la console :
>>> vit_init = 10 # Comment s'appellent vit_init et instant ?
>>> instant = 1
>>> pos1 = position(vit_init, instant) # A bien comprendre ; pos1 prend pour valeur
>>> print(pos1) # le résultat retourné par la fonction
>>> pos2 = position(2*vit_init, 2*instant)
>>> print(pos2)
Rq importante : Il peut y avoir plusieurs return dans une fonction. Le 1er rencontré termine la fonction et rend la main au
programme appelant.
Si le programme appelant (ici l'instruction position(10, 1) par exemple) n'a pas besoin du résultat produit en sortie de la
fonction, on peut omettre le return et faire simplement un affichage :
def position(v0, t):
print(v0*t - 0.5 * 9.81 * t**2)
3/ Documentation d'une fonction
Toute fonction doit impérativement être documentée : on doit spécifier ce qu'elle fait, ainsi que la signification et le type des
paramètres formels en entrée.
Python propose un moyen de rédiger avec les triples guillemets une documentation facilement accessible :
Saisir après la ligne de définition (def) de la fonction et en indentant :
""" Retourne la position à l'instant t d'une balle lancée en l'air à la vitesse
initiale v0.
Paramètres : t : Réel ; v0 : Réel """
Faire F5, puis taper dans la console help(position). On voit que la documentation est ainsi disponible.
Encore plus fort : saisir dans la console position( et examiner l'inspecteur d'objets. Conclusion ?
4/ Un paramètre formel en entrée peut être de type quelconque
Reprenons la recherche du maximum dans une liste non vide de nombres. Elle peut être réalisée par une fonction :
Entrées
Sorties
CPGE TSI Lycée P.-P. Riquet St-Orens de Gameville - 2 -
Informatique
h
def maxi(L): # Le paramètre formel est une liste L
m = L[0]
for i in L:
if m < i: m = i
return m
Saisir cette fonction, puis la tester dans la console avec différentes listes L1 de 20 entiers entre 0 et 99 créées avec :
L1 = sample(range(100), 20) # Importer le module random avec from random import *
5/ La portée des variables
On distingue les variables "locales à une fonction" des variables "globales".
Les règles sont les suivantes :
dans le corps d'une fonction f, une variable x est par défaut locale si on l'affecte à une valeur (avec un "=" par ex.) ; on ne peut
alors pas y accéder en dehors de la fonction ;
cette variable est globale si elle n'est pas affectée à une valeur dans la fonction ; on peut alors y accéder de partout ;
on peut aussi rendre globale une variable affectée à l'intérieur d'une fonction avec le mot-clé global (à éviter).
Pour comprendre la portée des variables, saisir à la suite de la fonction maxi(L) précédente :
x = 42
def f():
return x
def g(y):
print(y)
y = 3
print(y)
def h():
global x
x = 17
return x
II/ CALCUL APPROCHE D'UNE INTEGRALE SUR UN SEGMENT :
METHODES D'INTEGRATION NUMERIQUE DES RECTANGLES ET DES TRAPEZES
1/ Présentation des méthodes
En analyse numérique, il existe une vaste famille d’algorithmes dont le but principal est d’estimer la valeur numérique de
l’intégrale d’une fonction f(x) continue sur un domaine [a; b], soit
b
af(x).dx
.
Ces techniques procèdent en trois phases distinctes :
1. Décomposition du domaine en intervalles.
2. Intégration approchée de la fonction sur chaque intervalle, par calcul d'une aire sous f(x).
3. Sommation des résultats numériques ainsi obtenus.
On commence donc par partager [a; b] en n intervalles d’amplitude
b - a
h = n
. Ce paramètre h est appelé le "pas".
Une 1ère méthode consiste à approximer l'aire sous la courbe f(x) par
une série de rectangles comme sur la figure ci-contre :
L'aire du 1er rectangle est h . f(a) ; l'aire du 2nd est h . f(a+h) ; l'aire du
3ème est h . f(a+2.h) ; etc.
La somme des aires permet alors d'écrire :
n-1
b
ai=0
f(x).dx = h . f(a + i.h)
C'est la méthode des rectangles.
Tester dans la console et justifier le résultat par la portée des variables :
>>> m Résultat : car …
>>> x Résultat : car …
>>> f() Résultat : car …
>>> g(8) sultat : car …
>>> y Résultat : car …
>>> h() Résultat : car …
>>> x Résultat : car …
CPGE TSI Lycée P.-P. Riquet St-Orens de Gameville - 3 -
Informatique
Evidemment, on comprend bien que :
- le résultat obtenu sera un minorant de l'intégrale exacte si f croît, un majorant si f décroît ;
- le calcul sera tout de même d'autant plus exact que h sera petit, donc que n sera grand.
L'algorithme correspondant (à connaître) est le suivant :
Algorithme Intégration_Rectangles
Variables
a, b, n, h : Réel
res : Réel
i : Entier
Début
Ecrire ("Donner les valeurs de l'intervalle d'intégration [a ; b] et le nombre de pas n :")
Lire (a, b, n)
h ← (b – a)/n
res ← 0
Pour i ← 0 Jusqu'à i = n-1 Faire
res ← res + h . f(a + i.h)
FinPour
Ecrire("Le résultat est :", res)
Fin
Rq : - un autre choix est de calculer h . f(a+h) pour le 1er rectangle, h . f(a+2.h) pour le 2nd, etc. On obtient alors un majorant pour f
croissante, qui est
n-1
i=0
h . f(a + (i+1).h)
.
- une dernière variante donne de meilleurs résultats en se servant du point milieu de chaque intervalle : l'aire est h . f(a+h/2) pour le
1er rectangle, h . f(a+3.h/2) pour le 2nd, etc. On calcule alors
.
Une 2ème méthode consiste à tracer des segments entre les points f(a+i.h).
L'intégrale de chaque segment correspond alors à l'aire d'un trapèze :
L'aire du 1er trapèze est
f(a) + f(a+h)
h . 2
; l'aire du 2nd est
f(a+h) + f(a+2.h)
h . 2
; l'aire du 3ème est
f(a+2.h) + f(a+3.h)
h . 2
; etc.
La somme des aires permet alors d'écrire :
n-1
b
ai=0
f(a + i.h)+f(a + (i+1).h)
f(x).dx = h . 2
C'est la méthode des trapèzes.
L'algorithme correspondant est le suivant, avec les mêmes variables que pour les rectangles :
Algorithme Intégration_Trapèzes
Début
Ecrire ("Donner les valeurs de l'intervalle d'intégration [a ; b] et le nombre de pas n :")
Lire (a, b, n)
h ← (b – a)/n
res ← 0
Pour i ← 0 Jusqu'à i = n-1 Faire
res ← res + h/2 . ( f(a + i.h) + f(a + (i+1).h) )
FinPour
Ecrire("Le résultat est :", res)
Fin
La fonction f est bien entendu définie auparavant :
Fonction f(x) # Calcule et renvoie f(x)
# x : Réel
Début
Retourne … # Expression de la fonction
Fin
CPGE TSI Lycée P.-P. Riquet St-Orens de Gameville - 4 -
Informatique
2/ Application : calcul de la quantité d'électricité produite par une batterie au démarrage d'un moteur
Lors du démarrage d'un moteur à courant continu, le courant qu'il consomme présente une pointe importante car il n'est limité que
par la résistance interne du moteur, qui est faible. Au fur et à mesure de son accélération, le courant consommé chute pour se
stabiliser lorsque la vitesse a atteint un régime permanent.
Dans un système embarqué, ce phénomène doit être quantifié pour pourvoir dimensionner la batterie d'alimentation. Celle-ci
peut en effet fournir un certain courant pendant un certain temps ; c'est sa capacité, exprimée en A.s ou A.h.
Sur un système du laboratoire, on a relevé le courant Ce comportement peut se
de démarrage suivant : modéliser par la fonction :
f(x) = 200 . x . e-10.x
avec x le temps en secondes.
Son tracé est en effet :
Ce modèle conserve sa
validité au-delà de t = 0,5 s, si
l'on considère que le courant
n'est plus seulement au
démarrage.
La quantité d'électricité Qdemar fournie par la batterie au démarrage est la surface sous la courbe du courant. Elle correspond en
effet à un produit courant x temps, et s'exprime en A.s. On peut donc la calculer avec Qdemar =
0,9
0f(t).dt
Commencer par programmer la fonction f(t).
Programmer ensuite la fonction int_rect(f, a, b, n) en suivant l'algorithme de la page précédente pour l'intégration par la méthode
des rectangles (sans Ecrire() et Lire() car a, b et n seront passés en paramètres lors de l'appel).
Programmer la fonction Qdemar(a, b, n) appelant int_rect et affichant la quantité d'électricité consommée en A.s. Tester l'appel.
Programmer la fonction primitive(t) = 2 . e-10.t 20 . t . e-10.t permettant de tester votre programme en donnant le résultat exact du
calcul d'intégrale avec primitive(0.9) primitive(0).
Modifier n. Que constate-t-on ?
Rajouter la fonction int_trap(f, a, b, n) en suivant l'algorithme de la page précédente pour l'intégration par la méthode des trapèzes.
Rajouter l'appel à int_trap dans la fonction Qdemar, afin de pouvoir comparer les résultats des 2 méthodes.
Conclusion : quelle est la méthode la plus précise ?
Que doit valoir n pour que cette méthode donne un résultat approché avec une erreur inférieure à 10-3 A.s ?
Pour ceux qui ont le temps :
Rajouter une fonction qui trouve n pour garantir une erreur < 10-5, dans chacune des 2 méthodes.
Tracer f(t) avec l’instruction plot(T,Y), après avoir constitué la liste T des instants et la liste Y des valeurs de f(t). On peut par exemple
définir la fonction :
def tracef():
T, Y = [], []
for i in range(100):
T.append(i/100)
Y.append(f(i/100))
plot(T, Y)
Rajouter la méthode des rectangles par point milieu.
Calibres:
1A/div
0,1s/div
Calculer le temps mis par le processeur pour faire le calcul
pour chaque méthode, avec :
from time import *
t1 = clock()
res = int_rect(f, a, b, n) # Par ex.
t2 = clock()
print(t2-t1)
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !