Calcul Formel : Algèbre Linéaire



Documents pareils
Exercices Corrigés Premières notions sur les espaces vectoriels

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Programmation linéaire

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Théorie et codage de l information

Introduction à MATLAB R

Fonctions de plusieurs variables

Le produit semi-direct

Résolution de systèmes linéaires par des méthodes directes

Programmation linéaire

Cours 02 : Problème général de la programmation linéaire

TD3: tableaux avancées, première classe et chaînes

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Maple: premiers calculs et premières applications

Cours de Probabilités et de Statistique

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Introduction à l étude des Corps Finis

Optimisation, traitement d image et éclipse de Soleil

Algorithmes pour la planification de mouvements en robotique non-holonome

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Exercices - Polynômes : corrigé. Opérations sur les polynômes

1 Complément sur la projection du nuage des individus

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Formes quadratiques. 1 Formes quadratiques et formes polaires associées. Imen BHOURI. 1.1 Définitions

avec des nombres entiers

Plan du cours : électricité 1

Intégration et probabilités TD1 Espaces mesurés Corrigé

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

Calculer avec Sage. Revision : 417 du 1 er juillet 2010

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Recherche dans un tableau

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Correction de l examen de la première session

Polynômes à plusieurs variables. Résultant

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Simulation de variables aléatoires

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

I. Polynômes de Tchebychev

Intégration et probabilités TD1 Espaces mesurés

3 Approximation de solutions d équations

Application 1- VBA : Test de comportements d'investissements

1. Structure d'un programme FORTRAN 95

Structures algébriques

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Représentation des Nombres

Théorème du point fixe - Théorème de l inversion locale

DOCM Solutions officielles = n 2 10.


Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Partie 1 - Séquence 3 Original d une fonction

Représentation géométrique d un nombre complexe

Calcul différentiel sur R n Première partie

Organigramme / Algorigramme Dossier élève 1 SI

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

TP Maple 4 Listes, tests, boucles et procédures

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

Fiche PanaMaths Calculs avec les fonctions sous Xcas

Objets Combinatoires élementaires

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours d initiation à la programmation en C++ Johann Cuenin

Fonctions de plusieurs variables

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Problèmes de Mathématiques Filtres et ultrafiltres

Programmation linéaire et Optimisation. Didier Smets

CHAPITRE V SYSTEMES DIFFERENTIELS LINEAIRES A COEFFICIENTS CONSTANTS DU PREMIER ORDRE. EQUATIONS DIFFERENTIELLES.

Module 16 : Les fonctions de recherche et de référence

Chapitre 7. Statistique des échantillons gaussiens. 7.1 Projection de vecteurs gaussiens


TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Correction du Baccalauréat S Amérique du Nord mai 2007

Utilisation d objets : String et ArrayList

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Définitions. Numéro à préciser. (Durée : )

Équations d amorçage d intégrales premières formelles

Complément d information concernant la fiche de concordance

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

NOTATIONS PRÉLIMINAIRES

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Cours 1 : Qu est-ce que la programmation?

Qu est-ce qu une probabilité?

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation Web. Madalina Croitoru IUT Montpellier

Transcription:

Cours / TP : Frederic Eyssette Cours : 17/0/06 Calcul Formel : Algèbre Linéaire I. Charger la librairie On veut utiliser la librairie d algèbre linéaire. Il faut la charger en mémoire. with(linalg) ; Warning, new definition for trace Problème : quand on charge la librairie, cela remplace les fonctions déjà définies du même nom. A présent, la fonction qui permettait de tracer une fonction (mise en écoute des appels) est masquée (mais reste accessible par debug). Si on veut lister le contenu de la librairie :?linalg ; II. Les vecteurs vector([5, -18, 3, 1]) permet de donner explicitement le vecteur. vector(5) déclare un vecteur de taille 5 avec uniquement des inconnues. Attention, v := [5, -18, 3, 1] est une liste et non un vecteur! Les vecteurs s affichent comme les listes, en lignes, car si l affichage était en colonne on pourrait rapidement remplir plusieurs pages. v1 := randvector(3) ; # on fait un vecteur dont les 3 éléments sont aléatoires v := randvector(3) ; v3:=*v1-v; # on fait un vecteur à partir des précédents Dans l exemple précédent, on défini l objet v3 par une expression ; il n est pas évalué, ce qui nous permet de faire du calcul symbolique. Si on veut l évaluer, il faut le demander de façon explicite : v3:=evalm(v3); v3 := [-135, -07, -14] On peut vouloir extraire une base d un ensemble de vecteurs, c est-à-dire enlever ceux qui s expriment en fonction des autres. basis({v1,v,v3}); {v1, v} # en effet v3 est défini en fonction de v1, l un des deux doit partir Attention : il ne faut pas d expressions mais uniquement des formes évaluées. Sinon, basis répond que ses arguments ne sont pas des vecteurs ; en effet, l un d eux est une combinaison linéaires de vecteurs, que l on doit donc évaluer pour le réduire en un vecteur. III. Les matrices De même on peut définir une matrice avec sa taille et de façon aléatoire : m := randmatrix(3, 3) ; # matrice de 3 lignes et 3 colonnes n := matrix(3, 3) ; # une matrice de 3 par 3 dont le contenu est en inconnu pour l instant v1:=randvector(3);v:=randvector(3);v3:=*v1-v; # on se donne un contenu de matrice p := augment(v1, v, v3) ; # on défini maintenant la matrice constituée de ces 3 vecteurs Après, on cherche à obtenir une base de la matrice. colspan(m); ([-85, -55, -37], [0, -10170, -5545]) colspace(m); ([0, 1, 1109/034], [1, 0, 839/10170]) # on extrait une base exprimée tel quelle # on simplifie le début colspace extrait la base et tente de simplifier les premières coordonnées. En contrepartie, les derniers s expriment de façon particulièrement lourde, avec des fractions. Il procède en faisant une élimination de Gauss sur les colonnes. colspan utilise une forme d élimination de Gauss où il évite d obtenir des fractions. Le désavantage est qu on peut se retrouver avec des nombres très grands. Etudions à présent mx = Y, soit la matrice m appliquée à un vecteur X et qui donne un vecteur Y. On peut s intéresser à deux choses : - mx = 0, on regarde tous les X qui rendent le résultat nul, c est le noyau. - mx = Y, on regarde tous les Y qu on peut fabriquer, c est l image. Pour l image, on a immédiatement la base mais pas les équations. Pour le noyau c est l inverse. 1

IV. Entre matrices et équations y := vector(3) ; # on se donne un vecteur à 3 coordonnées inconnus m1 := augment(m, y) ; # soit la matrice m précédente à laquelle on rajoute les inconnus gausselim(m1) ; # l algorithme de gauss sur la matrice la rend triangulaire supérieure Après avoir appliqué Gauss on a : -9-19 -39 y 1 0 366/9-366/9 y (91/9)y 1 0 0 0 y 3 + (893/1)y 1 (993/1)y Et on peut en extraire un système d équation : a 11 x 1 + + a 1m x m = 0 equas:=geneqns(m,x); # les équations générées par la matrice m avec des x equas := {-9x a n1 x 1 + + a nm x m = 0 1-19x -39x 3 = 0, -91x 1-47x -135x 3 = 0, -53x 1 + 68x -174x 3 = 0} Pour le résoudre, il y a plusieurs possibilités. solve résout un peu tout (polynômes, etc ) donc c est une fonction très générique et pas assez efficace. Comme ici on sait que l on a un système linéaire, on préfère utiliser la fonction adaptée : linsolve. Si on sait ce qu on a, on restera en matrice plutôt que de passer en équations. linsolve(m, [0, 0, 0]) ; [0 0 0] # on demande quel est le noyau de la matrice, c est le vecteur [0 0 0] kernel(m) ; { } # une façon de demander la même chose où la notion est implicite linsolve peut avoir besoin de déclarer des variables. Par exemple pour l opération précédente, si le noyau n est pas réduit à 0, alors linsolve va l exprimer en fonctions de paramètres. Pour ne pas avoir de conflit entre les paramètres qui seront ainsi créées et les variables de l utilisateur, Maple les précède de _. v1 := randvector(3) : v := randvector(3) : v3 := evalm(3*v1-*v) : m := augment(v1, v, v3) : linsolve(m, [0, 0, 0]) ; [-3 _t 1 _t 1 _t 1 ] # la solution sous forme paramétrée kernel(m) ; {[ -3 1]} # un vecteur directeur du noyau. C est la même chose! On peut naviguer entre équations et matrices : eqns := {x+y=0,3x -5y=0}; a := genmatrix(eqns, [x,y]); # d où une matrice 1 3-5 equas:=geneqns(m,x); # les équations du noyau, puisque = 0 solve(equas); {x 1 = -x 3, x = x 3, x 3 = x 3 } # résoudre des équations de façon générale geneqns(gausselim(m),x); # on donne les équations du noyau provenant de l algorithme de Gauss Cette dernière instruction nous donne {0 = 0, -5x + 450x 3 = 0, -7x 1-50x + 79x 3 = 0}. Après le solve, il y avait des équations inutiles comme x 3 = x 3 ; ici on en a sous la forme 0 = 0. On fait donc une substitution : subs( 0 = 0 =NULL, geneqns(gausselim(m),x)) ; Après remplacement des occurrences de 0 = 0 par rien (qui se traduit avec NULL en Maple), on a : {-5x + 450x 3 = 0, -7x 1-50x + 79x 3 = 0} V. Avoir les idées claires sur le noyau et l image V 1 V V 3 V 4 x 1 x x 1 V 1 + x V + x 3 V 3 + x 4 V 4 x 3 x 4 On part d un vecteur à 4 composantes et on arrive à une combinaison linéaire de vecteurs à 5 composantes. D où : R 4 R 5 Noyau Image Prenons le cas où on tire deux vecteurs aléatoirement, et autres en sont des combinaisons linéaires. Donc, la base est formée de vecteurs, i.e. la dimension est. Combien a-t-on d équations pour l image? C est la dimension de l espace d arrivé moins celle de la base : donc 5 = 3 équations pour l image. Pour le noyau, c est la dimension de l espace de départ moins celle de la base, d où 4 = équations.

VI. Quelques problèmes simples Calculons les équations de l espace engendré par une matrice, i.e. les équations de l image. v1 := randvector(3) : v := randvector(3) : v3 := evalm(3*v1-*v) : v4 := evalm(* v1 + v) : y := vector(5) : m := augment(v1, v, v3, v4, v5, y) : On se donne 4 vecteurs dont sont combinaisons linéaires des autres. La base est donc de dimension, et comme on l a vu précédemment on s attend à avoir 3 équations pour l image. 77 K8 16 105 y 1 1 30 3 K9 y 3 95 16 06 79 y 0 K57 K57 57 y 4 K y 3 m := 1 30 3 K9 y 3 0 0 0 0 y 5 K 490 1 K7 K5 8 y 19 y 3 K 555 19 y 4 4 0 0 0 0 0 55 K15 95 70 y 5 0 0 0 0 0 A gauche, on a la matrice résultat des lignes de commandes. A droite, ce que nous donne gausselim(m) ; Le problème est que nous ne récupérons plus qu une solution équation : y 5 (490/19)y 3 (555/19)y 4 = 0 En effet, l élimination de Gauss est allée trop loin et a modifié le second membre. Il faut donc l arrêter à la colonne 4 avec gausselim(m, 4) ; on obtient ainsi 3 équations : y 1 (051/57)y 3 (338/57)y 4 = 0 y (581/57)y 3 (834/57)y 4 = 0 y 5 (490/19)y 3 (555/19)y 4 = 0 Un autre problème : une matrice contenant des éléments tirés au hasard a de fortes chances d avoir un noyau réduit au seul vecteur nul et comme image l espace tout entier. En effet, il est peu probable que parmi les vecteurs tirés au hasard, certains soient combinaisons linéaires des autres ; donc les seules valeurs d inconnues pour obtenir la combinaison linéaire triviale seront 0, i.e. un noyau réduit à 0. Si on veut que le noyau ne soit pas nul et que l image ne soit pas tout, alors il faut le faire en deux temps : Pour passer de R 5 à R 3, on prend une matrice à 3 lignes et 5 colonnes. Le noyau est de dimension 5 3 =, donc pas réduit à 0. R 5 R 5 R 3 Pour passer de R 3 à R 5, on prend une matrice à 5 lignes et 3 colonnes. L image est de dimension 3 (on arrive dans un sousespace vectoriel de R 5 ). Pour prendre un autre exemple, un plan dans un espace de dimension R n reste de dimension ; l application n augmente pas la dimension! Détaillons les matrices dont nous avons besoin. Soit m1 la matrice de R 5 à R 3, et m celle de R 3 à R 5 : m 1. x 1 x 5 = x 1 V 1 + x V + x 3 V 3 + x 4 V 4 + x 5 V 5, et chaque colonne n a que 3 éléments d où R 3 m. x 1 x x 3 = x 1 W 1 + x W + x 3 W 3, et chaque colonne a 5 éléments d où R 5 Pour résumer notre passage de R 5 à R 5, il va falloir multiplier les matrices. Attention, cela se passe de la même façon que pour le composition de fonctions : on applique m 1 et sur le résultat obtenu on applique m, ce qui va donc s écrire m.m 1. D où les lignes de code : m1 := randmatrix(3,5) : m := randmatrix(5, 3) : m := multiply(m,m1) : # on fait les matrices kernel(m) ; {[ 76/65188 1 0-953/65188 538/65188], [-648/65188 0 1 1/65188 9/65188]} 3

VII. Ecrire des programmes d algèbre linéaire a) L appartenance d un vecteur à l espace engendré par un ensemble de vecteurs La fonction prend un vecteur v et un ensemble ens. On l appellera par «appartient(v4, {v1, v, v3})». On cherche ici à typer la procédure pour qu elle s arrête si les objets ne sont pas du bon type. Pour obtenir la liste des types connus en Maple, utiliser?type. Connaissant le type, on le lie à l objet par v :: type. Une solution est de voir si la base de l ens. et de l ensemble U le vecteur ont le même nombre d éléments : appartient := proc(v::vector, ens::set) # on contraint les types à vector et set (ensemble) local a, b; # on définie a et b comme variables locales a := basis(ens); # basis prend en entier un ensemble. Là, ça tombe bien. b := basis({op(ens), v}); # op : on enlève les opérandes de l ensemble, i.e. le {} if nops(a) = nops(b) then true else false fi # nops : nombre d'opérandes (cardinal) end; Plutôt que de faire «if <expression> then true else false fi», on peut renvoyer le résultat de l expression. Attention, il y a une petite subtilité : nops(a) = nops(b) est une expression Maple et ne sera pas évaluée. Pour la considérer comme une expression booléenne (ce que fait le if ), on utilise evalb. Ainsi : evalb(nops(a) = nops(b)) Une autre solution : tester si le vecteur v s écrit comme combinaison linéaire des vecteurs de l ensemble. Il faut résoudre un sys. linéaire dont le nd membre est v et où la matrice a en colonnes les vecteurs de ens: appartient := proc(v ::vector, ens ::set) local m ; m := augment(op(ens)) ; # si le vecteur ne s écrit pas comme C.L., il n appartient pas evalb(linsolve(m,v) <> NULL) # i.e. si linsolve(m, v) n a pas de solution, il n appartient pas. end; b) L inclusion L inclusion d un ensemble dans un autre signifie ici que tous les vecteurs du premier ensemble appartiennent à l espace engendré par le second. On peut donc utiliser la fonction précédente d appartenance pour voir si chacun des vecteurs extrait appartient bien ; on lie les résultats avec un and. inclus := proc(ens1 ::set, ens ::set) local res, v; res := true; # on va vouloir lier les résultats avec un and. Le neutre pour le and c est true for v in ens1 do res := res and appartient(v, ens) od ; # dès que ce n est pas bon, il faudrait if -> break res end ; Ce programme a en outre le désavantage de construire la matrice pour l ensemble à chaque tour, par le biais de la fonction appartient ; elle est algébriquement juste, mais a une très mauvaise complexité. c) L égalité L égalité est simplement une inclusion dans les deux sens, donc on peut avoir directement : egaux := proc(ens1 ::set, ens ::set) inclus(ens1, ens) and inclus(ens, ens1) end ; egaux := proc(ens1::set, ens::set) # un autre solution se basant sur un même affichage de solutions local m1, m, equas1, equas; # soit les matrices pour les deux ensembles et les équations associées m1 := augment(op(ens1)); m := augment(op(ens)); equas1 := geneqns(m1, x); equas := geneqns(m, x); evalb(solve(equas1) = solve(equas)) # si les solutions sont les mêmes, alors les ensembles sont égaux end 4

VIII. Problèmes avec paramètres On a trois vecteurs [a, 1, 1] ; [1, a, 1] ; [1, 1, a]. On veut savoir s ils sont linéairement indépendants. Bien évidemment, cela dépend des paramètres a. On veut identifier les valeurs de a donnant des cas particuliers. On ne peut pas demander la base : v1:=vector([1,1,a]);v:=vector([1,a,1]);v3:=vector([a,1,1]); basis({v1,v,v3}); {v1, v, v3} Maple ne voit pas le même problème que nous. On le considère comme une famille de problèmes dans R 3 tandis qu il voit un seul problème où les vecteurs vivent dans l espace des fonctions en a. Et dans cet espace là, sa réponse est correcte. Ceci est révélateur : m:=augment(v1, v, v3) ; colspace(m); {[1, 0, 0], [0, 1, 0], [0, 0, 1]} Il faut faire l élimination de Gauss pour mettre en évidence le problème et discuter des solutions : gausselim(m); On avait la matrice et on récupère a 1 1 1 a 1 1 1 a On voit donc qu il y a comme valeurs particulières a = 1 et les racines de a² -a +. En effet, les éléments qui ont de l importance sont ceux sur les extrémités des échelons de Gauss. Pour résoudre un système après élimination de Gauss, on le fait par remontée. On s intéresse donc à m 3,3 puis à m, et enfin à m 1,1 (qui ne dépend ici d aucune variable). Le système obtenu est : Si a a² 0 λ 3 = 0 d où les racines de a² -a + Si a 1 0 λ = 0 d où a 1 Si 1 0 λ 1 = 0 pas de problème. solve(-a^ - a +); -, 1 Il y a donc deux valeurs particulières - et 1. Pour 1, on voit que les colonnes sont toutes identiques On a maintenant trois cas à traiter : les cas particuliers - et 1, et le cas général où a n est ni - ni 1. Cas particulier a = 1 m1 := subs(a=1, evalm(m)) ; # on construit la matrice du cas particulier kernel(m1) ; {[-1, 1, 0], [-1, 0, 1]} # on demande la base du noyau m1t := gausselim(m1) ; # on prend la matrice triangulaire par l élimination de gauss subs( 0=0 = NULL, geneqns(m1t, x)) ; # demande des équations triangularisées du noyau {x 1 + x + x 3 = 0} Il est de bon ton de remarquer que le noyau étant dans R 3, puisque sa base a éléments alors il est contraint par 3 = 1 équation. Autrement dit, dimension base + nombre équation = dimension espace. colspace(m1) ; {[1, 1, 1]} # on demande la base de l image y := vector(3) ; m1img := gausselim(augment(m1, y), 3)) ; # matrice pour équations de l image 1 1 1 y 1 0 0 0 y K y 1 0 0 0 y 3 K y 1 1 1 a 0 a-1 1-a 0 0 a² -a Bien évidemment, il ne faut pas faire d élimination dans le second membre, i.e. on doit arrêter Gauss à la 3 ème colonne. On obtient alors les équations de l image : {y = y 1, y 3 = y 1 }. On a deux équations et une base à un élément, dans un espace de dimension 3, c est valide. Cas général a 1 ^ a - On est ici dans le problème λ 1 v 1 + λ v + λ 3 v 3 = 0 et l unique solution est λ 1 = λ 1 = λ 1 = 0. Les trois vecteurs sont linéairement indépendants, ils forment une base de l espace qu ils engendrent (de dim. 3). Comme l espace dans lequel ils sont définis est lui aussi de dimension 3, alors ils engendrent l espace tout entier et n importe quelle base convient (par exemple, la base canonique). En résumé, le noyau est de base {} et d équations {x 1 = 0, x = 0, x 3 = 0}. L image est de base canonique et d équations {}. Attention aux dimensions! Si on va de R 3 dans R 4 par exemple, il y aurait une équation! 5

IX. Problèmes avec paramètres : un vecteur est-il combinaison linéaire? Etant donnés les vecteurs v 1 = [1, a, a, 1], v = [a, 1, a, 1] et v 3 = [3, 3, a+, a], on veut savoir si v 3 est combinaison linéaire de v 1 et v. On doit donc écrire la matrice correspondant au système λ 1 v 1 + λ v = λ 3 v 3. v1:=vector([1,a,a, 1]);v:=vector([a, 1, a, 1]);v3:=vector([3, 3, a+, a]); m := augment(v1, v, v3); Comme v 3 est le second membre, il ne faut pas d élimination dans sa colonne! mg := gausselim(m, ) ; 1 a 3 1 a 3 a 1 3 a a ac 1 1 a gausselim 0 1K a ak 3 0 0 a C K a 0 0 6K a K a Ceci n a de solutions que si a + a² = 0 ET 6 a a² = 0. solve(a + a^ = 0) ; -1, solve(6 a a^ = 0) ; -3, 1 $ l 1 C a $ l = 3 (1K a ) $ l = a K 3 0 = a C K a 0 = 6K a K a Donc, λ 3 n est combinaison linéaire de λ 1 et λ que si a =. On voit alors facilement la combinaison : mnew := subs(a =, evalm(m)) ; On peut le faire calculer rapidement : subs(a =, evalm(v3)) ; [3, 3, 4, ] subs(a=, evalm(v1, v)) ; [3, 3, 4, ] 1 3 1 3 4 1 1 On voit λ 3 = λ + λ 1 Comme le raisonnement appliqué est assez mécanique, une transformation en procédure serait simple : - Soient n vecteurs. On veut savoir si le n ième est combinaison linéaire des n-1 précédents. - On fait la matrice correspondante. - On arrête l élimination de Gauss à n-1. - On résout les systèmes et on prend l intersection de l ensemble des solutions. Savoir quels systèmes résoudre demandera peut-être un peu d astuce. X. Au passage : les commandes sur les ensembles Pour avoir l intersection de systèmes, on pourra utiliser assez logiquement la commande intersect. intersect({-1, }, {, 3}) ; {} Signalons au passage qu il y a également les commandes suivantes, pour le travail sur les ensembles : - union(ens 1,, Ens n ) ; l ensemble union. Attention, ce n est pas le multi-ensemble! Les doublons seront supprimés. - minus(ens 1, Ens ) ; le premier ensemble privé de tous les éléments du second ensemble - subset(ens1, Ens) ; est-ce que le premier ensemble est un sous-ensemble du second? On pourra composer ces opérateurs afin d obtenir des expressions ensemblistes plus complètes. MyEns := a subset b union c minus d; subs(a = {}, %); true # l ensemble vide appartient bien à tout 6