Posté le 07/11/2005 à 17:16 Membre depuis le 17/12/2004, 5 messages
Voila mon probleme:
Je fais un programme sur la methode euler et jaurai voulu savoir comment on utilise une fonction variable.
En grs mon probleme c'est les commandes:
Prompt [La fonction a definir]
...
X+H*[Utiliser la fonction dans laquelle je met une variable]-->X

J'espere vous avez compris smile,Merci de votre aide

PS: Ma calculette: TI84+ SE
Posté le 07/11/2005 à 18:19Edité par very le 07/11/2005 à 18:54 Membre depuis le 09/07/2003, 21783 messages
Input Str1
Str1->Y1

( Str1, Y1, tu les trouvera avec la touche [VARS] )

Ensuite, "utiliser la fontion" = prendre la valeur de la dérivée de cette fontion en X ?
Pour ça il faut utiliser nDeriv (menu maths, vers le 8ém choix )

T'a plus qu'a boucler tout ça, et voilà.
( tu peut même le tracer si t'a envie.)

Sinon, t'es en terminale et vous n'aborder la focntion exponentielle que maintenant ?
Posté le 07/11/2005 à 18:31 Membre depuis le 17/12/2004, 5 messages
Ouais je suis en terminal par contre jvois pas ce que c'est la fonction exponentielle grin Ptetre j'ai pas fait encore smile
Posté le 07/11/2005 à 18:54 Membre depuis le 09/07/2003, 21783 messages
ha ben tu vas découvrir dans qques heures de cours wink. (surement ton prochain cours ou celui d'après )

Grace à ça il (ton prof ) va te faire tracer une fcotnion f(x) tel que f'(x) = f(x) ( pour tout x), et f(0)=1, par exemple.
Bha cette focntion là, on l'apelle fonction exponentielle. (fontion exponentielle naturelle, si tu veut être prècis hehe )
Posté le 07/11/2005 à 18:58 Membre depuis le 17/12/2004, 5 messages
En fait j'ai pas tres bien compris comment ca marche sad
Le but methode Euler c'est a la base t'as f(0) et f'(x).
Et donc apres t'utilise h
f(a+h)=f(a)+hxf'(a)
Mais ske jveux c que je puisse rentré la dérivé et apres ca me l'utilise a chak fois( la mettre ds la boucle)
La j'ai:

Input "F(0)=",N
Input "F'(X)=",Str1
Input "H=",H
Input "F(X) cherché",Z
0->X
Str1->Y1
While(X<Z)
Disp "F(",X,")=",N
Pause
N+HxnDeriv(Y1)->N
End

Bon bien sur ca marche pas mais bon ca m'etonne pas trop paske j'ai pas tout compris a l'istoire d'utiliser la fonction dérivée.
Posté le 07/11/2005 à 19:11 Membre depuis le 09/02/2005, 13736 messages
Deja pour nDeriv ta syntaxe est pas bonne. Je crois que c'est nDeriv(Y1,X,reel auquel tu cherche le nb derivé).
Posté le 07/11/2005 à 19:19 Membre depuis le 09/07/2003, 21783 messages
heu en fait, si tu rentre f' et pas f, tu n'a pas beosin de nDeriv wink (sinon c'est gentil de nous expliquer la méthodee d'euleur, mais on connais déjà un peu hein )

Bon, ma version à chaud, sans tester:

Input "F(0)=",N
Input "F'(X)=",Str1
Input "H=",H
Input "F(X) cherché",Z
0->X
Str1->Y1
While(X<Z)
Disp "F(",X,")=",N
Pause
N+H*Y1(X)->N
End

Posté le 07/11/2005 à 19:32 Membre depuis le 17/12/2004, 5 messages
J'ai testé ca marche parfait, merci de ton aide sauf qu'il faut incrementer X a chaque fois a la fin wink
Posté le 07/11/2005 à 19:38 Membre depuis le 09/02/2005, 13736 messages
Pourquoi 0->X ??

Ca equivaut a:

Input "F(0)=",N
Input "F'(X)=",Str1
Input "H=",H
Input "F(X) cherché",Z
Str1->Y1
While(0<Z)
Disp "F(0)=",N
Pause
N+H*Y1(0)->N
End
Posté le 07/11/2005 à 19:40 Membre depuis le 09/02/2005, 13736 messages
A pardon j'avais pas vu ./9 (là effectivement ca a un sens).
Posté le 07/11/2005 à 19:46 Membre depuis le 09/02/2005, 13736 messages
Enfin, je penses qu'il serait quand meme mieux de sortir le disp et la pause de la boucle (imagine appuyer 100 fois sur pause pour arriver a f(100)...), sauf biensur s'il te faut toutes ces valeurs intermediaires.
Et sinon while c pas top; For(X,0,Z) c mieux et ca evite le X->0.
Posté le 07/11/2005 à 20:57 Membre depuis le 09/07/2003, 21783 messages
et surtout de reincrémenter le X à chaque fois hehe( j'avou ne plus même y avoir pensé , vu que je modifiait juste vite-fait son truc et que j'ai tellement l'habitude des For.. love )
Posté le 07/11/2005 à 21:12 Membre depuis le 09/02/2005, 13736 messages
Personnellement j'ai meme jamais utilisé le While (tant que la condition est vraie ... ).
Quand j'ai besoin d'une boucle dans ce genre j'utilises Repeat (jusqu'a ce que ... , en gros : tant que la condition est fausse ... ), ce qui est en fait exactement la meme chose que While, il suffit juste d'inverser la condition.
L'un des deux est donc inutile en fait.
Il y a aussi DS> (decrementer chais pas trop quoi...), dont j'ai jamais compris l'utilité (si qqun peut m'expliquer...)
Posté le 07/11/2005 à 22:10 Membre depuis le 09/07/2003, 21783 messages
Perso, j'utilise while d'e plus en plus. (surtout avec l'influance d'autres languages, c'est si pratique en php happy )
Vu que while est universel, je n'ai presque jamais du utilisé Repeat

Quand à DS<( et IS<(, ce sont des espèce d'opérateur batârd asser spécifique aux Ti basic, qui permet de décrémenter/incrémenter sur condition et de faire une comparaison en même temps. En fait, c'est une situation qui arrive régulièrement en programmation, c'est pour ça que Ti à du introduire ces deux opérateurs.
ça peut être très efficae pour optimiser.

Cf http://education.ti.com/downloads/guidebooks/fr/8316fre.pdf , 9éme page.

( enfin, opérateur, si tu le voi plus comme un ecomparaison qu'une décrémentation, c'est plutôt une instruction...bref, ça rest batârd, mais efficace. [faut-il encor penser à l'utiliser] )
Posté le 08/11/2005 à 17:15 Membre depuis le 09/02/2005, 13736 messages
Je trouves quand meme leur utilisation reduite, surtout que c seulement la commande suivante qui en depend.
En gros:

1->A
DS<(A,6)
Disp "> 6"
Disp "NOT > 6"

Affichera : NOT > 6

Mais:

10->A
DS<(A,6)
Disp "> 6"
Disp "NOT > 6"

N'affichera pas seulement : > 6 , mais :
> 6
NOT > 6

Ce qui a mon sens rend la fonction beaucoup moins interessante.
Maintenant comme tu dis ca peut etre utile pour optimiser.
Posté le 08/11/2005 à 17:21 Membre depuis le 09/07/2003, 21783 messages
ça fait exactement ce que fais un If utilisé sasn when (pour peu que l'ion veuille comparer à cette varibale)

en gros, ça fait exactement
If A - 1 < B (respectivement If A+1 > B )

C'est asser utile.
Tu met le truc qui doit se produire si la condition est rempli sur la ligne suivante, et tu passe au reste du programme.

Enfin, c'est relativement futil et limité...

Posté le 08/11/2005 à 17:40 Membre depuis le 09/02/2005, 13736 messages
Alors en z80:
A-1->A
If A < 6
9 octets

DS<(A,6
4 ou 5 octets

Oui effectivement, mais ca reste "relativement futil et limité..." comme tu dis.
Posté le 08/11/2005 à 18:11 Membre depuis le 09/07/2003, 21783 messages
Hum, en fait, dans ce que j'ai dis plus haut, j'ai zapé le fait que ça décrémente [b]effectivement[b/b] A

Donc pour être strictement identique:

A-1 -> A
If A < B

C'est bien ce que t'a dis en fait cheeky. (rha les jois du c-- love )
Il faudrais pouvoire directement affecter une varibale dans une autre expression, comme dans pleins d'autre languages happy. (d'autres languages distingues même l'incrémentation algébrique fait après ou avant l'évaluation de l'expression. ie if ( c++ > 5=b) est différent de if ( ++c > b)

En Ti-basic, ça donnerait If( A+1->A > b). ( mais c'est incorect. et d'où l'interet de taper l'expression avant son affectation, ie A <- A+1, mais encor invalide smile )
Fin bref, je suis en train de partir sur des futilité cheeky.