Page 1 sur 1

message d'erreur

Publié : mar. sept. 18, 2012 4:13 pm
par Denizou
Bonjour,

J'ai écrit ce programme et lorsque je le teste ligne de commande par ligne de commande (en variable globale donc) tout fonctionne correctement, et j'obtiens les coordonnées d'une matrice P sur une base de matrice B :
decompose(P,B):={
local I,Q,n,d,sys,X,k,l,s;
n:=coldim(P);d:=size(B);

Q:=evalm(P-add(X[k]*B[k],k=0..(d-1)));
sys:=seq(seq(Q[k,l],l=0..(n-1)),k=0..(n-1));
I:=seq(X[k],k=0..(d-1));
s:=linsolve(sys,I);
if (s==[]) then afficher("erreur") else return s end}

:;

Lorsque je lance mon programme, Xcas calcule n et d sans problème mais bloque sur le calcul de Q (qu'il sait effectuer pourtant !) et me retourne ce message d'erreur :
"Gen [int] Erreur: Type Argument Incorrect"

Je n'arrive pas à comprendre ce qui change entre les commandes ligne par ligne et le programme.
Quelqu'un pourrait - il au moins m'expliquer ce qui change, ou ce que je n'ai pas vu dans mon programme.

Merci

François

PS : j'ai testé le programme avec P:=idn(3) et B:=([[1,-1,-1],[-1,1,-1],[-1,-1,1]],[[1,-1,0],[0,1,-1],[-1,0,1]],[[1,0,-1],[-1,1,0],[0,-1,1]])

Re: message d'erreur

Publié : mar. sept. 18, 2012 6:13 pm
par parisse
Ce sont surement les declarations locales qui posent problème. Ainsi X[k] génère une erreur parce que X a été declarée comme locale et donc initialisée à 0. Il suffit de purger X après la déclaration ou la déclarer en global ou ne pas la déclarer (et ignorer le warning). La même chose s'applique pour k.

Re: message d'erreur

Publié : mer. sept. 19, 2012 7:45 am
par Denizou
Bonjour,
Merci de votre réponse
Je viens d'écrire le programme avec X et k en variable globale :
1) j'obtiens le message suivant : "[[[1,0,0],[0,1,0],[0,0,1]],[[1,-1,-1],[-1,1,-1],[-1,-1,1]],[[1,-1,0],[0,1,-1],[-1,0,1]],[[1,0,-1],[-1,1,0],[0,-1,1]]] size() != [P,B] Erreur: Valeur Argument Incorrecte"
2) lorsque je remets X et k en variables locales, ce même message apparaît
3) il ne se passe rien quand j'exécute "debug"

Visiblement, il y a une subtilité sur le statut des variables qui m'échappe. En cherchant dans l'aide ou le tutoriel je n'ai pas réussi à comprendre ce qui n'allait pas.... et je ne comprends toujours pas pourquoi lorsque je tape dans la ligne de commande ce qui suit tout va bien !!
n:=coldim(P);d:=size(B);
Q:=evalm(P-add(X[k]*B[k],k=0..(d-1)));
sys:=seq(seq(Q[k,l],l=0..(n-1)),k=0..(n-1));
I:=seq(X[k],k=0..(d-1));
s:=linsolve(sys,I);

Re: message d'erreur

Publié : mer. sept. 19, 2012 8:12 am
par frederic han
Bonjour,

J'ai enleve le X du local X

et
votre fonction attend 2 arguments: P et B, si vous faites:
P:=idn(3) et B:=([[1,-1,-1],[-1,1,-1],[-1,-1,1]],[[1,-1,0],[0,1,-1],[-1,0,1]],[[1,0,-1],[-1,1,0],[0,-1,1]])

decompose(P,B) recoit 4 arguments.
il faut donc faire:
decompose(P,[B])
la ca fait quelque chose. (NB: je n'ai pas regarde ce que ca faisait)

Cordialement

F.Han