L2 Calcul formel Tp bases et équations d'un espace vectoriel

De
Publié par

Niveau: Supérieur, Licence, Bac+2

  • mémoire


L2 Calcul formel Tp 1 : bases et équations d'un espace vectoriel Premiers pas en Maple Toutes les commandes doivent se terminer par un point-virgule ; ou par deux points :. Dans ce dernier cas, le résultat n'est pas affiché. > 2+2; 3+3: 4 On peut affecter des valeurs à des variables en utilisant :=. > a:=3+3: > a; 6 Au démarrage, Maple ne charge pas toutes ses fonctions en mémoire. On a la possibilité de charger de nouvelles fonctions avec la commande with(); Lorsqu'on veut faire de l'algèbre linéaire avec Maple il faut utiliser la bibliothèque (library en anglais) linalg : > with(linalg); Warning, new definition for norm Warning, new definition for trace BlockDiagonal GramSchmidt JordanBlock LUdecomp QRdecomp Wronskian addcol, , , , , , ,[ addrow adj adjoint angle augment backsub band basis bezout blockmatrix charmat, , , , , , , , , , , charpoly cholesky col coldim colspace colspan companion concat cond copyinto, , , , , , , , , , crossprod curl definite delcols delrows det diag diverge dotprod eigenvals, , , , , , , , , , eigenvalues eigenvectors eigenvects entermatrix equal exponential extend ffgausselim, , , , , , , , fibonacci forwardsub frobenius gausselim gaussjord geneqns genmatrix grad, , , , , , , , hadamard hermite hessian hilbert htranspose ihermite indexfunc innerprod intbasis, , , , , , , , , inverse ismith issimilar iszero jacobian jordan kernel laplacian leastsqrs linsolve, , ,

  • algèbre linéaire avec maple

  • l2 calcul formel

  • expressions vectorielles

  • déroulement de l'algorithme

  • algorithme de gauss


Publié le : mercredi 30 mai 2012
Lecture(s) : 39
Tags :
Source : math.unice.fr
Nombre de pages : 14
Voir plus Voir moins
L2 Calcul formel Tp 1 : bases et équations d'un espace vectoriel
Premiers pas en Maple Toutes les commandes doivent se terminer par un point-virgule " ; " ou par deux points " : ". Dans ce dernier cas, le résultat n'est pas affiché. > 2+2; 3+3: 4 On peut affecter des valeurs à des variables en utilisant ":=". > a:=3+3: > a; 6 Au démarrage, Maple ne charge pas toutes ses fonctions en mémoire. On a la possibilité de charger de nouvelles fonctions avec la commande with(); Lorsqu'on veut faire de l'algèbre linéaire avec Maple il faut utiliser la bibliothèque ("library" en anglais) linalg : > with(linalg); Warning, new definition for norm Warning, new definition for trace [ BlockDiagonal , GramSchmidt , JordanBlock , LUdecomp , QRdecomp , Wronskian , addcol , addrow , adj , adjoint , angle , augment , backsub , band , basis , bezout , blockmatrix , charmat , charpoly , cholesky , col , coldim , colspace , colspan , companion , concat , cond , copyinto , crossprod , curl , definite , delcols , delrows , det , diag , diverge , dotprod , eigenvals , eigenvalues , eigenvectors , eigenvects , entermatrix , equal , exponential , extend , ffgausselim , fibonacci , forwardsub , frobenius , gausselim , gaussjord , geneqns , genmatrix , grad , hadamard , hermite , hessian , hilbert , htranspose , ihermite , indexfunc , innerprod , intbasis , inverse , ismith , issimilar , iszero , jacobian , jordan , kernel , laplacian , leastsqrs , linsolve , matadd , matrix , minor , minpoly , mulcol , mulrow , multiply , norm , normalize , nullspace , orthog , permanent , pivot , potential , randmatrix , randvector , rank , ratform , row , rowdim , rowspace , rowspan , rref , scalarmul , singularvals , smith , stack , submatrix , subvector , sumbasis , swapcol , swaprow , sylvester , toeplitz , trace , transpose , vandermonde , vecpotent , vectdim , vector , wronskian ] Ci-dessus apparaît la liste de toutes les fonctions chargées en mémoire. Vous pouvez avoir une brève description de chaque fonction en tapant: > ?linalg Cahque fonction a aussi une page d'aide détaillée, donnant notamment sa syntaxe et fournissant quelques exemples représentatifs en bas de page. Essayez par exemple de comprendre à quoi servent les fonctions geneqns et genmatrix . > ?geneqns L'algorithme de Gauss
Page 1
L'algorithme de Gauss pour échelonner les matrices est déjà programmé dans la fonction gausselim . Voici un exemple sur une matrice. > A:=matrix([[1, -47, 195, -47, -61], [41, -58, 519, 53, -1], [91, -718, 3509, 83, 389], [19, -50, 333, -53, 85], [49, 78, 31, 72, -99], [-85, -86, 30, 80, 72]]); 1 -47 195 -47 -61 41 -58 519 53 -1 91 -718 3509 83 389 A := 19 -50 333 -53 85 49 78 31 72 -99 -85 -86 30 80 72 > gausselim(A);
1 018-4437-33179258-44701-2644 42565 766505 0 0 281 281 843 695 -525694 0 0 0 4087368 281 843 0 0 0 0 139 0 0 0 0 0 La dernière ligne n'a que des zéros. Etait-ce prévisible? Solution Oui, c'était prévisible car la matrice n'est pas carrée. Le rang est inférieur au nombre de colonnes (5). Comme il y a 6 lignes, la dernière est nécessairement nulle à la fin de l'algorithme de Gauss. Arrivez-vous à suivre le déroulement de l'algorithme? > seq(gausselim(A,i),i=1..5); 1 -47 195 -47 -61 001385564997-1-472143976564139-6480705295-460010 0 843 -3372 840 1244 1 -0 0 0 228640 580024 , 00000033262208988611510--57288225448563311924 , 000-243088841131--963563207452-23398174550-521182194304 42565 766505 0 0 281 281 843
Page 2
018-4437-33179258-44701-26414 0000280134322205886611507-7682264855311025 1008-44730-31329785214-822644589706155-75162-8266544516340954 000222688961540-558280540632944 , 00000000028001248068811134731933956786 , 0 0 0 281 843 10008-447300-313297825104-282645489760155-75162-8266544516340954 2814088473368 000000001039 Solution Remarquer qu'à la 3ème étape il y a un échange entre deux lignes.
Un petit exemple Nous allons apprendre à nous servir de certaines fonctions de la librairie linalg sur un petit exemple. Il est fortement conseillé pour chaque fonction utilisée de jeter un coup d'oeil à sa page d'aide. On peut définir un sous-espace vectoriel par un ensemble de vecteurs générateurs : c'est l'ensemble de toutes les combinaisons linéaires de ces vecteurs générateurs. Si ces vecteurs ne sont pas indépendants plusieurs combinaisons linéaires donnent le même résultat : l'écriture n'est pas unique. Ca n'est pas commode. On préfère travailler avec une base. > v1:=randvector(3);v2:=randvector(3);v3:=2*v1-v2; v1 := [ -85, -55, -37 ] v2 := [ -35 97 50 ] , , v3 := 2 v1 v2 La fonction basis extrait une base d'un ensemble de vecteurs. > basis({v1,v2,v3}); Error, (in basis) expecting set or list of vectors Attention, les expressions formées à partir de vecteurs (ou de matrices) ne sont pas automatiquement calculées. Ce qui gène basis est que v3 n'est pas un vecteur mais une combinaison de vecteurs non calculée. Il faut utiliser la fonction evalm pour calculer les expressions vectorielles ou matricielles : > v3:=evalm(v3); v3 := - -207, -124 ] Page 3
> basis({v1,v2,v3}); { v1 , v2 } Une autre solution consiste à construire la matrice ayant pour colonnes les vecteurs v1, v2 et v3 et à chercher une base de l'espace engendré par les colonnes de cette matrice, c'est à dire une base de l'image de cette matrice. > m:=augment(v1,v2,v3);
-85 -35 -135 m := --53579570--122047 > colspace(m);colspan(m); { 0,1,12100394 , 1,0,18031970 } { [ -85, -55, -37 ], [ 0, -10170, -5545 ] } Il s'agit de deux bases différentes de l'image (pouvez-vous imaginer comment elles sont construites ?). On peut aussi chercher quelle(s) équation(s) satisfait le sous-espace engendré par v1, v2 et v3. Pour cela on écrit le système m X = Y, on le triangularise et on trouve les équations satisfaites par Y. Comprenez-vous pourquoi ? > y:=vector(3);m1:=augment(m,y);gausselim(m1); y := array( 1 .. 3, [ ] ) -85 -35 -135 y 1 m1 := -55 97 -207 y 2 -37 50 -124 y 3 -85 -35 -135 y 1 2034 -2034 11 01717 y 2 17 y 1 839 1109 0 0 0 y 3 10170 y 1 2034 y 2 Le système d'équations correspondant à m1, c'est à dire à m X = Y : 85 x 1 35 x 2 135 x 3 = y 1 55 x 1 + 97 x 2 207 x 3 = y 2  est équivalent au système 37 x 1 + 50 x 2 124 x 3 = y 3 − − − = 85 x 1 35 x 2 135 x 3 y 1 2034 x 2 2034 x 3 11 y 1 0 x 1 + 17 17 = y 2 17 839 y 1 1109 y 2 0 x 1 + 0 x 2 + 0 x 3 = y 3 10170 2034 839 y 1 1109 y 2 Le sous-e − − 0. space engendré par v1, v2 et v3 est défini par l'équation y 3 10170 2034 = On peut aussi s'intéresser aux relations, c'est à dire aux (x1,x2,x3) tels que x1 v1+x2 v2+x3 v3 = 0. C'est aussi un sous-espace vectoriel dont on peut calculer une base ou des équations : c'est le Page 4
noyau de la matrice m. > equas:=geneqns(m,x); equas := { 85 x 1 35 x 2 135 x 3 = 0, 55 x 1 + 97 x 2 207 x 3 = 0, 37 x 1 + 50 x 2 124 x 3 = 0 } > solve(equas); { x 1 = − 2 x 3 , x 2 = x 3 , x 3 = x 3 } > geneqns(gausselim(m),x); 2034 2034 { 0 = 0, 85 x 1 35 x 2 135 x 3 = 0,17 x 2 17 x 3 = 0 } donne les équations du noyau (y compris certaines inutile : 0 = 0). > linsolve(m,[0,0,0]); [ 2 _t 1 , _t 1 , _t 1 ] donne tous les vecteurs du noyau sous forme paramétrée. > kernel(m); { [ -2, 1, 1 ] } donne une base du noyau. Et maintenant à vous... Refaites les calculs précédents sur l'exemple plus gros suivant : > v1:=randvector(5);v2:=randvector(5);v3:=evalm(2*v1-v2);v4:=ev alm(v1+v3); v1 := [ 43, -62, 77, 66, 54 ] v2 := [ -5, 99, -61, -50, -12 ] v3 := [ 91, -223, 215, 182, 120 ] v4 := [ 134, -285, 292, 248, 174 ]
Solution Calcul d'une base de l'espace engendré par v1, v2, v3 et v4 : > basis({v1,v2,v3,v4}); { v1 , v2 } C'est un sous-espace de dimension 2. ou bien m:=augment(v1,v2,v3,v4);colspace(m);colspan(m); > -46329-59-29231-218354 m := 7676--5601128125224982 54 -12 120 174 -2238 { 0,1,3947,-31984270,3-294467 , 1,0,33894417,33493447,34690427 } { [ 0, -3947, 2238, 1820, 246 ], [ -5, 99, -61, -50, -12 ] } Calcul des équations de l'espace engendré : Page 5
> y:=vector(5);m1:=augment(m,y);gausselim(m1); y := array( 1 .. 5, [ ] ) 43 -5 91 134 y 1 -62 99 -223 -285 y 2 m1 := 77 -61 215 292 y 3 66 -50 182 248 y 4 54 -12 120 174 y 5 43-2-54629416123446 y 5 1 4 0040340343 y 5 43 y 1 395 373 0 y 3 + 41 y 1 41 y 5 0 0 0 0 0 0 0 0 0 0 Il y a un problème : je ne trouve qu'une équation pour définir un sous-espace de dimension 2 dans un espace de dimension 5 alors que je m'attend à 3 équations (pourquoi ?). La procédure gausselim est allée trop loin : il ne faut pas faire apparaître de zéro dans la dernière colonne qui est le second membre du système. On peut donner à gausselim un argument optionnel qui est le numéro de la dernière colonne où l'on fait apparaître des zéros (?gausselim). > gausselim(m1,4); 43 -5 91 134 y 1 00-240436244036244036 y 3 + 33 y 491 5 1 58 y 45 1 34 y 39 1 417103 y 5 0 0 0 0 y 4 + 41 y 1 123 y 5 767 3947 0 0 0 0 y 2 41 y 1 + 246 y 5 Ouf, j'ai bien mes trois équations : 395 y 1 373 y 5 318 y 1 910 y 5 767 y 1 3947 y 5 = 0 { y 3 + 41 41, y 4 + 41 123 = 0, y 2 41 + 246 = 0 } . Equations des relations : > equas:=geneqns(m,x);solve(equas); equas := { 43 x 1 5 x 2 + 91 x 3 + 134 x 4 = 0, 62 x 1 + 99 x 2 223 x 3 285 x 4 = 0, 77 x 1 61 x 2 + 215 x 3 + 292 x 4 = 0, 66 x 1 50 x 2 + 182 x 3 + 248 x 4 = 0, 54 x 1 12 x 2 + 120 x 3 + 174 x 4 = 0 } { x 1 = − 2 x 3 3 x 4 , x 2 = x 3 + x 4 , x 3 = x 3 , x 4 = x 4 } On a des équations inutiles : x 3 = x 3 , x 4 = x 4 et seulement deux vraies équations. Page 6
Il vaut peut-être mieux faire d'abord la méthode de Gauss. > geneqns(gausselim(m),x); 246 246 246 { 0 = 0, 43 x 1 5 x 2 + 91 x 3 + 134 x 4 = 0, x 2 + x 3 + 43 x 4 = 0 } 43 43 puis supprimer la seule équation inutile : 0 = 0. Base des relations : > linsolve(m,[0,0,0,0,0]);kernel(m); [ 2 _t 1 3 _t 2 , _t 1 + _t 2 , _t 1 , _t 2 ] { [ -2, 1, 1, 0 ], [ 3, 1, 0, 1 ] } -Un espace de dimension 2 défini par deux équations dans un espace de dimension 4, c'est cohérent. Donner une base de l'espace vectoriel défini par les équations suivantes: > eqs := {66*x1-29*x2-91*x3-53*x4-19*x5 = 0, -47*x1+68*x2-72*x3-87*x4+79*x5 = 0}; eqs := { 66 x1 29 x2 91 x3 53 x4 19 x5 = 0, 47 x1 + 68 x2 72 x3 87 x4 + 79 x5 = 0 } Solution Il suffit de calculer le noyau de la matrice dont les lignes ont les coefficients des équations. > N:=genmatrix(eqs,[x1,x2,x3,x4,x5]); -29 -91 -53 -19 N := -467668-72-8779 > kernel(N); -8557 82 { 1,4939291,0,0,-3919295 , ,999,,,99796 , 0,-5989490,0,1,6919297 } 0 1 0
Noyau et image d'une matrice On va calculer base et équations du noyau et de l'image d'une matrice. Pour que le problème soit intéressant il faut que le noyau et l'image ne soit pas trop simples. Si l'on tire une matrice carrée au hasard (?randmatrix) son noyau est réduit au seul vecteur nul et l'image est l'espace tout entier. Pourquoi ? Solution En effet les colonnes de cette matrice tirées au hasard ont toutes les chances d'être des vecteurs indépendants. Par exemple : > m:=randmatrix(5,5);kernel(m);colspace(m); 8 31 -26 -62 1 --417-91-47-6141 m := -58 -90 53 -1 94 83 -86 23 -84 19 -5 Page 7 8 -53 85 49
{ } { [ 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 1 ], [ 1, 0, 0, 0, 0 ] } Pour avoir une matrice intéressante on va aller d'un espace de dimension 5 dans un espace de dimension 3 (et donc un noyau qui n'est pas réduit au seul vecteur nul) puis de l'espace de dimension 3 dans un espace de dimension 5 (et donc une image qui n'est pas l'espace tout entier). Construire une telle matrice (?multiply) puis calculer base et équations de son noyau et de son image. Solution Construction de la matrice : > m1:=randmatrix(3,5);m2:=randmatrix(5,3);m:=multiply(m2,m1) ; m := 1 -47 -91 -47 -61 1 41 -58 -90 53 -1 94 83 -86 23 -84 -19-5088 m2 := -97539830-18887505-74782926 1519 -8501 8038 1628 -7041 8123 -968 m := 16020471893-1714-1-46719272-4486-7958 7543 1324 -14820 -1109 -10823 -11668 2445 24055 -1830 13348
Base du noyau : > kernel(m); -44838 -53 { 228791,228576971,0,-222480799612,1 , 242787749911,-232884799019,1,427268579013,0 } Equations du noyau : > subs('0 = 0'=NULL,geneqns(gausselim(m),x)); 90845027 80299764 3728535 17342729 { 4378 x 2 2 x 3 + 4378 x 4 4378 x 5 = 0, 189 4378 x 1 + 8639 x 2 + 12626 x 3 3471 x 4 775 x 5 = 0, 479095176320 230035623040 242272833280 x 3 + 845027 x 4 + 90845027 x 5 = 0 } 90845027 90 Le fait de substituer 0=0 par NULL permet d'éliminer l'équation inutile 0=0. On a un sous-espace de dimension 2 d'un espace de dimension 5, il est défini par 3 équations. Bases de l'image : > colspace(m);colspan(m); 17 -87139 { 0,0,1,8652182430,621501534690 , 1,0,0,-11205968,50272 , 0,1,0,6724864601,625511030603 } Page 8
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.