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 !