Bonjour
Je cherche à faire un truc tout bête : générer un vecteur de la base canonique de .
Donc je fais cette procédure simple :
vecteur:=proc() local T,n;
T:=[0,0,0,0];
n:=roll();
T:=subs(T[n]=1,T);
T;
end proc;
Bon j'explique un peu : au départ j'ai initialisé un vecteur nul T, et je veux au hasard changer un des 0 en 1. J'ai appelé roll:=rand(1..4) qui génère au hasard un chiffre entre 1 et 4 que j'attribue à n. Et je remplace le n ième 0 par un 1 via la fonction subs.
Sauf que Maple me renvoit [1,1,1,1] comme s'il avait appliqué la procédure plusieurs fois
Merci de me dire où j'ai fait une boulette !
Salut ma biche,
Essaie voir :
vecteur:=proc() local T,n;
> T:=[0,0,0,0];
> n:=roll();
> T[n]:=n;
> T;
> end proc;
ça a l'air de marcher chez moi (et ne demande pas pourquoi ton truc fonctionne pas )
Ah mince tu veux un 1 au hasard, pas un truc au hasard entre 1 et 4, il suffit de mettre T[n]:=1:
Maintenant si tu voulais juste savoir l'origine du bug, I don't see Peut-être que subs n'aime pas les vecteurs!
Hep !
Alors l'X ?
Oui ce que je cherchais à comprendre c'est pourquoi ça ne fonctionne pas, j'ai réussi à faire autrement sinon.
Et pourtant si le subs fonctionne en dehors de la procédure c'est ça qui est étonnant.
Ba l'X je suis déçu je m'attendais à plus de challenge ... Lol j'ai pas une formule de juste, et quand bien même je me souviens d'un 3/2kBT je le mets au carré pour le fun ...
Bref
Ah oki donc désolé je sais pas pourquoi Maple n'est pas content.
Sinon tu sais pas si y'a un truc magique pour faire tous les calculs matriciels modulo p ? (2 déjà ça m'irait).
Parce que pour le moment je me traine des map(proc(x) x mod 2,M) partout c'est relou.
"calculs matriciels" ok je suis .. "modulo 2" ah
Je ne connais pas cette commande, mais elle n'est pas si courante et du coup je ne pense pas qu'on puisse la remplacer.
Mais si tu fais une petite procédure à côté, que tu appelles régulièrement ça ne va pas ? Enfin je me doute que c'est pas ce que tu veux.
T'es difficile
Bonjour,
Avec Maple, l'instruction
T:=subs(T[n]=1,T);
remplace T[n] par 1.
Ici T[n] vaut 0 (quel que soit n) donc elle remplace bêtement 0 par 1, c'est tout!
Pour faire du calcul matriciel modulaire il existe un package spécifique.
with(LinearAlgebra:-Modular):
A:=Mod(7,[[13,74],[24,77]],integer);
[6 4][3 0]
Multiply(13,A,A);
[9 11] [5 12]
Inverse(13,A);
[ 0 9] [10 6]
Oui, mais ce que je ne comprends pas c'est que mon "T:=subs(T[n]=1,T);" fonctionne en dehors de la procédure en ne changeant qu'un seul 0 en 1 tandis que dans la procédure il les change tous.
Je ne suis pas d'accord infophile:
T:=[0,0,0,0]:troll:=rand(1..4):n:=troll():T:=subs(T[n]=1,T);
donne T := [1, 1, 1, 1]
Oui pardon j'avais essayé avec T:=[1,2,3,4] par exemple, et là il ne change qu'une composante.
Pourquoi dans le cas où toutes les composantes sont égales subs les changent toutes ?
Parce que subs(truc=bidule,T) remplace partout dans T truc par bidule.
subs(0=1,T) remplace tous les 0 par 1.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :