Autorisation : Membre
Nb de messages : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Lun 01 Déc 2014, 19:22
Bonjour , le but de mes programmes sont de calculer la probabilité sachant P(X) = x
avec la loi : chemins
binomiale
Normale
Uniforme
exponentiel
autant vous dire que j'ai du boulot ^^ (et ça serais sympa de donner un lien s'il existe un sujet sur ça (ti 82 stats .fr ou ti 82 et ne me poser pas la question car j'ai vu tout (presque) les programmes de ti 82 stats et commencer à voire ceux de la stats .fr )
mais en commençant par la loi binomiale j'ai rencontré un problème :
j'ai réussis à mettre en place un programme qui nous donne :
P(X=?)= l ("l" étant un nombre)
Code
Disp "VOUS VOULEZ"
Imput "P(X=L) = ?",D //je pense D comme-)"Décision"
If D=OUI
Il fait un traitement pour P(X=2) déjà dans la calculette
Else // Très souvent c'est soit "OUI" ou "NON" mais
Imput L // ici tout les autres valeurs suffisent , à noté
0-)C // que j'affecte souvent A,B,C,D ...-) A=10,B=11 ,
While arrondi(L,3)=/P // comme si j’exécutais un prog qui utilise les bases
(Q^N-(N-C)*(P^N)-)P //Rq : OUI est différent de NON en terme de valeur
arrondi(P,3)-)P // "=/" -) est différent de
N-1-)N // J'ai pris le résultat au millième pour que le prog
C+1-)C // ne se focalise pas sur l'exactitude car j'ai remarqué que ça ne
//marchait pas et maintenant ça ne fait que tourner sans avoir de
//résultat et chez moi C s'appelle "Compteur" et dans cette algo
//vous verez que j'utilise la propriété binomiale p=P(succes)et
//Q=P(échec) et en faite au début du programme il y a :
EffToutListes
Effecr
Disp"n NOMBRE D'"
Imput"ESSAIS TOTAL =",N
Disp"NOMBRE DE "
Imput"SUCCES = ",X
Imput"P(SUCCES) = ",P
1-P-)Q
Disp N+1 // C'est P(X=N+1)="l" , l étant un nombre.
et si vous avez le temps et la générosité j'ai d'autres problemes qui découlent de celui ci :
- P(X=<?)=l "l" est un nombre connu .
- de même pour P(X>=?)=l
Merci d'avance (Et j'en suis sûr que Linkakro va voire mon topique et je m'excuse pour la première réponse que j'ai poster , je ne croyais pas qu'il y avait plusieurs version ti 82 . )
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Lun 01 Déc 2014, 20:09
Salut DragonLaBelette
C'est un bon choix de premier programme, même sil est déjà très présent mais si c'est bien soigné c'est toujours bon à prendre !
Je commence pas directement avec ton sujet, mais il est quelques règles pour mal base code qui vont arranger tout l monde :
sto : pas -) mais plutôt ->
Input et pas Imput ou IMPUT
Fonction affichées comme sur la calculatrice. Ex : Input et pas IMPUT en majuscules. Idem pour de nombreuses lignes.
Je retranscrit donc pour me permettre une meilleure lisibilité (sachant qu'il est possible pour toi d'éditer ton précédent message). J'enlève les annotations sur le code de mon message puisqu'elles sont déjà sur le tien :
Code
Disp "VOUS VOULEZ"
Input "P(X=L) = ?",D
If D=OUI
...
Else
Input L
0->C
While arrondi(L,3)=/=P
(Q^N-(N-C)(P^N)->P
arrondi(P,3)->P
N-1->N
C+1->C
EffToutListes
Effecr
Disp "N NOMBRE D'"
Input "ESSAIS TOTAL =",N
Disp"NOMBRE DE "
Input "SUCCES = ",X
Input "P(SUCCES) = ",P
1-P->Q
On va y aller par morceaux :
- Pour gérer plusieurs choix en début de programme, c'est la fonction Menu() qui est de mise. Elle s'utilise comme ceci : Menu([Titre],[Choix 1],[nom du label],... Cela implique d'utiliser des labels, étiquettes qui permettent de faire des sauts jusqu'à elles via des commandes comme Goto ou Menu(). je ne sais pas si tu as besoin d'explications à ce sujet. Si oui indique le
- Il est inutile de séparer les dialogues de choix par deux fonctions Disp et Input. je pense à des parties comme ceci :
Code
Disp"n NOMBRE D'"
Imput"ESSAIS TOTAL =",N
...
...
Disp"NOMBRE DE "
IMPUT"SUCCES = ",X
Se simplifie par :
Code
Input "N NOMBRE D'ESSAITOTAL",N
...
...
Input "NOMBRE DE SUCCES",P
- Tant que je suis sur les Input :
Code
Input L
...
se simplifie par
...
Prompt L
Ca n'en a pas l'air, mais ça permet une seconde simplification avec la fonction DelVar qui efface une variable qui sera initialisée à 0 la prochaine fois qu'elle sera appelée :
Code
Input L
0->C
...
Se simplifie par
...
DelVarCPrompt L
Ce manipulation n'est possible qu'avec DelVar je précise
- Des simplifications à la con, du genre qu'un guillemet n'est pas utile en fin de ligne dans ce cas (ligne 1), une parenthèse ou un guillemet n'est pas utile avant un stop (lignes 8 et 9)
- A quoi sert cette partie du code ?
Code
EffToutListes
Tu n'as pourtant pas initialisé de listes...
- Enfin, pour la question du choix de début de programme, le menu résoudra le problème lié à cette ligne :
Code
If D=OUI
En effet, tel quel, ce code va vérifier que D est égal au produit de O, U et I. Mais avec un menu déroulant, il n'y aura plus de problème
- Tu n'affiches jamais tes résultats
Voilà, ton code à part ça n'est pas très optimisé, mais bon je t'embête pas avec ça, c'est déjà un bon début. D'autre part, tu sais que tu as accès à beaucoup de fonctions de probabilités dans la plupart des TI-z80 (nom en 8*, à part 88 et 89) dans le menu Math puis Prb. Tu pourrais les utiliser pour optimiser tes calculs.
N'hésite pas à me demander si tu as des questions sur ce que j'ai pointé, commence par bien comprendre ça et on pourra fouiller plus loin
Bonus : Ton code après les modifications que j'ai effectuées :
Code
Lbl A
Menu("VOUS VOULEZ","P(X=L)",1,"AUTRE",2
Lbl 1
...
Goto A
Lbl 2
DelVarCPrompt L
While arrondi(L,3=/=P
(Q^N-(N-C)(P^N->P
arrondi(P,3->P
N-1->N
C+1->C
EffEcr
Input "N NOMBRE D'ESSAITOTAL",N
Input "NOMBRE DE SUCCES",X
Input "P(SUCCES)=",P
1-P->Q
Autorisation : Membre
Nb de messages : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Lun 01 Déc 2014, 20:46
excuse moi mais j'suis dans le "gang des cartésiens" une expression "vite fait bien fait" ^_^. c'est vraie que c'est une simplification par rapport à la mémoire d'la calculette mais perso je m'en fiche car vaut mieux faire un programme et le "D day" de la comprendre comme à la manip qu'à l'édit ...
Si ta 20 prog où tu dois mémoriser chacun un truc lors du jour du bac tu n'es pas con comme ça .
Excuse moi mais j'y tient ÉNORMÉMENT d'être clair , de faire la distinction .
L'optimisation est une sorte de brouillon et je déteste ; même pour moi le brouillon doit être cohérent , logique et clair pour que notre esprit ne part pas de confusions à confusions . (c'est une rigueur que je m'impose ...)
Ps : ce n'est pas mon premier prog mais je ne faisais que des "Disp" , "While" ,"Imput" , des "=" , des "Output", des "If" majoritairement , et là avec des personnes du forum j'apprends de nouvelle fonctionnalité ou en tout cas être conscient des possibilités .
j'ai peut être 13000 d'octets de prog mais ces 13000 ne seront jamais inconnus dans mon esprit (sauf peut être quelques milliers références du prog de xbases->ybases ).
et aussi Je n'ai pas précisé qu'on est déjà dans un menu pour la loi binomial ( tout au début je demande p(Succes) , L'effectif total soit N , et Q = 1- p(succes) et X le nombre de réussite mais je n'utilise que N,Q,P.
PS': Créer un menu pour ça ... Bref c'est pas un talent pour d'un programmeur.
Excuse moi j'étais trop rapide peut être ; je vais édité pour corriger (merci pour la remarque)
Bref mon problème est encore irrésolu !!
Ps'': je ne critique pas le fait d'optimiser , mais je critique le fait peut être de ... un peu torcher ces programmes à force ... Peut être que des personnes comprennent tout et c'est des genius comme toi ... Mais ça peu être aussi des personnes qui font des choses fausses et qui comprennent déjà rien ... ( après c'est un choix perso ... )
Ps''': l'effliste c'est juste parce qu'avec l'esperance et la varience il y a une forte proba que j'utilise une liste ; ) après les choses superflue je verrais quand j'en aurais terminé du programme de math , math spé et des petits calculs classer dans les "others" .
EDIT : j'affiche N+1 (merci de la remarque)
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 01 Déc 2014, 22:18
"Nombre d'essais" est-il bien ce que je comprends "nombre de tirages binaires indépendants" ?
Pour la loi binomiale c'est assez évident mais pour les autres lois je confondrais avec un nombre d'essais d'une simulation d'expérience.
Et j'ai justement un peu de mal à deviner si tu veux calculer les lois ou simuler des expériences.
Tu peux utiliser la formule de la loi binomiale telle qu'elle est définie avec P et 1-P, tu n'as pas besoin d'imiter le binôme de Newton avec Q.
Citer
D'autre part, tu sais que tu as accès à beaucoup de fonctions de probabilités dans la plupart des TI-z80 (nom en 8*, à part 88 et 89) dans le menu Math puis Prb.
Ce menu concerne plus la simulation aléatoire et les dénombrements que les statistiques !
Les fonctions de stats et de lois de probabilité sont réparties entre les menus Stats, Liste et Distrib. Celles de distrib sont les lois de probabilité.
Le menu distrib existe à partir de la TI82stats, et les menus stats et liste changent un peu entre 82 et 82stats.
L'optimisation n'est pas forcément rendre les choses illisibles. Rendre illisible est un abus. Je te signale aussi que tu peux placer des commentaires dans tes programmes avec les guillemets ou des If ou des goto. Ainsi une optimisation n'est pas forcément obscure si tu la commentes.
Tu dis que tu as un problème, mais c'est quoi exactement le problème ? La poursuite infinie du programme ou autre chose ?
Je vois que des éléments algorithmiques n'ont même pas de fermeture avec End ! Le While n'a pas de sens sans End, il considère tout ce qui suit jusqu'à la fin s'il n'a pas de End quelque part. Si le End est en dehors de l'extrait, alors le mentionner et utiliser des points de suspension pour les passages omis est préférable.
Plutôt que de deviner tes boucles incomplètes, je préfère attendre une correction des End. Ensuite je chercherais à coder des solutions à tes deux manques et ton problème.
Ou alors je refais tout à ma manière, ce n'est pas le but...
Citer
- P(X=<?)=l "l" est un nombre connu .
- de même pour P(X>=?)=l
Je chipote mais moi cela m'a perturbé de voir des points d'interrogation. Pour moi ce n'était pas une équation.
Avoir une condition d'égalité apporte des ambiguïtés de définition puisque la loi bonomiale est discrète, pas continue. Il existe des valeurs sans antécédent. Je suppose que tu voudras la valeur inférieure.
Utilises un simple crible pour approcher la solution de l'équation par un encadrement si tu n'as pas de formule de réciproque.
Note aussi que P(X=<A)=1-P(X>A). N'hésite pas à t'en servir.
EDIT : correction du P(X=<A)=1-P(X>=A) en enlevant la tolérance ">=".
Remarque que la répartition P(X<=A) est la somme des binômes de densité pour K de 0 à A. Tu calculeras cette somme progressivement et la compareras au seuil. C'est une fonction qui évolue en escalier, donc le plus grand des antécédents satisfaisant P(X<=A)<=L te donne une indication sur la réponse.
Si L donné est encadré tel que P(X<=B) <= L < P(X<=C) alors la frontière intéressante des antécédents est B. A=B
Pour P(X>A), même raisonnement.
EDIT 03/11/2014 : mes propos liés à la fonction escalier sont incomplets. Un message plus tard explique l'encadrement P(X<=B) < L <= P(X<=C) , et ainsi C est la réponse attendue. Pour l'atteindre il faut cribler avec la condition "tant que répartition<L" pour s'arrêter quand la répartition vaut L ou plus.
=======
Ce que j'improvise à ma manière. Je ne garantis rien cependant, je fais tout de tête. Des ajustements du compte des itérations peuvent être à revoir.
Code
//calcul de la loi (répartition)
Disp "X:BINOM(N,P)
//X la variable aléatoire comptant le nombre de succès donc suit la loi binomiale
Prompt N,P
// N le nombre de tirages indépendants, P la probabilité de succès de chaque tirage
Disp "PROBA(X<=A)
Prompt A // comme dans le texte affiché juste avant
0->S // répartition (somme des densités qui sont les binômes)
For(K,0,A
S+(NcombinaisonK)P^K*(1-P)^(N-K->S
End
Disp S // proba(X<=A)
Disp "PROBA(X>A)",1-S
Code
//calcul de l'antécédent de la loi (réciproque de répartition)
Disp "X:BINOM(N,P)
//X la variable aléatoire comptant le nombre de succès donc suit la loi binomiale
Prompt N,P
// N le nombre de tirages indépendants, P la probabilité de succès de chaque tirage
Disp "PROBA(X<=A)=L","TROUVER A
Prompt L
0->S // répartition (somme des densités qui sont les binômes)
0->K // antécédent de la répartition P(X<=K)
While K<=N et S<L // condition de seuil L et arrêt au nombre de tirages N
S+(NcombinaisonK)P^K*(1-P)^(N-K->S
K+1->K
End
Disp "A=",K-1
La méthode ci-dessous pour la réciproque n'est pas la seule mais elle suffit bien.
Code
//calcul de l'antécédent du complément de la loi
Disp "X:BINOM(N,P)
//X la variable aléatoire comptant le nombre de succès donc suit la loi binomiale
Prompt N,P
// N le nombre de tirages indépendants, P la probabilité de succès de chaque tirage
Disp "PROBA(X>A)=L","TROUVER A
Prompt L
0->S // répartition (somme des densités qui sont les binômes)
N->K // K antécédent de la probabilité P(X>K)
While K>=0 et S<L
S+(NcombinaisonK)P^K*(1-P)^(N-K->S
K-1->K
End
Disp "A=",K+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 : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Mar 02 Déc 2014, 18:42
En effet j'ai repris mon programme ( mais le problème c'est que la calculette ne trouve pas ( c'est la le plus important des problèmes) ET que le programme tourne tout le temps sans rien trouver (c'est un problème qui est dût à la première)
Code
EffToutListes
Effecr
Disp"n NOMBRE D'"
Imput"ESSAIS TOTAL =",N
Disp"NOMBRE DE "
Imput"SUCCES = ",X
Imput"P(SUCCES) = ",P
1-P-)Q
lbl0
Menu(Blablabla)
lbl n'importe quoi
Disp "VOUS VOULEZ"
Imput "P(X=L) = ?",D
If D=OUI
................
Else
Imput L
0-)C
While arrondi(L,3)=/P
(Q^N-(N-C)*(P^N)-)P
arrondi(P,3)-)P
N-1-)N
C+1-)C
Disp N+1
End
End
En faite Linkakro je rentre des valeurs mais ce n'est pour ne pas allourdir le programme car sinon tu as ce pavé X7 ...
Donc j'applique des valeurs que je n'utiliserais pas forcement .
Citer
L'optimisation n'est pas forcément rendre les choses illisibles. Rendre illisible est un abus. Je te signale aussi que tu peux placer des commentaires dans tes programmes avec les guillemets ou des If ou des goto. Ainsi une optimisation n'est pas forcément obscure si tu la commentes.
Tu mentionnes si je me trompe pas à une espèce de documentation hors du programme , mais le problème revient toujours le même puisque tu créer un autre programme qui n'est présent que pour ravivé ta mémoire or on peut l'assimiler à une pertes de temps, voire double si tu l'aperçois quand tu testes le programme ...
Après pour le "Rendre illisible" ou autres perso j'ai préférer suivre les conseils de mon prof de Si en éléc : un programme ( un peu long et développé) demande des commentaires pour savoir qu'est ce que ça fait ...
Car pour reprendre un programme de quelqu'un ou de soi exige une rigueur (pour être "productif") est essentiel je trouve ...
Par exemple j'ai dit que
"- P(X=<?)=l "l" est un nombre connu .
- de même pour P(X>=?)=l"
? suppose qu'on se questionne car justement on ne connait pas la valeur donc je reformule "P(X<=K) = L" avec K inconnu et L connu .
En voyant ce que tu as fait , je pense que tu as très bien compris .
En cours de math j'ai appris que :
P(X>=K)= 1- (Evènement CONTRAIRE (et non : opposé): ) P(X<K)
<=> P(X>=K)= 1-P(X<=K-1)
J'ai l'impression que tu t'est loupé quelque part ou c'est peut être moi qui est perdu avec tout ces variables ^^ .
Ps : Juste tu pourrais me dire directement à quoi sert toutes ces variables stp.
Merci (j'aimerais bien arranger à ma sauce tout ça ^^ ) .
PS'(IMPORTANT) : Ti 82 possède 2 fonction très utile
BinomeFRép (Fonction de répartition) pour P(X<=K)
et BinomeFdp (Fonction à un .... ponctuel ) pour P(X=K)
C'est vraie que sur ce coup je sais pas s'il y a un décalage entre la fonction que ti82stats . fr utilise et ce que tu utilise ( niveau précision) je pense que Mingerton peut il nous éclairé ...
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mar 02 Déc 2014, 18:50
Alors DragonLaBelette je n'ai rien compris à ce que tu m'as dit, enfin au sens que tu y donnes.
Citer : "DragonLaBelette
excuse moi mais j'suis dans le "gang des cartésiens" glasses.gif une expression "vite fait bien fait" ^_^. c'est vraie que c'est une simplification par rapport à la mémoire d'la calculette mais perso je m'en fiche car vaut mieux faire un programme et le "D day" de la comprendre comme à la manip qu'à l'édit ...
N'importe quel programme que tu auras créé toi même, tu le comprendra le Jour J, car c'est toi qui l'aura créé. D'avoir un programme optimisé n'a rien à voir avec ça
Citer : "DragonLaBelette
L'optimisation est une sorte de brouillon et je déteste ; même pour moi le brouillon doit être cohérent , logique et clair pour que notre esprit ne part pas de confusions à confusions . (c'est une rigueur que je m'impose ...)
L'optimisation n'est en rien un brouillon. Elle vient après le travail clair et "cohérent" dont tu parles. Elle est là pour optimiser en taille et en vitesse ton programme. Tu sera d'accord qu'un programme de 1000 octets qui calculerait une loi binomiale en 10 secondes est bien plus fatiguant à utiliser qu'un autre de 90 octets pour un même résultat (c'est un exemple). Le brouillon c'est un code avec plein de pertes de place et d'espace, un beta code agréable à lire et à écrire se passera de ces pertes.
Je ne vais pas analyser toute ta réponse car ça ne serait vraiment pas utile à ce topique, mais je tenais être clair sur ces aspects de la programmation. De plus, je ne comprends vraiment pas tes phrases donc il est possible que je n'ai pas compris toute la profondeur de ton propos.
J'ai juste essayé dans mon message de comprendre ton code qui pour le coup était bien brouillon lui, avec le plus de tact possible. Si tu as trouvé ça inutile à la progression de ton code ou de ton niveau de programmation, eh bien écoute tant pis... j'aurai fait ce que j'avais à faire.
Autorisation : Membre
Nb de messages : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Mar 02 Déc 2014, 19:26
"N'importe quel programme que tu auras créé toi même, tu le comprendra le Jour J, car c'est toi qui l'aura créé. "
Je suis d'accord ... 3 mois ... et Après j'en suis pas si sûr ...
Parce que je tient aussi à utiliser ces programmes peut être 2 ou 3 ans plus tard (car les mathématiques sont aussi une petite parenthèse dans la stratégie , que se soit stratégie pour décrire un déplacement possible en cercle ou des fonctions dû à une stratégie d'xp si j'arrive à conjecturer l'allure de la suite qui sont des paliers de niveau entre niveau grâce à des relevé d'internautes ... Bref )
J'ai au moins 28 progs opérationnels ... tu crois que je vais me souvenir de tout mes progs ?
quand je dis 1 programme c'est une tâche particulière car ce que j'ai c'est plus des menus ... J'ai 22 menus ... ( je pense que les 3/4 des programmes ne sont pas fait) ...
Se souvenir de ça au bac à part de faire que des maths je te dis chapeau !
et en plus je fait en tels sorte que je les remplit à fond les menus ainsi imaginons que 5 menus soient des "menus des menus" donc j'en ai 17 et soyons honnête et mettons 4 prog sur chaque menu ainsi on obtient 60 ... Bref .
Je suis conscient qu'au bout d'un moment il faudra économiser mais pas pour maintenant ^^ .
"D'avoir un programme optimisé n'a rien à voir avec ça"
Optimiser le programme c'est de virer les parenthèses et les trucs qui traînent , et le texte parce que le texte prend de la place ...
C'est la loi de l'optimisation : utiliser le minimum de variable , ( après ça dépend des fonctions utilisés s'il n'y a pas plus RAPIDE , sans perdre de la précision ) , et utiliser le moins de ligne de code possible .
Je pense que ce que tu as fait en haut est une part de l'optimisation .
Minimum voire quasi pas de texte et minimum de ligne . Sinon ce n'est pas optimal , c'est un juste milieu .
J'admet ce que tu dis mais je préfère "m'écrire" ce que je fais et le plus clairement possible ;
J'admet qu'un temps je devrais peut être me mettre à l'économie d'octet mais pour l'instant je n'ai pas à m'en soucier ;
Je n'ai pas cette rigueur de prévoir car je n'ai pas le luxe du temps que tu as .
Et comme j'ai dit c'est aussi un choix personnel
Ps: si je m'étale dans un débat c'est aussi peut que d'autres internautes pourra citer ce sujet pour éviter un discours qui se répète .
Citer
Je ne vais pas analyser toute ta réponse car ça ne serait vraiment pas utile à ce topique, mais je tenais être clair sur ces aspects de la programmation. De plus, je ne comprends vraiment pas tes phrases donc il est possible que je n'ai pas compris toute la profondeur de ton propos.
J'ai aussi dit qu'à force on bâcle peut être . Et je détesterais me mettre se trait de caractère (choix personnel) et plutôt de prendre toujours le temps de faire les choses coordonnée avec rigueur (avant j'ai dit que je n'avais pas le temps ; c'est vrai que dans cette position j'ai le cul entre les 2 chaises , donc j'essaye d'être "productif" et pour être "productif" je pense que ça nécessite un programme détaillé ... J'ai pas que math comme matière ... Bref ).
Ps: Je ne suis pas nécessairement pas d'accord .
Ps à Mingerton en +: vu que tu es un spéialiste de la ti 82 stats , peux tu lire mon édit de ma réponse à linkakro (c'est à dire la fin du message) et y répondre si tu en a la capacité stp ; merci
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mar 02 Déc 2014, 19:51
Tout le monde programme des trucs, et à partir du moment que c'est toi qui l'a créé tu sais de quoi ça parle non ? Enfin bon si c'est pas le cas pour toi, je ne peux pas juger de ça, je parle dans mon cas et ça me paraissait évident, mais si ça ne l'est pas...
L'optimisation ne rime pas avec "pas de texte, juste es valeurs". Sinon, à quoi ça sert de faire un programme ? T'as qu'à calculer direct et ça sera plus rapide. C'est pourquoi l'optimisation ce n'est pas ça. Ce que j'ai fait sur ton programme c'est des optimisations mineures liées à ton code tel qu'il était puisque tu ne posais pas ton problème clairement dans ton message introductif.
Si tu programmes rigoureusement, tu sais que l'optimisation n'est surtout pas à faire en début de programme, sinon c'est la merd*. Comme dit le proverbe : "L'optimisation trop rapide est la gangrène de tout programme".
Ton organisation avec des menus ne regarde que toi. Il est aussi possible de faire autrement, mais de le faire en demandant à chaque fois si l'utilisateurs veut effectuer telle action n'est certainement pas la meilleure. Pour un programme pas foireux avec des Menus, je te conseille de regarder Supramath 4, et tu verras que c'est possible de faire quelque chose de beta et fonctionnel avec des menus à foison.
Citer
Ps à Mingerton en +: vu que tu es un spéialiste de la ti 82 stats , peux tu lire mon édit de ma réponse à linkakro (c'est à dire la fin du message) et y répondre si tu en a la capacité stp ; merci
Bon ba écoute j'ai la capacité d'y répondre, je te rappelle même que mon premier message essayait de t'aider (sans connaître le problème mais bon...). Mais comme tu le dis si bien, j'ai pas que ça à faire, et si c'est pour voir son travail descendu immédiatement alors qu'il n'est même pas compris, j'ai vraiment pas envie de perdre du temps là dedans. Je vais aller bosser sur quelque chose de plus sérieux.
Autorisation : Membre
Nb de messages : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Mar 02 Déc 2014, 20:19
écoute moi je fait mes programme à 90 % (et je n'ai probablement pas la mémoire que tu as dans ta tête) les 10% sont dû au fait que j'ai pas la capacité de Mr X qui à passé beaucoup de temps et qui connais semblablement 40 fois plus que moi sur la calculette .
En t'écoutant j'ai l'impression d'avoir un discours d'élitiste borné.
Le titre normalement (du programme) est assez explicite pour que tu comprennes ce que tu fais globalement , les programmes sont fait pour VERIFIER UN CALCUL OU DES RESULTATS .
Optimal veut bien dire ce que ça veut dire .
"j'ai la capacité d'y répondre, je te rappelle même que mon premier message essayait de t'aider (sans connaître le problème mais bon...). Mais comme tu le dis si bien, j'ai pas que ça à faire, et si c'est pour voir son travail descendu immédiatement alors qu'il n'est même pas compris, j'ai vraiment pas envie de perdre du temps là dedans. Je vais aller bosser sur quelque chose de plus sérieux."
Justement je comprends ce que je fais mais il y a des fois des impératifs et j'oubli des "End" ... ça arrive c'est humain d'oublier , en reprenant 3 fois mon programme j'ai su , ce n'est pas une question de compréhensions
et comme indiqué ce n'est pas mon problème majeur .
C'est parce qu'il trouve pas .
Et si ce n'était une question juste pour corriger des "End"
là je serais inquiet pour moi.
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 02 Déc 2014, 22:01
### débat sur l'optimisation
Le débat est biaisé, hélas.
L'optimisation ne signifie pas qu'on rend le code illisible. Elle signifie qu'on améliore la complexité de l'algorithme (en terme de cycles), la mémoire d'exécution, ou la vitesse.
Le code source DOIT être lisible. Le poids du code n'a pas d'importance.
D'autant plus que les programmes compilés ont des performances indépendantes du poids du code source.
Un code lisible ne signifie pas que l'algorithme est simple à comprendre !
Et bien sûr les commentaires sont importants. Les développeurs professionnels ont des normes imposées par leurs employeurs, et cela se fixe généralement à 20% de commentaire dans le code et la documentation incluse en plus (voyez doxygen).
La calculatrice TI est un très mauvais exemple car le TI-Basic est interprété, il n'est pas compilé. Donc des modifications du code source influencer l'exécution ! C'est instable.
C'est parce que ce langage permet des économies abusives de syntaxe que les gens rendent des codes illisibles par économie des syntaxes.
Les variables sans choix du nom sont aussi un problème pour la clarté.
Ce n'est pas de la vraie optimisation, car elle ne fait que réduire le poids du code.
Les abus de syntaxe pour le code ne doivent pas te retirer l'envie d'optimiser. Cela doit te donner envie de commenter et ne pas économiser les syntaxes.
### la dispute
DragonLaBelette, tu avais rejeté l'intervention de Mingerton donc il est simplement vexé, je ne pense pas que cela ai à voir avec un discours élitiste.
Je voudrais abandonner la dispute qui n'a pas vraiment lieu d'être (puisque personne ne pensait à mal) et travailler sur les problématiques.
################### FINI LA PRISE DE BEC.
Citer
PS'(IMPORTANT) : Ti 82 possède 2 fonction très utile
BinomeFRép (Fonction de répartition) pour P(X<=K)
et BinomeFdp (Fonction à un .... ponctuel ) pour P(X=K)
C'est vraie que sur ce coup je sais pas s'il y a un décalage entre la fonction que ti82stats . fr utilise et ce que tu utilise ( niveau précision) je pense que Mingerton peut il nous éclairé ...
Ces fonctions sont dans le menu distrib (distribution de probabilité) à partir de la Ti82Stats. Pas la TI82 basique !
BinomFdp est la densité de probabilité et l'autre est la répartition de probabilité. Parler de "ponctuel" est un peu ambigu car la répartition est définie par une intégrale. Heureusement tout tourne bien puisque la loi binomiale est discrète, on a bien des points.
Hélas la TI n'a pas de fonction de réciproque de la répartition binomiale, elle n'a que celle de la loi normale.
Si tu veux comparer les résultats des fonctions avec les résultats des programmes, alors tu n'as qu'à tester, hein ! Personne ne sais prédire l'écart de résultat, déjà parce que personne ne connais par coeur la routine assembleur exécutée par la calculatrice.
Citer
P(X>=K)= 1- (Evènement CONTRAIRE (et non : opposé): ) P(X<K)
<=> P(X>=K)= 1-P(X<=K-1)
J'ai l'impression que tu t'est loupé quelque part ou c'est peut être moi qui est perdu avec tout ces variables ^^ .
Je vois pas pourquoi tu dis ça mais c'est possible. Un test fera la preuve.
Et je demande pardon pour mon erreur de vocabulaire à propos des évènements opposés.
Citer : "DragonLaBelette"
En faite Linkakro je rentre des valeurs mais ce n'est pour ne pas allourdir le programme car sinon tu as ce pavé X7 ...
Donc j'applique des valeurs que je n'utiliserais pas forcement .
Citer : "linkakro"
L'optimisation n'est pas forcément rendre les choses illisibles. Rendre illisible est un abus. Je te signale aussi que tu peux placer des commentaires dans tes programmes avec les guillemets ou des If ou des goto. Ainsi une optimisation n'est pas forcément obscure si tu la commentes.
Tu mentionnes si je me trompe pas à une espèce de documentation hors du programme , mais le problème revient toujours le même puisque tu créer un autre programme qui n'est présent que pour ravivé ta mémoire or on peut l'assimiler à une pertes de temps, voire double si tu l'aperçois quand tu testes le programme ...
Après pour le "Rendre illisible" ou autres perso j'ai préférer suivre les conseils de mon prof de Si en éléc : un programme ( un peu long et développé) demande des commentaires pour savoir qu'est ce que ça fait ...
Car pour reprendre un programme de quelqu'un ou de soi exige une rigueur (pour être "productif") est essentiel je trouve ...
Je n'avais pas songé qu'utiliser Q allège la syntaxe de la formule.
Ton histoire de pavé X7, je crois comprendre que ça signifie que tu optimises le programme en utilisant des variables et une seule boucle.
Cela entre en conflit avec ton discours contre l'optimisation.
D'un côté il y avait les commentaires sur le forum, d'un autre côté je proposais de placer des commentaires dans la calculatrice pour lutter contre les incompréhensions, en particuliers celles liées aux abus de syntaxe (celles qui réduisent le poids du code par économies, que nous confondons avec l'optimisation).
Non je ne mentionnais pas de "documentation hors programme". Je proposais des manières de palier à l'absence de syntaxe de commentaire dans une calculatrice TI. Cela consiste à empêcher l'exécution de ce qu'on veut utiliser en commentaire.
Code
// technique de l'alternative
If 0
une ligne de texte ou code lisible
If 0
Then
plusieurs paragraphes lisibles
End
// technique du Goto
// lente si ce n'est pas au début du programme
// n'écessite une étiquette unique, pénible
Goto 99
plusieurs paragraphes lisibles
Lbl 99
//technique du guillemet // inutilement lente comparée aux If mais très simple
"une ligne de texte lisible, mais ne contenant ni guillement ni flèche sto, que le programme range dans la variable Ans ou Rép mais n'exécute pas
Si tu as lu mon discours en début de message dénaturant le débat sur l'abus d'optimisation, alors tu sais déjà que je confirme l'importance des nombreux commentaires.
Citer : "DragonLaBelette"
Car pour reprendre un programme de quelqu'un ou de soi exige une rigueur (pour être "productif") est essentiel je trouve ...
Par exemple j'ai dit que
"- P(X=<?)=l "l" est un nombre connu .
- de même pour P(X>=?)=l"
? suppose qu'on se questionne car justement on ne connait pas la valeur donc je reformule "P(X<=K) = L" avec K inconnu et L connu .
Oui la rigueur c'est important.
Mais pour moi utiliser le point d'interrogation est une manière d'exprimer clairement l'information du choix de l'inconnue mais pas une rigueur. La rigueur serait de donner un nom à la variable pour pouvoir l'exploiter puis de lister clairement les inconnues dans le texte associé à cette équation. Et encore mieux, utiliser une fonction quelconque pour montrer les entrées et sorties du problème.
Essayer d'être rigoureux n'apporte pas forcément de la clarté, cela dépend de l'abstraction de chacun.
Je chipotais sur ce que j'avais mal compris au premier abord, cela n'impose pas un formalisme plutôt qu'un autre.
##### un peu de travail sur les programmes
Je ne sais pas vraiment ce qui te manque à propos de mes variables pour comprendre mes programmes. J'ajouterai des commentaires en modifiant.
Ta ligne de calcul est bizarre.
Il manque une parenthèse fermante, je pense que elle serait avant le produit par P^N.
Tu peux simplifier N-(N-C). Je ne sais pas à quoi tu penses.
Code
While arrondi(L,3)=/P
(Q^N-(N-C)*(P^N)-)P // (Q^N-(N-C))*(P^N)-)P
arrondi(P,3)-)P
Tu devrais tester l'écart entre L et P ou bien arrondir les deux plutôt qu'arrondir seulement L.
Sinon tu peux avoir par exemple P=0.44444 et L=0.44444 arrondi à 0.444. Or la calculatrice TI utilise des mantisses de 14 chiffres donc elle teste 0.44444=0.444. Cela ne marche pas.
Et mieux, tu devrais comparer P et L avec une relation d'ordre ("inférieur" par exemple) pour que ton crible puisse s'arrêter si aucun antécédent ne peut l'approcher. Inspire toi de mes programmes.
Voici une illustration des valeurs pour un cas discret.
Code
X~~B(3,0.5)
K 0 1 2 3
P(X<=K) .125 .5 .875 1
Si on demande de résoudre P(X<=K)=0.7, alors l'antécédent est 2
car lim(P(X<=K))(K->2;K<2)=P(X<=1)=0.5 < 0.7 <= .875=P(X<=2)
A la lumière de ce que je viens de détailler, je me rend compte de mon erreur de jugement dans mes précédents programmes, que je corrigerai en modifiant l'usage de K.
Je testerai mes propres programmes, les corrigerai, et chercherai ce que je peux faire pour les adapter à ton programme et ton style.
---------------------- 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 : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Mer 03 Déc 2014, 9:30
écoute je suis d'accord dans le point de vue quand tu es dans le cas d'un code "complexe" comme le C et ect ... vers un langage assembleur qui s'en moque du texte .
Dans la calculatrice on a une contrainte en plus car pour l'ordinateur vous pouvez mettre un roman : c'est pas si grave alors que sur la calculatrice : ça prend de la place !!!!!!
Donc dans un point de vue "optimal" qui prend le moins de place en minimum de temps . Quand généralement on dit c'est "optimal" on dit qu'on ne peut pas faire mieux (je le prends au sens extrême du terme). (puisque sa diminue le temps d'affichage peut être ...)
Ainsi d'être "optimal" chez vous , prend le facteur "clarté" et "code" ...
Bref on pouvait clore le débat en 2 lignes .Mais je défends que c'est un choix personnel de le faire ou pas.
"DragonLaBelette, tu avais rejeté l'intervention de Mingerton donc il est simplement vexé, je ne pense pas que cela ai à voir avec un discours élitiste."
Dis donc je pense qu'on va tout le temps être pas d'accord ^^ :
"Ps à Mingerton en +: vu que tu es un spécialiste de la ti 82 stats , peux tu lire mon édit de ma réponse à linkakro (c'est à dire la fin du message) et y répondre si tu en a la capacité stp ; merci"
au contraire je voulais l'inclure . Après si vous avez eu quelques préjugés, je trouve ça un peu idiot (tout le monde est un peu idiot) de le prendre comme sa car mon argumentation essaye d'être réaliste.
J'avais aucune intention de dispute , je suis interesting ( d'où mes longueurs) et j'apprends davantage , et ce n'étais en aucune intention de dispute sauf que sa vision m'avait déplut , et en aucun cas je me fâche contre , mais je ne suis pas d'accord avec son idée ( rien avoir avec sa personne), simplement .
Et si je l'ai laissé penser ça , excuser moi ma maladresse .
En notant que j'ai essayé pour le mieux d'installé le débat qui m'avait interesting sans préjugé .
"En t'écoutant j'ai l'impression d'avoir un discours d'élitiste borné."
J'ai simplement essayer de lui dire d'avoir un esprit ouvert sur le sujet car sa première réponse était un peu trop dure à mon goût .
PS : peut être que ce n'est pas vraie mais je suis sincère .
"Je n'avais pas songé qu'utiliser Q allège la syntaxe de la formule.
Ton histoire de pavé X7, je crois comprendre que ça signifie que tu optimises le programme en utilisant des variables et une seule boucle.
Cela entre en conflit avec ton discours contre l'optimisation."
Pas tellement dans l'édit du programme mais dans le fait d'entrer des valeurs d'accord , à vraie dire entre 1000 et 2000 octets juste pour la loi binomiale ... C'était une décision hors de mon raisonnement et je l'accepte exceptionnellement , tout n'est pas rigide , je lui est fait savoir que j'étais d'accord avec une partie de son argumentation et c'est vraie que je me contredis mais parfois ce ne se résume pas à "oui" et à "non" . Mais je suis conscient que si par exemple je cherche L tels que P(X=K)=L je sais d'après mon édit finale que si je rentre n'importe quoi dans X je n'aurais aucun remord (puisque j'admet comme hypothèse que ça marche et que le programme et est "opérationnel" ) et qu'en plus que si un programme ne marcherais pas je me méfierais beaucoup ; et je n'admet pas que je sais quels sont les variables et qu'est ce que je fais ( car je pense que j'oublierais)
En conclusion je mémorise un programme sur le fait que je l'est validé par des calculs et non le programme en lui même en sachant que toutes variables inutiles dans le calcul peuvent être assimilé à n'importe quel valeurs (ce que je suis sûr de mémorisé) .
en faite vue que j'utilise 7 fois la loi binomiale dans mon programme(qui n'est pas là ) vaut mieux rentre les valeurs qui sont la clef des calcules au tout début donc je résume :
- je rentre les valeurs les plus importantes pour calculer n'importe quoi dans la loi binomiale
- je rentre dans le menu
- je met des variable si besoins
-je met les opérateurs mathématiques permettant de trouver la solution .
PS :
Code
While arrondi(L,3)=/P
(Q^N-(N-C)*(P^N)-)P // (Q^N-(N-C))*(P^N)-)P
arrondi(P,3)-)P
En faite j'avais me semble t il compris le problème : la calculette prend 10-9 chiffres significatifs et ce que je rentre est trop précis , si la calculatrice ne fait pas Exactement le même calcul avec arrondi au dernier chiffre significatif c'est fichu !
(Illumination) : je pense que je ne tient pas en compte les combinaisons !!!
au pire pourrais t on pas faire plus simplement : N->X
While P=/arrondi(L,3)
binomeFdp(N;p;X) ->P
X-1->X
arrondi(P,3)->P
End
End (autre prog qui est dans la condition de décision (avec D)
Note : N est le nombre d'effectif total (valeurs entières)
ainsi X aura pour rôle de simuler tout les P(X=N-1) avec aussi P(X=N)
J'enfile le prog et je vous avertirez si ça marche ^^
Merci .
Ps': arrondi(X,3) permet d'arrondir le nombre X au 3 ième chiffre significatif ; on est dans les proba donc 0<P(X= ...)<1 et je met strictement car sinon le problème est simple et cela nous mène à rencontrer des résultats du genre 0.252. (je met au millième car beaucoup de sujet veulent en millième et/ou en fraction) .
PS'':
Code
EffToutListes
Effecr
Disp"n NOMBRE D'"
Imput"ESSAIS TOTAL =",N
Disp"NOMBRE DE "
Imput"SUCCES = ",X
Imput"P(SUCCES) = ",P
1-P-)Q
lbl0
Menu(Blablabla)
lbl n'importe quoi
Disp "VOUS VOULEZ"
Imput "P(X=L) = ?",D
If D=OUI
................
Else
Imput L
0->C
N->X
While arrondi(L,3)=/Y
binomeFdp(N;P;X)->Y
arrondi(Y,3)-)Y
X-1-)X
C+1-)C
Disp X
End
End
En faite je pense que c'est un plus gros problème que je pensais car pour avoir une petite idée j'ai affiché toutes les valeurs de Y arrondit dans une liste et ça me fait peur car NORMALEMENT il aurait dû valider la condition et afficher
le résultat ....
Devons - nous mettre un "Fixe 3" ou plutôt un "Fixe 4" (pour avoir les millièmes) ? (pour l'écart c'est bien pensée mais les résultats théoriques de proba peuvent être proche avec 1/40 et être différent , pour dire que c'est une marge d'erreur , je souhaite l'exactitude au 1/500 ça éliminera pas mal de cas faux )
Ps''' finale :
Code
EffToutListes
Effecr
Disp"n NOMBRE D'"
Imput"ESSAIS TOTAL =",N
Disp"NOMBRE DE "
Imput"SUCCES = ",X
Imput"P(SUCCES) = ",P
1-P-)Q
lbl0
Menu(Blablabla)
lbl n'importe quoi
Disp "VOUS VOULEZ"
Imput "P(X=L) = ?",D
If D=OUI
................
Else
Imput L
0->C
N->X
While arrondi(L,3)=/Y
binomeFdp(N;P;X)->Y
arrondi(Y,3)-)Y
X-1-)X
C+1-)C
End
Disp X+1
End
ça marche mais le grand mystère de ce programme c'est quand vous lui attribué la tâche d'afficher Y dans la boucle il ne vérifie pas la condition , et même là ce ne marche plus parce que j'ai mis du texte en plus ou même ... bref je sais plus ...
et X+1 car quand le programme vérifie la condition on a par passage fait X-1 ...
Donc X-1+1= X .
J'ai trouvé le problème !!!!!
c'est ce de arrondi(L,3) , j'ai ajouter une ligne avant la boucle du while ... "arrondi(L,3)-> L" ( c'est la ligne en question qui est ajouté )
Mon hypothèse c'est qu'il va tellement vite ( à verifier ) qu'il oubli de façon systématique et non pas de manière ponctuel d'arrondir !!!
En conséquant c'est "While L=/Y"
PS autres :
Comment effacé l'axe des abscisses et des ordonnées pour donner lieu à des dessins ? et Comment la remettre (l'axe orthogonal ) ?
Merci ça m'aidera pour commencer le programme sur l'arbre de probabilité de la loi binomiale avec 3 répétition de la même expérience .
et aussi pour l'arbre pondéré .
Merci .
Ps important :
en faite le problème ne viens même pas du programme en lui même mais de la répétition de la vérification du calcul du
binomeFdp(N;P;X)= N Combinaison X * P^N * Q^(N-P)
ou pour ceux qui tentent leurs chance pour rien:
(N! / X! (N-X)!) *P^N*Q^(N-P)
J'ai tout essayé
car selon son humeur il me donnait un vraie résultat car il n'était pas foutu de recommencer sa boucle
ainsi j'ai tenté de me lancé dans l'investigation ( ça à duré 3 heures voire 4 le totale )
Ainsi je vous avertit : j'ai mis mon prog "cal0" qui efface presque toute les matrices , qui efface le dessin , efface toutes les listes , qui efface toute les chaînes , toutes les IMG , tout les BDG , qui efface la mémoire des précédent résultats , qui met toutes les variables dans les respectifs valeurs quand la base = 34. et j'ai put ensuite avoir mon contentement du vrai résultat
et j'ai essayé donc de savoir quel est le paramètre qui influe sur mon programme ...
Théoriquement il y en a pas .
Mais j'ai put mettre peut être en évidence que ça marchait quand toutes les varaibles étaient respectif à leurs valeurs:
A->10
B->11
C->12
.....
.....
Z->35
Quelqu'un pourrais m'expliquer pourquoi ? Pourquoi y a t il cette influence "invisible" ?
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 03 Déc 2014, 23:27
Sur ces débats je ne cherche pas plus loin, il y a eu des qui-pro-quo alors que personne ne pensait à mal. Terminé. En plus tu as très bien énoncé la contrainte de mémoire de source sur TI.
Je suis un peu perdu dans tes corrections d'arrondi. Je laisse tomber je prend la dernière.
Les comparaisons arrondissent à 10 chiffres, cela n'utilise pas les 14 chiffres, contrairement à ce que j'ai écris. Mon article sur la précision est dans la rubrique article. Mes expériences sont détaillées.
La fonction binomFdp(N,P[,K]) donne la densité de probabilité de chaque point K.
Si on ne passe pas K, le retour est la liste des répartitions pour chaque K. Même principe pour la densité.
Ne confond pas les deux. Tu as justement confondu les deux sans effectuer la somme des valeurs précédentes de densité.
En fait tu fais la confusion entre densité et répartition depuis le début. Moi je croyais que tu voulais calculer la répartition avec ta boucle et créer une autre boucle pour la réciproque.
Pour ne pas faire de répétitions dans ton programme, tu peux aussi appeler un autre programme depuis ce programme. La même syntaxe que dans l'écran principal, le menu prgm+gauche est justement le menu Exec pour cette raison.
J'y pense car je songe que tu voulais peut-être rassembler le calcul de répartition et de la réciproque dans une seule boucle. En effet tu m'as bien expliqué que tu voulais ne pas répéter des choses.
Ces fonctions sont un gain d'efficacité voire même de précision, mais je croyais que tu voulais t'en passer. Sachant que tu les exploites, je peux simplifier largement des choses.
Je maintiens que tu dois tenir compte du caractère discret de la loi binomiale pour résoudre l'équation de réciproque. J'ai posté dans mon message précédent un exemple très clair.
Je n'ai pas encore corrigé les itérations de mes premiers programmes, ça viendra.
Les relations d'ordre utilisées pour repérer P(X<=K)<L, plutôt qu'un encadrement par arrondi de l'égalité, modifient aussi une partie du problème d'arrondi.
Ta formule de densité mentionnée en comparaison à la fonction de densité est erronée ou ambiguë. Problème dans l'exposant de Q. Je pense que tu devrais aussi rappeler que Q=1-P.
binomeFdp(N,P,X)= (N Combinaison X) * P^N * Q^(N-X)
Citer : "DragonLaBelette"
binomeFdp(N;P;X)= N Combinaison X * P^N * Q^(N-P)
Le menu format permet de modifier l'apparence du graphique. Si tu es dans l'éditeur, il insère les commandes au lieu d'affecter les états. La fonction AxesOff/AxesNAff désactive les axes.
Je mentionne deux noms de la fonction car les 82plus et 82statsfr ne sont pas traduites pareil.
Tu devrais désactiver les courbes avec FonctNAff/FonctOff du menu var+droite(y-var)+4. Et dans un programme du devrais désactiver les graphes-stats (statsplots) : GraphOff/GraphNAff du menu 2nde+[Y=].
Citer
Code
Disp "VOUS VOULEZ"
Imput "P(X=L) = ?",D
If D=OUI
Tu donnes un choix à l'utilisateur au travers d'une saisie et ta condition est un produit des variable O,U,I, ce n'est pas une condition de mot.
Je pense que c'est le rapport avec l'initialisation des variables que tu décris. Tu devrais utiliser un menu ou une chaîne de caractères plutôt que ce produit. On n'est pas dans une TI82 basique qui n'a pas de chaînes, et même si c'était le cas, alors le menu conviendrait de toute manière. Quant au produit des lettres, je n'aime pas ça car c'est commutatif même si ou utilise des nombres premiers. (OUI=IOU=UIO=UOI=OIU=IUO)
---------------------- 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 : 30
Inscrit le : Jeu 27 Nov 2014, 20:16
Posté le : Jeu 04 Déc 2014, 9:41
Citer : "linkakro"
Tu donnes un choix à l'utilisateur au travers d'une saisie et ta condition est un produit des variable O,U,I, ce n'est pas une condition de mot.
Je pense que c'est le rapport avec l'initialisation des variables que tu décris. Tu devrais utiliser un menu ou une chaîne de caractères plutôt que ce produit. On n'est pas dans une TI82 basique qui n'a pas de chaînes, et même si c'était le cas, alors le menu conviendrait de toute manière. Quant au produit des lettres, je n'aime pas ça car c'est commutatif même si ou utilise des nombres premiers. (OUI=IOU=UIO=UOI=OIU=IUO)
J'ai modifié mon programme qui mène le choix de l'utilisateur sur la variable qu'il veut calculer :
ex: "VOUS VOULEZ QUEL VARIABLE P(X=K)=L
IF D=L
blabla
Else (K=/L)
blablabla
Pour être rigoureux il faudrait redonner à toutes les variables leurs valeurs distincts.
Citer : "linkakro"
En fait tu fais la confusion entre densité et répartition depuis le début. Moi je croyais que tu voulais calculer la répartition avec ta boucle et créer une autre boucle pour la réciproque.
Pour ne pas faire de répétitions dans ton programme, tu peux aussi appeler un autre programme depuis ce programme. La même syntaxe que tant l'écran principal, le menu prgm+gauche est justement le menu Exec pour cette raison.
J'y pense car je songe que tu voulais peut-être rassembler le calcul de répartition et de la réciproque dans une seule boucle. En effet tu m'as bien expliqué que tu voulais ne pas répéter des choses.
Ces fonctions sont un gain d'efficacité voire même de précision, mais je croyais que tu voulais t'en passer. Sachant que tu les exploites, je peux simplifier largement des choses.
Bah je ne crois pas que théoriquement mon programme avec les arrondis soit faux, mais elle marche qu'une fois et puis quand je ressaisis elle affiche (P(X=11) )
en saisissant rigoureusement le résultat à P(X=5) , c'est à dire 0.243 pour p=0.525 alors que N=10 et c'est sûr qu'il n'y a que pour P(X=5) que ça marche .
PS: cet exemple là est corrigé par mon prof de math et approuved by belette façon de parler.
C'est peut être ça que j'ai oublié de mentionner d'important.
L'erreur ne viens pas de la précision (je suis à 99.9999% sûr).
PS':
Citer : "linkakro"
La fonction binomFRép(N,P[,K]) donne la répartition. Si on ne passe pas K, le retour est la liste des répartitions. Même principe pour la densité.
Ne confond pas les deux. Tu as justement confondu les deux sans effectuer la somme des valeurs précédentes de densité.
La somme ? Je ne comprends pas pourquoi on devrait sommé
Car si on considère un histogramme issue d'une répétition du schéma de Bernoulli on peut apercevoir que si on relie les arête en haut des rectangle on peut conjecturer une courbe en cloche .
Mais je ne pense as que symétriquement ce ne peut pas s'assimiler à une courbe gaussienne (sauf la forme) puisque la loi binomiale comme tu la justement évoqué prend des valeurs discrètes alors que la loi normale prend des valeurs continus.
Supposons que c'est une (pas "LA") courbe gaussienne , Notons BinomeFrép(N;P;X)
cela est traduit par P(X=<K)=L.
Là je pense qu'on est toutes à fait d'accord à mon avis mais si on somme
P(X=<K+1)+P(X=<K) et K+1=<N
alors 0=<P(X=<K+1)+P(X=<K)=<2
Je ne pense pas qu'il y est un sens pour la question correspondante car Si on nous demande de trouver L = P(X=<K) je ne pense pas que L vaut plus de 1 car 1 est la somme de toutes les probabilité de l'univers oméga ou au moins d'une somme d'une partition de l'univers
Ou peut être tu voulais dire avec binomeFdp(N;P;X) qui se traduit par P(X=K) = L:
si on somme
P(X=K)+P(X=K+1) on aurait P(X=<K+1) si K=0 qui serais ta suggestion la plus probable puisqu'elle a en tout cas à mes yeux , un sens .
par contre très bonne idée puisque il n'y a aucun problème sur les binomeFdp
---------------------- Toujours plus haut , toujours plus fort !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 04 Déc 2014, 23:55
Je crois qu'on est d'accord sur le concept.
densité binomFdp(N,P,K)=P(X=K)
répartition binomFRép(N,P,K)=P(X<=K) = somme(P(X=M);M=[[0;K]])
Mais je ne suis pas certain de savoir quelle opération ta boucle ou plusieurs boucles sont supposées faire, d'autant que je crois que tu voulais rassembler sous une même boucle plusieurs opérations.
Ainsi tu ne confonds peut-être pas densité et répartition mais en fin de compte la boucle ne fait pas ce à quoi je m'attends.
Malgré tout je suis déconcerté par un de tes propos sur la courbe en cloche. (je me fiche de l'analogie gaussienne, j'ai bien compris l'allure que tu veux décrire : croissant puis décroissant.)
La densité ne donne pas d'indication sur la répartition puisque la répartition est une somme intégrale. Ainsi l'allure de la répartition n'est pas une cloche comme la densité.
Attention à ne pas confondre la variable aléatoire X majuscule et l'antécédent traditionnel des courbes x minuscule. Tu as mélangé les deux dans le passage qui suit ta description de l'allure "gaussienne". ( 'pas "LA" gaussienne' )
J'ai utilisé K depuis le début de la discussion pour éviter la confusion puisque les TI 82 à 83 sauf 82plus ne peuvent pas écrire facilement de x minuscule, et que ce n'est pas une variable pour autant.
Citer : "DragonLaBelette"
Bah je ne crois pas que théoriquement mon programme avec les arrondis soit faux, mais elle marche qu'une fois et puis quand je ressaisis elle affiche (P(X=11) )
en saisissant rigoureusement le résultat à P(X=5) , c'est à dire 0.243 pour p=0.525 alors que N=10 et c'est sûr qu'il n'y a que pour P(X=5) que ça marche .
PS: cet exemple là est corrigé par mon prof de math et approuved by belette façon de parler.
Je suis complètement perdu. Je ne saisis toujours pas ce qui marche et ce qui ne marche pas.
####
Pour moi la base est comme ceci. Je ne peaufine pas l'invité de saisie de toutes les données car tu peux garder le tien.
J'en profite pour mentionner Return dont je n'avais pas parlé à l'occasion de mon propos sur les sous-programmes.
Code
Prompt N,P,L
Menu("LOI BINOM(N,P)","DENSIT P(X=K)=?",1,"REPART P(X<=?)=L",2,"REPART P(X>?)=L",3)
Lbl 1
Disp "P(X=K)
binomFdp(N,P)->L1
Pause L1
Return // retour au programme appelant (ou quitte s'il n'y en a pas)
Lbl 2
BinomFRép(N,P)->L1 //stocke toute la loi de répartition
Pause L1 // lire la liste (flèches pour parcourir)
// la boucle si lire la liste te gènes
0->K
While K<N et arrondi(L1(K+1),3)<arrondi(L,3)
K+1->K
End
Disp "K",K,"P(X<=K)"
Pause L1(K+1)
Return
Lbl 3
1-BinomFRép(N,P)->L1 // complément de la répartition P(X<=K) c'est-à-dire P(X>K)
Pause L1 // lire la liste de la répartition P(X>K)
// la boucle si lire la liste te gène
N->K
While K>0 et arrondi(L1(K+1),3)<arrondi(L,3)
K-1->K
End
Disp "K",K,"P(X>K)"
Pause L1(K+1)
// la fin se comporte comme Return
J'ai traité les arrondis avec une condition d'égalité sur les deux nombres arrondis.
Je stockes les listes de valeurs pour pouvoir les afficher. Pas besoin de boucle pour le calcul puisque les fonctions sont conçues pour ça, mais les boucles recherchent les antécédents pour la réciproque.
Remarque : certaines différences de décalage de K avec mes programmes au début du sujet viennent seulement de l'absence de liste, le calcul est dans la boucle donc K est en avance à la fin de chaque boucle. Contrairement à ce que je viens à peine de poster avec une liste.
Je calcule P(X>K) avec K décroissant et je conditionne avec la valeur strictement inférieure à l'objectif L.
Mais je ne suis pas certain que ce soit une bonne approche, j'hésite à propos de la discontinuité de la fonction de répartition. Voici un exemple illustré de mon hésitation
crible de gauche à droite tant que P(X<=K) est inférieur strict à L, L=0.7 implique K=2.
Si je crible de droite à gauche (tant que supérieur strict), je suis tenté par K=1.
J'hésite donc à modifier la tolérance des inégalités si je parcours en sens inverse, ou encore décaler le résultat affiché (K-1,K+1).
crible et somme de droite à gauche (P(X>K) tant que supérieur strict à L) avec L=0.3=1-0.7, K=2.
Si je crible de gauche à droite (tant que inférieur strict), je suis tenté par K=3.
crible de gauche à droite et calcule 1-P(X<=K) tant que c'est supérieur strict à L, L=0.3, K=2
Si je crible de droite à gauche (tant que inférieur strict), je suis tenté par K=1.
Rien qu'écrire ces cas clairement ça éclaircis mes idées.
Si cela te gène ne le prend pas trop à coeur, sinon cela peut donner des idées.
---------------------- 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)