Beruflich Dokumente
Kultur Dokumente
PC*
Intgration numrique . . . . . . . . . . . . . . . . . .
I.1
Principe gnral . . . . . . . . . . . . . . . . .
I.2
La mthode des rectangles . . . . . . . . . . . .
I.3
La mthode des trapzes . . . . . . . . . . . . .
I.4
Utiliser scipy.integrate . . . . . . . . . . . .
II. Recherche des zros dune fonction . . . . . . . . . . .
II.1
Recherche dun zro de fonction par dichotomie
II.2
Mthode de Newton . . . . . . . . . . . . . . .
II.3
Mthode du point xe . . . . . . . . . . . . . .
II.4
Utiliser scipy.optimize . . . . . . . . . . . . .
III. Rsolution approche dune quation direntielle . . .
III.1 Principe de la mthode . . . . . . . . . . . . .
III.2 Mise en oeuvre . . . . . . . . . . . . . . . . . .
III.3 Utilisation de la bibliothque scipy . . . . . .
IV. Rsolution dun systme linaire : Pivot de Gauss . . .
IV.1 Oprations lmentaires . . . . . . . . . . . . .
IV.2 Le pivot sur un exemple . . . . . . . . . . . . .
IV.3 Utilisation de numpy . . . . . . . . . . . . . . .
2014-2015
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
3
4
4
4
6
7
7
8
9
10
12
12
12
13
14
1/14
2016
PC*
I.
Intgration numrique
tant donns deux rels a et b tels que a < b et une fonction f continue sur le segment [a, b], on
souhaite, laide de suites, obtenir une valeur approche de lintgrale de f sur [a, b].
On note I(f ) =
f (t)dt =
a
f lintgrale approcher.
I.1
Principe gnral
Pour tout n N , on va partager le segment [a, b] laide dune subdivision (ai )06i6n pas constant
gal ba
n en posant
ba
i J0, nK, ai = a + i
n
Sur chaque segment [ai1 , ai ], on remplace f par une fonction dont on sait calculer lintgrale.
Nous prsentons deux mthodes.
La mthode des rectangles o les fonctions utilises pour approcher f sont constantes.
La mthode des trapzes o les fonctions utilises pour approcher f sont anes.
I.2
I.2.a
ba
n
X
b a n1
f (xi ).
n i=0
1
.
n
2014-2015
2016
PC*
I.2.c
Ordre de la mthode
Comme il existe un nombre M tel que |I(f ) Rn (f )| 6
M
, on dit que la mthode est dordre 1.
n
1
n
Algorithme et complexit
def rectangles(f, a, b, n):
""" valeur approche de l'integrale de f sur [a,b]
application de la methode des rectangles"""
int_rect = 0
h = (b-a)/n
t = a
for k in range(n):
# t est ak = a + kh
Ra
# int_rect approxime a k f (t) dt
int_rect += h*f(t)
t += h
return int_rect
I.3
I.3.a
f (t)
n=8
n N , Tn (f ) =
(b a) (f (ai ) + f (ai1 ))
de telle sorte que
n
2
n
baX
(f (ai ) + f (ai1 ))
2n i=1
ba
=
n
2014-2015
X
f (a) + f (b) n1
+
f (ai )
2
i=1
3/14
2016
PC*
I.3.b
I.3.c
Ordre de la mthode
Comme il existe un nombre M tel que |I(f ) Tn (f )| 6
M
,
n2
Algorithme et complexit
def trapezes(f,a,b,n):
""" valeur approche de l'integrale de f sur [a,b]
application de la methode des trapzes"""
h = (b-a)/n
int_trapeze = 0.
t = a
for k in range(n):
# t est ak
Ra
# int_trapeze approxime a k f (t) dt
int_trapeze += h * (f(t) + f(t+h)) / 2
t += h
return int_trapeze
I.4
Utiliser scipy.integrate
II.
II.1
II.1.a
2014-2015
2016
PC*
Cf
a
b
II.1.b
Programme python
II.1.d
ba
.
2n
2014-2015
5/14
2016
PC*
II.1.e
Complexit de lalgorithme
Ltude de la terminaison a permis de voir, quau bout de n tours de boucles, on avait lgalit
dg =
ba
2n
| {z }
au tour n 1
on a d g >
Ce qui donne
2n1
Ainsi n = O ln
<
ba
ba
2n
puis n 1 <
ln ba
6 n.
ln(2)
Que lon comptabilise les comparaisons, les appels f ou les aectations, la complexit c vrie
c(a, b, ) = O ln
ba
Remarque. Supposons donne une fonction vriant les hypothses requises sur un intervalle [a, b].
Pour = 10p , le nombre doprations sera de lordre de
cte
Autrement dit, pour obtenir une prcision de lordre de 10p , le nombre doprations sera de lordre de p, pour p
grand.
II.2
Mthode de Newton
Lorsque f (que lon suppose sannuler une unique fois) est de classe C 2 et que sa drive ne sannule
pas, on peut sapprocher de son zro en prenant la tangente .
Cf
u1
u0
f (un )
f 0 (un )
2014-2015
2016
PC*
Le test de sortie est empirique, et ne mesure pas une vritable erreur entre uk et la valeur du zro
de f . En toute gnralit, il nest absolument pas able.
Pour plus de prcautions, on pourra une fois obtenue notre valeur approche, utiliser le test
f un
f un +
<0
2
2
tI
|xn+1 | 6
M2
2m1
2n 1
|u0 |2
M2
2m1 |u0
| < 1.
Remarque. La mthode de Newton peut-elle sappliquer pour la recherche du zro dune fonction connue
par un chantillonnage ?
II.3
Mthode du point xe
En posant g(x) = f (x) + x, chercher un zro de f revient chercher un point xe de g. En tudiant
la suite dnie par la relation de rcurrence :
xn+1 = f (xn ) + xn
on peut avoir la convergence de cette suite vers un zro de f , par exemple lorsque g est contractante.
On peut aussi poser g(x) = f (x)+x avec susamment petit pour que cette condition soit satisfaite.
II.4
Utiliser scipy.optimize
>>> help("scipy.optimize.newton")
scipy.optimize.newton = newton(func, x0, fprime=None, args=(), tol=1.48e-08, maxiter=50, fprime2=None)
Find a zero using the Newton-Raphson or secant method.
Find a zero of the function `func` given a nearby starting point `x0`.
The Newton-Raphson method is used if the derivative `fprime` of `func`
is provided, otherwise the secant method is used. If the second order
derivate `fprime2` of `func` is provided, parabolic Halley's method
is used.
Parameters
----------
2014-2015
7/14
2016
PC*
func : function
The function whose zero is wanted. It must be a function of a
single variable of the form f(x,a,b,c...), where a,b,c... are extra
arguments that can be passed in the `args` parameter.
x0 : float
An initial estimate of the zero that should be somewhere near the
actual zero.
fprime : function, optional
The derivative of the function when available and convenient. If it
is None (default), then the secant method is used.
args : tuple, optional
Extra arguments to be used in the function call.
tol : float, optional
The allowable error of the zero value.
maxiter : int, optional
Maximum number of iterations.
fprime2 : function, optional
The second order derivative of the function when available and
convenient. If it is None (default), then the normal Newton-Raphson
or the secant method is used. If it is given, parabolic Halley's
method is used.
Returns
------zero : float
Estimated location where function is zero.
See Also
-------brentq, brenth, ridder, bisect
fsolve : find zeroes in n dimensions.
III.
Notes
----The convergence rate of the Newton-Raphson method is quadratic,
the Halley method is cubic, and the secant method is
sub-quadratic. ... couic... where the function changes
sign. The brentq algorithm is recommended for general use in one
dimensional problems when such an interval has been found.
En mathmatiques, nous tudions les quations direntielles linaires du premier ordre (EDL1).
1
Par exemple, nous savons montrer que les solutions sur R+ de lquation y 0 (t) y(t) = tet sont les fonctions t 7 t + tet o
t
R.
2
Pour lquation
y 0 (t) + 3y(t) = et sur R, on a aussi une formule exacte pour lexpression des solutions mais qui fait apparaitre
Z
lintgrale
8/14
2014-2015
2016
PC*
Pour pouvoir traiter tous ces exemples (en particulier ceux non linaires), on considre ici une quation direntielle dordre 1 crite
sous la forme :
y 0 (t) = F (y(t), t)
Par exemple, si lquation est :
y 0 (t) y(t) = 0 alors F : (y, t) 7 y
y 0 (t) + ty(t) 2 = 0 alors F : (y, t) 7 2 ty
y 0 (t) = cos t + cos(y(t)) alors F : (y, t) 7 cos t + cos y
00 (t) = 2 sin (t) alors F : (Y, t) 7 (Y [1](t), 2 sin(Y [0](t)) o Y = (Y [0], Y [1]) = (, 0 )
Il existe des conditions sur F pour que tout problme de Cauchy :
y 0 (t) = F (y(t), t)
y(t0 ) = y0
III.1
Principe de la mthode
(
y 0 (t) = F y(t), t)
avec t0 , y0 xs.
y(t0 ) = y0
On souhaite obtenir une approximation de la fonction y sur lintervalle [a, b].
Soit y lunique solution de
t1 = t 0 + h
t2 = t0 + 2h
...
tk = t0 + kh
...
ba
.
n
tn = t0 + nh = b
On part de t0 .
On approche le petit morceau de courbe entre t0 et t1 par la tangente la courbe au point dabscisse t0 .
solution exacte
y2
M2
y1
y0
M0
M1
t0
solution approche
On alors :
y(t1 ) y(t0 )
y 0 (t0 )
h
F (y(t0 ), t0 )
y(t1 ) y0 + hF (y0 , t0 )
2014-2015
9/14
2016
PC*
yk+1 = yk + hF (yk , tk )
Ce qui amne construire successivement les points Mk (tk , yk ). La ligne polygonale reliant ces points
est alors une approximation de la courbe reprsentative de la solution.
Cette mthode de rsolution approche, la seule notre programme, sappelle la mthode dEuler
(explicite). Il existe de nombreuses autres mthodes qui peuvent tre proposes dans le cadre dun
problme.
III.2
III.2.a
Mise en oeuvre
Equations scalaires dordre 1
Dans ce programme, on donne la valeur du pas h et on en dduit la valeur de n tel que a + nh 6 b < a + (n + 1)h, de sorte
que en gnral a + nh = tn 6= b, mais ce nest pas grave puisque a + nh = tn b.
III.2.b
10/14
2014-2015
2016
PC*
Ici t dsigne toujours le temps, mais x(t) est le nombre de proies linstant t, et y(t) est le nombre
des prdateurs linstant t. Les drives x0 et y 0 reprsentent donc les variations des populations
de proies et de prdateurs au cours du temps.
La mthode dEuler sadapte : on part des donnes initiales x0 et y0 et on dnit :
(
k {0, . . . , n 1},
Y =
y0
y 00
..
= y0
= y 00
y (p1)
y (p)
y
y0
..
.
y (p1)
x1
x2
..
.
, t 7
et F :
xp1
xp
x2
x3
..
.
xp
G(xp , xp1 , . . . , x2 , x1 , t)
Il faut alors adapter lgrement la dnition de la fonction euler pour le cas vectoriel.
def euler(F, a, b, Y0, h=1e-2):
"""Fournit une solution approche l'quation Y'=F(Y,t), Y(a)=Y0
sur l'intervalle [a,b] par la mthode d'Euler
le pas utilis est h, par dfaut 0.01
La solution renvoye est un np.array pour les t,
et un np.array pour les Y"""
n = int((b-a)/h)
Y0 = np.array(Y0)
p, = Y0.shape
T = np.linspace(a,b,n+1) # cf aide fonction linspace, n + 1 valeurs de t quirparties,
# en partant de a = T [0], la dernire tant T [n] = b ici
Y = np.zeros((p, n+1))
Y[:,0] = Y0
for k in range(n):
Y[:,k+1] = Y[:,k] + h * F(Y[:,k], T[k])
return T, Y
2014-2015
11/14
2016
PC*
III.3
odeint(F, y0, t)
Expliquons les dirents lments qui interviennent :
lquation direntielle est crite sous la forme : y 0 (t) = F (y(t), t) sur un segment [a, b].
t est un tableau de temps entre a et b de la forme : t = [t0=a,t1,...,tn=b].
La condition initiale est alors y(a) = y0.
Remarque. Contrairement lusage mathmatique, la fonction F prend le temps comme deuxime
argument et non comme premier.
y0 = y
y(0) = 1
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def F(y,t):
return y
les_t = np.linspace(0, 5, 50)
sol = odeint(F, 1, les_t)
plt.plot(les_t, sol)
plt.show()
IV.
IV.1
Oprations lmentaires
Les trois oprations lmentaires sur les lignes Li dune matrice sont
les dilatations Li Li , o est un rel non nul,
les transvections Lj Lj + Li , o est un rel quelconque,
les permutations ou transpositions Li Lj .
On donne les algorithmes des transvections, dilatations, permutations en python ci-dessous. Les indices
utiliss sont ceux de python. Ils commencent zro.
12/14
2014-2015
2016
PC*
IV.1.a
Transvection
La fonction transvection prend en paramtres une matrice A, un indice de ligne j, un indice de ligne
i et un rel .
Elle modie sur place la matrice A en eectuant Lj Lj + Li .
def transvection_np (A, i, j, mu):
"""transforme sur place le np.array A via la transvection """ # Li Li + Lj
A[i, :] += mu * A[j, :]
return None
IV.1.b
Permutation ou transposition
La fonction permutation prend en paramtres une matrice A, un indice de ligne i et un indice de
ligne j.
Elle modie sur place la matrice A en eectuant Li Lj .
def permutation_np (A, i, j):
""" transforme sur place le np.array A via la permutation""" # Li Lj
A[[j,i], :] = A[[i,j], :]
return None
IV.1.c
IV.2
Dilatation
A = np.array([[1,3,4],
[3,5,-4],
[4,7,-2]])
B = np.array([50,2,31])
n,p = A.shape
# les calculs doivent tre mens en flottants (divisions non entires)
A, B = A.astype(float), B.astype(float)
# On cre la matrice augmente C=(A|B) pour effectuer simultanment les
# oprations sur A et B.
B.shape=(n,1)
C = np.concatenate((A,B),axis=1)
# On chelonne la matrice
for k in range(n):
# on choisit le pivot de valeur absolue maximale
# dans le bas de la colonne k
piv_candidats = C[k:,k]
k_piv = k + np.argmax(np.abs(piv_candidats))
piv = C[k_piv,k]
assert piv != 0, 'Systme non inversible'
2014-2015
13/14
2016
PC*
IV.3
On peut montrer que lalgorithme du pivot de Gauss a une complexit temporelle en O(n3 ). Lors du
calcul, il faut se mer des oprations termes termes sur les tableaux numpy.
Utilisation de numpy
14/14
2014-2015