Академический Документы
Профессиональный Документы
Культура Документы
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 75 L’informatique en classes préparatoires (Samir ANTER) 76
Partons d’une fonction dérivable f :[a, b] → ° et d’un point u0 ∈[a, b].On appelle
(u1 , 0) l’intersection de la tangente au graphe de f en (u0 , f (u0 )) avec l’axe des abscisses. Si
u1 ∈[a, b] alors on recommence l’opération avec la tangente au point d’abscisse u1 . Ce
processus conduit à la définition d’une suite récurrente :
f (un )
u0 ∈ [a,b]( f 0) et un +1 = un −
f '(un )
L’hypothèse fconvexe signifie exactement que pour tout x ', x dans [a, b] la sécante Justification
entre ( x, f ( x)) et ( x ', f ( x ')) est au-dessus du graphe de f. La tangente au point d’abscisse un a pour équation : y = f '(un )( x − un ) + f (un ).Donc le
Justification point (un +1 , 0) appartenant à la tangente (et à l’axe des abscisses) vérifiant ainsi
L’équation de la droite passant par les deux points A = (a, f (a)) et B = (b, f (b)) est f (un )
0 = f '(un )(un+1 − un ) + f (un ) . D’où un +1 = un −
f (b) − f (a) f '(un )
y = ( x − a) + f (a) .
b−a Questions
Cette droite coupe l’axe des abscisses en ( a ', 0) qui vérifie donc 1. Écrivez la fonction newton( f , g , u0 , epsilon) permettant de retourner la valeur de am
f (b) − f (a) b−a représentant la valeur approximative de la solution de l’équation f ( x) = 0 ou
0 = (a '− a) + f (a) ainsi a' = a − f (a )
b−a f (b) − f (a) g ( x) = f '( x).
2. Écrivez un programme de test pour f ( x) = sin( x), u 0 = 4 et epsilon = 10 −4
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 77 L’informatique en classes préparatoires (Samir ANTER) 78
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 79 L’informatique en classes préparatoires (Samir ANTER) 80
Cette formule approxime mieux la dérivé pour une même valeur de h ∈ ]0,1[ , car 1. Méthode des rectangles
l’erreur est ici en o( h ²) et non plus en o(h) . La méthode des rectangles consiste à approximer la fonction f par une fonction en
Voici le code en python : b−a
escalier. On considère un entier n et un pas de subdivision . Pour tout entier k de [0,n],
n
def derive2(f,x,h) :
b−a
on pose ak = a + k . Sur l’intervalle [ak , ak +1 ] , on approxime f par la fonction constante
return (f(x+h)-f(x-h))/(2*h) n
⎛ a + ak +1 ⎞
Exemple : égale à f ⎜ k ⎟.
⎝ 2 ⎠
import matplotlib.pyplot as plt
import numpy as np
def derive1(f,x,h) :
return (f(x+h)-f(x))/h
def derive2(f,x,h) :
return (f(x+h)-f(x-h))/(2*h)
On prend, comme valeur approchée de l’intégrale de f sur [a,b], l’intégrale de la
fonction en escalier ainsi construite, c’est-à-dire la somme des aires des rectangles. Ainsi :
def f(x):
b b − a n −1 ⎛ b−a b−a ⎞
return np.cos(x)
∫a f ( x)dx ; ∑f
n k =0
⎜a +
⎝ 2n
+k
n ⎠
⎟
def g(x):
return -np.sin(x) Une implémentation en python est comme suit :
h=0.5 def rectangle(f,a,b,n) :
X=np.arange(0,5,0.1) pas=(b-a)/n
Y=[g(x) for x in X] s=0
DY1=[derive1(f,x,h) for x in X] for k in range(n) :
DY2=[derive2(f,x,h) for x in X] s=s+f(a+(1/2+k)*pas)
return s*pas
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 81 L’informatique en classes préparatoires (Samir ANTER) 82
Exemple : b b − a ⎛ f (a ) + f (b) n −1 ⎞
import matplotlib.pyplot as plt ∫a f ( x)dx ; ⎜ + ∑ f (ak ) ⎟
import numpy as np n ⎜⎝ 2 k =1
⎟
⎠
#import random as rand
import math
def f(x):
return np.sin(x)
def p(x):
return -np.cos(x)
def rectangle(f,a,b,n) :
pas=(b-a)/n
s=0 Ainsi en python on obtient :
for k in range(n) :
def trapeze(f,a,b,n) :
s=s+f(a+(1/2+k)*pas)
return s*pas pas=(b-a)/n
s=0
n=10
N=100 for k in range(n) :
A=np.linspace(-5,5,N)#np.arange(-3,3,0.1) s=s+f(a+k*pas)
B=np.linspace(-1,1,N)#np.arange(-4,2,0.1)
X=[i for i in range(len(A))] return pas*(((f(a)+f(b))/2)+s)
Y1=[] Exemple :
Y2=[]
import matplotlib.pyplot as plt
import numpy as np
for i in range(len(A)):
import random as rand
Y1.append(p(B[i])-p(A[i]))
import math
Y2.append(rectangle(f,A[i],B[i],n))
def f(x):
return np.sin(x)
plt.plot(X,Y1,'g')
def p(x):
plt.plot(X,Y2,'bo')
return -np.cos(x)
def trapeze(f,a,b,n) :
plt.legend(("int exact","rectangle"),loc=2)
pas=(b-a)/n
plt.title("Exemple d'integration de sin(x)")
s=0
plt.show()
for k in range(n) :
2. Méthode des trapèzes s=s+f(a+k*pas)
return pas*(((f(a)+f(b))/2)+s)
La méthode des trapèzes consiste à approximer la fonction f par une fonction continue n=100
affine par morceaux. Ceux-ci coïncident avec la fonction f aux points de la subdivision(figure N=100
A=np.linspace(-5,5,N)#np.arange(-3,3,0.1)
ci-dessous).
B=np.linspace(-1,1,N)#np.arange(-4,2,0.1)
b−a X=[i for i in range(len(A))]
En notant ak = a + k les points de la subdivision du segment [a,b], l’aire de chaque Y1=[]
n Y2=[]
b − a f (ak ) + f (ak +1) for i in range(len(A)):
trapèze est égale à . Ainsi :
n 2 Y1.append(p(B[i])-p(A[i]))
Y2.append(trapeze(f,A[i],B[i],n))
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 83 L’informatique en classes préparatoires (Samir ANTER) 84
plt.plot(X,Y1,'g') plt.plot(X,Y1,'g')
plt.plot(X,Y2,'bo') plt.plot(X,Y2,'bo')
plt.plot(X,Y3,'r-')
plt.legend(("pint exact","trapeze"),loc=2)
plt.title("Exemple integration sin(x)") plt.legend(("p","rectangle","trapeze"),loc=2)
plt.show() plt.title("comparaison entre les deux méthodes pour f(x)= sin(x)")
plt.show()
3. Comparaison entre la méthodes des trapèzes et la méthodes des réctangles On remarque que, pour la même valeur de n, la méthode des réctangles donne de bons
résultat que la méthodes des trapèzes.
Dans cette partie, nous allons comparer les deux méthodes. Pour ce faire nous allons
considérer la même valeur n et on trace les courbes pour les deux méthodes. Résolution approchée d'une équation différentielle
Exemple : Les équations différentielles modélisent de nombreux problèmes physiques (la chute
import matplotlib.pyplot as plt d'un corps, la trajectoire d'un satellite, la propagation d'une épidémie, la cinétique chimique,
import numpy as np etc). Dans de rares cas on est capable de trouver une solution analytique mais le plus souvent
import random as rand on utilisera des techniques numériques afin de s'approcher de la solution. Les problèmes
import math deviennent rapidement complexes. Les méthodes d'analyse numérique permettront
def f(x):
d'approcher les solutions réelles sans toutefois les atteindre.
return np.sin(x)
def p(x):
return -np.cos(x) Soit le système suivant :
⎧ y '(t ) = f (t , y (t )) ∀t ∈ [t0 , t0 + T ]
def rectangle(f,a,b,n) : ⎨
pas=(b-a)/n ⎩ y (t0 ) = y0 avec y∈R
s=0 La recherche des solutions d'un tel système d'équations s'appelle
for k in range(n) : • résoudre un problème de Cauchy.
s=s+f(a+(1/2+k)*pas) • f est de classe C1 sur un intervalle donné. C'est d'ailleurs la condition nécessaire
return s*pas afin que les méthodes numériques utilisées puissent donner une valeur aussi
proche possible de la solution exacte.
def trapeze(f,a,b,n) : 1. Méthode d'Euler
pas=(b-a)/n
Cette méthode, la plus ancienne et la plus simple. On considère une équation
s=0
for k in range(n) : différentielle d'ordre 1 sous forme y ' = f (t , y ) , avec la condition initiale y(t0 ) = y0
s=s+f(a+k*pas)
Le principe est d'approcher la solution y sur [a, b] par une fonction affine par morceaux,
return pas*(((f(a)+f(b))/2)+s)
en opérant une discrétisation du paramètre. Soit
n=10 b−a
N=100 tk = a + kh où h = est le pas
n
A=np.linspace(-5,5,N)#np.arange(-
3,3,0.1) La fonction affine par morceaux joindra donc les points de coordonnées (tk , yk ) et il
B=np.linspace(-1,1,N)#np.arange(-4,2,0.1)
s'agit de proposer un algorithme pour construire les yk à partir de y0 . Sur chaque intervalle
X=[i for i in range(len(A))]
Y1=[] [tk , tk +1] on prend pour pente du segment affine celle que suggère l'équation f (tk , yk )
Y2=[]
Y3=[] Pour ce faire, nous allons définir la fonction euler. Elle prendra en entrée une fonction
for i in range(len(A)): f , les bornes a et b de l’intervalle d’étude, la condition initiale y0 et le pas h. Plus
Y1.append(p(B[i])-p(A[i])) précisément : avec ces données, la fonction va déterminer les approximations de la solution de
Y2.append(rectangle(f,A[i],B[i],n))
Y3.append(trapeze(f,A[i],B[i],n))
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 85 L’informatique en classes préparatoires (Samir ANTER) 86
y ' = f (t , y ) avec la condition initiale y(a) = y0 , en rendant un tableau de temps et un tableau (a). Tracer la courbe de la fonction obtenue.
de valeurs approchées par la méthode d’Euler. Les temps sont les a + kh majorés par b. (b). Tracer la courbe de la solution exacte.
Ces tableaux sont construits à l’aide de listes auxquelles on adjoint les nouveaux termes (c). Qu’est-ce que vous remarquez ?
calculés.
(d). Modifier la valeur du pas et comparer les courbes obtenues.
Euler 1 :
import matplotlib.pyplot as plt
def euler(f,a,b,y0,h):
import numpy as np
y=y0
def euler(f,a,b,y0,h):
t=a
y=y0
yy =[]
t=a
temps = []
yy =[] #liste des ordonnées
while t<= b:
tt =[] #liste des abscices
yy.append(y)
t=a
temps.append(t)
while t<= b:
t=t+h
yy.append(y)
y =y+ h * f(t,y)
tt.append(t)
return temps, yy
y =y+ h * f(t,y)
Euler2 :
t=t+h
def euler2(f,y0,z0,a,b,h):
return tt, yy
yy=[]
def f(t,y):
zz=[]
return t**2*y
tt=[]
def y(t):
t=a
return np.exp((t**3)/3)
y=y0
h=0.03
z=z0
a=0
while t<=b:
b=1
yy.append(y)
y0=1
zz.append(z)
tt,yy=euler (f,a,b,y0,h)
tt.append(t)
t=t+h
x=np.arange(a,b,h)
y,z=y+h*z,z+h*f(t,y,z)
y2=[]
return tt,yy,zz
for t in x:
2. Exemple : y2.append(y(t))
Illustrons l’utilisation de la fonction euler pour trouver une solution approchée de
l’équation différentielle y ' = y , intégrée sur l’intervalle [0,5] avec la condition initiale
plt.plot(tt,yy,'o')
y (0) = 1
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 87 L’informatique en classes préparatoires (Samir ANTER) 88
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 89 L’informatique en classes préparatoires (Samir ANTER) 90
return s return a
Solution numérique de l’équation f ( x) = 0 ∀x ∈[a, b] (E)
Méthode de newton (tangente)
Méthode de la dichotomie
def f(x): def newton(f, g, a,epsilon) : # g est la dérivé de f
return x**2-10 u=a
m=(a+b)/2 v= v-(f(v)/g(v))
if f(a)*f(m)<0: return v
if b-a>epsilon: yy =[y0]
if f(a)*f((a+b)/2)<0: tt =[a]
else: y += h * f(t,y)
y=np.exp(x) x[i]=s/l[i][i]
plt.plot(x,y,'r') return x
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com
L’informatique en classes préparatoires (Samir ANTER) 93 L’informatique en classes préparatoires (Samir ANTER) 94
#----------------------------------------- n=len(M)
def echanger(M,i,j): X=[0]*n
#Echanger la ligne i et j for k in range(n-1,-1,-1):
M[i],M[j]=M[j],M[i] s=0
#----------------------------------------- for i in range(k+1,n):
def pivot(M, i): s=s+M[k][i]*X[i]
#Trouver le pivot max du iéme inconu X[k]=(b[k]-s)/M[k][k]
n=len(M) return X
pivot_max=i #-----------------------------------------
for j in range(i+1,n): def resolution(M,b):
if abs(M[j][i])>abs(M[i][pivot_max]): triangularisation(M,b)
pivot_max=j X=remontee(M,b)
return pivot_max afficher(M)
#----------------------------------------- print(b)
def transvection_ligne(M, i, j, m): return X
# Li <- Li + m*Lj #-----------------------------------------
n=len(M[0]) #Exemple
for k in range(n): A=[[3,2,-1],[-2,-1,-3],[4,2,4]]
M[i][k]=M[i][k]+m*M[j][k] b=[2,-1,1]
#----------------------------------------- X=resolution(A,b)
def triangularisation(M,b): Print("X=")
n=len(M) print(X)
for i in range(n): #-----------------------------------------
j = pivot(M, i) #Résultat
if j != i: X=[-14.0, 21.0, 4.0]
echanger(M, i, j)
echanger(b, i, j)
for k in range(i+1, n):
x = M[k][i]/M[i][i]
transvection_ligne(M, k, i, -x)
b[k]=b[k]-x*b[i]
#-----------------------------------------
def remontee(M,b):
#résolution du système triangulaire supérieur M*X=b
Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat Samir Anter professeur d’informatique au CPGE Selmane el farissi-SALE et Ibn ghazi – Rabat
Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com Facebook : https://www.facebook.com/groups/infocpge/Email : antersamir@gmail.com