Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
Absorption et Emission de photons
3 participants
Page 1 sur 3
Page 1 sur 3 • 1, 2, 3
Absorption et Emission de photons
Salut !
Voici un programme qui permet de calculer l'énergie en électron-volt et lambda en nm l'absorption ou l'émission d'un photon par un atome,
il suffit de rentrer les différents états excités de l'atome, choisissez de quel état à quel état vous voulez le calcul, et le programme fait le reste. (Jusqu'à 6 états mais possible d'en rajouter beaucoup plus !)
EDIT: Voici le nouveau code qui permet de faire les calculs et qui permet de trouver une absorption ou émission d'un état à un autre en entrant lambda. (Je posterai un screenshot plus tard)
Le screenshot.gif:
Un grand merci à M@t et Linka !
Voici un programme qui permet de calculer l'énergie en électron-volt et lambda en nm l'absorption ou l'émission d'un photon par un atome,
il suffit de rentrer les différents états excités de l'atome, choisissez de quel état à quel état vous voulez le calcul, et le programme fait le reste. (Jusqu'à 6 états mais possible d'en rajouter beaucoup plus !)
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
If G=0:A->G
If G=1:B->G
If G=2:C->G
If G=3:D->G
If G=4:E->G
If G=5:F->G
If G=6:J->G
Input "2EME ETAT:",H
If H=0:A->H
If H=1:B->H
If H=2:C->H
If H=3:D->H
If H=4:E->H
If H=5:F->H
If H=6:J->G
abs(G-H)->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto A
EDIT: Voici le nouveau code qui permet de faire les calculs et qui permet de trouver une absorption ou émission d'un état à un autre en entrant lambda. (Je posterai un screenshot plus tard)
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z≥1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z≥2
Input "ETAT 2:",C
If Z≥3
Input "ETAT 3:",D
If Z≥4
Input "ETAT 4:",E
If Z≥5
Input "ETAT 5:",F
If Z≥6
Input "ETAT 6:",G
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,G→L1
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1→E
1241,5285520433/E→L
Disp "E(eV)=",E
Disp "LAMBDA(NM)=",L
Pause
Goto M
Lbl B
EffEcr
Input"LAMBDA(NM)=",L
1241,5285520433/L→E
Disp E
For(B,1,Z
For(C,B+1,Z+1
If .01>abs(1-E/abs(L1(C)-L1(B
Disp {B-1,C-1
End
End
Pause
Goto M
Le screenshot.gif:
Un grand merci à M@t et Linka !
Dernière édition par pito2901 le Dim 15 Déc 2013 - 17:52, édité 4 fois
Re: Absorption et Emission de photons
Pas mal
Mais il aurait été en fait plus judicieux d'utiliser la méthode que t'avais proposé Linka pour demander X propositions, et les stocker dans une liste, ç'aurait été plus optimisé:
Mais il aurait été en fait plus judicieux d'utiliser la méthode que t'avais proposé Linka pour demander X propositions, et les stocker dans une liste, ç'aurait été plus optimisé:
- Code:
EffEcr
EffListe L3
Input "NB ETATS=",A
For(K,1,A
{0,K-1→L2 //Puisqu'on commence à l'état 0
{0,1→L1
RégLin(ax+b) Y1
Equ►Chaîne(Y1,Chaîne1
sous-Chaîne(Chaîne1,1,longueur(Chaîne1)-3
Input "ETAT"+Rép+":",X
X->L3(K
End
- Code:
L3(H+1->H
L3(G+1->G
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Hehe c'est intéressant de voir une conséquence d'un sujet d'aide.
https://tout82.forumactif.org/t143-mettre-un-certain-nombre-d-input
Il y a un problème dans les indices des états... je ne sais pas ce qu'il fallait mettre.
Voici un changement.
Je t'invite aussi à revoir les différentes solutions à liste employées dans les programmes de conversion d'unité inspirés du mien, et postés dans ce forum dans un unique sujet suit à ta demande d'aide.
EDIT: m@thieu41 Pwned Linkakro !
EDIT: correction de G et H en G+1 et H+1
https://tout82.forumactif.org/t143-mettre-un-certain-nombre-d-input
Il y a un problème dans les indices des états... je ne sais pas ce qu'il fallait mettre.
- Code:
Input "NB ETATS EXC:",Z // c'est quoi EXC ?
If Z<6
Then
If Z>=1 // à déplacer ???
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2 // à modifier ???
Input "ETAT 2:",C
Voici un changement.
- Code:
//début : saisie , que je ne modifie pas pour l'instant
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
//milieu : traitement partiellement modifié
{A,B,C,D,E,F,J->L1
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
// fin inchangée
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto A
Je t'invite aussi à revoir les différentes solutions à liste employées dans les programmes de conversion d'unité inspirés du mien, et postés dans ce forum dans un unique sujet suit à ta demande d'aide.
EDIT: m@thieu41 Pwned Linkakro !
EDIT: correction de G et H en G+1 et H+1
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Certes, mais il est plus rapide à recopier, et plus souple surtout (il autorise un nombre inconnu d'états, sans limitation au niveau du nombre de valeurs à stocker (à moins de viser plus de 1000 états mais ça m'étonnerai )
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Sinon je ne vois pas comment faire pour demander lambda,
puis dire s'il correspond à l'un des états rentrés auparavant, sachant qu'il y a un certain nombre d'états...
puis dire s'il correspond à l'un des états rentrés auparavant, sachant qu'il y a un certain nombre d'états...
Re: Absorption et Emission de photons
Ben en utilisant le code qu'on t'as proposé
Je n'ai pas bien compris ton problème: le code fais la même chose que le tiens mais en plus souple, pourquoi s'en priver (même si à la rigueur ça peut être un chouia plus long pour demander les valeurs)?
Je n'ai pas bien compris ton problème: le code fais la même chose que le tiens mais en plus souple, pourquoi s'en priver (même si à la rigueur ça peut être un chouia plus long pour demander les valeurs)?
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Non, mais genre je rentre les états excités, puis un lambda quelconque, ensuite l'algo me répond s'il correspond à un état rentré...
Re: Absorption et Emission de photons
Et bien tu peux le faire avec le code qu'on te propose aussi...
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Je vais pas m'amuser à afficher tous les états sachant qu'avec six états j'ai un très grand nombre de possibilité...
Re: Absorption et Emission de photons
Je te propose dans ce cas de créer une boucle qui recherche la valeur saisie.
La manière d'accéder aux variables pour la recherche sera différente selon la méthode de stockage (variables numériques ou bien une liste).
### Veux-tu empêcher la saisie redondante (plusieurs fois un même état) ?
Exemple avec un stockage Liste. (je n'ai pas inclus l'affichage de l'indice)
Le dernier test est un peu compliqué pour être sûr de ne pas tester une case innexistante à la fin.
### Veux-tu seulement détecter un X ?
### Autre manière de trouver un nombre dans une liste, seulement dans une liste, sans boucle.
Si tu as peu de variables numériques, tu peux les mentionner dans une liste en dur.
Remarque : désormais je suppose les numérotations de position positives pour utiliser max()
Si tu veux trouver la dernière occurrence dans la liste :
Si tu veux trouver la dernière occurrence parmi des lettres et en plus optimiser sans seq() puisque tu connais le nombre de termes :
Je ne parviens pas à déterminer la première occurrence sans boucle. Je recherche des sources.
http://tout82.free.fr/forum/sujet.php?sujet=3157
EDIT: problème résolu par m@thieu41 par la suite
EDIT: le message a été corrigé à plusieurs reprises, soit pour erreur soit pour cohérence
La manière d'accéder aux variables pour la recherche sera différente selon la méthode de stockage (variables numériques ou bien une liste).
### Veux-tu empêcher la saisie redondante (plusieurs fois un même état) ?
Exemple avec un stockage Liste. (je n'ai pas inclus l'affichage de l'indice)
Le dernier test est un peu compliqué pour être sûr de ne pas tester une case innexistante à la fin.
- Code:
EffListe L1
Input "NB ETATS=",A
Input "ETAT:",X // la première fois
For(K,2,A
Input "ETAT:",X
1->J
While J<K and Ans // tant que la fin n'est pas atteinte et X est absent
J+1->J
X-L1(J
End
If J=K and Ans // la fin est atteinte et différente de X donc X est absent de la liste
X->L3(K
End
### Veux-tu seulement détecter un X ?
- Code:
// nb etat = A
Input "VALEUR:",X
1->J
While J<A and Ans // tant que la fin n'est pas atteinte et X est absent
J+1->J
X-L1(J
End
If J=A and Ans // la fin est atteinte et différente de X donc X est absent de la liste
Disp "ABSENT
If not(Ans
Disp "INDICE",J-1 // donne l'indice de la première valeur trouvée (entre 0 et A-1)
End
### Autre manière de trouver un nombre dans une liste, seulement dans une liste, sans boucle.
- Code:
// liste L1 contient A valeurs
max(X=L1 // vaut zéro si la valeur X est absente de L1, sinon 1
If not(Ans
Disp "ABSENT
Si tu as peu de variables numériques, tu peux les mentionner dans une liste en dur.
- Code:
max(X={A,B,C,D,E,F // vaut zéro si la valeur X est absente de la liste des variables, sinon 1
If not(Ans
Disp "ABSENT
Remarque : désormais je suppose les numérotations de position positives pour utiliser max()
Si tu veux trouver la dernière occurrence dans la liste :
- Code:
// liste L1 contient A valeurs
max((X=L1)seq(J,J,1,A // donne la dernière position ou bien zéro
If Ans
Disp Ans
Si tu veux trouver la dernière occurrence parmi des lettres et en plus optimiser sans seq() puisque tu connais le nombre de termes :
- Code:
// liste L1 contient A valeurs
max((X={A,B,C,D,E,F}){1,2,3,4,5,6 // donne la dernière position ou bien zéro
If Ans
Disp Ans
Je ne parviens pas à déterminer la première occurrence sans boucle. Je recherche des sources.
http://tout82.free.fr/forum/sujet.php?sujet=3157
EDIT: problème résolu par m@thieu41 par la suite
EDIT: le message a été corrigé à plusieurs reprises, soit pour erreur soit pour cohérence
Dernière édition par Linkakro le Jeu 12 Déc 2013 - 21:41, édité 5 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Dans mon contrôle j'avais:
E0=-10,44
E1=-5,77
E2=-5,55
E3=-4,98
E4=-3,73
Une des questions était:
A quelle transition correspond l'émission d'un photon de longueur d'onde dans le vide lambda = 227,5 nm ?
Étapes:
1 • Il faut prendre en compte que c'est une émission... (donc un menu (émission/absorption)
2 • Il faut calculer eV soit : hc/lambda qui donne 8,74•10-19J puis
3 • convertir qui donne 5,46eV
4 • ce qui équivaut à E3-E0
Donc je trouve que ce programme est assez complexe et je pense aussi qu'il me sera utile...
Mais j'avoues ne pas savoir comment m'y prendre...
E0=-10,44
E1=-5,77
E2=-5,55
E3=-4,98
E4=-3,73
Une des questions était:
A quelle transition correspond l'émission d'un photon de longueur d'onde dans le vide lambda = 227,5 nm ?
Étapes:
1 • Il faut prendre en compte que c'est une émission... (donc un menu (émission/absorption)
2 • Il faut calculer eV soit : hc/lambda qui donne 8,74•10-19J puis
3 • convertir qui donne 5,46eV
4 • ce qui équivaut à E3-E0
Donc je trouve que ce programme est assez complexe et je pense aussi qu'il me sera utile...
Mais j'avoues ne pas savoir comment m'y prendre...
Re: Absorption et Emission de photons
Pour la première occurrence je ferais:
- Code:
// liste L1 contient A valeurs
max((X=L1)seq(J,J,A,1,-1 // donne la dernière position (mais en comptant à parir de la fin) ou bien zéro
If Ans
Disp A-Ans+1 //Calcul de l'indice par rapport au début
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
### pito :
Donc tu recherches les sauts d'énergie entre les états !
Je propose de parcourrir les états avec deux boucles imbriquées.
Et éventuellement une petite étude de combinaison pour savoir quand s'arrêter : A_nCr_2 pour calculer le nombre de parties à deux états dans l'ensemble des A états.
Je propose de calculer les sauts à l'intérieur de la double boucle de recherche.
Je ne comprend pas le lien entre la théorie et le calcul dans le programme. J'oublie quelque chose.
### m@thieu41 :
Bravo !
Et pour simplifier le lien indice/valeur :
Donc tu recherches les sauts d'énergie entre les états !
Je propose de parcourrir les états avec deux boucles imbriquées.
Et éventuellement une petite étude de combinaison pour savoir quand s'arrêter : A_nCr_2 pour calculer le nombre de parties à deux états dans l'ensemble des A états.
Je propose de calculer les sauts à l'intérieur de la double boucle de recherche.
Je ne comprend pas le lien entre la théorie et le calcul dans le programme. J'oublie quelque chose.
### m@thieu41 :
Bravo !
Et pour simplifier le lien indice/valeur :
- Code:
// liste L1 contient A valeurs
max((X=L1)seq(J,J,A,1,-1 // donne la dernière position (mais en partant de la fin) ou bien zéro
If Ans
Disp A-Ans+1 //Calcul de l'indice par rapport au début
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Tu m'as pris de cours, j'étais en train d'éditer pour proposer justement cette simplification
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Et le Input"LAMBDA", dans tout ça, que devient-il ?
Qu'est ce que ça donne sur le programme retravaillé:
Sinon merci, vous gérez à mort !
Qu'est ce que ça donne sur le programme retravaillé:
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->L1
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto A
Sinon merci, vous gérez à mort !
Re: Absorption et Emission de photons
Ben il faut que tu gères 2 cas différents à l'aide d'un menu j'imagine (Avant le Lbl A):
Si on veut calculer lambda
Si on veut demander lambda
Ensuite tu calcules la valeur en eV.
EDIT Linkakro : Retenons que dans le programme de Pito il y a Z états, pas N !
Et tu parcours la liste en imbriquant 2 boucles pour trouver la bonne valeur:
Soit E la valeur cherchée qui équivaut à l'écart entre 2 termes de la liste L1, et N le nombre de termes:
Si on veut calculer lambda
Si on veut demander lambda
Ensuite tu calcules la valeur en eV.
EDIT Linkakro : Retenons que dans le programme de Pito il y a Z états, pas N !
Et tu parcours la liste en imbriquant 2 boucles pour trouver la bonne valeur:
Soit E la valeur cherchée qui équivaut à l'écart entre 2 termes de la liste L1, et N le nombre de termes:
- Code:
{-1,-1->L2
For(B,1,N-1 //On détermine l'écart entre les 2 indices
For(C,1,N-B //On parcours tous les premiers termes possibles
If E=L1(C+B)-L1(C //Edit: petit oubli de ma part
{C+B,C->L2
End
End
Dernière édition par m@thieu41 le Jeu 12 Déc 2013 - 22:14, édité 1 fois
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->L1
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto A
Lbl B
Input"LAMBDA=",L
//calcul ?
{-1,-1->L2
For(B,1,N-1 //On détermine l'écart entre les 2 indices
For(C,1,N-B //On parcours tous les premiers termes possibles
If L1(C+B)-L1(C
{C+B,C->L2
End
End
// Et là je mets quoi ?
Re: Absorption et Emission de photons
Déjà mets un Lbl M avant le menu, et change le goto A en goto M, comme ça on peut revenir au menu (et place y une option pour quitter ça fera plus propre).
Mon code n'était pas à copier coller tel quel
Remplace N par Z+1
EDIT Linkakro : Retenons que dans le programme de Pito il y a Z états, pas N !
Entre Input "Lambda et {-1,-1->L2, il faut calculer la valeur en eV, et la stocker dans E.
Après le code, il faut que tu fasses ce que tu veux
Tu sais que tu as:
Dans L2 les indices des 2 états (genre 3 et 0), donc tu peux les afficher (et renvoyer une erreur si L2={-1,-1
Aussi j'ai fais un petit oubli (j'édite):
Aussi ça serait bien d’arrondir la valeur de E lors du calcul, ainsi que les valeurs de la liste L1 pour être sûr de ne pas louper la solution à cause d'arrondis différents... (tu peux faire arrondi(L1->L1 )
Mon code n'était pas à copier coller tel quel
Remplace N par Z+1
EDIT Linkakro : Retenons que dans le programme de Pito il y a Z états, pas N !
Entre Input "Lambda et {-1,-1->L2, il faut calculer la valeur en eV, et la stocker dans E.
Après le code, il faut que tu fasses ce que tu veux
Tu sais que tu as:
Dans L2 les indices des 2 états (genre 3 et 0), donc tu peux les afficher (et renvoyer une erreur si L2={-1,-1
Aussi j'ai fais un petit oubli (j'édite):
- Code:
If L1(C+B)-L1(C
devient
If E=L1(C+B)-L1(C
Aussi ça serait bien d’arrondir la valeur de E lors du calcul, ainsi que les valeurs de la liste L1 pour être sûr de ne pas louper la solution à cause d'arrondis différents... (tu peux faire arrondi(L1->L1 )
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Le code de recherche :
L'organisation des paires testées est selon moi complètement désordonnée. J'ai testé sur émulateur pour constater que cela semble marcher.
Il aurait fallut utiliser B+C et B plutôt que B+C et C selon moi.
J'aime bien le parcourt partiel de la liste par la seconde boucle en fonction de la première.
Toutefois j'aurais aussi apprécié que la recherche s'arrête dès qu'une paire est validée. Mais pour 6 état on a à peine 15 paires, donc je ne poserai pas autre chose que For.
Je propose cette variante de la recherche.
J'inclus aussi le calcul énergétique et le verdict mentionné pour pito2901.
Je me contente comme vous de déterminer la dernière occurrence qui doit logiquement être la seule.
EDIT : Il fallait remplacer N par Z.
--------
Je résume le plan du programme.
Avec ça tout doit devenir clair si on sait ce que fait chaque morceau de code.
EDIT : vous postez en même temps que je modifie mon propre message à venir ! ... heureusement que je ne validais pas cette fois.
J'ai par exemple enlevé la remarque de "E=L1(C+B)-L1(C"
L'organisation des paires testées est selon moi complètement désordonnée. J'ai testé sur émulateur pour constater que cela semble marcher.
Il aurait fallut utiliser B+C et B plutôt que B+C et C selon moi.
J'aime bien le parcourt partiel de la liste par la seconde boucle en fonction de la première.
Toutefois j'aurais aussi apprécié que la recherche s'arrête dès qu'une paire est validée. Mais pour 6 état on a à peine 15 paires, donc je ne poserai pas autre chose que For.
Je propose cette variante de la recherche.
J'inclus aussi le calcul énergétique et le verdict mentionné pour pito2901.
Je me contente comme vous de déterminer la dernière occurrence qui doit logiquement être la seule.
EDIT : Il fallait remplacer N par Z.
- Code:
//Energie en electronVolt et lamda en nanometre // je crois
//lamda=(1.989*10^-25)/(Energie*1.60*10^-19)*10^9
//Energie=lamda*1.60*10^-19/(1.989*10^-25)/10^9
// EDIT : corrige : Energie=(1.989*10^-25)/(Lamda*1.60*10^-19)*10^9
Prompt L
L*1.60*10^-19/(1.989*10^-25)/10^9->E // EDIT : corrige : (1.989*10^-25)/(L*1.60*10^-19)*10^9->E
{0,0->L2
For(B,1,N-1 // position premier état testé
For(C,B+1,N // position deuxième état testé
If E=L1(B)-L1(C
{B,C->L2
End
End
If L2(1)L2(2 // liste non nulle
Then
Disp L2
Else
Disp "PAS TROUVE
End
--------
Je résume le plan du programme.
Avec ça tout doit devenir clair si on sait ce que fait chaque morceau de code.
saisie des etats // que tu as déjà de plusieurs manières
// avec éventuellement un filtre anti-redondance tel que le mien
menu emettre/absorber
:::: emettre // que tu as déjà
saisie paire d'indices des états à comparer
calcul du saut d'énergie
calcul de lamda du photon
retour menu
:::: absorber // nouveau
saisie lamda photon
calcul energie photon
recherche paire d'états correspondante
verdict
retour menu
EDIT : vous postez en même temps que je modifie mon propre message à venir ! ... heureusement que je ne validais pas cette fois.
J'ai par exemple enlevé la remarque de "E=L1(C+B)-L1(C"
Dernière édition par Linkakro le Sam 14 Déc 2013 - 16:15, édité 4 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
J'ai donc mis ça:
Mais quand je mets 266 en lambda, il me met rien alors qu'il devrait me mettre de E0 à E1.
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto M
Lbl B
Input"LAMBDA=",L
L*1.60*10^-19/(1.989*10^-25)/10^9->E // EDIT : corrige : (1.989*10^-25)/(L*1.60*10^-19)*10^9->E
{0,0->L2
For(B,1,N-1
For(C,B+1,N
If E=L1(B)-L1(C
{B,C->L2
End
End
If L2(1)L2(2
Then
Disp L2
Else
Disp "PAS TROUVE
End
Pause
Goto M
Mais quand je mets 266 en lambda, il me met rien alors qu'il devrait me mettre de E0 à E1.
- Spoiler:
- (et surtout pas de E1 à E0)
Re: Absorption et Emission de photons
1-je teste et constate que mon calcul d'énergie est faux.
L=(1.989*10^-25)/(E*1.60*10^-19)*10^9
donc E=(1.989*10^-25)/(L*1.60*10^-19)*10^9
mais surtout pas L*1.60*10^-19/(1.989*10^-25)/10^9->E
Je corrige immédiatement les messages avec des commentaires.
2-je suppose qu'il serait bien d'admettre une tolérance de calcul dans la recherche
10^3>abs(E-L1(C)-L1(B
EDIT : corrigez 10^-3>abs(E-L1(C)+L1(B
3-je me demande si imposer la saisie des niveaux d'énergie dans l'ordre croissant est nécessaire, en tout cas cela influe sur le besoin de la boucle de recherche des sauts, par exemple il y aurait deux abs() un de chaque coté de l'égalité.
If abs(E)=abs(L1(C)-L1(B
L=(1.989*10^-25)/(E*1.60*10^-19)*10^9
donc E=(1.989*10^-25)/(L*1.60*10^-19)*10^9
mais surtout pas L*1.60*10^-19/(1.989*10^-25)/10^9->E
Je corrige immédiatement les messages avec des commentaires.
2-je suppose qu'il serait bien d'admettre une tolérance de calcul dans la recherche
10^3>abs(E-L1(C)-L1(B
EDIT : corrigez 10^-3>abs(E-L1(C)+L1(B
3-je me demande si imposer la saisie des niveaux d'énergie dans l'ordre croissant est nécessaire, en tout cas cela influe sur le besoin de la boucle de recherche des sauts, par exemple il y aurait deux abs() un de chaque coté de l'égalité.
If abs(E)=abs(L1(C)-L1(B
Dernière édition par Linkakro le Sam 14 Déc 2013 - 12:14, édité 1 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
Linkakro a écrit:2-je suppose qu'il serait bien d'admettre une tolérance de calcul dans la recherche
10^3>abs(E-L1(C)-L1(B
3-je me demande si imposer la saisie des niveaux d'énergie dans l'ordre croissant est nécessaire, en tout cas cela influe sur le besoin de la boucle de recherche des sauts, par exemple il y aurait deux abs() un de chaque coté de l'égalité.
If abs(E)=abs(L1(C)-L1(B
Merci mais, je mets ça où ?
Sinon j'ai remplacé:
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->L1
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto M
Lbl B
Input"LAMBDA=",L
(1.989*10^-25)/(L*1.60*10^-19)*10^9->E
{0,0->L2
For(B,1,N-1
For(C,B+1,N
If E=L1(B)-L1(C
{B,C->L2
End
End
If L2(1)L2(2
Then
Disp L2
Else
Disp "RIEN
End
Pause
Goto M
EDIT Linkakro : Il fallait remplacer N par Z.
Re: Absorption et Emission de photons
If E=L1(B)-L1(C
Devient:
If 10^-3>abs(E-L1(C)-L1(B //Tu peux changer 10^-3 en un autre nombre, il s'agit de la différence à partir de laquelle c'est considéré comme égal (genre si abs(E-L1(C)-L1(B)) vaut 0.0001, on peut considérer que E=L1(C)-L1(B
Tu n'avais pas oublié un moins d'ailleurs Linka (10^-3 et non pas 10^3 ?)
Devient:
If 10^-3>abs(E-L1(C)-L1(B //Tu peux changer 10^-3 en un autre nombre, il s'agit de la différence à partir de laquelle c'est considéré comme égal (genre si abs(E-L1(C)-L1(B)) vaut 0.0001, on peut considérer que E=L1(C)-L1(B
Tu n'avais pas oublié un moins d'ailleurs Linka (10^-3 et non pas 10^3 ?)
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
J'ai remplacé:
EDIT: même quand je mets 266.1937901 (qui est la valeur la plus proche calculée par la calculatrice), il m'affiche rien alors qu'elle devrait sûrement me mettre de E0 à E1.
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->L1
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto M
Lbl B
Input"LAMBDA=",L
(1.989*10^-25)/(L*1.60*10^-19)*10^9->E
{0,0->L2
For(B,1,N-1
For(C,B+1,N
If 10^-3>abs(E-L1(C)-L1(B //EDIT: corrigez: 10^-3>abs(E-L1(C)+L1(B
{B,C->L2
End
End
If L2(1)L2(2
Then
Disp L2
Else
Disp "RIEN
End
Pause
Goto M
EDIT: même quand je mets 266.1937901 (qui est la valeur la plus proche calculée par la calculatrice), il m'affiche rien alors qu'elle devrait sûrement me mettre de E0 à E1.
Re: Absorption et Emission de photons
J'ai corrigé plusieurs choses.
- quelques changements:
- Mes mentions 2 et 3 sont des pistes, pas des corrections complètes.
J'ai effectivement oublié un "-" dans "10^-3".
J'ai aussi cafouillé dans "abs(E-L1(C)-L1(B))" dans lequel un des "-" devriat être "+".
Si je rassemble les corrections j'obtient (toujours dans la mention 2)
If 10^-3^>abs(E-L1(C)+L1(B))
Si je rassemble les mentions 2 et 3 j'obtient
If 10^-3^>abs(abs(E)-abs(L1(C)-L1(B)))
J'e corrige immédiatement les messages précédents.
Saisir les 10 chiffres visibles de la calculatrice est insuffisant pour valider un test d'égalité simple.
Peut-être que tu voudras connaître toutes les possibilités s'il y en a plusieurs et surtout optimiser. Donc je n'utiliserai plus L2 la prochaine fois.
Je simplifierai plus tard le calcul énergétique.
- faux bug:
Mais le traitement est toujours n'importe quoi.
EDIT: Ce que j'avais déclaré était dû à un défaut de copie dans mon émulation, le calcul d'émission que j'utilisais pour regarder ensuite l'absorption était la cause de mes problèmes supplémentaires.
Dernière édition par Linkakro le Sam 14 Déc 2013 - 13:19, édité 1 fois
Linkakro- ----------------------
- Messages : 533
Points Concours : 55
Productivité : 31
Date d'inscription : 30/07/2013
Localisation : origine région centre, puis perpignan
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
lambda = 227,5 nm
1 • Il faut prendre en compte que c'est une émission... (donc un menu (émission/absorption)
2 • Il faut calculer eV soit : hc/lambda qui donne 8,74•10-19J puis
3 • convertir qui donne 5,46eV
4 • ce qui équivaut à E3-E0
Sans arrondis intermédiaires, ça donne:
E = 299 792 458 * 6,62E-34/1,6E-19/227,5E-9 = 5,452 eV
Du coup je propose de considérer comme exact si la différence des valeurs est inférieure à 0,015 eV (pour être sûr de ne pas louper la solution).
Donc essayes avec:
- Code:
1.24*10^-6/L->E //Avec L en m (ex: 227,5*10^-9 m)
{0,0->L2
For(B,1,N-1
For(C,B+1,N
If .015>abs(abs(E)-abs(L1(C)-L1(B)))
{B,C->L2
End
End
Est-ce que ça marche?
EDIT Linkakro : Il fallait remplacer N par Z.
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: Absorption et Emission de photons
- Code:
EffEcr
Input "NB ETATS EXC:",Z
If Z<6
Then
If Z>=1
Input "ETAT 0:",A
Input "ETAT 1:",B
If Z>=2
Input "ETAT 2:",C
If Z>=3
Input "ETAT 3:",D
If Z>=4
Input "ETAT 4:",E
If Z>=5
Input "ETAT 5:",F
If Z>=6
Input "ETAT 6:",J
Else
Disp "TROP !"
Stop
End
{A,B,C,D,E,F,J->
Lbl M
Menu("LAMBDA","CALCUL",A,"DEMANDER",B
Lbl A
EffEcr
Disp "POUR CHOISIR","L'ETAT 1, TAPEZ 1"
Input "1ER ETAT:",G
Input "2EME ETAT:",H
abs(L1(G+1)-L1(H+1->X
(1,989*10^-25)/(X*1.60*10^-19)*10^9->I
Disp "E(eV)=",X
Disp "LAMBDA(NM)=",I
Pause
Goto M
Lbl B
Input"LAMBDA=",L
1.24*10^-6/L->E //Avec L en m (ex: 227,5*10^-9 m)
{0,0->L2
For(B,1,N-1
For(C,B+1,N
If .015>abs(abs(E)-abs(L1(C)-L1(B)))
{B,C->L2
End
End
If L2(1)L2(2
Then
Disp L2
Else
Disp "RIEN
End
Pause
Goto M
Toujours pas, non...
EDIT Linkakro : Il fallait remplacer N par Z.
Re: Absorption et Emission de photons
Rajoute:
Disp E après le calcul de E
Pause abs(abs(E)-abs(L1(C)-L1(B après For(C,B+1,N, et donnes moi toutes les valeurs qui s'affichent...
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Page 1 sur 3 • 1, 2, 3
Page 1 sur 3
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++