π
<-
Chat plein-écran
[^]

indirection et matrices

Pour le TI-Basic sur Nspire

indirection et matrices

Message non lude Amendill » 13 Nov 2018, 22:27

Bonjour,

Je débute avec l'indirection et je ne comprend pas pourquoi cela ne marche pas comme je souhaite.
Du coup mon morceau de code est le suivant :
Code: Tout sélectionner
For i,1,n
newMat(4,4)→#("t"&string(i-1)&string(i))
cos(t[4,i])→#("t"&string(i-1)&string(i))[1,1]
J'attribue un à un des résultats de calculs à différents matrices mais quand je fais vérifier la syntaxe et enregistrer ça me remplace la 3ème ligne par :

Code: Tout sélectionner
cos(t[4,i])→#("t"&string(i-1)&string(i))[1 1]
La position de mon résultat est remplacé par une matrice 1 ligne et 2 colonnes, peut-être que l'on a pas le droit de faire ce que je voulais...

Si quelqu'un a une idée ?
Merci d'avance
Amendill
Avatar de l’utilisateur
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 7.8%
 
Messages: 4
Inscription: 25 Jan 2017, 22:37
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etudiant

Re: indirection et matrices

Message non lude Extra44 » 14 Nov 2018, 14:18

Bjr,

Pour bien comprendre (je ne suis pas sur d'avoir tout compris) ...
Au 1er passage : i vaut 1 et on fait :
'newMat(4,4)→#("t"&string(i-1)&string(i))'
cela créé un matrice 4x4 et la met dans la variable t01 (j'ai bien vérifié à la main).

Ensuite tu fais :
'cos(t[4,i])→#("t"&string(i-1)&string(i))[1,1]'
Ici , autant à droite de la flèche (affectation) je comprends que tu prends le terme [1 1] du tableau que tu viens de créé, autant à gauche, il y a un bug ... ? non : car tu utilise le terme t[4,i] donc au début t[4,1] , or dans le code montré, il n'y a pas de tableau nommé t... non ?
Et tu ne le fais qu'une fois par matrice créé, donc on ne voit pas l'affectation des éléments des matrices créées.
Donc la 2e fois :
i=2 puis newmat qui créé une matrice 4x4 que tu mets dans une nouvelle variable t12[ ]
Puis i=3 ... tableau 4x4 dans t23
Puis i=4 ... tableau 4x4 dans t34

Etait ce bien ton intention ?

Sinon pour bien comprendre mets le tns en PJ, qu'on puisse t'aider si possible

Petit exemple :
Code: Tout sélectionner
Define prog1()=
Prgm
:n:=5
:For i,1,n
: newMat(4,4)→#("t"&string(i-1)&string(i))
:EndFor
:For i,1,n
: For i1,1,4
:  For i2,1,4
:#("t"&string(i-1)&string(i))[i1,i2]:=i*100+i2*10+i1
:  EndFor
: EndFor
:EndFor
:EndPrgm
Avatar de l’utilisateur
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 58.4%
 
Messages: 591
Images: 1
Inscription: 20 Jan 2011, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: S.I.

Re: indirection et matrices

Message non lude Amendill » 14 Nov 2018, 18:01

Merci de venir à mon secours :)
C'était bien mon intention effectivement mais c'est l'attribution des résultats qui me pose problème.
Pour écrire à la ligne 1 / colonne 1 d'un tableau je met : tableau[1,1] mais à la vérification du programme toutes ces formes deviennent : tableau[1 1]
Je ne suis pas certain que ce soit normal mais en copiant et collant mon programme sur le site les virgules restent...

Je met mon programme complet (certainement non fonctionnel) ci-dessous et en PJ :
n représente le nombre de lignes de la matrice t qui a toujours 5 colonnes
Code: Tout sélectionner
Define LibPub rbt3(n,t)=
Prgm
:setMode(2,2)
:Local t
:For i,1,n
: newMat(4,4)→#("T"&string(i-1)&string(i))
: cos(t[4,i])→#("T"&string(i-1)&string(i))[1,1]
: −sin(t[4,i])→#("T"&string(i-1)&string(i))[1,2]
: 0→#("T"&string(i-1)&string(i)[1,3])
: t[3,i]→#("T"&string(i-1)&string(i)[1,4])
: cos(t[2,i])*sin(t[4,i])→#("T"&string(i-1)&string(i)[2,1])
: cos(t[2,i])*cos(t[4,i])→#("T"&string(i-1)&string(i)[2,2])
: −sin(t[2,i])→#("T"&string(i-1)&string(i)[2,3])
: −t[5,i]*sin(t[2,i])→#("T"&string(i-1)&string(i)[2,4])
: sin(t[2,i])*sin(t[4,i])→#("T"&string(i-1)&string(i)[3,1])
: sin(t[2,i])*cos(t[4,i])→#("T"&string(i-1)&string(i)[3,2])
: cos(t[2,i])→#("T"&string(i-1)&string(i)[3,3])
: t[5,i]*cos(t[2,i])→#("T"&string(i-1)&string(i)[3,4])
: 0→#("T"&string(i-1)&string(i)[4,1])
: 0→#("T"&string(i-1)&string(i)[4,2])
: 0→#("T"&string(i-1)&string(i)[4,3])
: 1→#("T"&string(i-1)&string(i)[4,4])
:EndFor
:For j,1,n
:∏(#("T"&string(k-1)&string(k)),k,1,j)→#("T0"&string(j))
:EndFor
:For l,1,n
: If t[1,l]=0 Then
:    1→τ
:  Else
:    0→τ
:  EndIf
:  #("T0"&string(l)[1,3])→a[1,1]
:  #("T0"&string(l)[2,3])→a[2,1]
:  #("T0"&string(l)[3,3])→a[3,1]
:  #("T0"&string(n)[1,4])→b[1,1]
:  #("T0"&string(n)[2,4])→b[2,1]
:  #("T0"&string(n)[3,4])→b[3,1]
:  #("T0"&string(l)[1,4])→c[1,1]
:  #("T0"&string(l)[2,4])→c[2,1]
:  #("T0"&string(l)[3,4])→c[3,1]
: t[1,l]*a+crossP(τ*a,b-c)→#("Jp"&string(l))
: τ*a→#("Jo"&string(l))
:EndFor
:For o,1,n
: Return #("Jp"&string(o))
: Return #("Jo"&string(o))
:EndFor
:EndPrgm

Autre questions :
Est-ce utile de changer de variable pour le for alors que je fais à chaque fois la même chose et qu'ils sont indépendants.
Je ne suis pas certains de bien saisir la différence entre := et →

Amendill
Fichiers joints
rbt3.tns
(3.72 Kio) Téléchargé 54 fois
Avatar de l’utilisateur
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 7.8%
 
Messages: 4
Inscription: 25 Jan 2017, 22:37
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etudiant

Re: indirection et matrices

Message non lude Extra44 » 14 Nov 2018, 19:36

Regarde l'exemple de mon precedent message.
La 1ere boucle a un seul For, permet de creer les tableaux t01, t12,t23, ...

La 2e boucle for a en fait 3 For imbriquées pou remplir les tableaux:
La 1ere pour parcourir les tableaux (t01, t12, ...)
La 2e pour parcourir le 1er indice des tableaux
la 3e pour parcourir le 2e indice des tableaux
et j'y mets la valeur du N° de tableau multiplié par 100 (t01 : 100, t12:200, t23 : 300...) PLUS la valeur du 2e indice multiplié par 10 PLUS la valeur du 1er indice
Donc le tableau t01, a pour valeur 111,112,113...,121,122,..
t12 : 211,212,213...,221,222,...
t23 : 311,312,313,...etc

Pour l'attribution des valeurs : deux choix qui reviennent au meme:
- soit tu fais : valeur -> variable, donc : 5-> t01[1,1]
- soit tu fais : variable := valeur

effectivement, [i1, i2] devient [ i1 i2], mais cela est equivalent.Les valeurs d'Un tableau peuvent etre separées par un espace ou une virgule, c'est pareil apparemment. Le truc qui sera différent sera le ";" (point virgule).
Avatar de l’utilisateur
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 58.4%
 
Messages: 591
Images: 1
Inscription: 20 Jan 2011, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: S.I.

Re: indirection et matrices

Message non lude Amendill » 14 Nov 2018, 21:15

En fait je viens de comprendre mon erreur !
Sur la valeur que j'attribuais j'ai inversé ligne et colonne et comme j'avais fais un test avec n=3 et dès le départ le programme cherchait la 4ème ligne ça ne pouvait pas marcher.
+ des problèmes de parenthèses rien de bien méchant

Merci beaucoup de votre aide !
Amendill
Avatar de l’utilisateur
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 7.8%
 
Messages: 4
Inscription: 25 Jan 2017, 22:37
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etudiant

Re: indirection et matrices

Message non lude Extra44 » 14 Nov 2018, 22:37

Tant mieux
:)
Avatar de l’utilisateur
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 58.4%
 
Messages: 591
Images: 1
Inscription: 20 Jan 2011, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: S.I.

Re: indirection et matrices

Message non lude Bisam » 15 Nov 2018, 11:39

Pour éviter les copies et les calculs intempestifs, il est quand même bien plus malin de faire
Code: Tout sélectionner
For i,1,n
  "T"&string(i-1)&string(i) → st
  cos(t[4,i])→#(st)[1,1]
−sin(t[4,i])→#(st)[1,2]
...

Par ailleurs, puisque la fonction Newmat remplit par défaut la matrice de 0, il y a 4 lignes inutiles...
Enfin, puisque tu remplis TOUS les coefficients de la matrice, il serait vachement plus pratique et visuel d'utiliser le constructeur, non ?

Tu cliques sur :nsab: puis sur le schéma de la matrice 3x3, puis tu remplis le nombre de lignes et de colonnes que tu veux (ici, 4 et 4) et ensuite, tu mets directement tes formules dans tes cases.
C'est plus rapide et plus lisible, et tu peux bien évidemment stocker le tout à l'aide d'une indirection... mais tu remplaces 17 lignes par une seule.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: indirection et matrices

Message non lude Amendill » 15 Nov 2018, 18:46

Très bonnes idées merci beaucoup
Avatar de l’utilisateur
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 7.8%
 
Messages: 4
Inscription: 25 Jan 2017, 22:37
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Etudiant


Retourner vers Nspire-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1218 utilisateurs:
>1181 invités
>32 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)