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

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×(InN)
de la question 2) du TP
précédent, pour la résolution approchée de l'équation
M X =B (InN)X=D1B
par
itérations :
X0=D1B
et
Xp+1=X0+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 Ds
, respectivement diagonale
inférieure, principale et supérieure.
Tester le comportement de la suite
(
Xn
)
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
Xp+1Xp
.
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) :
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é.
On y démontrait que si on prend une subdivision régulière du segment [ 0 ; 1 ] :
xk=k
n+1
,
qu'on pose
yk=y(xk) , ak=a(xk) et bk=b(xk)
alors une solution approchée du problème
est donnée par la résolution du système
A Y =h2B
h=1
n+1
,
Y correspondant au vecteur colonne de composantes
[y1, y2,... , yn]
,
B à
[b1, b2,... , bn]
et A étant la matrice tridiagonale de diagonales
D= [ 2+a1h2,2+a2h2,... ,2+anh2]
et
Di=Ds= [1,1,... ,1]
T.S.V.P.
Vous prendrez comme exemple :
a(x)= 2x et b(x)= x33x2+2x+2
pour lesquels on
connaît la solution
y=xx2
(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
X0
, on calcule
Y0=AX0
, on pose alors
λ0=Y0[0]
(la première composante de
Y0
) et
X1=1
λ0
Y0
.
On évalue alors
e0=Y0λ0
X0
On recommence :
X1
définit
Y1
puis
λ1
et enfin
e1=Y1λ1
X1
.
On construit de proche en proche une suite
(
en
)
n0
Pour la cohérence, il vaut mieux imposer à la première composante de
X0
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
en10p
.
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
Xn
et
λn
), la suite
qn=λn+2−λn+1
λn+1λn
converge et comparer la valeur de sa limite à la vitesse de convergence de
λ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 !
1 / 2 100%

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

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !