π
<-

indirection et matrices

Pour le TI-Basic sur Nspire

indirection et matrices

Unread postby 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: Select all
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: Select all
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
User avatar
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 7.8%
 
Posts: 4
Joined: 25 Jan 2017, 22:37
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etudiant

Re: indirection et matrices

Unread postby 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: Select all
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
User avatar
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 58.4%
 
Posts: 591
Images: 1
Joined: 20 Jan 2011, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: S.I.

Re: indirection et matrices

Unread postby 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: Select all
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
You do not have the required permissions to view the files attached to this post.
User avatar
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 7.8%
 
Posts: 4
Joined: 25 Jan 2017, 22:37
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etudiant

Re: indirection et matrices

Unread postby 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).
User avatar
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 58.4%
 
Posts: 591
Images: 1
Joined: 20 Jan 2011, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: S.I.

Re: indirection et matrices

Unread postby 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
User avatar
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 7.8%
 
Posts: 4
Joined: 25 Jan 2017, 22:37
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etudiant

Re: indirection et matrices

Unread postby Extra44 » 14 Nov 2018, 22:37

Tant mieux
:)
User avatar
Extra44Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 58.4%
 
Posts: 591
Images: 1
Joined: 20 Jan 2011, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: S.I.

Re: indirection et matrices

Unread postby 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: Select all
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.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: indirection et matrices

Unread postby Amendill » 15 Nov 2018, 18:46

Très bonnes idées merci beaucoup
User avatar
Amendill
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 7.8%
 
Posts: 4
Joined: 25 Jan 2017, 22:37
Gender: Male
Calculator(s):
MyCalcs profile
Class: Etudiant


Return to Nspire-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
955 utilisateurs:
>937 invités
>10 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)