Académique Documents
Professionnel Documents
Culture Documents
Tous les ordres passs l'ordinateur se font dans les zones prcdes du signe > . Ces zones sont des zones d'entre ( input ). Presser la touche Entre pour transmettre l'ordre au logiciel. Les lignes doivent imprativement se terminer par un point-virgule ; ou par deux points : Noter la diffrence entre ces deux possibilits:
> 12+abs(4-3*sqrt(5));
Si la ligne se termine par un point-virgule, l'ordre est valid et le logiciel fournit une rponse dans une zone de sortie ( output ) .
> 12+abs(4-3*sqrt(5)): Si la ligne se termine par deux points, l'ordre est simplement valid sans rponse du logiciel.
Des messages d'erreur peuvent apparatre en cas de mauvaise saisie ou d'oprations illicites: > 12+abs(4-3*sqrt(5); Error, `;` unexpected > 1/cos(Pi/2); Error, numeric exception: division by zero
Ici on cherche de l'aide sur la fonction solve . > ??solve; > help(solve); Voir aussi plus en dtail pour les variantes ?? et ??? .
> (1-1/7)*(1+2/3)^2;
> expr:=p-ln(p);
> expand(f);
> factor(%);
> %%;
% permet de rappeler la dernire expression calcule (% est le Ditto Operator ) %% permet de rappeler l'avant-dernire expression calcule. %%% permet de rappeler l'avant-avant-dernire expression calcule.
> simplify(cos(x)^2+sin(x)^2);
Calculer une prcision voulue: evalf(expression) ou evalf(expression,nbdcimales) > evalf(sqrt(3)); # sqrt dsigne la racine carre
> evalf(sqrt(3),50);
# permet de dfinir un commentaire dans une ligne (tout ce qui est aprs le signe # est ignor)
> f:=a-3/a+1/(a*a+1);
> print(f);
La fonction printf est celle du langage C, permettant l'affichage de donnes selon des formats prtablis et en utilisant des caractres de contrle. Exemple: %d : nombre entier, %f : nombre en virgule flottante simple prcision, \n : passage la ligne. Voir galement les fonctions: fprintf , sprintf , et nprintf . > printf("%d %f \n",123,1234/567); 123 2.176367
> f(3*x+2);
> g:=(u,v,w)->1/u+exp(u+v)+(u-v+w)^2;
> g(2*a,b,3*c);
Driver une fonction une ou plusieurs variables en utilisant la fonction diff: > diff(f(t),t);
> diff(g(u,v,w),v);
> Int(g(u,v,w),v)=int(g(u,v,w),v);
> Int(f(t),t=0..Pi)=int(f(t),t=0..Pi);
Noter la forme inerte Int qui affiche l'intgrale et la forme int qui calcule l'intgrale.
> Sum(i^2,i=1..10)=sum(i^2,i=1..10);
> Product(1/i,i=1..10)=product(1/i,i=1..10);
Noter l aussi les formes inertes Sum et Product qui affichent respectivement les symboles sigma et pi .
Rsoudre une quation une inconnue en utilisant la fonction solve: > solve(2*t+3=-t+6*sqrt(2));
> solve(t-15/4*u=5/2*(u-t)+3,u);
Rsoudre un systme d'quations plusieurs inconnues en utilisant la fonction solve: > solve({a-b=2,a+3*b=7},{a,b});
Approcher les solutions d'une quation ou d'un systme d'quations en utilisant la fonction fsolve: > fsolve(cos(t)=t);
> fsolve({t^3+u=1,u-(t-1)^3=t},{t,u});
Reprsenter une fonction une ou plusieurs variables en utilisant la fonction plot ou plot3d: > plot(sin(t)/t,t=-20..20,title="fonction t ---> sin t / t");
> plot3d(x*exp(-x^2-y^2),x=-2..2,y=-2..2,color=x,orientation=[120,75]);
Exercice corrig 1:
1. Dfinir la fonction f :
sur
5. Les deux courbes ont un point commun : calculer une valeur approche de son abscisse .
> f:=x->2*exp(-x^2)-x/2;
> diff(f(x),x);
> factor(diff(%,x));
> factor(diff(%,x));
> evalf(int(f(x),x=-1..2));
> plot({f(x),x},x=-1..2);
> fsolve(f(x)=x);
Travail dirig 1:
TD 1.1:
2 Calculer les 3 premiers nombres drivs successifs (on les crira sous forme factorise)
de f au point x
. Calculer
5 Reprsenter
et 2.
6 Calculer l'intgrale de
sur
TD 1.2:
1 Dvelopper
en fonction de
lorsque
(polynmes de Tchbychev ) .
3 Reprsenter
sur
lments de base
LES VARIABLES:
Une variable informatique est l'adresse , dans la mmoire de l'ordinateur , d'un emplacement permettant de stocker un objet d'un type donn . Exemples: AB, aB , X1, _var , x[a] sont des noms de variables MAPLE .
Si l'on affecte une variable une valeur , la variable est dite assigne . Si elle n'est associe aucune valeur , la variable est dite non assigne .
La fonction restart permet de rinitialiser toutes les variables de la feuille de calcul. > restart;
var est une variable assigne, dont la valeur est 3 : > var:=3;
Une autre manire d'affecter une valeur une variable est d'utiliser la fonction assign : > assign(nom,10-var); > nom;
Pour dsaffecter une variable assigne, lui affecter son nom crit entre deux accents aigus : > nom:='nom':nom;
LES CONSTANTES:
true , false (valeurs boolennes vrai , faux) , I (complexe de carr -1) , Pi (nombre pi) , infinity (plus l'infini) sont des constantes MAPLE. E (base des logarithmes npriens) n'est pas une constante MAPLE : faire exp(1). > eval(exp(1))=evalf(exp(1));
LES EXPRESSIONS:
Elles sont values de la gauche vers la droite , avec la priorit usuelle des oprateurs. Pour afficher une expression, utiliser les fonctions lprint ou print :
Toute expression a un type que l'on peut obtenir grce la fonction whattype :
Parmi les types possibles figurent : + (somme) , * (produit) , ^ (puissance) , = (galit) , <> (non galit) , < , <= (ingalit au sens strict ou large) , and , or , not (et,ou,non) , integer (nb entier) , fraction (nb rationnel) , float (nb rel en virgule flottante) , complex (nb complexe) , numeric (numrique) , symbol (symbole), string (chane de caractres) , list (liste) , set (ensemble) , table (table) , array(tableau) , function (fonction) , name (nom) , .. (intervalle).
> whattype(x2/y),whattype(a/b),whattype(`MAPLE`),whattype("MAPLE"),whattype({a,b});
On peut tester si une expression a un type donn en utilisant la fonction type : > type(x,name),type(a+3*x-7/5,list);
Regrouper certains termes selon une ou plusieurs variables avec collect(expression,v) ; v est une variable ou une liste de variables :
> expr:=x^3*ln(x)+3*x^2+ln(x)*x-x:collect(expr,ln(x));
> expr:=x^2+5*x-25*y+48*(x-2*y+7)+y^3:collect(expr,[x,y]);
Transformer en un seul terme avec combine(expression,noms) : Le paramtre noms est optionnel et choisir par exemple parmi : exp , ln , trig , power .
> combine(2*Sum(i^2,i=1..n)+Sum(i^3,i=1..n));
> combine(exp(sin(a)*cos(b))/exp(cos(a)*sin(b)),[trig,exp]);
Simplifier une expression avec normal(expression) , simplifier une expression contenant des radicaux avec radsimp(expression) :
> radsimp((x-1)*sqrt(x*x-2*x+1)*(x+1));
Ordonner une expression avec sort(expression,v) ; v est une variable ou une liste de variables : > sort(expr,y);
Ordonner selon un critre avec sort(liste,paramtre) ; liste est une liste de valeurs , paramtre = `<` ou `>` (ordre croissant, dcroissant) , lexorder ou string (ordre lexicographique) .
Transformer une expression selon le modle forme avec convert(expression,forme) : > sin(2*x)=convert(sin(2*x),tan);
et le n4
On peut galement utiliser use ... in .. end use : > use x=4*rho, y=h, z=mu in (x+y-z+3)^7 end use;
Appliquer une fonction tous les oprandes avec map(fonction,expression) ; > map(x->x^2,expr);
Isoler une expression dans une quation avec isolate(equation,expression) ; > expr:=-x^3+2*(sqrt(y-sin(x))+1):isolate(expr,y);
Obtenir le membre gauche ou droit d'une galit avec lhs(expression); ou rhs(expression); > lhs(%);rhs(%%);
LES FONCTIONS:
nom := var -> expr; pour une fonction d'une variable var nom := (var1,var2,...,varN) -> expr; pour une fonction de N variables var1,var2,...,varN .
> f:=x->exp(x)-x;
> f:=(x,y,z,t)->x^2-3*y+4*z-t;
La fonction unapply (expr,var1,var2,...,varN) permet de transformer l'expression expr en une fonction des N variables var1,var2,...,varN:
On peut utiliser la fonction assume pour imposer une condition: Exemple: on impose r la condition > assume(r,positive);r; sign(r); ( r est alors affich suivi d'une tilde: r ~ )
La fonction about permet d'obtenir une information sur une variable: > about(r); Originally r, renamed r~: is assumed to be: RealRange(Open(0),infinity)
LES ENTIERS : ce sont des objets de typ e integer . Un entier peut tre positive (>0) , (<0), nonneg (>=0) , posint (entier>0) , negint (entier<0) , nonnegint (entier>=0) , even (pair) , odd (impair) , primeint (premier). Ce que l'on peut tester avec type ou is .
On peut slectionner des lments rpondant une condition boolenne avec select(condition,v); Exemple: slectionner dans une liste de nombres ceux qui sont entiers >0 > select(x->type(x,posint),[-1/2,-7,Pi,3/4,0.25,18,2^5]);
89 = (-12) (-7) + 5 )
mod ( a modulo n donne le reste de la division de a par n , ici 31=4*7+3 ) : > 31 mod 4;
rand(n) rend une fonction (appele ici hasard) calculant un entier alatoire entre .
> hasard:=rand(100):h:=hasard();
, 1 si
LES RATIONNELS : ce sont des objets de type fraction (ou rational ) . Un rationnel peut tre positive (>0) , negative (<0) , nonneg (>=0) , ce qui peut tre test par type ou is (comme pour les entiers).
Comme pour les entiers , on a aussi les fonctions assume , min , max , sign , abs.
LES REELS : un rel de type float , a une mantisse et un exposant . Exemple: 1234567=0.1234567*10^7 . La mantisse est 0.1234567 , et l'exposant 7 . Le nombre s'crit Float(0.1234567,7);
> evalf(Float(0.1234567,7));
L'utilisation du point . dclenche l'affichage en calcul flottant dans le second membre: > 1/9=1.0/9;
Digits est une variable d'environnement reprsentant le nombre de dcimales affiches (10 par dfaut). > Digits:=30:evalf(exp(1));
abs , sqrt (racine carre) , exp , ln , log10 , log[a] (logarithme de base a) , sin , cos , tan , cot (fonctions circulaires) , sinh , cosh , tanh , coth (fonctions hyperboliques) , arcsin ,arccos , arctan , arccot (fonctions circulaires rciproques) , arcsinh , arccosh , arctanh , arccoth (fonctions hyperboliques rciproques). La fonction partie entire : floor(x) est le plus grand entier infrieur ou gal x.
> sqrt(1250);ln(exp(7));arctan(1);
> floor(-7.98);floor(7.98);
LES COMPLEXES : de type complex , sont constitus de deux rels , la partie relle et la partie imaginaire . > z:=1-5*I*sqrt(2):z,Re(z),Im(z);
> Digits:=10:evalf(z);
> map(evalc,polar(a+I*b));
abs(z) , argument(z) , conjugate(z) : module , argument dans ]-Pi,Pi] , conjugu de z. > z:=1+sqrt(3)*I:abs(z),argument(z),conjugate(z);
AUTRES TYPES:
LE TYPE BOOLEAN : Les boolens sont de type boolean et peuvent prendre 2 valeurs : false et true . Si MAPLE ne parvient pas rsoudre un problme , il peut rendre le rsultat FAIL .
Les oprateurs logiques sont : not (non) , or (ou) , and (et) , xor (ou exclusif) , implies (implication). Une expression boolenne peut tre value par la fonction evalb :
> evalb(evalf(exp(1))<evalf(Pi));
Une expression Maple est de type index, si elle dfinie partir d'indices ou d'index. Elle est alors de type indexed . Exemple: est une variable indexe, contrairement la variable
> type(a[x],`indexed`);
> type(nom_var,`indexed`);
Un nom, de type name , est une expression Maple dfinie partir d'une lettre, suivie d'autres lettres ou de chiffres, ou d'autres symboles, comme _ ,ou si elle est de type index. Un nom peut aussi tre form en entourant une squence de caractres par des accents graves ` `. > type(a[x],`name`);
> type(nom_var,`name`);
> type(a/b,`name`);
> type(`12345`,`name`);
> type(12345,`name`);
Un symbole, de type symbol, est une expression Maple qui est un nom, mais n'est pas de type index. > type(a[x],`symbol`);
> type(nom_var,`symbol`);
> type(a/b,`symbol`);
Quelques fonctions utilisant ces types: length ( c ) retourne la longueur de c ( c tant un nom ou un symbole ) .
> length(nom_var);
> nom_var || a;
> cat(nom_var,a);
Les chanes de caractres, de type string , se notent entre guillemets " " : par exemple , "MAPLE " et "7 pour Linux et Windows" sont 2 chanes de caractres . L'oprateur de concatnation || permet de rassembler 2 chanes de caractres :
On peut aussi utiliser la fonction cat : > ch:=cat("MAPLE ","7 pour Linux et Windows");
Quelques fonctions utilisant les chanes de caractres: length ( chaine ) retourne la longueur de la chane de caractres chaine . substring ( chaine,a..b ) retourne la sous-chane constitue par les caractres de chaine situs entre les positions a et b . > length(ch);
Exercice corrig 2:
Ecrire une fonction F qui n entier naturel non nul , associe le produit des n premiers nombres premiers. > F:=n->product(ithprime(k),k=1..n);
> F(5);
Travail dirig 2:
TD 2.1:
Ecrire une fonction F qui n entier naturel non nul , associe la somme des n premiers entiers naturels non nuls.
TD 2.2:
Soit l'expression expr dfinie par :
2 Dvelopper expr .
TD 2.3:
1 Dfinir la fonction P qui x associe :
2 Factoriser
3 Dvelopper
4 On prend dsormais
et 1.
b) calculer l'image de
par P .
Programmation
Remarque importante: pour pouvoir entrer plusieurs lignes d'instructions Maple successives, sans excution la fin de chaque ligne, presser Shift+Entre la fin de chaque ligne. Puis, pour valider l'ensemble des lignes ainsi crites, presser Entre en plaant le curseur par exemple sur la dernire ligne crite.
Structure de contrle if .. then: if condition1 then instruction 1 elif condition2 then instruction2 elif et else sont optionnels) elif condition3 then instruction3 ... else instructionN end if;
Effectue un test selon certaines conditions: elif signifie "autrement si" . La dernire instruction excuter doit tre prcde de else .
Exemple 1: rsolution de l'quation du premier degr . Modifiez les valeurs de a et de b , puis validez les lignes suivantes: > a:=7:b:=3: > if a<>0 then print(`Une solution : x `=-b/a) elif b=0 then print(`Tout x est solution`) else print(`Pas de solution`) end if;
Structure de contrle while .. do: while condition do ... end do; Excute une suite d'instructions, tant que la condition est vraie.
Exemple 2: calcul de la somme des 100 premiers entiers naturels > somme:=0:k:=-1: while k<100 do k:=k+1:somme:=somme+k end do: `somme `=somme;
Structure de contrle for .. to: for variable from initiale to finale by pas do ... end do; Excute une boucle pour une variable allant d'une valeur initiale une valeur finale, avec un pas donn.
from , by peuvent tre omises ou crites dans un ordre quelconque. Si l'on omet from , initiale vaut 1. Si l'on omet by , pas vaut 1.
Exemple 3: calcul de la somme des 100 premiers entiers naturels > somme:=0: for k from 0 to 100 do somme:=somme+k end do: `somme `=somme;
Exemple 4: calcul de la somme des entiers impairs infrieurs 100 Ici, on omet from donc la premire valeur de k est 1. La dernire valeur prise par k sera 99. > somme:=0: for k to 100 by 2 do somme:=somme+k end do: `somme `=somme;
for variable in expression do .. end do; Exemple 5: donner les nombres premiers de la liste [31,39,47,105] > for k in [31,39,47,105] do if isprime(k) then print(k,`est premier`) end if end do;
LES PROCDURES:
Un programme MAPLE peut tre organis en sous-programmes appeles procdures . Une procdure, de type procedure , est dfinie par le mot-cl proc et peut tre assigne un nom de variable. Pour dfinir une procdure intitule nom , on utilisera la syntaxe suivante:
nom := proc (paramtres_formels) global variables_globales; (la ligne global est optionnelle) local variables_locales; (la ligne local est optionnelle) description chane_de_description; (la ligne description est optionnelle) option nom_option; (la ligne option est optionnelle) . . . instructions . . . (corps de la procdure) end proc;
Exemple 6: La procdure intitule maxi calcule le plus grand de 2 entiers positifs. Elle comporte 2 paramtres formels u et v . Leur type peut tre omis, mais si on le veut le prciser,
bien noter la syntaxe u :: posint , v :: posint pour signifier que u et v sont de type posint . Elle ne comporte ni variables globales, ni variables locales, mais une chane de description de la procdure et une option de copyright. > maxi:=proc(u::posint,v::posint) description "calcule le plus grand de 2 entiers positifs"; option `Copyright (c) 2001 A.Le Stang`; if u<v then v else u end if; end proc;
> maxi(5,9);maxi(1.2,Pi);
Error, invalid input: maxi expects its 1st argument, u, to be of type posint, but received 1.2
Une variable locale est une variable qui n'est reconnue qu' l'intrieur de la procdure, contrairement une variable globale accessible en dehors de la procdure. Exemple 7: > messages:=proc() global message1; local message2; message1:="Hello, world!"; message2:="How are you?"; end proc;
> messages();
La valeur de la variable locale message2 n'a pas t reconnue, contrairement celle de la variable globale message1 .
Remarque importante: Un paramtre formel pass une procdure ne peut tre modifi l'intrieur de cette procdure
Exemple 8: Diviser un entier positif x par 2 tant qu'il est pair. > div:=proc(x::posint) while type(x,even) do x:=x/2 end do; end proc;
> div(48); Error, (in div) illegal use of a formal parameter La tentative d'affecter au paramtre formel x sa valeur divise par 2 provoque une erreur. On peut modifier la procdure de la manire suivante: > div:=proc(x::posint) local y; y:=x; while type(y,even) do y:=y/2 end do; y end proc;
> div(48);
return met fin la procdure en donnant un rsultat. next permet de passer la valeur suivante dans une itration. break permet de sortir de la structure de contr le en cours.
Exemple 9: On parcourt une liste de nombres. Au premier entier positif trouv, on sort de la procdure avec pour rsultat cet entier, sinon si ce nombre est ngatif, on sort de la boucle avec pour rsultat -1, sinon on passe au nombre suivant.
> liste:=proc(L::list(numeric)) local k; for k in L do print(`lecture de`,k); if type(k,nonnegint) then return k elif k<0 then break; else next; end if end do; return -1; end proc;
> liste([12.56,8.9,7,3.14]);
> liste([12.56,-8.9,7,3.14]);
> liste([12.56,8.9,7.1,3.14]);
Rcursivit: Une procdure qui fait rfrence elle mme dans sa dfinition est une procdure rcursive .
Exemple 10: factorielle de n > factorielle := proc(n::nonnegint) if n>0 then n*factorielle(n-1) else 1 end if; end proc;
> factorielle(12);
Fonction error: La fonction error permet de dfinir des messages d'erreur personnaliss. Exemple 11: racine carre de x > racine := proc (x) if x<0 then error "invalide x: %1", x else simplify(x^(1/2)) end if end proc;
> racine(144);
LES MODULES:
Un module est une collection de procdures et de donnes. Un module, de type module , est dfini par le mot-cl module et peut tre assign un nom de variable. Pour dfinir un module intitul nom , on utilisera la syntaxe suivante: nom := module ()
global variables_globales; (la ligne global est optionnelle) local variables_locales; (la ligne local est optionnelle) export variables_locales_exportes; (la ligne export est optionnelle) description chane_de_description; (la ligne description est optionnelle) option nom_option; (la ligne option est optionnelle) . . . instructions . . . (corps du module) end module;
Contrairement au cas des procdures, le module ne peut avoir de paramtres formels . On retrouve les notions de variables globales et locales, comme pour les procdures, mais les modules peuvent exporter des variables locales (celles de la ligne export ), auxquelles on a accs de l'extrieur du module en utilisant la syntaxe suivante: nom :- var permet d'accder la variable locale exporte var du module nom . En utilisant la terminologie de la programmation oriente objet, les variables dclares dans la ligne local s'apparentent des membres privs du module, tandis que celles dclares dans la ligne export s'apparentent des membres publics du module.
Exemple 12: Anneau Z/4Z des entiers modulo 4. > Z4:=module() description "Arithmtique modulo 4"; export add,mult,opp; add := (x,y)-> (x+y) mod 4; mult := (x,y)-> (x*y) mod 4; opp := x-> (-x) mod 4; end module;
Le module comporte 3 variables locales exportes add , mult , opp . Vrifions que: (2+3) mod 4 = 1 , que (2*3) mod 4 = 2 et opp (1) = -1 mod 4 = 3 : > Z4:-add(2,3);
> Z4:-mult(2,3);
> Z4:-opp(1);
Exemple 13: Anneau Z/ n Z des entiers modulo n . On dsire modifier le programme prcdent pour effectuer de l'arithmtique modulo n ,
entier quelconque. avec Un module n'acceptant pas de paramtre formel, crivons une procdure Construire_Zn de paramtre formel n , rendant pour rsultat un module: > Construire_Zn:=proc(n::posint) module() description "Arithmtique modulo n"; export add,mult,opp; add := (x,y)-> (x+y) mod n; mult := (x,y)-> (x*y) mod n; opp := x-> (-x) mod n; end module; end proc;
> Z7:=Construire_Zn(7);
> Z7:-add(6,5);
> Z7:-mult(5,3);
> Z7:-opp(3);
On peut utiliser la structure de contrle use pour accder aux variables locales exportes du module nom sans avoir recours l'utilisation de :Exemple: (opp(3) mod 7) = (4 mod 7) = 4 ( (opp(3) mod 7)*5 ) mod 7 = (4*5) mod 7 =6 (2 + ( (opp(3) mod 7)*5 ) mod 7 ) = (2+6) mod 7 = 1 > use Z7 in add( 2, mult( opp(3), 5) ) end use;
La fonction member permet de savoir si une expression est membre d'un module: > member(mult,Z7) , member(prod,Z7);
Le constructeur Record: Le constructeur Record cre un enregistrement Maple. Un enregistrement, de type record , est dfini par les noms de ses champs (appels "slots" ou "fields" en anglais). Exemple 14: On veut crer un enregistrement pour modliser les nombres complexes. Un nombre complexe z est dfini par 2 champs: sa partie relle et sa partie imaginaire.
On dfinit un nouveau type complexe associ et la fonction module d'un nombre complexe: > `type/complexe` := 'record( re, im )': Mon_module:=(z::complexe)->sqrt(z:-re^2+z:-im^2);
On peut aussi initialiser les valeurs des parties relle et imaginaire de la faon suivante: > z:= Record( 're' = 1, 'im' = 2 ):Mon_module(z);
Pour obtenir le listing de certaines fonctions des librairies MAPLE, comme ici la fonction ithprime utiliser: > interface(verboseproc=2);print(ithprime);
Les packages regroupent des fonctions utiles dans des domaines particuliers. La fonction suivante appelle la page d'aide donnant les packages existants :
> ?index,package
> with(combinat,binomial);
)=
appel aussi C(
Exercice corrig 3:
Ex 3.1
Ecrire une procdure calculant le plus grand de 3 entiers naturels non nuls a , b , c . > max3:=proc(a::posint,b::posint,c::posint) local max2; max2:=proc(x::posint,y::posint) if x>y then x else y end if; end proc; max2(a,max2(b,c)); end proc;
> max3(5!,5^3,123);
max3 comporte une variable locale max2 laquelle est affecte une procdure calculant le plus grand de 2 entiers naturels non nuls.
Ex 3.2
1 crire un module pnt permettant de modliser un point du plan, dfini par ses coordonnes x , y . Ce module comportera des variables locales exportes rendant comme rsultat
2 crire un module cercle permettant de modliser un cercle du plan, dfini par son centre et son rayon. Ce module comportera des variables locales exportes rendant comme rsultat le centre, le rayon, le diamtre, l'aire, et la circonfrence du cercle.
1 Dfinition de la procdure pnt rendant pour rsultat un module: > pnt:=proc(x,y) module() export abscisse,ordonnee; abscisse:=()->x; ordonnee:=()->y; end module end proc;
2 Dfinition de la procdure cercle rendant pour rsultat un module: > cercle:=proc(c,r) module() export centre,rayon,diametre,aire,circonference; centre:=()->c; rayon:=()->r; diametre:=()->2*rayon(); aire:=()->Pi*r^2; circonference:=()->Pi*diametre(); end module end proc;
Utilisation des deux structures pour obtenir les coordonnes du centre de C : > C:-centre():-abscisse(), C:-centre():-ordonnee();
Travail dirig 3:
TD 3.1:
crire une procdure second_degr(a,b,c) qui rsout l'quation du second degr
coefficients rels:
TD 3.2:
crire une procdure somme(n) calculant rcursivement la somme des entiers de 0 n , pour
TD 3.3:
crire une procdure renverser(n) , qui , tant donn un entier naturel n ne comportant pas de 0 dans son criture dcimale , rend pour rsultat l'criture renverse de cet entier . Prvoir un message d'erreur si l'entier comporte le chiffre 0.
TD 3.4:
crire un module segment permettant de modliser un segment du plan, dfini par ses deux points extrmits.Ce module comportera des variables locales exportes rendant comme rsultat la premire et la seconde extrmit du segment, sa longueur, et son milieu. On pourra utiliser le module dfini par la procdure pnt de l'exercice corrig 3.2 .
> s[4];s[2..5];s[3]:=0;
Error, cannot assign to an expression sequence NULL dsigne la squence vide: > v:=NULL;
> op(a-y*(a+y+z)+3*z);
La fonction seq permet de crer une squence pour un indice i variant de a b avec un pas de 1 : syntaxe seq(expr,i=a..b) , ou pour un indice dcrivant les oprandes d'une expression e : syntaxe seq(expr,i=e) :
> seq(i^3,i=-1/2..2);
> seq(seq(a||i||j,j=1..3),i=1..3);
LES LISTES:
Une liste , de type list , est obtenue en plaant une squence entre les crochets [ et ] . La liste vide se note [] .
> s:=a$2,b$3,alpha,beta;L:=[s];
On accde chaque lment d'une liste par son rang , l'affectation est autorise: > L[6];L[2..5];L[3]:=delta;
op transforme une liste en squence , nops donne le nombre d'lments d'une liste . Les fonctions op et nops ne peuvent agir sur une squence s : faire ops([s]) et nops([s])
> op(L);
> nops(L);
Pour modifier une liste, on peut aussi utiliser subs ou subsop : > L:=subs(b=b1,L);
> L:=subsop(3=gamma,L);
La fonction boolenne member permet de savoir si une expression est membre d'une liste: > member(gamma,L), member(epsilon,L);
LES ENSEMBLES:
Un ensemble , de type set , est obtenu en plaant une squence entre les accolades { et }. Les lments sont rangs par adresse , donc l'ordre initial n'est pas ncessairement conserv et les lments en
> s:=a$2,b$3,alpha,beta;e:={s};
On accde chaque lment d'un ensemble par son rang , mais l'affectation est interdite :
> e[2];e[2..3];e[3]:=delta;
Error, cannot assign to a set op transforme un ensemble en squence , nops donne le nombre d'lments d'un ensemble .
> op(e);nops(e);
> e:=subs(b=b1,e);
> e:=subsop(3=delta,e);
La fonction boolenne member permet de savoir si une expression est membre d'un ensemble:
Convertir un ensemble en somme, en produit, en liste, ou convertir une liste en ensemble avec convert : > convert(e,`+`);convert(e,`*`); e:=convert(e,list);e:=convert(e,set);
Oprations sur les ensembles: union (union) , intersect (intersection) , minus (diffrence) . la fonction boolenne a indique si a est un sous-ensemble de b .
> with(combinat,choose): (appel de l'outil choose , qui gnre les sous-listes ordonnes d'une liste donne)
> choose([a,b,c]);
Gnration de toutes les sous-listes de longueur 2 ordonnes d'une liste de longueur 3: > choose([a,b,c],2);
choose ( n , p ) avec n , p entiers , gnre toutes les sous-listes de longueur p ordonnes de [1,2,.., n ] > choose(4,3);
> with(combinat,permute): (appel de l'outil permute , qui gnre les listes de permutation d'une liste donne) > permute([a,b,c]);
permute ( n ) , avec n entier , donne les listes de permutation de [1,2,..., n ] > permute(3);
permute ( n , p ) , avec n , p entiers , donne les sous-listes de permutation de de longueur p de [1,2,..., n ] > permute(3,2);
> restart;
LES TABLES:
Une table est une structure indexe dont les indices (ou index ) peuvent tre de n'importe quel type. La fonction table permet de crer une table :
Cration d'une table U avec liste d'index (ici . *) et de valeurs: > U:=table([``=valeur1,`.`=valeur2,`*`=valeur3]);
Pour afficher le contenu d'une table , utiliser print ou eval > print(T),eval(U);
On peut modifier , crer un nouvel lment , ou supprimer un lment par affectation : > T[a]:=valeur3:U[~]:=valeur4:print(T),eval(U);
Une table peut tre directement cre par assignation : > V[a]:=1:V[b]:=2:V[c]:=3:eval(V);
> op(op(V));
> indices(V);
> entries(V);
La fonction map permet d'appliquer une fonction sur les valeurs d'une table: > V:=map(sqrt,V);
La fonction copy permet d'effectuer une copie d'une table: > W:=copy(V);
LES TABLEAUX:
Un tableau est une structure indexe, de type array , de plusieurs dimensions, dont les indices sont des entiers appartenant un intervalle a..b (de type range ) .
La fonction array permet de crer un tableau : Des fonctions analogues celles utilises pour les tables existent :
Cration d'un tableau une dimension avec initialisation partielle: > U:=array(1..5,[a,b,c]);
Cration d'un tableau rectangulaire d'entiers par affectation l'aide de boucles imbriques: > T:=array(1..2,1..3): for i to 2 do for j to 3 do T[i,j]:=(i-1)*3+j; end do; end do: print(T);
> op(op(T));
> indices(T);
> entries(T);
> map(x->x^2,T);
Conversion d'un tableau en liste (si la dimension est 1) ou en liste de listes (si la dimension est >1): > convert(U,list);convert(T,listlist);
> T:=convert([a,b,c,d],array);
> U:=copy(T);
Exercice corrig 4:
Ex 4.1: Ecrire une procdure qui inverse les lments d'une liste .
> restart; listeinverse:= proc(L::list) local i; [seq(op(nops(L)-i,L),i=0..nops(L)-1)]; end proc: > listeinverse([a,b,c,d,e,f]);
> VDM(4);
Travail dirig 4:
TD 4.1:
1 Un tableau T n lignes et p colonnes tant donn , crire une procdure ligne( T , p , i ) qui calcule la somme des lments de T situs en ligne i .
2 Un tableau T n lignes et p colonnes tant donn , crire une procdure colonne( T , n , j ) qui calcule la somme des lments de T situs en colonne j .
3 Un tableau carr T n lignes et n colonnes tant donn , crire une procdure diagonale1( T , n ) qui calcule la somme des lments de T situs sur la premire diagonale.
4 Un tableau carr T n lignes et n colonnes tant donn , crire une procdure diagonale2( T , n ) qui calcule la somme des lments de T situs sur la seconde diagonale.
5 Un tableau T carr n lignes et n colonnes est dit magique si la somme des lments de n'importe quelle ligne , de n'importe quelle colonne , et de n'importe quelle diagonale est la mme . Utiliser les procdures prcdentes pour crire une fonction boolenne magique( T , n ) rendant la valeur true si T est magique, et false sinon .
Exemples:
> magique(T,3);
> magique(U,3);
TD 4.2:
Ecrire la procdure intitule coder(st::string) qui convertit la chane de caractres st (crite en lettres minuscules) en un nombre.
On code :
, etc ... ,
Exemple: si
alors
6,
> coder("maple");
Aide: pour crire cette procdure , on construira un alphabet puis une table T de conversion
length(st) qui donne la longueur de la chane de caractres st . substring(st,m..n) qui extrait de st la sous-chane des caractres situs entre les positions m et n .
> P:=-7*x+5*x^2+75*x^3;Q:=x*(2*x-3*y)^2*(x-y);
> type(P,polynom),whattype(P),whattype(Q);
> nops(P),nops(Q);
> op(P);op(Q);
> coeff(P,x,3);
Obtenir tous les coefficients de P (valable lorsque P est sous forme dveloppe) > coeffs(P);coeffs(Q);
> coeffs(expand(Q));
Coefficient du terme de plus haut (de plus bas) degr: > lcoeff(P),tcoeff(P);
> lcoeff(Q,y),tcoeff(Q,y);
> ldegree(P),ldegree(Q,x),ldegree(Q,y);
quo(P,Q,x,'r') : quotient de la division euclidienne de P par Q , variable x , 'r' (optionnel) variable non assigne recevant le reste . > quo(x^5-1,x^2+x+1,x, 'r');r;
rem(P,Q,x,'q') : reste de la division euclidienne de P par Q , variable x , 'q' (optionnel) variable non assigne recevant le quotient . > rem(x^5-1,x^2+x+1,x, 'q');q;
> subs(x=1+2*I,y=I,Q);
> with(codegen,cost);
> cost(P),cost(H);
Valeur approches des zros rels ou complexes avec fsolve : > P:=x^3+x+1:fsolve(P);
> fsolve(P,x,complex);
Localiser les zros rels dans un intervalle de longueur voulue , ici 10^-3 , avec realroot : > realroot(P,0.001);
Par la fonction factor , on peut factoriser sur Q ou sur le corps induit par les coefficients : > factor(x^4-1);
> factor(x^3-I*x-I+1);
,...,
> factor(x^4-1,I);
> factor(x^3-x^2+2*x-2);
> factor(x^3-x^2+2*x-2,{I,sqrt(2)});
On peut aussi utiliser Split , qui donne une factorisation complte : > with(PolynomialTools,Split):P:=Split(x^4-1,x);
RootOf dsigne ici toute racine du polynme _Z+1, on peut simplifier l'criture en utilisant alias : > alias(alpha=RootOf(_Z^2+1)):P;
On calcule ses zros sur le corps Q(I) induit par les coefficients: > roots(x^2+1,I);
> F:=(2*x^2+x-3)^2/(x^4-1);numer(F),denom(F);
> simplify(F);
convert(F,parfrac, x ) dcompose en lments simples la fraction rationnelle F en l'indtermine x . convert(F,parfrac, x, { ,..., } ) autorise Maple dcomposer sur un ,...,
Exercice corrig 5:
> convert(F,parfrac,x);
Ex 5.2: Soit
Montrer que les zros du polynme driv P' sont 3 termes conscutifs d'une suite arithmtique.
> P:=X*(X-1)*(X-2)*(X-3):dP:=diff(expand(P),X);
> zeros:=[solve(dP)];
On trie les lments de la liste par ordre croissant , sort ne fonctionnant pas ici : > tri:=proc(L::list) local x,y,Z; Z:=L; for x to nops(Z)-1 do for y from x+1 to nops(Z) do if evalf(Z[y]-Z[x])<0 then Z:=subsop(x=Z[y],y=Z[x],Z) end if; end do; end do; Z; end proc: > zeros:=tri(zeros);
Travail dirig 5:
TD 5.1:
On rduit les fractions composant G au mme dnominateur et on identifie les numrateurs de F et de G . En dduire les valeurs de a,b,c,d,e,f,g .
TD 5.2:
Soit P un polynme de K[ x ] , s'crivant sous la forme :
Exemple:
Ecrire une procdure PolyHorner(P , x ) permettant d'crire P( x ) sous cette forme , P tant un polynme donn de K[ x ] , x tant le nom de la variable .
Grace la fonction cost , valuer le cot en oprations ncessaires pour valuer Q et PolyHorner(Q, x ) , Q tant le polynme donn en exemple.
La fonction smartplot constitue la faon la plus simple de reprsenter une ou plusieurs fonctions : Par dfaut , le range est -10..10. > smartplot(cos(2*x)+sin(x),x);
Pour reprsenter une ou plusieurs fonctions, utiliser plot(f , h , v) ou plot(f, h, v,...) o f : fonction(s) reprsente(s) , h et v : intervalle horizontal et vertical (optionnels). La syntaxe la plus simple est plot(f) ou plot(f(x),x=a..b) :
> f:=x->cos(2*x)+sin(x):plot(f(x),x=-2*Pi..2*Pi);
Les arguments restants sont des options que l'on peut spcifier par des quations de la forme option = valeur.
scaling = CONSTRAINED (repre orthonormal) ou UNCONSTRAINED (repre non orthonormal) .Par dfaut : UNCONSTRAINED.
style = s Spcifie le style du trac : par dfaut LINE POINT (trac point par point) , LINE (points relis par des segments) PATCH (style pour les polygones) , SPLINE (points relis par une courbe spline)
linestyle = n Spcifie le motif des lignes traces (lignes pleines : 0 et 1, d'autres valeurs plus grandes donnent des pointills par exemple).
symbol = s Spcifie le symbole de reprsentation d'un point : BOX, CROSS, CIRCLEPOINT, et DIAMOND.
font = liste Polices des caractres affichs . liste est une liste [famille, style, taille] , famille : TIMES, COURIER, HELVETICA, SYMBOL. Pour TIMES, le style est ROMAN, BOLD, ITALIC ou BOLDITALIC. Pour HELVETICA et COURIER style omis ou BOLD, OBLIQUE, ou BOLDOBLIQUE. Pour SYMBOL , pas de style .
titlefont = liste , axesfont = liste , labelfont = l iste Polices des caractres affichs pour le titre,les graduations des axes,les lgendes des axes (pour liste , voir font = liste).
Reprsenter des points: on donne la liste des coordonnes, abscisse puis ordonne.
Reprsenter des lignes brises: mme principe que pour les points, en enlevant style=point . > plot([[0,0],[1,1],[2,1],[2,0],[1,-1],[0,0]], x=0..2);
On obtient le mme rsultat en utilisant la fonction polarplot du package plots : > with(plots):polarplot([sin(4*t),t,t=2*Pi..2*Pi],thickness=2,font=[HELVETICA,BOLD,8],title="R=sin 4t",color=red);
> plot([cos(2*t)+2*cos(t),sin(2*t),t=0..2*Pi],color=blue);
> with(plots);
La fonction animate , qui permet de crer des animations dans une fentre dont la barre d'outils comporte des touches identiques celles d'un lecteur de cassettes : Exemple: famille de paraboles dpendant de m > animate(m*x^2,x=-3..3,m=-10..10);
Tracer des courbes dfinies implicitement sous la forme f(x,y)=0 avec implicitplot > implicitplot(x^3+x-y^2+1=0,x=-10..10,y=-10..10);
Visualiser un champ de vecteurs avec fieldplot , ( arrows = LINE,SLIM,THIN ou THICK) > fieldplot([x*x-y*y,2*x+y^3],x=-1..1,y=-1..1,arrows=SLIM);
logplot , loglogplot donnent une graduation logarithmique sur l'axe des y ou les 2 axes
densityplot et contourplot permettent de tracer respectivement des graphes de densit ou des courbes de niveau.
, de l'ellipse e
d'quation
GRAPHIQUES EN DIMENSION 3:
La fonction smartplot3d constitue la faon la plus simple de reprsenter une ou plusieurs surfaces : Par dfaut, le range est [-5..5,-5..5]. > smartplot3d(exp(-(x^2+y^2)));
Comme pour la dimension 2 , on retrouve les options axes , scaling , tickmarks , title , view , numpoints (par dfaut 625) et :
labels = [`x`,`y`,`z`]
ambientlight = [r,v,b] fixe l'intensit des couleurs rouge,vert,bleu (valeurs dans [0,1]) .
light = [phi,theta,r,v,b] fixe l'clairage de la surface selon les angles phi,theta en coordonnes sphriques avec les couleurs r,v,b .
display3d permet de reprsenter plusieurs objets graphiques de nature ventuellement diffrentes sur un mme graphique. L'option insequence=true permet de le transformer en animation.
polyhedraplot pour reprsenter des polydres : polyscale = n (taille du polydre) polytype parmi tetrahedron,octahedron,hexahedron,dodecahedron,icosahedron.
Exercice corrig 6:
(hyperboloide de rvolution
> with(plots):implicitplot3d(x^2+y^2-z^2-1,x=-sqrt(2)..sqrt(2),y=sqrt(2)..sqrt(2),z=-1..1,color=blue);
> S:=[cosh(phi)*cos(theta),cosh(phi)*sin(theta),sin(phi)]:plot3d(S,phi=arcsinh(1)..arcsinh(1),theta=0..2*Pi,color=blue);
Travail dirig 6:
TD 6.1:
crire une procdure polygone_regulier ( n:: posint) permettant de reprsenter un polygne rgulier n cts, de centre (0,0) et de rayon 1: > polygone_regulier(8);
TD 6.2:
1 Paramtrer en coordonnes sphriques une sphre de centre (x,y,z) de rayon R en crant une fonction sphere des 4 variables x,y,z,R .
2 Reprsenter sur un mme graphique les sphres (3,0,0) , (0,3,0) et (0,0,0) et de rayons respectifs 2,2,1.
de centres respectifs
Maple en analyse
FONCTIONS NUMRIQUES:
Domaine de dfinition: la fonction singular permet de dterminer les singularits de certaines fonctions:
Continuit: la fonction iscont permet de dterminer la continuit de certaines fonctions. closed signifie que l'intervalle est ferm.MAPLE travaille par dfaut sur des intervalles ouverts.
> iscont(tan(x),x=-Pi/2..Pi/2,closed);
> iscont(tan(x),x=-Pi/2..Pi/2);
Image d'une runion d'intervalles ferms , avec la fonction evalr : > evalr((x->x^2)(INTERVAL(-1..-0.5)));
Extrema d'une fonction , avec les fonctions minimize et maximize : > minimize(x^2+x-3),maximize(-x^4+x^2+1);
Fonctions dfinies par intervalles: piecewise permet de dfinir une fonction partir de conditions sur diffrents intervalles: piecewise (cond1,f1, cond2,f2, ..., condN,fN, f_autrement) > f:=piecewise(x<0,exp(x),x<=4,x/4+1,2);
> plot(f(x),x=-4..8);
> limit(sin(x)/x,x=0);
> limit(1/x^3,x=0);
Etude locale: avec taylor(expr , x=a , n) pour les dveloppements limits ou de Taylor, series(expr , x=a , n) ou asympt(expr , x , n) pour des dveloppements asymptotiques plus gnraux. L'ordre n est facultatif et vaut 6 par dfaut .
> taylor(x^2/(x^2+1),x=infinity,10);
> evalf(gamma);
> series(leadterm(sin(x^3)/(2*x)),x=0);
Drivation: Pour driver une fonction , utiliser diff(expr,v1,v2,...,vn) qui calcule la drive partielle de expr par rapport aux variables v1,v2,...,vn .
Noter l'absence de parenthses dans l'criture du premier membre . On peut utiliser l'oprateur $ pour viter de rpter plusieurs fois une variable :
Oprateur diffrentiel D: D( f ) retourne la fonction drive premire de f Fonctions drives premire et seconde: > D(sin),(D@@2)(sin);
> D(x->x*sin(x)-x);
> f:=(x,y,z)->x^2-3*x*y*z+z^4;
SUITES ET SRIES:
Suites rcurrentes:
Type
Exemple:
, calcul de
, pour
,..,15.
On peut reprsenter graphiquement la convergence de la suite en construisant une liste T forme des points (u(0),0) , (u(0),u(1)) , (u(1),u(1)) , (u(1),u(2)) , etc...
> T:=array(1..4*n,[u[0],0,u[0],f(u[0])]): for k from 2 to 2*n-1 do T[2*k+1]:=T[2*k]: if is(k,odd) then T[2*(k+1)]:=evalf(f(T[2*k+1])) else T[2*(k+1)]:=evalf(T[2*k+1]) end if end do: T:=convert(T,list):U:=NULL: for k to nops(T)-1 by 2 do U:=U,[T[k],T[k+1]] end do: U:=plot([U],color=blue):G:=plot({f(x),x},x=1.3..1.3,scaling=constrained):plots[display]({G,U},title="point fixe du cosinus",view=[-1.3..1.3,-1.3..1.3]);
Type
Exemple:
Type
Exemple:
Sries numriques:
Le package powseries contient des fonctions mettant en jeu les sries entires: Consulter les pages d'aide de powseries pour plus de prcision. > with(powseries);
INTGRATION:
Le calcul des primitives et des intgrales se fait avec la fonction int . Syntaxes: int(expr , x) et int(expr, x=a..b) .
Le package inttrans contient quelques outils pour la transformation d'intgrales. Consulter les pages d'aide de inttrans pour plus de prcision.
> with(inttrans);
> with(student);
Changement de variables dans les intgrales: changevar(eq , intgrale , u) eq est l'quation du changement de variable de la forme f(x)=g(u) , intgrale est l'intgrale et u la nouvelle variable d'intgration :
> J:=Int(t/((t^2+1)*sqrt(1-t^4)),t=0..1);
> J:=Int(x^2*arccos(x),x):intparts(J,arccos(x));
> J:=value(%);
METHODE DES RECTANGLES: On dcoupe [a,b] en n intervalles de mme longueur extrmit gauche : reprsentation avec leftbox(expr,x=a..b,n) , calcul avec leftsum(expr,x=a..b,n)
> evalf(trapezoid(exp(-x^2),x=-1..1,20));
> evalf(simpson(exp(-x^2),x=-1..1,20));
> Doubleint(x^3*y-x^2-y*x,x=-a..a,y=-b..b):%=value(%);
> Tripleint(x*y*z*sin(x+y+z),x=0..Pi,y=-Pi..Pi,z=0..Pi):%=value(%);
Equations du premier ordre: MAPLE sait rsoudre directement les quations de type classique - linaire - avec facteur intgrant - sparable - homogne - rsolue en x - de Bernoulli de Clairaut - de Riccati .
Les solutions y(x) ne sont pas directement utilisables : en assignant la solution y(x) on peut utiliser le rsultat , par exemple pour reprsenter les courbes intgrales :
> assign(dsolve(eq,y(x))):y:=unapply(y(x),_C1,x);
> plot({seq(y(_C1,x),_C1=-3..3)},x=-5..5,y=-20..20);
On peut prciser des options de rsolution : explicit (pour tenter d'exprimer la solution comme fonction explicite de la variable) , series (chercher les solutions sous forme de sries)
La fonction odeplot du package plots permet de reprsenter les solutions d'une quation diffrentielle:
Equations du second ordre: MAPLE sait rsoudre directement les quations de type classique - linaire - d'Euler - de Bessel .
> dsolve(eq2,y(t));
Systmes diffrentiels:
> edp:=y*diff(U(x,y),x)+x*diff(U(x,y),y)=0;
> pdsolve(edp,U(x,y) );
Travail dirig 7:
2 Etudier les limites de f aux bornes des intervalles composant Df. Quelle est l'asymptote de la courbe Cf de f ?
3 Calculer f '( x ) et tudier son signe ( on aura recours une fonction auxiliaire g ).
> restart; Les vecteurs et les matrices peuvent tre dfinis comme des tableaux rectangulaires, par la fonction array , rencontre dans le chapitre sur les tableaux :
Oprations sur les vecteurs et les matrices , avec la fonction evalm : Somme de vecteurs ou de matrices de mme dimension avec + > evalm(A+U);
Multiplication de vecteurs ou de matrices de dimensions compatibles avec &* > evalm(M &* N);
Calcul de la matrice inverse, lorsque N est inversible, avec ^(-1) > evalm(N^(-1));
> with(linalg);
Les fonctions matrix et vector permettent de dfinir respectivement une matrice (tableau rectangulaire d'objets) ou un vecteur (tableau d'objets une seule ligne) :
> C:=matrix([[1],[2],[3]]);
A la place de la fonction evalm , on peut utiliser les outils spcifiques du package linalg :
> multiply(M,N);
> inverse(N);
avec scalarmul
Dterminant et trace d'une matrice carre (somme des lments diagonaux): > N:=matrix([[1,2],[4,-3]]);det(N);trace(N);
kernel(A); ou nullspace(A); dtermine une base du noyau de A colspace(A); dtermine une base du sous-espace engendr par les vecteurs-colonnes de A rowspace(A); dtermine une base du sous-espace engendr par les vecteurs-lignes de A
> A:=matrix([[2,-2],[-1,1]]);kernel(A);
> colspace(A);
> rowspace(A);
> charpoly(A,lambda);
Valeurs propres de A (ce sont les racines du polynme caractristique): > eigenvals(A);
et que .
> print(P);
row(P,k) permet d'extraire la k-ime ligne de la matrice P. Le rsultat est un vecteur. col(P,k) permet d'extraire la k-ime colonne de la matrice P. Le rsultat est un vecteur. > row(P,2),col(P,3);
swapcol(M,m,n) et swaprow(M,m,n) permettent d'changer les colonnes (ou les lignes) m et n de la matrice M : > swaprow(A,1,2);
> print(N);addcol(N,1,2,mu);
> JordanBlock(expr,4);
A partir de la version 7, existe dans Maple un nouveau package LinearAlgebra avec des outils similaires ceux du package linalg et destin supplanter l'ancien. En voici les fonctions: > with(LinearAlgebra);
On dfinit une matrice A dont on calcule le dterminant, la matrice et le polynme caractristique, ainsi que les valeurs propres et vecteurs propres associs: > A:=Matrix([[1,-1,-1],[-2,2,3],[2,-2,-3]]); Determinant(A); CharacteristicMatrix(A,lambda); factor(CharacteristicPolynomial(A,lambda)); Eigenvalues(A); Eigenvectors(A);
Exercice corrig 8:
, o
> Y:=evalm(X^2+X-A);
> Y:={seq(seq(Y[i,j],j=1..2),i=1..2)};
Travail dirig 8:
TD 8.1:
Ecrire une procdure pcd(L::list) retournant partir d'une liste donne L la liste obtenue par permutation circulaire vers la droite des lments de L . Exemple:
> pcd([a,b,c,d,e,f,g]);
TD 8.2:
Ecrire une procdure circulante_droite(n::posint) retournant partir de l'entier n> 0 une matrice carre d'ordre n telle que
- sa premire ligne est constitue par les entiers de 1 n . - pour k> 1 , sa k-ime ligne est dduite de la ligne prcdente par permutation circulaire vers la droite de ses lments.
TD 8.3:
Test d'galit de 2 matrices:
2 matrices M et N sont gales si et seulement si elles ont mme nombre de lignes, mme nombre de colonnes, et les mmes coefficients . Sans avoir recours la fonction prexistante equal de Maple, crire une procdure egal(M: : matrix , N: : matrix) retournant la valeur boolenne true si M=N et false sinon.
Maple en gomtrie
GEOMETRIE PLANE:
> restart; Le package geometry contient des outils pour la gomtrie plane :
> with(geometry);
La fonction point permet de dfinir un point du plan: Syntaxes quivalentes: point(P, Px, Py) ou point(P, [Px, Py]).
Exemple: pour dfinir les points O(0,0) , A(-1,3) et B(4,2). > point(O,[0,0]):point(A,[-1,3]):point(B,[4,2]):
La fonction detail permet d'obtenir des informations sur un objet gomtrique: > detail(A);
> point(M,X,Y):
La fonction line permet de dfinir une droite, dont on peut avoir l'quation.
> line(AB,[A,B]):Equation(AB,[x,y]);
La fonction triangle permet de dfinir un triangle , dont on peut avoir l'orthocentre , ou le centre de gravit. > triangle(OAB,[O,A,B]):orthocenter(H,OAB):coordinates(H);
> centroid(K,OAB):coordinates(K);
La fonction circle permet de dfinir un cercle, dont on peut avoir le centre, ou le rayon :
> circle(C,[O,A,B]):omega:=center(C):coordinates(omega);r:=radius(C);
> detail(C); assume that the names of the horizontal and vertical axes are _x and _y, respectively
Calcul de la distance entre 2 points ou de la distance d'un point une droite: > distance(A,B);
> distance(M,AB);
Projet d'un point sur une droite projet de M sur (AB): > projection(P,M,AB):coordinates(P);
Equation de la parallle ou de la perpendiculaire une droite donne passant par un point donn d1 est la parallle (AB) passant par K, d2 est la perpendiculaire (AB) passant par K:
> ParallelLine(d1,K,AB):Equation(d1,[x,y]);
> PerpendicularLine(d2,K,AB):Equation(d2,[x,y]);
> ArePerpendicular(d1,d2);
> intersection(i2,d1,C):detail(i2);
Trac de la figure: on remarquera le paramtrage des 2 droites d1 et d2 et du cercle C . La fonction display du package plots permet de reprsenter sur un mme graphique diffrents objets graphiques prcdemment dfinis , tels ici OAB , texte , etc ...
[HorizontalCoord(B),VerticalCoord(B)],[HorizontalCoord(O),VerticalCoord(O) ]],color=green): > d1:=plot([HorizontalCoord(K)-5*t,VerticalCoord(K)+t,t=2/3..3/4],numpoints=100,color=red): > d2:=plot([HorizontalCoord(K)+t,VerticalCoord(K)+5*t,t=0.5..0.75],numpoints=100,color=red): > cercleC:=plot([HorizontalCoord(omega)+r*cos(t),VerticalCoord(omega)+r*sin( t),t=0..2*Pi], numpoints=100,color=blue): > texte:=textplot([[-1.15,3,`A`],[4+0.15,2,`B`],[1.8,5.2,`D2`],[2,1.9,`D1`],[1.3,1.9,`K`]],color=black): > display({OAB,d1,d2,cercleC,texte},scaling=constrained);
Le package linalg d'algbre linaire contient galement quelques outils utiles en gomtrie euclidienne, notamment:
dotprod (v1,v2) calcule le produit scalaire(hermitien) des vecteurs v1 et v2. norm (v) calcule la norme du vecteur v. crossprod (v1,v2) calcule le produit vectoriel des vecteurs v1 et v2 (en dimension 3). GramSchmidt ({v1,v2,...,vn}) retourne la base orthogonale dduite de la famille {v1,v2,...,vn} par le procd de Gram-Schmidt.
> dotprod(v1,v2);
> norm(v1);
> crossprod(v1,v2);
Reprsentation de polygnes rguliers, et polygnes toils: > opts := filled=true, style=patch, axes=none: point(o,0,0): s1 := draw( RegularPolygon(_r7, 7, o, 3), opts, title="{7}" ): s2 := draw( RegularStarPolygon(_r7_2, 7/2, o, 3), opts, title="{7/2}" ): s3 := draw( RegularStarPolygon(_r7_3, 7/3, o, 3), opts, title="{7/3}" ): s4 := draw( RegularPolygon(_r9, 9, o, 3), opts, title="{9}" ): s5 := draw( RegularStarPolygon(_r9_2, 9/2, o, 3), opts, title="{9/2}" ): s6 := draw( RegularStarPolygon(_r9_4, 9/4, o, 3), opts, title="{9/4}" ): s7 := draw( RegularPolygon(_r11, 11, o, 3),opts, title="{11}" ): s8 := draw( RegularStarPolygon(_r11_3, 11/3, o, 3), opts, title="{11/3}" ): s9 := draw( RegularStarPolygon(_r11_5, 11/4, o, 3), opts, title="{11/5}" ): plots[display](array(1..3,1..3,[[s1,s4,s7],[s2,s5,s8],[s3,s6,s9]]));
GEOMETRIE DE L'ESPACE:
Le package geom3d contient des outils pour travailler la gomtrie dans l'espace :
> with(geom3d);
La dfinition de points , de droites , de plans , se fait comme en dimension 2 par les fonctions point , line , et plane .
d est la droite passant par A dirige par U(1,2,-1) > U:=[1,2,-1]:line(d,[A,U]): > plane(P,[A,B,C]):Equation(P,[x,y,z]); # quation du plan P=(ABC)
> detail(P);
> plane(P1,[O,A,B]): intersection(delta,P1,P):detail(delta); # delta est l'intersection des plans P1 et P , dfinie par un systme paramtrique : Warning, assume that the parameter in the parametric equations is _t
> ArePerpendicular(P,P1);
> distance(O,P);
> sphere(S,[O,A,B,C]):detail(S); Warning, assume that the name of the axes are _x, _y and _z
Des outils existent pour reprsenter des polydres, solides de l'espace ventuellement toils: > octahedron(Oct,point(O,0,0,0),1.): stellate(StOct,Oct,1): draw( StOct, cutout=7/8, lightmodel=light4);
> point(e1,10,15,0), point(e2,-10,15,0), point(e3,-10,-15,0),point(e4,10,-15,0): r1 := 1.: point(o1,-2,2,r1):tetrahedron(p1,o1,r1): r2 := 2.: point(o2,-4,5,r2):cube(p2,o2,r2): r3 := 5./2: point(o3,-7,8,r3):octahedron(p3,o3,r3): r4 := 3.: point(o4,-3,12,r4):dodecahedron(p4,o4,r4): r5 := 7./2: point(o5,3,18,r5):icosahedron(p5,o5,r5): r6 := 6.: point(o6,15,9,r6):GreatStellatedDodecahedron(p6,o6,r6): r7 := 9./2: point(o7,11,23,r7):GreatDodecahedron(p7,o7,r7): r8 := 7.: point(o8,17,-9,r8):SmallStellatedDodecahedron(p8,o8,r8): r9 := 15./2: point(o9,2,-11,r9):GreatIcosahedron(p9,o9,r9):
fl := [[25,30,0],[-10,30,0],[-10,-20,0],[25,-20,0]]: pic1 := plots[polygonplot3d](fl,color=sienna): pic2 := draw([seq(p||i,i=1..9)],color=COLOR(RGB,.9335294125,.9129411760,.520588 2350)): plots[display]([pic2,pic1],style=patch,orientation=[-97,52],title="Les neuf polydres rguliers", lightmodel=light4);
Exercice corrig 9:
Dterminer et reprsenter la surface S, ensemble des points M dont la somme des carrs des distances aux droites d1: y=x , z= 1 et d2 : y=-x , z=- 1 est gale 3.
> restart:with(geom3d):
d1 est l'intersection de 2 plans p1 et q1: > plane(p1,y-x=0,[x,y,z]):plane(q1,z-1=0,[x,y,z]):intersection(d1,p1,q1): d2 est l'intersection de 2 plans p2 et q2: > plane(p2,y+x=0,[x,y,z]):plane(q2,z+1=0,[x,y,z]):intersection(d2,p2,q2):
de centre O.
Travail dirig 9:
Soit ABC un triangle du plan affine euclidien , M un point quelconque que l'on projette orthogonalement en H1,H2,H3 sur (BC) , (CA) , (AB) respectivement .
Montrer que M est sur le cercle circonscrit ABC si et seulement si H1,H2,H3 sont aligns, sur la droite dite de Simson associe M: