T.P. sur scipy : algèbre linéaire (suite) et équadiff Bien lire avant de

publicité
T.P. sur scipy : algèbre linéaire (suite)
et équadiff
Bien lire avant de commencer :
Ne pas oublier de tester les parties déjà préparées par des exemples, pour comprendre les
fonctionnalités qui ne vous paraissent pas évidentes.
Ne pas oublier les conseils qui figurent sur les feuilles précédentes.
Récupérer la feuille ''calcul matriciel.py'' sur Cahier de Prépa
1) récupération des idées vues au TP précédent : questions 3) et 2) du TP algèbre linéaire
Exécuter les lignes déjà préparées.
Elles résolvent la question 3) = définir les matrices tridiagonales (un exemple simple de matrice
creuse : principe expliqué en classe) et les seules opérations qu'il convient de leur associer pour
préserver l'économie de mémoires que les zéros assurent.
2) On leur applique le principe de décomposition M = D × ( I n− N ) de la question 2) du TP
précédent, pour la résolution approchée de l'équation M X =B ⇔ ( I n −N ) X = D−1 B par
itérations :
X 0 = D−1 B et X p+1 = X 0 +N X p converge vers la solution du système
à la vitesse d'une suite géométrique.
Ce qui change, c'est que vous ne stockez pas la matrice M avec tous ses zéros, mais vous vous
contentez de connaître les trois diagonales Di , D et D s , respectivement diagonale
inférieure, principale et supérieure.
Tester le comportement de la suite ( X n ) sur de petites itérations (4, 8, ... , 16 , 20 ...) et vérifier
que la valeur limite est bien proche de la solution.
Recommencer avec une diagonale nettement moins dominante ( à choisir ) pour confirmer que ça
modifie la vitesse de convergence.
3) Il vous reste à adapter ce qui précède par copier-coller-modifier pour définir une fonction qui
prend en arguments les trois diagonales de M , le vecteur colonne B et une précision ϵ et qui
renvoie la solution approchée à ϵ près de l'équation M X = B .
Les plus à l'aise testeront la vitesse de convergence = demanderont le nombre d'itérations qui
auront permis de trouver la précision demandée.
Vous pouvez prendre comme critère naïf de précision de l'erreur ∥ X p +1 −X p ∥∞ .
4) Une épreuve de l'école de l'Air en 1997 s'intéressait à la résolution d'un certain type d'équations
différentielles du second ordre avec conditions au bord (et non pas conditions initiales) :
−y ' ' ( x)+a (x) y ( x )=b( x) avec y (0)= y (1)=0
L'étude des cordes vibrantes ( a constante négative) vous a montré en physique qu'il n'y a pas nécessairement de
solution, selon la valeur de la fonction a et que quand il y a une solution, elle n'est pas nécessairement unique.
Mais dans le problème en question on prenait comme hypothèse a > 0 , en plus des classiques
continuités, et on arrivait à la conclusion de l'existence et de l'unicité.
k
,
n+1
qu'on pose y k = y ( x k ) , a k = a ( x k ) et b k = b (x k ) alors une solution approchée du problème
1
est donnée par la résolution du système A Y = h2 B où h =
,
n+1
On y démontrait que si on prend une subdivision régulière du segment [ 0 ; 1 ] :
xk =
Y correspondant au vecteur colonne de composantes [ y 1 , y 2 , ... , y n ] ,
B à [ b1 , b 2 , ... , bn ] et
A étant la matrice tridiagonale de diagonales
2
2
D = [ 2+a 1 h , 2+a 2 h , ... , 2+an h 2 ] et Di = Ds = [−1 , −1 , ... , −1 ]
T.S.V.P.
Vous prendrez comme exemple : a ( x )= 2−x et b (x ) = x 3−3 x 2+2 x+2 pour lesquels on
connaît la solution y = x− x 2 (on connaît aussi les conditions initiales y (0)= 0 et y ' (0) = 1 )
Représenter la solution exacte et la solution approchée sur un même graphe.
Conseil : penser à refermer systématiquement la fenêtre graphique avant de recommencer d'autres
tentatives. Pas seulement à cause des superpositions qui finissent par rendre tout illisible, mais aussi
à cause des tailles différentes des array qui provoquent parfois des conflits.
A l'occasion, je vous fais redécouvrir le comportement de la fonction odeint .
Remarque : si vous prenez une valeur grande de n , vous ne verrez pas bien la différence entre les
deux courbes. Il convient dans ce cas de représenter le graphe de la différence entre les deux
courbes.
4) Comparer avec la méthode d'Euler
Occasion de la réviser pour ceux qui ont tout oublié.
Vous devez donc réfléchir de
En cas de TP trop court, reprendre l'exo du TP précédent :
5) On s'intéresse à l'algorithme suivant :
A est une matrice carrée donnée (symétrique ou bien à diagonale dominante pour garantir
son bon fonctionnement).
Partant d'un vecteur colonne non nul X 0 , on calcule Y 0 = A X 0 , on pose alors
1
λ 0 = Y 0 [0] (la première composante de Y 0 ) et X 1 = Y 0 .
λ0
On évalue alors e 0 =∥ Y 0−λ0⋅X 0 ∥
On recommence : X 1 définit Y 1 puis λ 1 et enfin e 1 =∥ Y 1−λ1⋅X 1 ∥ .
On construit de proche en proche une suite ( e n )n⩾0
Pour la cohérence, il vaut mieux imposer à la première composante de X 0 de valoir 1 .
a) Pour ne pas trop perdre de temps à étudier des exemples, travailler en trinômes. L'un
d'entre vous examine le comportement de cette suite lorsque la matrice aléatoire est de petite taille
(assez petite pour pouvoir la voir affichée à l'écran). Un deuxième compare avec le cas d'une
matrice d'assez grande taille, mais pas trop. Un troisième camarade considérera une matrice assez
grande obtenue par le procédé suivant : il augmente sa matrice d'une grosse diagonale et il modifie
ensuite un des coefficients diagonaux pour le rendre au moins double de tous les autres coefficients.
Fonction à utiliser : norm qui est la norme euclidienne.
Remarque : norm( A, 1 ) ne calcule effectivement la norme sigma usuelle que si A est un vecteur,
pas une matrice. Même remarque pour la norme sup : norm( A , inf )
Pour mieux appréhender la vitesse de convergence, examiner le temps mis pour atteindre
une certaine précision : vous écrivez donc une fonction de variable p qui retourne le premier
entier n qui vérifie e n ⩽ 10− p .
b) On pourrait déduire que la rapidité de convergence dépend de la taille de la matrice, mais
vous ne trouvez pas tous la même vitesse : ça dépend donc plus de la matrice.
Vérifier que, conjointement aux autres convergences (celles de X n et λ n ), la suite
λ −λ
q n = λn+2 −λn+1 converge et comparer la valeur de sa limite à la vitesse de convergence de λ n .
n+1
n
Attention : si la précision des flottants est de l'ordre de grandeur des différences, leur quotient est à
précision nulle. Il ne faut donc pas prendre n trop proche de '' l'infini ''
C' EST TOUT !
Téléchargement