Examen 2020
Examen 2020
Examen 2020
1 Exercice 1 : (7 points)
Question 1 (0.5 point) : Importer la bibliothèque python destinée à manipuler des matrices ou
des tableaux multidimensionnels ainsi que des fonctions mathématiques opérant sur ces derniers.
Donner l’instruction nécessaire.
Question 2 (1 point) : On considère une fonction f tabulée, définie par la connaissance des points
( xi , yi = f ( xi ))0≤i≤8 illustrés sur le tableau ci-dessous :
i 0 1 2 3 4 5 6 7 8
−3 −1 1 3
xi −2 −1 0 1 2
2 2 2 2
1 1 1 1 1 1 1 1
yi = 1
17 10 5 2 2 5 10 17
f ( xi )
Créer deux listes X et Y composées, respectivement, des ( xi )0≤i≤8 et (yi )0≤i≤8 . Donner les
instructions nécessaires.
In [2]: X=np.array([-2,-3/2,-1,-1/2,0,1/2,1,3/2,2])
Y=np.array([1/17,1/10,1/5,1/2,1,1/2,1/5,1/10,1/17])
Question 3 (1.5 point) : On souhaite interpoler les points ( xi , yi )0≤i≤8 de la question 2 par la méth-
ode de Lagrange. Pour ce faire, commencez par créer une fonction Interpolation(t,X,Y) éval-
uant le polynôme d’interpolation P, exprimé dans la base de polynômes de Lagrange et associé
aux points d’abscisses X = ( xi )0≤i≤n et d’ordonnées Y = (yi )0≤i≤n , en une liste de points t.
L’expression de P est rappelée ci-dessous :
1
n
P(t) = ∑ y i L i ( t ), t ∈ R, n ∈ N∗ ,
i =0
n t − xj
où Li (t) = ∏ xi − x j désigne le polynôme de Lagrange associé au point xi , 0 ≤ i ≤ n.
j =0
j 6 =i
def Interpolation_Lagrange(t,x,y):
n=len(x)
P=np.zeros((len(t)))
for i in np.arange(0,n):
P+=y[i]*Lagrange(t,i,x)
return P
#####################################################
def interpolation_lagrange(t,x,y):
n=len(x)
P=np.zeros((len(t)))
for i in np.arange(0,n):
L=1
for j in np.arange(0,n):
if j!=i:
L*=(t-x[j])/(x[i]-x[j])
P+=y[i]*L
return P
Question 4 (2 points) :
1. Considérer 100 points répartis uniformément sur [−2, 2] et stokés dans une variable t. Don-
ner l’instruction nécessaire.
2. Importer la bibliothèque python destinée à tracer et visualiser des données sous formes de
graphiques. Donner l’instruction nécessaire.
3. Sur une même figure, représenter le polynôme interpolant les points de la question 2 et
évalué en t, en bleu avec une ligne continue d’épaisseur égal à 2, et les points d’interpolation
en utilisant des ’markers’ en étoiles rouges de tailles égales à 12. Donner les instructions
nécessaires sans reproduire les figures.
2
In [4]: t=np.linspace(-2,2,100)
import matplotlib.pyplot as plt
P=Interpolation_Lagrange(t,X,Y)
plt.figure(figsize=(20,10))
plt.plot(t,P,'b-',X,Y,'r*',linewidth=2,markersize=12)
Out[4]: [<matplotlib.lines.Line2D at 0x7f6d898>,
<matplotlib.lines.Line2D at 0x7f6d9e8>]
1
Question 5 (0.5 point) : Soit la fonction f définie sur [−2, 2] par f (t) = .
1 + 4t2
Ecrire la fonction f .
Question 6 (1.5 points) : Sachant maintenant que les données représentées dans le tableau de la
question 2, sont issues de la fonction f de la question 5, rajouter à la figure de la question 4, la
représentation graphique de f évaluée en t avec une ligne discontinue en vert et d’épaisseur 2.
Donner les instructions nécessaires sans reproduire les figures. Observer ensuite intérpréter le
résultat en terme de qualité de l’interpolation. Donner une explication du résultat obtenu.
In [6]: plt.figure(figsize=(20,10))
plt.plot(t,P,'b-',X,Y,'r*',t,f(t),'g--',linewidth=2,markersize=12)
Out[6]: [<matplotlib.lines.Line2D at 0x87c7240>,
<matplotlib.lines.Line2D at 0x87c7390>,
<matplotlib.lines.Line2D at 0x87c7710>]
3
2 Exercice 2 : (6 points)
En se basant sur la représentation graphique de f sur l’intervalle [1, 2], et en justifant votre
réponse :
L’equation n’admet pas de racines car d’après la courbe de f , la fonction f est strictement
0
positive.\ La fonction f est croissante, par conséquent, f est positive.
4
In [8]: def puissance(n):
L=[]
for i in range(n):
L.append(2**i)
return L
Question 3 (2 points) : Corriger le code suivant pour qu’il affiche la matrice A = ( ai,j )1≤i,j≤n
d’ordre n ∈ N∗ telle que :
ai,j = i + j, ∀1 ≤ i, j ≤ n.
Utiliser une flèche −→ pour indiquer une indentation (tabulation).
In [ ]: def matrice(n):
A=U=np.ones((n,n))
for i in np.arange(n):
for j in np.arange(n):
A[i,j]=i+j+2
return A
In [ ]: matrice(3)
3 Exercice 3 : (7 points)
Sous certaines conditions, la concentration du glucose G dans le sang, exprimée en gramme par
litre (g/l), satisfait l’Equation Différentille Ordinaire (EDO) (∗) suivante :
5
L’objectif de cet exercice est d’observer, durant une période de 3 heures, l’évolution de la con-
centration du glucose dans le sang d’un patient admettant les paramètres suivants :
r = 0.1 g/mn,
K = 0.05,
G (0) = 3 g/l.
Pour observer l’évolution de G de ce patient, nous passons par une résolution numérique du
problème de Cauchy (2) par la méthode de Runge Kutta d’ordre 4 (RK4) dont le code est rappelé
dans l’annexe.
(∗) L’EDO (1) est donnée en négligeant certaines contraintes liées à la physiologie du patient
et à sa consommation du glocose.
Question 1 (1.5 point) : En écrivant l’EDO (2) sous la forme classique d’un problème de Cauchy :
G 0 = f (t, G ), G (t0 ) = G0 , t ∈ [ t0 , t0 + T ],
In [ ]: f=lambda t, G: 0.1-0.05*G
In [ ]: tt=np.linspace(0,180,61)
tt=np.arange(0,181,3)
n=60
In [ ]: tt
6
Question 4 (2 points) : Appliquer la méthode RK4 (voir annexe) pour approcher la concentration
du gluose dans le sang de ce patient aux instants : t = 60 mn, t = 120 mn, e t = 180mn. Noter
G_app la sortie de la fonction RK4. Donner les instructions nécessaires et les approximations af-
fichées.
Question 5 (1 point) : Nous donnons maintenant la solution exacte du problème de Cauchy (2) :
In [ ]: G=lambda t: 2+np.exp(-0.05*t)
In [ ]:
4 Annexe
Soit le problème de Cauchy suivant:
x 0 = f (t, x ), x ( t0 ) = x0 , t ∈ [ t0 , t0 + T ]
La fonction RK4(f,x0,t0,T,N) prend en paramètres la fonction f , la valeur initiale x0 , la valeur
initiale de la subdivision t0 , la largeur de l’intervalle [t0 , t0 + T ], T, sur lequel x est définie, et
N le nombre de sous-intervalles de [t0 , t0 + T ] . Cette fonction retourner la liste des valeurs
[ x0 , x1 , ..., x N ] calculées par le schéma de Runge Kutta d’ordre 4.
7
p3 = f( t0+k*h + h / 2, x[k] + h * p2 / 2)
p4 = f(t0+(k+1)*h,x[k] + h * p3)
x.append(x[k] + h * (p1+2*p2+2*p3+p4) / 6)
return x
In [ ]: