home *** CD-ROM | disk | FTP | other *** search
- Mathari : des 'maths' sur ATARI !!
- --------------------------------
- by The Removers .
-
-
- ( Compatible STF/STacy/STE/TT/Falcon 030/MEDUSA/MILAN/HADES/Magic )
- ( Testé sur : - ATARI 1040 STF
- - STacy 1 Mo/20 Mo
- - Falcon 030
- - Falcon 030 + CenTurbo 1
- - Falcon 030 + Nemesis
- - Falcon 030 + AfterBurner 040 [ + Nemesis ] = Falcon 040
- - PC avec la démo de MagicPC
- avec succès à chaque fois !!! )
- ( Matériel conseillé :
- machine avec processeur rapide pour calculer rapidement !!
- ( un Falcon 040 ou un Hadès étant l'idéal ;-)))))) )
- NVDI quasi-indispensable ( surtout sur machines lentes !! )
- Les flags sont configurés prêts à l'emploi ...
- Notez que la présence d'un copro est détecté au démarrage pour
- ceux qui en possèdent un ( conseillé mais non obligatoire ! ) )
-
-
- La renaissance de Mathari
- -------------------------
- Mathari est né le jour où j'ai voulu me faire des belles fiches
- pour réviser mes colles de maths portant entre autres sur les fonctions
- circulaires réciproques ( Arcsin, Arccos et Arctan ) . Alors, je me suis
- dit : il faudrait avoir un logiciel permettant de tracer n'importe quelle
- fonction et ensuite permettant de la sauver comme image . Et puis,
- évidemment, un tel logiciel, à ma connaissance n'existe pas sur ATARI .
- Donc j'ai commencé à écrire un petit programme capable de tracer beaucoup
- de fonctions ne contenant que des produits et n'importe quelle fonction
- usuelle : en effet, les sommes me posait des petits problèmes ( priorité
- de * par rapport à + ) . Cela ne pouvait donc me satisfaire . J'ai donc
- réfléchi un lundi matin en cours de f......s ( à vous de deviner sachant
- que j'étais en MPSI et maintenant en MP* ) à une procédure permettant
- d'analyser une expression mathématique aussi compliqué soit elle et de
- la comprendre, ie pour ceux qui n'aurait pas tout compris :
- analyser une expression du type : arcsin(√((1+sin(x))/2))
- et puis évidemment, après quelques instants de réflexion intense, j'ai
- trouvé la solution ( du moins en partie parce que ce n'est pas si facile
- que cela ) . Le soir même ( ou bien le lendemain ), j'écrivais donc LA
- fonction 'evaluate' qui marchait bien et même très bien . Et puis j'ai
- donc voulu aller plus loin et faire un grapheur utilisant évidemment cette
- fonction : ainsi naquit Mathari v 1.00ß . En fait Mathari existait déjà
- car c'est Stabylo qui le premier a commencé à essayer de faire faire des
- maths à son ATARI ( calcul de factorielles jusqu'à 5000! voire plus ) .
- J'ai donc repiqué le nom mais du même coup, Mathari est devenu un projet
- commun donc si il a envie de prendre la parole au cours de cette doc ou de
- rajouter des fonctions à Mathari, qu'il le fasse !! ( ok, en spé il n'a pas
- trop le temps de programmer, et alors ??? cependant, maintenant que je suis
- en spé moi aussi je n'ai plus trop le temps ) De toute façon, même si
- Stabylo n'a pas réellement programmé Mathari, il m'a donné des idées et
- des solutions aux problèmes que je rencontrais donc il a bien participé à
- la réalisation de Mathari .
-
- Comprendre Mathari pour ne pas faire d'erreurs
- ----------------------------------------------
- Mathari n'est pas à l'abri d'une erreur . Normalement, la fonction
- 'evaluate' est prévu pour analyser et comprendre n'importe quelle
- expression mathématique aussi compliquée que l'on veut mais cette fonction
- n'est peut être pas parfaite ( disons que c'est pas facile à débugguer
- étant donné qu'il y a une infinité d'expressions mathématiques possibles
- et que j'aurais plutot tendance à ne pas toutes les essayer ... ) mais
- normalement cela marche très bien .
- Mathari connait les 4 opérations usuelles dans R : +,-,*,/
- (R,+,*) est un corps ainsi + et * sont associatives, commutatives, admettent
- comme neutre respectivement 0 et 1 .
- Pour tout xεR , x admet un unique symétrique pour + : -x
- Pour tout xεR\{0}, x admet un unique symétrique pour * : 1/x
- '-' et '/' ne sont ni associatives ni commutatives :
- en effet 1/2<>2/1 , (1/2)/3<>1/(2/3) , 1-2<>2-1 , (1-2)-3<>1-(2-3)
- A noter que les premières versions de Mathari se plantait totalement lors
- de l'évaluation de 1-2-3 qui renvoyaient bêtement 0 à la place de -4 .
- De même pour / .
- Attention : des expressions du type 2*-3 n'ont aucun sens en mathématiques
- donc pour Mathari, la formule correcte étant 2*(-3) ( ou plus simplement
- par commutativité -3*2 !! )
- Mathari connait quand même autre chose que cela :
- - π ou Pi ou pi ou PI : π !!
- - e ou E : exp(1)=e
- - j : exp(2*i*π/3) ( 1+j+j²=0 )
- - ½ : 1/2
- - ¼ : 1/4
- - √ : renvoie la racine carré d'un nombre positif
- - ^ : élève à la puissance un nombre positif strictement .
- cependant si l'exposant est un entier relatif, ^ est
- prolongé sur R, privé de 0 si l'exposant est négatif .
- si l'exposant s'écrit 1/n avec nεN, n impair, ^ est
- prolongé sur R .
- sinon ^ est prolongé sur R+ .
- - et la plupart des fonctions usuelles :
- sqrt : racine carré ( n'est pas la même que √ )
- abs : valeur absolue
- exp
- ln
- log : logarithme décimal
- log2 : logarithme en base 2
- sin
- cos
- tan
- cotan
- sh
- ch
- th
- coth
- Arcsin
- Arccos
- Arctan
- Argsh
- Argch
- Argth
- inv : inverse
- E : partie entière à ne pas confondre avec exp ou e
- Γ : pour l'instant, n'existe que pour les réels
- ( non entiers négatifs bien sur ).
- Attention, pour coincider avec factorielle pour
- les entiers, j'ai translaté volontairement Γ d'une
- unité... Si cela gêne trop de gens, je suis près à
- changer cela !!!
- ( pour ceux qui ne le sauraient pas :
- ⌠+▀
- Γ(x)=|exp(-t)*t^(x-1).dt, x>0
- ⌡0
- =lim n^x*n!/(x*(x+1)*...*(x+n)), [n->+▀]
- xεR\(-N)
- )
- Remarque pour sqrt et √ : le symbole √ ( ainsi que ^ ) est
- reconnu par Mathari comme un opérateur 'au même titre que
- les 4 opérateurs traditionnels +,-,*,/' alors que sqrt est
- reconnu par Mathari comme une fonction usuelle : cela a
- son importance pour la suite ...
- Mais jusque là, Mathari n'est pas vraiment d'un grand intérêt car
- il ne fait pas mieux qu'une bête calculatrice ...
- Mathari peut donc être enrichi avec des fonctions utilisateurs .
- Toujours rien de vraiment foudroyant par rapport à une
- calculatrice, me direz-vous .
- En effet, cependant lorsque vous aurez lu ce qui suit, vous ne
- direz plus la même chose .
- Mathari peut composer des applications . Le symbole 'ronde'
- n'existant pas dans les caractères ASCII, Mathari utilise le symbole @
- ( utilisé également par Maple ) .
- Imaginez que vous ayez à étudier f@f où f est défini par :
- f: R -> R
- x |-> x^2+1
- Mathari vous offre trois solutions :
- 1) développer bêtement f@f,
- ainsi pour tout xεR, f@f(x)=x^4+2*x^2+2
- vous pouvez alors demander à Mathari de tracer cette
- fonction polynomiale
- 2) créer une fonction utilisateur f telle que pour tout
- xεR, f(x)=x^2+1 puis demander à Mathari de tracer f@f(x)
- 3) demander directement à Mathari de tracer l'expression
- (x^2+1)@(x^2+1)
- La troisième solution étant la plus rapide pour vous mais
- également pour Mathari .
-
- Exemples
- --------
- Tracer l'identité :
- Demandez à Mathari de tracer :
- x
- x@x
- x@...@x
- Tracer la fonction usuelle sin(x) :
- Demandez à Mathari de tracer :
- sin(x)
- sin@x
- x@sin@x
- x@...@sin@x@...@x
- Tracer la fonction Arcsin(√((1+sin(x))/2))
- Demandez à Mathari de tracer :
- arcsin(√((1+sin(x))/2))
- arcsin@sqrt((1+sin(x))/2)
- arcsin@sqrt@((1+x)/2)@sin(x)
- arcsin@(√x)@((1+x)/2)@sin@x
-
- Okay, ca ne vous suffit pas : vous ne trouvez pas ça assez fort ???
- Tout d'abord, je parie qu'il y a plein de personnes qui ont déjà arrêté
- de lire pour essayer ces fonctions sur Mathari : et évidemment, l'effet
- Bonaldi a fait que cela n'a pas marché ( bien fait, ils n'avaient qu'à
- lire la doc jusqu'au bout !!! )
- Pourquoi cela n'a-t-il pas fonctionné ??
- Parce que Mathari ne sait tracer que des fonctions à valeurs complexes !!
- En effet, j'ai oublié de mentionner que Mathari connaissait i ( tel que
- i²=-1 ) . Pour travailler avec, il suffit de taper i ( dingue !! )
- Mathari connait donc logiquement quelques fonctions de plus :
- Re : partie réelle
- Im : partie imaginaire
- Arg : renvoie l'argument principal du complexe
- ( si différent de 0 )
- A noter :
- 1) ABS ne renvoie pas la valeur absolue mais le module ( ce qui est
- la même chose pour les réels )
- 2) E renvoie la partie entière de la partie réelle d'un complexe + i fois
- la partie entière de la partie imaginaire du complexe
- 3) Γ travaille pour l'instant uniquement avec la partie réelle d'un complexe
- ( ce qui implique que Γ(<imaginaire pur>)=Γ(0)=1 )
- Mathari trace la partie réelle en abscisse et la partie imaginaire en
- ordonnée ; donc pour tracer la fonction f: R -> R il faut indiquer à
- t |-> f(t)
- Mathari de tracer la fonction : t+i*f(t)
- ( Au fait, Mathari utilise t pour le nom de la variable pour ne pas faire
- de confusions avec les abscisses )
- Ainsi vous pouvez évidemment tracer des fonctions à valeurs réelles .
- Mais, plus fort, vous pouvez également tracer des paramétriques en mettant
- l'équation pour les abscisses en partie réelle et l'équation pour les
- ordonnées en partie imaginaire .
- ex : pour tracer :
- x: R -> R
- t |-> x(t)
- y: R -> R
- t |->y(t)
- indiquez à Mathari l'expression : x(t)+i*y(t)
- Vous pouvez aussi tracer des fonctions polaires en multipliant par
- l'exponentielle complexe d'un imaginaire pur ( ce qui revient à projeter
- sur les axes ) .
- ex : pour tracer :
- r: R -> R
- t |-> r(t)
- indiquez à Mathari l'expression : r(t)*exp(i*t)
-
- Je crois qu'à partir de ce point votre calculatrice commence à ne
- plus suivre mais attendez, vous n'avez pas tout vu :
- Vous pouvez définir des fonctions par intervalle à l'aide des
- opérateurs de comparaison et des opérateurs logiques .
- Aucune relation d'ordre n'existant sur C, Mathari, lors de la
- comparaison de 2 complexes donne priorité à la partie réelle ( simili
- ordre lexicographique )
- Attention 'inférieur ou égal' n'est pas noté <= ou =< ( comme dans
- beaucoup de logiciels ) mais tout simplement ≤ ( ASC 243 ) .
- idem pour 'supérieur ou égal' : ≥ ( ASC 242 ) .
- 'égal' est noté = ( et non pas == comme en C ) .
- Les opérateurs logiques sont :
- & : AND
- | : OR
- ¬ : NOT ( ASC 170 )
- La valeur de VRAI ( TRUE en Anglais ) est 1 ( pour Mathari ) .
- La valeur de FAUX ( FALSE --------- ) est 0 .
- Il suffit donc de multiplier par une condition pour annuler ou non
- un terme .
- ex :
- entrez l'expression suivante :
- t+i*t*(t≥0)-i*t*(t<0)
- vous reconnaitrez ainsi la fonction valeur absolue .
-
- D'autres fonctions reconnues par Mathari :
- - Re : renvoie partie réelle du complexe
- - Im : ---------------imaginaire -------
- - Arg : renvoie l'argument principal du complexe
- - Rand : renvoie un nombre entier aléatoire
- - Random : presque pareil ( mais plus lent )
- - A : nombre d'arrangements , syntaxe : A(n+i*p) ( p≤n )
- - C : nombre de combinaisons , syntaxe : C(n+i*p) ( p≤n )
- - pgcd : calcule pgcd(a,b) , syntaxe : pgcd(a+i*b)
- - ppcm : calcule ppcm(a,b) , syntaxe : ppcm(a+i*b)
- - sinc : sinus cardinal ( ie x|->sin(x)/x )
- - csgn : signe complexe
- Si zεC, csgn(z) renvoie :
- * 1 si Re(z)>0 ou (Re(z)=0 et Im(z)>0)
- * 0 si z=0
- * -1 sinon
- - min : min(z) renvoie min(re(z),im(z)) pour zεC
- - max : max(z) renvoie max(re(z),im(z)) pour zεC
- - sort: sort(z) renvoie min(z)+i*max(z) pour zεC
- ( où min et max sont les fonctions définies juste
- ci-dessus )
- - div : div(z) renvoie le quotient de la division
- euclidienne de re(z) par im(z) quand zεZ+i(Z\{0})
- - mod : mod(z) renvoie le reste de la division
- euclidienne de re(z) par im(z) quand zεZ+i(Z\{0})
- - ediv : ediv(z) renvoie div(z)+i*mod(z) pour zεZ+i(Z\{0})
- ( où div et mod sont les fonctions définies juste
- ci-dessus )
-
- Mathari peut aussi travailler avec des constantes utilisateurs ( ie 'des
- lettres prenant la valeur complexe que vous souhaitez' : par exemple, vous
- avez à étudier une famille de fonctions dépendant d'un paramètre a
- par exemple : f:|->a*x² ( genre exemple bateau on ne fait
- pas mieux )
- plutot que de changer 'manuellement' la valeur de a vous pouvez très bien
- créer une constante 'a' ( avec a:=NEW ) puis travailler avec des
- expressions contenant la lettre 'a', vous pourrez étudiez le comportement
- de ces expressions suivant la valeur de 'a' en faisant a:<nouvelle valeur> )
- Et donc, vous l'avez très bien compris, l'opérateur d'affectation d'une
- constante est donc ':' ( cet opérateur ne détruit pas la valeur sur la
- pile mais assigne cette valeur à la variable dont le nom se trouve à
- gauche de l'opérateur )
- exemple :
- a:=NEW ( pour créer 'a' )
- 2*(a:10) renvoie 20 : en effet, cette instruction
- assigne à 'a' la valeur 10 puis effectue la multiplication
- 2*a ( où a=10 ) ce qui fait bien 20 .
- Notez bien que des expressions du type :
- a:b:c:d:2713
- ont un sens pour Mathari ( ce qui le rapproche du C ) . Ainsi Mathari
- met 2713 dans d, puis d dans c, puis c dans b et enfin b dans a ; a valant
- finalement 2713 !!!
-
- Ne trouvez-vous pas que Mathari commence à ne plus être ridicule ???!!!!
- Moi, en tout cas, j'en suis convaincu ; d'ailleurs j'ai un exemple pour
- vous le prouver :
- Tapez
- connect:0 ; Tracé discontinu
- point:5000 ; 5000 points
- xmin:ymin:-10 ; intervalle
- xmax:ymax:10 ; visible
- x1:=NEW ; on crée quelques 'constantes'
- x2:=NEW ;
- x3:=NEW ;
- y1:=NEW ;
- y2:=NEW ;
- y3:=NEW ;
- x:=NEW ;
- y:=NEW ;
- n:=NEW ;
- x1:0 ; puis on les
- y1:x3:2 ; initialise
- x2:y2:y3:-2 ; ( cool ! )
- plot ; on va dans le grapheur
- (x:½*(x+x1*((n:rand(3))=1)+x2*(n=2)+x3*(n=3)))+i*(y:½*(y+
- y1*(n=1)+y2*(n=2)+y3*(n=3)))
- patientez quelques minutes et admirez ... le triangle de
- Sierpinski !!!
- Petite question : votre calculatrice peut-elle le faire en si peu
- d'instructions ?? ;-)
-
- Programmation de Mathari
- ------------------------
- Attention à tous les matheux, ce qui suit peut nuire gravement à votre
- santé mentale ( disons que c'est plus de la bidouille que des maths ! )
-
- Tout d'abord, pour programmer il faut des variables à manipuler : comme je
- l'ai dit plus haut Mathari autorise l'utilisation simultanée de 26
- variables complexes.
- Pour en créer une, il faut taper :
- <nom de la variable>:=NEW
- Pour en effacer une, il faut taper :
- <nom de la variable>:=NULL
- A noter que ces instructions ne sont pas reconnus par EVALUATE mais par
- l'éditeur lui-même, elles ne peuvent donc être utilisées au milieu d'une
- expression à évaluer !!
-
- Ensuite, il faut avoir des boucles : MATHARI ne dispose que des boucles
- FOR-NEXT :
- ce texte en Basic :
- FOR i=<debut> to <fin> STEP 1
- { corps de la boucle }
- NEXT i
- se traduit en Mathari par :
- (<debut>+i*<fin>)$(<corps de la boucle>)
- ATTENTION : MATHARI prend en fait la partie réelle présente sur la pile
- pour indice de début et la partie imaginaire pour indice de fin : MATHARI
- compare alors les deux valeurs et les réordonne si elles sont inversées de
- manière à avoir des boucles 'croissantes'.
- A noter que début et fin sont des entiers naturels et le pas de la boucle
- est 1.
- REMARQUE : on peut récupérer l'indice de boucle en écrivant : ▌ .
- En fait ▌ représente le compteur de la boucle en cours ...
- ATTENTION : il n'est pas possible de faire varier les indices de début et
- de fin en cours de boucle ( ni même le compteur de boucle ) ie on ne peut
- pas faire de EXIT IF ... ou BREAK !!
-
- Il faut pouvoir faire des tests !
- Les symboles de test sont : <,>,=,≤,≥
- Les tests renvoie un booléen : TRUE = 1, FALSE = 0
-
- Il faut pouvoir affecter les variables :
- La syntaxe est :
- <nom de la variable>:<valeur>
-
- Il faut pouvoir combiner des conditions :
- Les opérateurs de logique sont : &,|,¬
-
- Voilà, vous savez tout pour programmer en MATHARI ...
-
- Un exemple :
- Problème : calculer la somme s des 1/k² pour k=1..n
- On crée d'abord une variable n et une variable s que l'on initialise à 0 :
- n:=NEW
- s:=NEW
- s:0
- n:<valeur souhaitée>
- On écrit alors une boucle for-next :
- (1+i*n)$(s:s+1/▌²)
- On attend l'execution : le résultat se trouve dans s
- On le récupère :
- s
- On efface n et s :
- n:=NULL
- s:=NULL
-
- Un autre exemple :
- calculer la somme pour i=1..n de la somme des j=1..i des j²
- s:=NEW
- n:=NEW
- s:0
- n:<valeur ...>
- (1+i*n)$(1+i*▌)$(s:s+▌²)
- s
- n:=NULL
- s:=NULL
-
- Trucs & astuces sous Mathari :
- ------------------------------
- Sympa comme nom de paragraphe, non ??
- Je vais y relater toutes les commandes 'cachées' de Mathari :
- - le snapshot est disponible en noir et blanc sous le tracé de
- graphes : appuyer sur S pour appeler cette fonction.
- - la croix permet de se déplacer sur une courbe tout en affichant
- les valeurs (x,y) correspondantes. Dispo pour l'instant dans le tracé de
- graphe, appelé par la touche C et désactivé par une pression sur Esc ...
- - quand la croix est activé, si vous appuyez sur F, vous
- ordonnerez à Mathari de considérer la suite récurrente de premier terme le
- point actuel et d'expression u[n+1]=f(u[n]) où f est la fonction
- représentée par le graphe ... pour sortir de cette option : Esc ...
- - la touche I permet, lorsque vous admirez vos courbes, de
- rajouter la courbe de l'identité. ( pratique pour les suites récurrentes )
- - la touche R permet de redessiner l'ensemble. ( redraw ou zoom )
- - la touche T : comme R sauf qu'en plus, elle force la variable t
- à varier entre xmin et xmax ( zoom )
- - les touches ( ) / * 7 8 9 - permettent de recentrer la courbe par
- rapport à l'espace étudié. ( permet de zoomer sur une partie de la courbe
- combiné avec la touche T ou R !!! ) Les variables xmin, xmax, ymin et ymax
- sont réactualisées !!
- Un conseil de Stabylo est de créer une fonction DEFAULT, qui initialisera
- tous les paramètres xmin, xmax, ymin, ymax, tmin, tmax comme vous le
- souhaiterez !! Normalement, cela vous fera gagner du temps...
- Enfin, ne désesperez pas !! Mathari, sur Falcon de base, sans NVDI, est
- lent, voire très lent : je le sais, moi aussi je l'ai vécu ! Mais si vous
- l'utilisez en réfléchissant suffisamment, vous pourrez vous en servir en
- le faisant travailler le moins possible ; bien sur, il vous faudra un
- temps d'adaptation au produit mais cela, à mon avis, en vaut la chandelle !!
- J'ai l'intention de faire un nouveau Mathari en C et Assembleur et sous
- GEM mais pour l'instant, je n'ai vraiment pas le temps, désolé !
- Pour les heureux possesseurs d'AfterBurner, de Médusa, d'Hadès ou de
- Milan, voire de TT, Mathari doit être vraiment très rapide, bande de
- veinards !!!!!!! ( dont je fais maintenant partie ;-))) )
- Mettez tout en TT-Ram si ce n'est déjà fait et préparez-vous à être
- décoiffé(e) !!!!!!!!!
-
- Conclusion :
- ------------
- Comme je l'ai dit plus haut, une nouvelle version de Mathari utilisant le
- GEM est prévu. Cette nouvelle version sera ( en tout cas je le souhaite )
- capable de faire du calcul formel et tout et tout : ce sera une sorte de
- Maple light ( je ne vais quand meme pas refaire Maple à moi tout seul, ou
- meme avec Stabylo !!! )
- Ayant perdu les sources de cette version de Mathari qui est actuellement
- entre vos mains, je déclare qu'il s'agit de la dernière évolution de
- Mathari TOS !!!
- A bientot sous Mathari GEM !!!
- ( laissez-nous du temps, on est en prepa quand meme !!! )
-
-
- Seb(The Boss)/The Removers
- Stabylo/The Removers
-