• Aucun résultat trouvé

1.1Premièrescommandes Maxima 1Lafeuilledetravail TP1–Introductionà Maxima

N/A
N/A
Protected

Academic year: 2022

Partager "1.1Premièrescommandes Maxima 1Lafeuilledetravail TP1–Introductionà Maxima"

Copied!
10
0
0

Texte intégral

(1)

ULCO 2019 - 2020

M1 Recherche IMAO

TP 1 – Introduction à Maxima

Maxima est un logiciel de calcul formel, c’est-à-dire, un logiciel qui permet de faire des mathématiques en manipulant des expressions symboliques. Contrairement à la plupart des langages classiques de programmation il peut traiter non seulement des quantités numériques (entières, réelles, complexes) mais aussi des polynômes, des fonctions, des vecteurs, des matrices.

1 La feuille de travail

Une session de travail type avec Maxima commence évidemment par le lancement du logiciel avec son interface graphique nommé : wxMaxima. Une feuille de travail vide est alors affichée à l’écran, et Maxima est prêt à travailler en mode interactif : on lui donne des instructions au clavier, que l’on valide par la combinaison de touches <Majuscule>+<Entrée>, et il y répond de manière appropriée.

1.1 Premières commandes Maxima

Maxima indique qu’il est prêt à recevoir une commande en affichant le texte Maxima is ready for input en bas à gauche (la langue peut changer selon l’installation) et un curseur horizontal sur la zone du milieu. On peut alors entrer une commande en terminant par le symbole ; et un appuie sur la combinaison de touches <Majuscule>+<Entrée> demandera à Maxima d’interpréter la commande saisie.

Exercice 1. Exécuter la commande 99*97; pour obtenir (%i1) 99*97;

(%o1) 9603

Remarquer les indications (%i1) apportées à gauche de la ligne 99*97 et (%o1) à gauche de la ligne 9603, elles font respectivement référence à la première (1) entrée saisie (i) et la première (1) sortie (o) produite.

N’oubliez pas les signes * entre les facteurs d’une multiplication, par exemple les commandes 3 7 ou a x donneront un message d’erreur. Il faut vraiment taper 3*7 ou a*x.

Vous pouvez modifier le contenu de n’importe quelle entrée en cliquant dessus. Dans ce cas un symbole délimitant l’entrée éditée apparaît à gauche. Nous pouvons exécuter l’entrée modifiée comme lors d’une saisie normale. Si vous utilisez seulement la touche <Entrée>, vous créez un nouvelle ligne au sein de l’entrée éditée.

Exercice 2. Modifier l’entrée 99*97; en 99-97;.

Exercice 3. Exécuter les commandes suivantes et expliquer ce qu’elles font exactement.

Faites tout de suite l’effort de mémorisation des commandes utilisées ci-dessous : les deux possibilités pour la puissance, sqrt(...), exp, log et non pas ln qui n’existe pas dans Maxima, la syntaxe pour les constantes %pi,%e...

1. 2**4;

2. 2ˆ5;

3. 4/6;

4. sqrt(12);

5. exp(log(5));

6. %pi;

7. float(%pi);float(%e)

Le symbole ; de fin de commande peut être remplacé par un $, ce qui demande à Maxima de ne pas

afficher le résultat de la commande.

(2)

1.2 Variables

Maxima permet de gérer des variables. La syntaxe générale d’une affectation est : variable : expression

Au cours de l’interprétation de la commande n:10*5; Maxima évalue l’expression 10*5 et affecte le résultat obtenu à la variable n, cette affectation est valable tout au long de la session Maxima sauf commande contraire, comme l’affectation d’une autre expression à la même variable.

Exercice 4. Exécuter les commandes suivantes et commenter 1. x;

2. x:4;

3. x;

4. x*x-2;

5. x;

6. kill(x);

7. x;

8. x:6$

9. x;

Attention, le comportement de Maxima dépend de l’ordre chronologique des validations des commandes et non de l’ordre apparent. En effet, toute commande visible sur la feuille Maxima peut être modifiée ou exécutée à tout instant. Une commande visible à l’écran peut aussi n’avoir jamais été exécutée. C’est le cas par exemple, si vous plantez le logiciel et que vous utilisez l’onglet [Maxima->Redémarrer Maxima].

Dans ce cas, il vous faudra réeffectuer la suite des combinaisonss <Majuscule>+<Entrée> nécessaire au bon déroulement de votre programme.

1.3 Aide de Maxima

Une chose qu’il faut absolument savoir faire avec un logiciel tel que Maxima est d’utiliser l’aide disponible par l’intermédiaire du bouton Help puis Maxima Help de la barre de menu. Vous pouvez consulter l’aide de 4 façons différentes :

1. par thème à l’aide de l’onglet content;

2. par nom de commande à l’aide de l’onglet index;

3. par recherche dans les différents textes d’aide à l’aide de l’onglet search;

4. en noircissant à la souris un mot présent dans vos saisies Maxima et en appuyant sur la touche F1.

La plupart du temps nous utiliserons la méthode 2.

Le texte d’aide d’une commande comporte les syntaxes possibles, un descriptif puis des exemples.

Évidemment, tout est en anglais.

Exercice 5. En utilisant l’aide de Maxima effectuer les taches suivantes. Le mot entre crochet vous permettra de consulter l’aide.

1. Développer l’expression (x − 1) ∗ (x + 1) ∗ x [expand].

2. Résoudre x 3 − 6x 2 + 11x − 6 = 0 [solve].

3. Tracer le graphe de x 7→ sin(x 2 ) sur [−π, π]. [plot2d].

De manière générale, si une nouvelle commande est à utiliser pour résoudre un exercice, le nom de celle-ci sera rajouté entre crochets.

2 Fonctions

Il n’est pas évident de délimiter précisément la notion de fonction dans un logiciel de calcul symbolique.

Disons simplement qu’une fonction de Maxima est un objet qui crée une expression à partir de variables.

(3)

2.1 Déclaration

Le nombre de fonctions déjà intégrées à Maxima est important (sin,cos,exp,log,...) , mais on a souvent besoin de définir, au moins momentanément, ses propres fonctions. La syntaxe la plus simple pour cela est:

nom_fonction(variable_1,...,variable_n) := expression Par exemple la commande f(x):=x**2+1 crée la fonction f : x 7→ x 2 + 1.

Attention, contrairement à l’affectation de variable on utilise le symbole := et non le symbole :.

Après cette définition, on peut appliquer la fonction f à une expression quelconque, constante ou symbolique.

(%i2) f(5);

(%o2) 26

(%i3) f(3*a^2);

(%o3) 9a^4+1

Il faut bien faire la différence entre fonctions et expressions. La commande expr:x**2+1 définie une expression et non pas une fonction. A partir d’une expression expr dépendant de x on crée une fonction f par define(f(x),expr) ou par f(x):=expr. Inversement, on obtient une expression à partir d’une fonction f en évaluant f en une indéterminé : expr:f(x).

Pour évaluer une fonction f(x) en x=5 on appelle f(5) ou encore at(f(x),x=5). Pour une expression expr on utilise la commande subst : subst([x=5],expr).

Exercice 6.

1. Tester vous même ces exemples.

2. Tester de même et comprendre : kill(all);expr:x**4+1;x:5;expr;

2.2 Dérivation

La commande diff(expr,var) permet de dériver une expression expr par rapport à la variable var : Exercice 7. Tester les commandes suivantes et commenter :

1. f:x**3+2*x**2+x-1;

2. df:diff(f,x);

3. subst([x=3],f);

4. subst([x=3],df);

5. expr:x**3+2*x**2+x-1;

6. define(g(x),expr);

7. define(dg(x),diff(g(x),x));

8. g(3);

9. dg(3);

Attention l’approche suivante ne marche pas f(x):=x**3+2*x**2+x-1;

df(x):=diff(f(x),x);

df(3); --> Erreur

Exercice 8. Créer une fonction f pour f (x) = cos(x 2 + ln(x)). Créer la fonction df, dérivée de f . Vérifier que Maxima donne une valeur quand vous lui demandez de calculer f 0 (1).

2.3 Intégration

Pour calculer une primitive on utilise la commande integrate(expr,var). Pour calculer une intégrale définie, on utilise la commande integrate(expr,var,a,b).

Si vous désirez faire apparaître une forme élégante de votre résultat, vous pouvez utiliser une forme

inerte en faisant précéder la commande integrate par un accent ’. Vous pourrez aussi les utiliser pour

la commande limit. Par exemple essayer :

(4)

’integrate (3+3*x+x^2+x^4, x)=integrate (3+3*x+x^2+x^4, x);

Exercice 9. Calculer les primitives ou intégrales suivantes : 1.

Z

sin(x) 3 dx.

2.

Z π 0

cos(x) 2 × e x dx.

3.

Z +∞

−∞

x 2 e −x

2

dx. On pourra utiliser minf et inf

2.4 Limites

La commande pour calculer des limites est limit(expr,var,a). Pour calculer une limite à gauche, on utilise limit(expr,var,a,minus). Pour calculer une limite à droite on utilise limit(expr,var,a,plus) Exercice 10. Faire calculer les limites suivantes à Maxima.

1. lim

x→0

1 x 2 . 2. lim

x→0

+

1 x . 3. lim

x→+∞

(x 2 − 1) (x 2 + 1) .

3 Résoudre des équations

La principale commande pour résoudre des équations est solve. Exemple : (%i4) kill(all);

(%o0) done

(%i1) eq1: x**2-2*x+1;

(%o1) ...

(%i2) solve(eq1);

(%o2) [x=1]

(%i3) multiplicities;

(%o3) [2]

On note que solve(eq1) est un raccourci pour solve(eq1=0).

Essayons de résoudre l’équation ax 2 + bx + c = 0 pour a, b et c quelconques.

(%i4) f(x):=a*x**2+b*x+c;

(%o4) ...

(%i5) solve(f(x));

(%o6) error

Le problème est que f (x) comprend 4 inconnus : a, b, c et x. Précisons à Maxima que l’équation doit être résolu par rapport à x.

Recopier les réponses de Maxima.

(%i7) sol:solve(f(x),x) (%o7)

(%i8) sol[1];

(%o8)

(5)

Exercice 11. Résoudre les équations suivantes à l’aide de Maxima.

1. x 2 = x + 1.

2. cos(x) =

√ 2 2 .

3. x 3 + ax = −1 par rapport à x.

Pour résoudre un système d’équations on utilise la commande solve([eqn_1,...,eqn_n],[x_1,...,x_n]).

Exercice 12. Résoudre dans R 2 le système d’équations suivant :

(S)

( x + 3y = 2 2x − y = 1.

4 Utilisation de la librairie draw

Bien qu’utile la fonction plot2d a quelques limites. Pour les graphismes un peu plus compliqués, on utilisera la librairie draw et sa commande draw2d. Commencer par chargée la librairie draw à l’aide la commande

load(draw)

Le principal avantage de cette librairie est l’utilisation d’objet graphique. Une courbe, une courbe paramétrée, une ligne brisée sont des objets graphiques.

Pour créer la courbe C1 de la fonction x 7→ x 2 pour x ∈ [−1, 1] on utilise la commande C1:explicit(x**2,x,-1,1)

Pour afficher la courbe C1 on utilise la commande draw2d(C1) Pour créer la courbe paramétrique C2 du cercle, on utilise

C2:parametric(cos(t),sin(t),t,0,2*%pi) Pour créer le triangle passant par les points (0, 0), (1, 0) et (2, 1), on utilise

T:polygon([[0,0],[1,0],[2,1]]) On peut afficher les deux courbes C1, C2 et le triangle T avec la commande

wxdraw2d(C1,C2,T)

Les options de draw2d et les types d’objet graphique disponibles sont nombreux, des indications seront données dans les exercices si besoin. Pour afficher le dessin dans la fenêtre principale on utilisera wxdraw2d. pour travailler dans un repère othonormée on utilisera l’option proportional_axes = ’xy Exercice 13. Tester les commandes précédentes.

En coordonnée polaire, la position d’un point M dans le plan est définie par la distance r de M à l’origine et par l’angle θ entre (Ox) et (OM ).

Exercice 14 (polar).

1. Tracer le Lemniscate de Bernoulli d’équation polaire ρ = p

cos(2θ) pour θ ∈ [−π/4, π/4].

2. Tracer la cardioïde d’équation polaire ρ = 1 + cos(θ) pour θ ∈ [−π, π].

(6)

5 Manipulation de listes

5.1 Création de listes

Une liste est une expression dans laquelle des éléments en nombre fini sont placés entre deux crochets et séparés par des virgules. Par exemple :

(%i1) L:[a,a+2*3*f,8,d];

(L) [a,6f+a,8,d]

La commande length renvoie la longueur d’une liste : (%i3) length(L);length(L2);

(%o2) 4 (%o3) 3

La fonction makelist permet de créer des listes génériques. On l’utilise de deux manières différentes illustrées par les exemples suivants :

(%i3) makelist(i^2,i,2,5);

(%o3) [4,9,16,25]

(%i3) makelist(i^2,i,[2,3,0,-1]);

(%o3) [4,9,0,1]

On peut créer des listes d’objets non entiers ou des listes de listes, des listes d’équations, etc... Par exemple :

(%i3) L3:makelist(makelist(j,j,1,i),i,1,4);

(L3) [[1],[1,2],[1,2,3],[1,2,3,4]]

5.2 Eléments d’une liste

On accède à un élément d’une liste en plaçant entre crochets son indice à côté du nom de la liste. Par exemple :

(%i55) L:[2,7,-3,toto]$ L[1]; L[length(L)];

(%o54) 2 (%o55) toto

Quand il y a plusieurs listes imbriquées, on procède naturellement : (%i98) L:[[2,3],[-1,4],toto,[tutu]]$

L[1]; L[2];

L[1][2]; L[4][1];

(%o95) [2,3]

(%o96) [-1,4]

(%o97) 3 (%o98) tutu

5.3 Opérations sur les listes

La fonction append permet de concaténer les élements de plusieurs listes en une seule liste : (%i106) L:[2,3];append(L,[5,5]);

(L) [2,3]

(%o106) [2,3,5,5]

(7)

Les commandes cons et endcons permettent de placer un élement à la première et à la dernière place d’une liste :

(%i111)cons(tyty,L);

endcons(tyty,L);

(%o110) [tyty,2,3]

(%o111) [2,3,tyty]

Vous trouverez dans l’aide de nombreuses commandes sur les listes. Par exemple:

1. La commande member qui permet de savoir si un objet est membre d’une liste.

2. La commande delete pour supprimer un élément de la liste.

3. La commande reverse qui retourne les éléments de la liste.

4. La commande sort qui trie les éléments de la liste.

5. La commande lmax qui retourne le plus grand des éléments d’une liste.

6. La commande flatten qui supprime les crochets délimitants les listes à une liste 7. Ecetera.

6 Algorithme

Bien que Maxima n’ait pas pour vocation d’être un langage de programmation il permet la création et l’exécution d’algorithmes.

6.1 Les tests conditionnels

Un test obtenu avec la commande if réalise une succession de commandes si la condition placée après if est vérifiée. Dans le cas contraire et si on le souhaite, le test réalisera une autre succession de commandes après l’opérateur else.

Ces successions de commandes alignées les unes après les autres, séparées par des virgules et entourées de parenthèses constituent la forme la plus simple de "procédure" en Maxima.

s y avoir un point-virgule avant l’opérateur else. Même dans l’exemple trivial suivant : (%i22) a:3.14159$

if a<%pi then print("plus petit") else print("trop grand") (a) trop petit

Revenons un instant sur ces fonctions élémentaires: leur valeur finale est le dernier objet évalué juste avant la parenthèse finale. Lisez et testez avec soin l’exemple suivant :

(%i23) toto:(a:3,b:2^a,c:a+b);

toto^2;

(toto) 11 (%o23) 121

6.2 Les boucles

Donnons par l’exemple différentes formes d’une boucle en Maxima. La liste ne prétend pas être ex- haustive. Observer et comprendre ce que donne Maxima quand on effectue les boucles suivantes :

1. (%i1) for i:3 thru 7 do display(i);

(8)

2. N’abusez pas de la commande display au sein des boucles ; elle est juste utilisée dans ce para- graphe pour vous montrer qu’elle existe et visualiser le "fonctionnement " des boucles dans ces exemples.

(%i55) S:0;

for i:2 step 2 thru 10 do (S:S+i,display(S));

3. Une boucle avec juste l’opérateur while.

(%i55) k:2;

while k<100 do (

k:k+3,

if mod(k,13)=0 then printf(true,"l’entier ~d est

divisible par 13~%",k) );

k;

Ci-dessus, la présence de ~% permet de passer à la ligne dans ce

"print formated".

6.3 Fonction procédurale

Imaginons que l’on veuille créer une fonction nommée foo dépendant d’un paramètre n et qui retourne n/2 si n est pair et 3n + 1 si n est impair. Vous savez déjà comment faire appel à la commande if ou créer des fonctions mathématiques simples mais vous ne savez pas créer des fonctions combinant les deux. Pour cela nous avons besoin de la commande block d’usage très simple. Voici par exemple comment créer notre fonction foo :

(%i1) foo(n):=block(

[resultat],

if mod(n,2)=0 then(

resultat:n/2 )

else(

resultat:3*n+1 ),

return resultat )$

(%i2) foo(3);foo(4);

(%o2) 10 (%o3) 2

La syntaxe de la fonction block est très simple : block([v1,...,vn],exp1,...,expm) exécute succes- sivement les expressions exp1,...expm. Le premier argument de block signifie que les variables v1,...vn sont locales à la fonction, c’est-à-dire qu’après l’appel de la fonction et si elles ont déjà été utilisées, elles auront les mêmes valeurs qu’avant l’appel de la fonction. La valeur retournée par la fonction est celle de la dernière expression évaluée.

6.4 Exercices

Exercice 15. La suite de Fibonacci est déterminée par ses deux premiers termes u 0 = 0, u 1 = 1 et la relation de récurrence u n = u n−1 + u n−2 définie pour n ≥ 2.

Ecrire un algorithme récursif qui à partir d’un entier n fixé (pourquoi pas n = 10) retourne la valeur de u n .

Faire une version non récursive de l’algorithme précédent.

(9)

Exercice 16. Conjecture de Syracuse

On choisit un entier n. Si n est pair on le remplace par n/2, sinon on le remplace par 3n + 1, et ainsi de suite tant que le nombre obtenu est différent de 1. Collatz a conjecturé que pour tout entier n, on aboutit toujours à 1. C’est un problème ouvert encore aujourd’hui, c’est à dire que l’on ne sait pas le démontrer.

Wikipédia : Cette conjecture mobilisa tant les mathématiciens durant les années 1960, en pleine guerre froide, qu’une plaisanterie courut selon laquelle ce problème faisait partie d’un complot soviétique visant à ralentir la recherche américaine.

Ecrire un algorithme avec Maxima qui retourne une liste contenant la suite des entiers générée par le processus à partir d’un entier donné en entrée.

7 Algèbre linéaire

7.1 Vecteurs et matrices

La commande Maxima pour créer des matrices et des vecteurs colonnes ou ligne est matrix(ligne1,...) prenant des listes comme arguments. Pour créer la matrice A =

1 2 3 4 5 6

on utlise la commande (%i1) A:matrix([1,2,3],[4,5,6]);

Pour créer un vecteur ligne [1, 2, 3] on utilise évidemment matrix([1,2,3]) mais pour créer le même vecteur en colonne il faudra utiliser la commande matrix([1],[2],[3]) ce qui n’est pas pratique. Il peut être alors judicieux d’utiliser la commande transpose permettant de transposer une matrice (et donc un vecteur).

Exercice 17. Tester et comprener les commandes suivantes : 1. A:matrix([1,2,3],[4,5,6],[7,8,9]);

2. A[1,2];

3. A[2];

4. A[2][3];

5. (-1)*A;

6. A+A;

7. A.A;

8. A*A;

9. Aˆˆ2;

10. Aˆ2;

Pour accéder à la ligne i d’une matrice A on peut indiférement utiliser A[i] ou row(A,i). Pour accéder à la colonne i, on utilise col(A,i).

Exercice 18. Avec l’aide de Maxima déterminer l’utilité des commandes 1. rowswap et colswap

2. rowop et colop 3. determinant 4. echelon 5. mat_trace 6. minor

Il n’y a par contre pas de commande direct pour multiplier une ligne ou une colonne par un scalaire.

Une solution est d’utiliser rowop et colop. La commande colop(A,1,1,λ-1) multiplie la colonne 1

de A par λ.

(10)

7.2 Application linéaire

Pour Maxima seul les applications linéaires de K n dans K m existent. Une telle application est donnée par sa matrice représentative dans les bases canoniques de K n et K m .

Exercice 19. Soit f l’endomorphisme de K 4 ayant

A =

1 0 0 0

2 1 −2 2

1 0 0 1

1 0 −1 0

comme matrice représentative dans la base canonique de R 3 . 1. L’application f est-elle bijective ?

2. Déteminer les valeurs propres et leurs multiplicités de l’application f . [eigenvalues]

3. Déterminer l’espace propre de f associé à la valeur propre 1.[eigenvectors]

4. Quel est le polynôme caractéristique χ de f ? [charpoly]

5. Quel est l’espace cractéristique de f associée à la valeur propre 1[ident,nullspace]

8 Arithmétique

Beaucoup de commande Maxima valable sur Z le sont aussi sur K [X] lorsque K est un corps.

Exercice 20.

1. Quel est le pgcd des nombres 758 et 306 ? [gcd]

2. Décomposer le nombre 5040 en produit de facteur premier. [factor]

3. Déterminer le plus petit premier supérieur à 80000. [next_prime]

4. Vérifier que les polynômes X 2 + 1 et X 3 + 4 sont premiers entre eux.

5. Trouver deux polynômes u et v tels que u × (X 2 + 1) + v × (X 3 + 4) = 1.

6. Déterminer les racines multiples du polynômes P = X 6 −10X 5 +38X 4 −70X 3 +73X 2 −60X+36.

[gcdex]

Références

Documents relatifs

Au cours de l’interprétation de la commande n:10*5; Maxima évalue l’expression 10*5 et affecte le résultat obtenu à la variable n, cette affectation est valable tout au long de

Un cercle centré en un point constructible et ayant pour rayon la distance entre deux points constructibles est dit constructible..

Vous avez appris à effectuer la division euclidienne de deux polynômes, à factoriser des polynômes, à développer des fractions rationnelles en éléments simples et à intégrer

Il est certain d’autre part que, tandis que dans le cas des maxima et minima le passage d’une m´ ethode ` a l’autre peut se faire petit ` a petit et ne demande pas de

Utiliser l’exportation d’une image sous Maxima pour la r´ eutiliser en

Sous Maxima, construire une fonction ”montecarlo” qui d´ epend d’un argument entier n et qui effectue n tirages au sort de x et y dans [0, 1] pour calculer le rapport entre le

Divers fichiers de documentation sont présents dans l’arborescence du répertoire d’installation, pour en avoir la liste il su ffi t de lancer :.

Returns the list of input, output, or intermediate expression labels which begin with symbol.. Typically symbol is the value of inchar, outchar,