 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
manonlilou
Inscrit le: 30 Mai 2012 Messages: 3
|
Posté le: 30 Mai 2012 16:19 Sujet du message: problème avec convert |
|
|
Bonjour tout le monde
Je suis toute nouvelle en maple mais je rencontre déjà un souci
En effet, j'ai du programmer une fonction qui regarde si une famille de vecteurs est libre. Si elle est libre je dois la compléter en une base de R^n et si elle n'est pas libre je dois renvoyer 'erreur' . Voici ce que j'ai fais, et le message d'erreur que maple renvoie :
> complete:=proc(L)
> local S;
> convert(vector(L),matrix);
> S:=nrow(L);
> if nrow(L)<> ncol(L)then delrows(L,S..S);
> if det(L)= 0 then print(erreur);
> else base(L);
> fi:
> fi:
> end:
>
> base:=proc(L)
> local V,U,X;
> X:= transpose(L);
> V:=kernel(X);
> U:= L,V;
> end:
>
> v1:=randvector(3);
v1 := [-54, 10, -77]
> v2:=randvector(3);
v2 := [-63, -90, 61]
> v3:=randvector(3);
v3 := [-3, -82, 16]
> L:= [v1,v2,v1+v2];
L := [v1, v2, v1 + v2]
> complete(L);
Error, (in delrows) First argument must be a matrix
Je ne comprend pas pourquoi il me dit cela puisque j'utilise un convert qui devrait justement transformer ma famille de vecteurs en matrice
Je vous remercie par avance pour votre aide  |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Mai 2012 17:57 Sujet du message: |
|
|
Bonjour,
L était une liste de vecteurs, donc S:=convert(L,matrix); permet la conversion en matrice.
J'utilise ensuite la fonction rank qui calcule le rang de S: si ce rang n'est pas égal au nb de vecteurs de L, la famille est liée: donc le résultat est erreur sinon on utilise base.
Revoyez votre procédure base car la méthode employée en adjoignant un vecteur du noyau ne donnera pas forcément une base de R^n, car certains des premiers vecteurs peuvent être dans le noyau.
Code: |
> with(linalg):
>
> complete:=proc(L::list)
> local S:
> S:=convert(L,matrix);
> if rank(S)<>nops(L) then
> erreur
> else base(L) fi
> end:
>
|
A plus tard pour une autre question.
Dernière édition par ALS le 02 Juin 2012 9:54; édité 2 fois |
|
Revenir en haut de page |
|
 |
manonlilou
Inscrit le: 30 Mai 2012 Messages: 3
|
Posté le: 30 Mai 2012 18:10 Sujet du message: |
|
|
Ha merci beaucoup, j'avais vu qu'on pouvait utiliser nops mais seulement je n'avais pas compris ce que cette fonction faisait.
Lorsque je rentre ce que vous m'avez indiqué maple me dit :
Error, (in convert/matrix) expecting array or list , pourtant L est bien une liste!
Je suis désolée, à vrai dire j'ai encore beaucoup de mal avec maple  |
|
Revenir en haut de page |
|
 |
manonlilou
Inscrit le: 30 Mai 2012 Messages: 3
|
Posté le: 30 Mai 2012 18:27 Sujet du message: |
|
|
Je viens de voir la fonction nullspace() .
Peut-elle être utile pour résoudre mon problème? |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Mai 2012 18:41 Sujet du message: |
|
|
Oui, il semble avoir qqs problèmes, je travaille avec une version récente, Maple 15.
J'ai écrit la procédure base: je complète la famille libre avec des vecteurs nuls de façon à obtenir une matrice M de déterminant 0.
Ensuite je remplace les vecteurs nuls ainsi ajoutés par des vecteurs aléatoires jusqu'à obtenir det(M) non nul, ce qui fait sortir de la boucle while.
L'opérateur $ permet de répéter plusieurs fois: exemple x$3 équivaut à x,x,x
seq crée une séquence (ici de vecteurs aléatoires).
Code: |
> with(linalg):
> complete:=proc(L)
> local S:
> S:=convert(L,matrix);
> if rank(S)<>nops(L) then
> erreur
> else base(L) fi
> end:
> base:=proc(L)
> local k,n,M,S;
> S:=convert(L,matrix):
> n:=nops(L[1]):
> k:=n-rank(S):
> M:=matrix(n,n,[op(L),[0$n]$k]);
> while det(M)=0 do
> M:=matrix(n,n,[op(L),seq(convert(randvector(n),list),i=1..k)]):
> od:
> convert(M,listlist)
> end:
> v1:=convert(randvector(3),list); v2:=convert(randvector(3),list); v3:=convert(randvector(3),list);
> L:= [v1,v2,v1+v2];
> complete(L);
v1 := [-52, -46, 9]
v2 := [72, 28, 20]
v3 := [-77, -86, 29]
L := [[-52, -46, 9], [72, 28, 20], [20, -18, 29]]
erreur
> L:=[v1,v2]: complete(L);
[-52 -46 9]
[ ]
[ 72 28 20]
[ ]
[ 20 -64 43]
[[-52, -46, 9], [72, 28, 20], [20, -64, 43]]
> L:=[v1]: complete(L);
[-52 -46 9]
[ ]
[ 86 67 28]
[ ]
[-70 -84 32]
[[-52, -46, 9], [86, 67, 28], [-70, -84, 32]]
|
Voilà, ça fonctionne.
Bonne soirée. |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|