π
<-

Problème boucle for()

Problème boucle for()

Message non lude Claros » 24 Jan 2011, 19:06

Salut,

Je viens de remarquer un problème dans un de mes programmes. Ce programme me sert enfaite à tester la présence d'une racine évidente dans un polynôme afin de factoriser ce polynôme.
Voici un peu comment il est fait:
Code: Tout sélectionner
Input "f(x)=",Str0
Str0-Y0
For(X,-5,5,1/12)
If Y0(X)=0
Then
Disp "RACINE",X
Stop
End
End


Mais je remarque que lorsque la valeur de départ de X est inférieur à -1, la programme ne trouve plus la racine évidente. Du genre pour un polynôme comme
2X^3 - 2X² - 1
la racine évidente est 1 mais pour Y0(1) le programme trouve 0.6E-6 au lieu de 0.
Ce test fonctionne parfaitement pour une valeur initiale de X supérieur à -1

Si quelqu'un sait d'où vient le problème ?
Avatar de l’utilisateur
Claros
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 17.5%
 
Messages: 212
Images: 0
Inscription: 06 Jan 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS SVT

Re: Problème boucle for()

Message non lude critor » 24 Jan 2011, 19:24

La calculatrice TI-83+ ne travaille qu'avec des nombres décimaux (à 13 chiffres significatifs certes).

1/12 n'est pas un nombre décimal, et la calculatrice se le représente avec une petite erreur (inférieure à 10^-13, certes).


Mais au cours de ta boucle, ce nombre faux est ajouté plein de fois, et l'erreur est de plus en plus grosse.

Par exemple, la boucle ne tombe jamais sur X=0, mais sur X=-1.634*10^-12 à cause de ça.



Remplace l'incrément de ta boucle par un nombre décimal comme 1/10, et tu n'auras plus ce problème.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 53.5%
 
Messages: 42398
Images: 17115
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Problème boucle for()

Message non lude Claros » 24 Jan 2011, 19:31

Bah enfaite ce que je voulais faire c'est que je puisse trouver des racines évidentes comme 1/4 ou 1/3 le genre de chose qui reste quand même assez évident à factoriser. Comme visiblement ça pose des problèmes, je vais mettre 1/4.

Merci à toi critor !
Avatar de l’utilisateur
Claros
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 17.5%
 
Messages: 212
Images: 0
Inscription: 06 Jan 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS SVT

Re: Problème boucle for()

Message non lude critor » 24 Jan 2011, 19:53

Pour trouver des racines non décimales (comme 1/3), il va te falloir changer le fonctionnement du programme.

N'hésite pas à chercher ;)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 53.5%
 
Messages: 42398
Images: 17115
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Problème boucle for()

Message non lude Claros » 24 Jan 2011, 20:55

Bah découper la boucle en plusieurs petits intervalles pour supprimer la marge d'erreur semble une solution assez simple et c'est celle pour laquelle je vais opter.
Avatar de l’utilisateur
Claros
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 17.5%
 
Messages: 212
Images: 0
Inscription: 06 Jan 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS SVT

Re: Problème boucle for()

Message non lude Bisam » 25 Jan 2011, 22:09

Tu dois sans doute pouvoir arranger le problème de cette façon :
Code: Tout sélectionner
Input "f(x)=",Str0
Str0-Y0
For(X,-60,60
If Y0(X/12)=0
Then
Disp "RACINE",X/12
Stop
End
End

en effet, au lieu de travailler avec des décimaux, tu restes avec des entiers dans la boucle for, et c'est seulement au moment du calcul de la fonction que l'on divise par 12.

Je n'ai pas ta calculatrice pour tester... alors je te laisse faire et nous dire le résultat.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Problème boucle for()

Message non lude Claros » 25 Jan 2011, 22:23

Excellente méthode, encore plus simple que ce que j'avais fait. Merci à toi Bisam ;)
Avatar de l’utilisateur
Claros
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 17.5%
 
Messages: 212
Images: 0
Inscription: 06 Jan 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS SVT


Retourner vers TI-Basic

Qui est en ligne

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

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


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