Page 1 of 3

Adapter un programme de dichotomie AlgoBox

Unread postPosted: 18 Nov 2012, 19:07
by Lokinol
Bonjour à tous !

Étudiant actuellement en classe la dichotomie, j'ai essayé de créer un programme - plus complet que celui proposé sur Ti-Planet - afin de le partager avec la communauté.
1ère étape : Mise en place de l'algorithme dans Algobox - pas de soucis à noter. Le programme vise à déterminer une solution unique (f(x)=k), avec k, qui peut être égal 0 ou à un autre nombre.
Note : Le programme de dichotomie proposé sur Ti-planet ne permet le calcul qu'avec k=0, voilà pourquoi je souhaite créer un programme remplissant cette fonction.

Voici le code sur Algobox :

Variables
a est du type nombre
b est du type nombre
k est du type nombre
n est du type nombre
c est du type nombre
d est du type nombre
e est du type nombre

Début algorithme :
Lire a
Lire b
Lire k
Lire n
c prend la valeur F1(a)
Tant que ((b-a)>pow(10,-n)) FAIRE
Début tant que
d prend la valeur (a+b)/2
e prend la valeur F1(d)
Si ((k-e)*(k-c)<0) Alors
Début si
b prend la valeur d
Fin si
Sinon
Début sinon
a prend la valeur d
Fin sinon
Fin tant que

Afficher a
Pause
Afficher b

Bref, le programme fonctionne bien sur Algobox.
Exemple : je souhaite calculer la valeur de alpha lorsque f(x)=x^3+x=4 sur [1;2]

Ça me donne :
J'entre F1(x)=pow(x,3)+x, l'algorithme se lance puis j'entre les valeurs demandées : 1 en a, 2 en b, 4 en k, 5 en n. n correspond à la précision du calcul.
On obtient alors alpha = 1,37879.

Encore novice en programmation Nspire, quelqu'un pourrait-il m'aider à adapter ce programme ?

Un grand merci pour votre aide !!

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 18 Nov 2012, 20:19
by Excale
Traduit littéralement :)
(f est la fonction, v la variable avec laquelle tu travailles (très souvent x)
Code: Select all
Define dichoto(f,v,a,b,k,n)=
Prgm
Local c,d,e
c:=f|v=a
While b-a>10^(-n)
d:=((a+b)/(2))
e:=f|v=d
  If (k-e)*(k-c)<0 Then
    b:=d
  Else
    a:=d
  EndIf
EndWhile
Disp "a=",a," ; b=",b
EndPrgm

(j'espère ne pas avoir fait d'erreur)
Maintenant, je te laisse comprendre comment ça marche :P.

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 18 Nov 2012, 20:44
by Bisam
Pour gagner légèrement en vitesse d'exécution, il est plus efficace de ne faire qu'une seule fois le calcul de 10^(-n).
Le programme devient alors :
Code: Select all
Define dichoto(f,v,a,b,k,n)=
Prgm
Local c,d,e,eps
c:=f|v=a
eps:=10^(-n)
While b-a>eps
d:=((a+b)/(2))
e:=f|v=d
  If (k-e)*(k-c)<0 Then
    b:=d
  Else
    a:=d
  EndIf
EndWhile
Disp "a=",a," ; b=",b
EndPrgm

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 18 Nov 2012, 22:02
by Lokinol
Merci Bisam et Excale pour votre être très précieuse !
Cependant, j'ai copié le programme dans un classeur, j'ai essayé de le lancer sur Ti-Nspire en ayant placé le classeur dans MyLib histoire de l'utiliser en tant que fonction.
Donc j'ai dichoto\dichoto(). Dans les parenthèses, je met : (x^3+x,1,2,4,10^-5), mais le programme me dit qu'il y a trop d'arguments.

Pouvez-vous m'éclairer ?

Merci encore une fois pour votre aide !

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 18 Nov 2012, 22:03
by Excale
As tu bien pensé à remplir la première ligne?

Code: Select all
Define dichoto(f,v,a,b,k,n)=

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 19 Nov 2012, 08:48
by Bisam
Par ailleurs, c'est
Code: Select all
dichoto(x^3+x,x,1,2,4,5)
que tu dois exécuter et non
Code: Select all
dichoto(x^3+x,1,2,4,10^(-5))

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 20 Nov 2012, 01:18
by Lokinol
Bonjour à vous, Bisam et Excale,

Je vous confirme, à tous les deux, que j'ai copié le code de Bisam que j'ai transféré dans le dossier MyLIb de ma Nspire.
Par ailleurs, lorsque j'appelle la fonction dichoto\dichoto dans une page de calcul, entre parenthèses, je mets par exemple : dichoto(x^3+x,1,2,4,10^(-5))
; mais pas moyen, toujours cette histoire de "Il y a trop d'arguments".

Avez-vous testé sur votre nspire si le programme fonctionnait ?

Bien à vous,
Un grand merci pour votre aide précieuse.

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 20 Nov 2012, 08:37
by Levak
Lokinol wrote:Bonjour à vous, Bisam et Excale,

Je vous confirme, à tous les deux, que j'ai copié le code de Bisam que j'ai transféré dans le dossier MyLIb de ma Nspire.
Par ailleurs, lorsque j'appelle la fonction dichoto\dichoto dans une page de calcul, entre parenthèses, je mets par exemple : dichoto(x^3+x,1,2,4,10^(-5))
; mais pas moyen, toujours cette histoire de "Il y a trop d'arguments".

Avez-vous testé sur votre nspire si le programme fonctionnait ?

Bien à vous,
Un grand merci pour votre aide précieuse.


Je te retourne la question : tu mets toujours un nombre invalide d'arguments comme le précise le post de Bisam juste au dessus.
Par ailleurs, as-tu pensé à faire Ctrl+B sur l'éditeur de programme ?

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 20 Nov 2012, 12:34
by Bisam
Il y a 2 erreurs :
- tu oublies le 2ème argument, la variable "x"... mais du coup, tu devrais avoir un problème "pas assez d'arguments" et non "trop d'arguments".
- tu te trompes dans le 6ème argument : il faut mettre 5 et non 10^(-5).

C'est ce que j'ai dit plus haut... mais visiblement tu n'avais pas compris.
Pense aussi à faire CTRL+B à chaque fois que tu modifies quelque chose au programme avant de le retester.

Re: Adapter un programme de dichotomie AlgoBox

Unread postPosted: 20 Nov 2012, 18:57
by Lokinol
Merci à tous pour vos conseils ... qui ont finalement abouti à la résolution de mon problème et à l'adaptation du programme de dichotomie que j'avais crée sur AlgoBox !

(Je n'oublierais pas de vérifier la structure du code du programme après l'avoir copié/collé dans un classeur. En effet, un While se baladait sur les premières lignes, de ce fait, c'était toute l'exécution du programme qui était bloquée.)

Merci encore ! Il ne me reste maintenant plus qu'à comprendre le langage de programmation et les adaptations nécessaires entre un programme Algobox et celui en Basic ;).