séance sur la desintegation d'un element radio-actif:
1ére partie : mettre en place un code pour obtenir les valeurs de N(t) ( qu'on appellera Y) et de t ( qu'on appellera .
Pas de problème le code ( methode d'Euler) me donne 2 listes
L1 où je mets les valeurs obtenues x
L2 où je mets les valeurs obtenues y
2 ème partie: est-il possible de faire apparaître l'exponentielle ?
a - soit directement (la TI sait faire celà puisque j'ai L1 et L2)?
b - soit en completant le code de la 1ére partie?
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 15 Mar 2012, 18:17
MESSAGE EDITE LE 19/03 POUR DIVERSES CORRECTIONS
Citer : "monsaibert"
faire apparaître l'exponentielle
Que veux-tu dire ? Tracer la courbe approchée ? Afficher le caractère exponentielle e^(X) ?
Je ne me souviens pas de mes cours sur la radioactivité alors je me contenterai de la notion de tracé.
---
Il est effectivement possible aussi bien de tracer la courbe au fur et à mesure que de la tracer automatiquement.
---automatique
Code
Plot1(xyLine,L1,L2,Ò
ZoomStat
Ò est un des trois marqueurs de points statistiques disponibles dans le catalogue. Ils sont juste au dessus de [^-1].
xyLine se trouve lui-aussi dans le catalogue et désigne un type de graphe statistique.
ZoomStat est dans le menu zoom et permet de régler automatiquement la fenêtre pour apercevoir toute la courbe.
Les paramètres affectés par la 1ère ligne sont accessibles dans le menu 2nde+f(X).
Dans ce menu tu choisis un graphe parmi les trois, puis tu l'actives, choisis le type de graphique et de marqueur avec les icones et saisis les noms des listes avec ton clavier.
Les graphes peuvent s'activer/désactiver depuis le menu f(X).
Quand tout les paramètres sont prêts, il n'y a plus qu'à consulter le graphe.
La fonction ZoomStat provoque l'affichage du graphe dans la foulée.
Je te conseille de désactiver les fonctions Y=f(X) pour ne pas surcharger le graphique.
---progressif
Pour tracer une courbe à partir d'une liste de points.
Code
For(W,1,dim(L1)-1
Line(L1(W),L2(W),L1(W+1),L2(W+1
End
Il faut régler les dimensions du graphique avant d'effectuer le tracé.
Remarque : Il devient indispensable d'utiliser cette méthode progressive et de remplacer les listes par des variables régulièrement modifiées lorsqu'on calcule plus de 999 points.
========
Mon programme APPROX pour faire le lien entre l'approximation d'euler et le tracé.
Méthode 1 : tracé automatique et cadré (ma préférée) (v6)
Méthode 2 : tracé progressif
Code
// déterminer ici la fenêtre du graphique pour la méthode 2 progressive
Prompt P,D,H // P abscisse initiale, D finale, H le pas
Input "F'(X)=",Str1
Str1->Y1
Input "F(P)=",F // ordonnée initiale de la fonction F
{P->L1
{F->L2
FnOff
0->W
For(A,P,D-H,H // réitérer l'approximation jusqu'au calcul du point D.
W+1->W
Y1(A)H+L2(W->L2(W+1 // f'(a)*H+f(a)=f(a+h)
A+H->L1(W+1
// LA ligne dédiée à la méthode progressive :
Line(A,L2(W),A+H,L2(W+1
If getKey-45
End
// LES deux lignes dédiées à la méthode automatique :
Plot1(xyLine,L1,L2,Ò
ZoomStat
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 15 Mar 2012, 18:58
Sinon, pour optenir l'équation de ta courbe (aprochée), tu peit faire :
(L1 : temps; L2 : nombre délements pères restant).
Méthode 1 : équation corecte et optenue très facilement dans Yn, mais exprimée sous la forme a*b^x avec a=N0 ; b=e^(-lamda) ; x=t)
Code
RégExp(L1,L2,Y1) //régExp( est dans stats/droite/0
Métode 2 : corecte, affichage "normal" mais plus lourde :
Code
RégExp(L1,L2 //régExp( est dans stats/droite/0
ln(b -> B //attention, le "b" est celui dans vars/5/droite/droite/3
{1,2 -> L3
{B,B -> L4
Réglin(L3,L4,Y2 //dans stats/droite/4
Equ>Chaîne(Y2,Chaîne2 //equ>Chaîne est dans le catalogue
{a,a -> L4
Réglin(L3,L4,Y2 //dans stats/droite/4
Equ>Chaîne(Y2,Chaîne3 //equ>Chaîne est dans le catalogue
FonctOff //dans var/droite/4/2
Chaîne2+"*e^("+Chaîne3 -> Chaîne2 //le "e^(" en 1 caractère
Chaine2+"t)" -> Chaîne3
Chaîne2+"X)" -> Y1
Dans cette deuxième méthode, tu devait, sauf erreur de ma part, avoir l'équation "version physique" (avec t) dans Chaîne3 et l'équation (avex X) dans Y1.
En espérant d'avoir pu t'aider
Sandro
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 15 Mar 2012, 21:37
Bonne idée la régression.
Mais l'énoncé demande d'utiliser l'approximation d'euler. :S
Cependant précise ce qu'il faut faire des résultats de RegExp après la première méthode car cela ne donne pas directement A*e^(L*X)
RegExp modélise a*b^X
y=a*b^(X
y=a*e^(ln(b)*x
y=A*e^(B*x
Donc B=ln(b) et A=a.
Tu en tiens déjà compte dans la seconde méthode.
---
Je trouve un peu trop compliquée la conversion de nombre à chaîne dans ton second programme.
Mais c'est le minimum à payer si on veut absoluement bénéficier de l'affichage des nombres dans l'expression.
Et encore, j'ai compris rapidement parce qu'on en a déjà parlé.
Remarque 1 :
Pour faire plus beau il faudrait utiliser une sous-Chaîne pour supprimmer le "+0X" qui se greffe dans les textes lorsqu'on génère "1.23E2+0X" pour a=1.23E2
Remarque 2 :
La TI dispose de deux fonctions RegLin : ax+b et a+bx.
Il faut donc préciser laquelle utiliser si on veut tenir compte de ma remarque 1.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 15 Mar 2012, 21:52
Ups, je suis allé un peu vite dans mon second code, il vaut donc mieux faire :
Code
RégExp(L1,L2 //régExp( est dans stats/droite/0
ln(b -> B //attention, le "b" est celui dans vars/5/droite/droite/3
{1,2 -> L3
{B,B -> L4
Réglin(a+bx)(L3,L4,Y2 //dans stats/droite/8
Equ>Chaîne(Y2,Chaîne2 //equ>Chaîne est dans le catalogue
{a,a -> L4
Réglin(a+bx)(L3,L4,Y2 //dans stats/droite/8
Equ>Chaîne(Y2,Chaîne3 //equ>Chaîne est dans le catalogue
FonctOff //dans var/droite/4/2
SousChaîne(Chaîne2,1,longueur(Chaîne2)-3)+"*e^("+SousChaîne(Chaîne3,1,longueur
(Chaîne3)-3 -> Chaîne2 //le "e^(" en 1 caractère ; longueur est dans le catalogue
Chaine2+"t)" -> Chaîne3
Chaîne2+"X)" -> Y1
Je pense que ça devrait être bon ce coup-ci.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 15 Mar 2012, 22:52
Il faut encore intervertir Chaîne2 et Chaîne3 dans les Equ>Chaîne.
Actuellement B->Chaîne2 et A->Chaîne3 et on affiche [Chaîne2]*e^([Chaîne3]*X) c'est-à-dire y=B*e^(A*X)
Alors qu'en réalité y=A*e^(BX).
*L'affichage est peu pratique
*on affiche Y1 et non Chaîne3, alors la manipulation avec "t" ne sert à rien.
Une de ces solutions :
-Pause(Chaîne3) => supporter un dépassement d'écran et afficher Chaîne3
-intervertir les deux dernières lignes => même résultat qu'une Pause
-Output(1,1,Chaîne3) => même raison. Cela effectue des retours à la ligne. Chacun ses goûts, moi j'aime bien.
-utiliser un Text(0,0,Chaîne3) => cela écrit plus petit pour que tout rentre dans le graphique.
A est déjà sous forme de chaîne dans Y1 si on stocke l'équation dans Y1.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
- application de la methode automatique : pas de problème.Très satisfait.
Oui bien sûr avec la methode d'Euler c'est une approximation mais on peut tendre vers la perfection en diminuant les écarts de temps des mesures . Chose que nous avons vu! " rappel: Cx^2", tu faisais varier C.
- je travaille le code.
tracé progressif (en évidence) (v6)
tracé automatique et cadré (sous forme de commentaires) (v5)
Comment s'utilise-t-il? A la suite du code "d'Euler" qui donne L1 et L2? ou indépendament ? Peux-tu expliquer
Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Lun 19 Mar 2012, 21:30
Ahem je ne comprends pas tout mais je peux t'expliquer ce bout de code :
Input "f'(X)=",Str1 Str1 correspond à chaine1, à savoir une chaine de caractères. Les chaines sont des variables que tu peux trouver dans le menu Var ) 7, et dans lesquelles tu peux stocker du texte.
Str1 -> Y1. On met Str1, ta fonction sous forme de texte, en forme de fonction Y=f(X), en version mathématique.
Inût "F(P)=",F On demande F, l'ordonnée initiale de f.
ClrList L1,L2. Efface les listes L1 & L2, que tu aurais pu utiliser pour d'autres choses, par exemple des stats (liste = liste de variables chiffre)
P->L1(1 Rentre la variable P dans le premier élément, la première case de la liste 1.
F->L2(1 Même principe avec L2 & F
0->N : 1->Y : FnOff FnOff efface tes fonctions précédemment tracées du graph, afin qu'elles ne gènent pas la vue (elles sont toujours dans le menu f(X))
1->W Et voila.
Bon j'espère ne pas avoir dit de bêtises je n'ai pas compris à quoi ça servait, ni ne sait ce qu'est la méthode d'Euler (au pire je supprime le post si c'est pas bon ... ^^').
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 19 Mar 2012, 22:25
Ne t'inquiète pas mon brave The K, tu es pertinent.
--- J'édite mon message du 15 Mars pour ces raisons :
L'indication sur les numéros de mes méthodes de tracé était mélangé. Je suis désolé.
 est un caractère spécial que j'ai oublié de remplacer. C'est un indice 1. Donc on a L1(1)
J'ai supprimmé 0->N et 1-> Y qui sont des vestiges innutiles de la version 3 de mon programme.
Je me suis foiré au niveau de la fonction Line().
J'avais écrit L1(W au lieu de L2(W).
Je me suis en fait foiré au niveau des indices A.
J'avais confondu toutes mes versions.
Maintenant c'est corrigé alors relisez bien tout le programme.
J'ai ajouté un petit programme qui tracera la courbe en fonction de listes déjà remplies entièrement par la méthode progressie.
Cela permettra de mettre en évidence la ligne essentielle du tracé.
---
répétition avec commentaires supplémentaires de mon code APPROX
Code
Prompt P,D,H // P abscisse initiale, D finale, H le pas
Input "F'(X)=",Str1 // pour saisir l'expression qui sera stockée dans Str1
Str1->Y1 // Str1 stockée dans l'équation Y1
Input "F(P)=",F // ordonnée initiale de la fonction F
{P->L1 // stocke l'abscisse initiale dans L1
{F->L2 // stocke l'ordonnée initiale dans L2
FnOff // désactive toutes les fonctions
0->W // initialisation du rang dans les listes
For(A,P,D-H,H // réitérer l'approximation jusqu'au calcul du point D.
W+1->W // incrément du rang
Y1(A)H+L2(W->L2(W+1 // f'(a)*H+f(a)=f(a+h) // ordonnée stockée dans L2
A+H->L1(W+1 // stocker la nouvelle abscisse
// LA ligne dédiée à la méthode progressive :
Line(A,L2(W),A+H,L2(W+1 // trace une ligne de (a,f(a)) vers (a+h,f(a+h))
// c'est-à-dire dernier segment calculé dans la boucle
If getKey-45 // si tu appuies sur Annul le programme cesse l'approximation
End // la fin du For, piraté par le If juste au dessus
// LES deux lignes dédiées à la méthode automatique :
Plot1(xyLine,L1,L2,Ò // ceci paramètre un graphe statistique qui représentera
ZoomStat // la courbe approchée dans L1 et L2
Quand A=D-H, la boucle calcule le point D. Donc j'arrête la boucle à D-H
La boucle For calcule de proche en proche l'approximation affine de tous les points de la courbe. C'est la méthode d'Euler.
EDIT : rappel : il faut choisir entre la méthode progressive et la méthode automatique.
Je conseille la méthode automatique.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Je reviens à donc à ton MESSAGE EDITE LE 19/03 POUR DIVERSES CORRECTIONS
1 - j'ai fais un essais avec:
Pour tracer une courbe à partir d'une liste de points.
Code
For(W,1,dim(L1)-1
Line(L1(W),L2(W),L1(W+1),L2(W+1
End
J'ai mis ce code à la suite de "code-Euler " qui donne L1(x)et L2(y). Celà n'a rien donné. Sauf que j'ai remplacé W par P que j'avais pris dans le "code-Euler " pour ordonner x et y.
2 -j'ai commencé à lire le 2ème code.Je suis surpris par
Input "F'(X)=",Str1
Str1->Y1
De quelle fonction s'agit-il? Sommes nous en "phase"? Je tire L1( et L2(y) par un calcul .
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 20 Mar 2012, 20:04
La méthode de tracé progressif ne permet pas de régler les dimensions de la fenêtre.
Donc la courbe tracée par cette méthode peut être en dehors du graphe.
Str1 est une chaîne de caractères. menu var+7+1
Y1 est une équation de courbe. menu var+droite+1+1
"F'(X)" veut tout dire : tu es censé saisir l'équation de la dérivée de la fonction à approcher.
Je stocke d'abord l'expression dans Str1 comme ça on a pas besoin de saisir de guillemet dans l'expression. Puis je stocke l'expression dans l'équation.
Plus tard on utilise cette expression dans le calcul d'approximation affine f(a+h)=f'(a)*h+f(a).
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Je bosse le dernier code ( je pense que c'est lui qu'il faut garder )Il s'agit du message du " Lun 19 Mar 2012, 21:30"
Precisons:
de Prompt P,D,H
........................
à A+H->L1(W+1 // nous faisons tous les calculs.
La partie devant faire le graphe est dessous ?:
" // trace le segment de la dernière approximation dans la méthode 2 progressive
Line(A,L2(W),A+H,L2(W+1 // trace une ligne de (a,f(a)) vers (a+h,f(a+h))"
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 23 Mar 2012, 17:21
Oui, ce tout dernier code est le plus avancé.
Il est identique au tout premier code depuis que j'ai modifié mon message.
Les programmes de régression sont valables pour la courbe exponentielle, tandis que le programme d'approximation d'Euler fonctionne pour n'importe quelle courbe.
La ligne que tu cites ( Line(A,L2(W),A+H,L2(W+1 ) est bien la partie qui trace la courbe par la méthode progressive.
Je dis progressive car cette ligne est executée à chaque boucle pour dessiner un petit morceau de la courbe.
Je te conseilles plutôt d'enlever ladite ligne et de conserver les deux lignes de la fin car cela règle les dimensions du graphique automatiquement.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 29 Mar 2012, 19:18
L'apostrophe se trouve dans le menu angle. C'est pour faire joli et savoir de quoi on parle.
Input "F'(X)=",Str1
Cela provoque l'affichage de "F'(X)=" puis la calculatrice attend qu'on saisisse une expression.
Dans le cas présent le programme attend qu'on donne la dérivée de la fonction à approcher.
C'est à l'utilisateur de saisir l'expression de la dérivée lorsque la calculatrice affiche "F'(X)=" en executant le programme.
L'expression de la dérivée doit être donnée dans sa forme explicite, ici il s'agit d'exponetielle.
En effet la méthode d'approximation d'Euler des courbes nécessite de connaître complètement l'équation de la dérivée et une valeur initiale d'ordonnée.
F'(X)=K*F(X) implique F=C*e^(K*X) implique F'(X)=C*K*e^(K*X
On identifie la constante C avec les conditions initiales.
Bien sûr cela sous-entend que tu connais les équations différentielles. (y'=ay)
===
Si tu es un fou, tu peux directement déterminer l'expression de la fonction à partir de la dérivée et des conditions initiales.
Pour une fonction exponentielle c'est facile :
F'(X)=A*e^(BX) ==>> F(X)=A/B*e^(B*X)+C où C est un réel constant à identifier par les conditions initiales.
===
Depuis le début du sujet j'avais compris que tu connaissais la dérivée puisqu'il était question d'approximation d'Euler.
Mais s'il s'agit de trouver une équation à partir d'un tableau mesuré en expérience, alors il faudra utiliser un des programmes de régression proposés par Sandro ou même ma version amméliorée postée un peu en dessous de Sandro. (15 mars)
S'il s'agit de tracer la courbe expérimentale mesurée, contentes toi des deux méthodes de tracé basiques données dans mon premier message.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Tu fais là un bilan impeccable. Nous sommes parfaitement en phase. J'ai certainement mal explqué mon problème :
je voulais tout faire "à la main" donc pas de F(X) pas de F'(X) ( e^kx )
partant de dN/dt+kN = 0 ( N -> Y et t -> X
on fait N1-N0 = - kN0 dt
N2- N1 = -kN1dt
----------------------etc /on obtient N0, N1, N2,....dans L2(Y et les dt dans L1(X)
on se trouve donc dans le cas "S'il s'agit de tracer la courbe expérimentale mesurée, contentes toi des deux méthodes de tracé basiques données dans mon premier message." D'accord ;mais si j'ai le temps j'aimerais revenir sur vôtre discussion (équation à partir d'un tableau mesuré en expérience :
programmes de régression )
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 30 Mar 2012, 17:19
Ce que tu as effectué en TP RESSEMBLE à une approximation d'Euler, c'est basée sur elle, mais ce n'est pas identique.
Cependant on s'en sert de la même manière pour approcher des solutions d'équations différentielles.
Pour que mon programme Approx supporte ce type d'approximation, il faut saisir une équation de dérivée qui contienne la liste L2(W) ou bien modifier les paramètres demandés et le calcul.
Première possibilité d'adaptation :
f'(X)=Y1=-K*L2(W)
à saisir au début
Deuxième possibilité
L2(W)*(1-K*H
à placer au niveau du calcul d'ordonnée prochaine
Il faut saisir K au début du programme à la place de F'(X).
=======
explications sur la régression avant d'avoir plein de questions
Chaque fonction de régression demande au minimum deux listes de mêmes dimension (abscisse/ordonnée).
On peut stocker le résultat du calcul dans une équation Y# en ajoûtant son nom en dernier argument.
Chaque fonction de régression cherche les paramètres qui permettent à une certaine équation d'être la plus proche possible des points dans les listes.
RegLin(ax+b) par exemple cherche a et b tels que ax+b soit très proche de tes points.
La calculatrice ne permet d'approcher que certaines équations et pas d'autres.
Quand on ne trouve pas de régression de l'équation voulue, il faut choisir l'équation la plus proche de celle voulue et effectuer des calculs de changements de variables.
L'execution de la régression stocke les valeurs a,b,c etc dans les variables statistiques du menu var+5.
Elle stocke aussi le coefficient de régression r ou r^2 qui doit valoir 1 pour une courbe parfaite.
Une équation contenant les valeurs numériques est stockée dans Y1 si j'ai indiqué Y1 est troisième argument.
a,b,c etc sont toujours affichés à l'écran lors d'une régression hors d'un programme.
Le coefficient de régression r peut être affiché en même temps si on a activé l'option, sinon il faudra obligatoirement la lire dans le menu var+5.
Cette option s'appelle DiagnosticOn (CorrelAff en français) et est accessible depuis le catalogue de toutes les TI (série z80) ou le menu Mode des TI84+ avec os2.55.
Une liste LRESID sera systématiquement créée lors d'une régression. Elle n'a pas d'intérêt pour ce qui nous concerne dans ce sujet.
--- pratique
Les régressions des programme de Sandro et moi servent à deux choses.
La première est une régression en elle même de y=a*b^x.
La seconde utilité est de stocker les valeurs numériques dans dans des chaînes de caractères pour que ce soit joli.
Comme on ne dispose par de régression de a*e^bx, on régresse a*b^x=a*e^ln(b)x et on identifie le coefficient voulu à ln(b).
Pour stocker les nombres dans des chaînes de caractère de manière efficace (mais ce n'est pas la seule méthode), on effectue une régression linéaire dont l'équation résultat contient la valeur numérique de notre variable.
On convertit ensuite cette équation en chaîne de caractères pour en extraire le nombre désiré.
En effet pour les points {1,B}{2,B}, l'équation y=ax+b signifie que b=B.
On peut convertir des variables en chaînes de caractères avec plusieurs types de régressions.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)