(d) On définit une suite de vecteur de R4par
X0=
1
1
1
1
,Xn+1=Xn−5(AXn−F) pour n≥0
-i- Écrire une fonction en Python grafix2(n) qui calcule Xn. Calculer en particulier X10,X50,
X100.
-ii- Le comportement est-il le même qu’à la question précédente? Quelle est la différence?
>>> import numpy as np
>>> a=np . array ( [ [ 2 , 1. , 0 , 0 ] , [ 1 , 2 , 1 , 0 ] , [0 ,1 ,2 ,1] ,[0 ,0 ,1 ,2] ] )
>>> f=np. array ([1 , −1 ,1 ,7])
>>> x=np. linal g . solve (a , f )
>>> x
array ( [ 0.4 , 0.2 , −1.8 , 4 . 4 ] )
>>> def graphix (n ) :
. . . import numpy as np
. . . z=np . copy ( x0 )
. . . for i in range (n ) :
. . . z=z −.5*(np. dot (a , z)−f )
. . . return z
>>> graphix (10)
array ( [ 0.5703125 , 0.08691406 , −1.52441406, 4.33007812])
>>> graphix (50)
array ([ 0.40003545, 0.19997646, −1.79994265, 4.39998545])
>>> graphix (100)
array ( [ 0.4 , 0.2 , −1.8 , 4 . 4 ] )
>>> graphix (2000)
array ( [ 0.4 , 0.2 , −1.8 , 4 . 4 ] )
# expérimentalement : convergence vers la solution
# valeurs tr ès proches , à la précision de la machine près
# de la solution exacte , par exemple , faisons la différence
>>> graphix(2000)−x
array ( [ 2.77555756e−16, −5.27355937e−16, 6.66133815e−16,
−8.88178420e−16])
>>> graphix(100)−x
array ( [ 8.86035634e−10, −5.88368826e−10, 1.43363565e−09,
−3.63632680e−10])
# maintenant grafix2 (n)
>>> def graphix2 (n ) :
. . . import numpy as np
. . . z=np . copy ( x0 )
. . . for i in range (n ) :
. . . z=z−5*(np. dot ( a , z)−f )
. . . return z
. . .
>>> graphix2 (10)
array ( [ 9.55172743e+11 , 1.47898278e+12, 1.39649941e+12 ,
8.21711843e+11])
>>> graphix2 (50)