Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Maple : Procédure répétée ?

Posté par
infophile
11-05-09 à 19:35

Bonjour

Je cherche à faire un truc tout bête : générer un vecteur de la base canonique de \mathbb{R}^4.

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 !

Posté par
gui_tou
re : Maple : Procédure répétée ? 11-05-09 à 19:58

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 )

Posté par
gui_tou
re : Maple : Procédure répétée ? 11-05-09 à 20:00

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!

Posté par
infophile
re : Maple : Procédure répétée ? 11-05-09 à 20:20

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.

Posté par
gui_tou
re : Maple : Procédure répétée ? 11-05-09 à 20:25

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.

Posté par
infophile
re : Maple : Procédure répétée ? 11-05-09 à 20:32

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.

Posté par
gui_tou
re : Maple : Procédure répétée ? 11-05-09 à 20:40

"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

Posté par
infophile
re : Maple : Procédure répétée ? 11-05-09 à 20:44

Ce c***** de Maple s'est fermé et j'ai tout perdu -_- VDM

Posté par
gui_tou
re : Maple : Procédure répétée ? 11-05-09 à 20:46

Moi je peux pas enregistrer, j'ai une version crackée

Posté par
jandri Correcteur
re : Maple : Procédure répétée ? 12-05-09 à 10:27

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]

Posté par
infophile
re : Maple : Procédure répétée ? 12-05-09 à 11:42

Bonjour,

pourquoi elle remplace tous les 0? Moi je voulais juste celui d'indice n.

Posté par
jandri Correcteur
re : Maple : Procédure répétée ? 12-05-09 à 11:59

Pour remplacer celui d'indice n il suffit d'écrire:
subsop(n=1,T);

(voir l'aide sur subsop).

Posté par
gui_tou
re : Maple : Procédure répétée ? 12-05-09 à 18:48

Ah, bien vu et merci jandri !

Posté par
infophile
re : Maple : Procédure répétée ? 12-05-09 à 21:10

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.

Posté par
jandri Correcteur
re : Maple : Procédure répétée ? 12-05-09 à 21:43

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]

Posté par
infophile
re : Maple : Procédure répétée ? 12-05-09 à 22:39

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 ?

Posté par
jandri Correcteur
re : Maple : Procédure répétée ? 12-05-09 à 23:01

Parce que subs(truc=bidule,T) remplace partout dans T truc par bidule.
subs(0=1,T) remplace tous les 0 par 1.

Posté par
infophile
re : Maple : Procédure répétée ? 12-05-09 à 23:14

D'accord, merci jandri



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !