Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Utilisation de MAPLE

MAPLE est un système de Calcul Formel facile à utiliser tournant sur des PC compatibles, Stations de travail, et macintoshes. Ce système réalise des calculs symboliques (calcul différentiel, intégration, calcul de limites, trigonométrie, matrice et calcul vectoriel, etc...), pour résoudre des problèmes numériques, pour tracer des courbes en deux ou trois variables et pour définir soit même de nouvelles fonctions. MAPLE est le logiciel de calcul formel le plus usuel offrant une large bibliothèque.

1. Principe généraux

MAPLE est un logiciel interactif, comme le sont la plupart des systèmes de calcul formel. Son apprentissage permettra d’utiliser d’autres systèmes avec un investissement supplémentaire négligeable.

Pour ouvrir une session MAPLE sur l’ibm2 il faut que /usr/local/bin soit dans votre path unix. Vous tapez alors simplement maple (ou, si vous n’avez pas le bon path, le chemin complet /usr/local/bin/maple).

Pour entrer une ligne à MAPLE il faut la faire suivre d’un retour chariot.

Une fois sous MAPLE pour en sortir il suffit de taper : quit;

1.1. initiation à l’aide en ligne.

– tapez??,

– lisez l’introduction,

– exécutez les commandes conseillées,

– cherchez comment sauver dans un fichier ce que vous avez fait, et comment charger un fichier de commandes MAPLE ensuite.

– examinez la librairie maple “linalg’ ; comment faire pour la charger dans

MAPLE ? Le but de ces premiers TDs est de se familiariser avec les notions que vous venez

de consulter. Quittez MAPLE, faites man maple pour avoir quelques renseignements supplémentaires.

2. Exercices d’initiation

Dans cette série d’exercices nous donnons volontairement des informations partielles afin de vous permettre d’explorer MAPLE. Nous vous donnons les informations essentielles afin de vous orienter dans votre recherche.

2.1. Simplification et dévelopement.

– Entrez le polynôme P (X) = X^{2} − X − 1, affectez le à une variable sans l’afficher.

– substituez Y à X dans P

– résolvez l’équation P (Y) = 0, – mettez la solution sous forme de liste, et extrayez les 2 racines du polynôme

P,

– vérifiez que ces 2 nombres sont bien les racines de P.

– faites de même avec P (X) = X^{2} + aX + c

2.2. Représentation des données. Cet exercice montre la nécessité de l’existence de représentations canoniques dans un système de Calcul Formel. Plus loin, nous reviendrons sur la représentation des polynômes.

– Calculez la primitive de sin^{2} x,

– vérifiez que le résultat est correct en dérivant puis en simplifiant,

– que vous inspirent ces calculs,

– faites de même avec des fonctions plus compliquées : sin 1/x, \frac{1}{P}, \frac{1}{(x^{2}+1)P}, où P = X^{2} + aX + c.

2.3. Algèbre linéaire.

– Entrez deux matrices A et B 3x3 de valeurs numériques.

– calculez A^{2} puis le produit AB,

– calculez le déterminant de B,

– calculez le polynôme caractéristique de A,

– factorisez le polynôme,

– calculez le polynôme caractéristique de B,

– à quelle condition les matrices A et B ont des valeurs propres communes ? (indication : pgcd de deux polynômes).

Utilisation de MAPLE(suite)

Nous allons voir comment se comporte MAPLE de façon un peu plus précise.

3. L’évaluation sous MAPLE

Les expressions sous MAPLE sont complètement évaluées :

– tapez x:= y;

– tapez x;

– tapez y:= 3;

– que vaut x et pourquoi?

– faites?quote, trouvez comment on peut manipuler des symboles,

– désafectez x et y.

4. Les expressions MAPLE

– faites?op

– soit le polynôme p(x) = (x − y + 1)^{5}, quel est le troisième terme de l’expression “ expandée ” de p?

– combien p(x) a-t-il de termes?

– quel est le type de p(x), de factor(p(x))? MAPLE possède des structures complexes : les séquences, les listes, les em-

sembles :

– faites?sequence ,?$

– cherchez les puissances troisièmes des entiers entre 10 et 15,

– cherchez le pgcd de 12 et de tous les entiers entre 1 et 30, est-ce juste ?

– des listes ou des ensembles de ces différents termes,

– créez la liste [x1, x2, …, x30] de la façon la plus courte possible (13 carac-

tères). MAPLE possède aussi les notions de tableaux et de tables :

– faites?array

– créez un tableau vide de nom aayant dix termes numérotés de 1 a 10,

– que contient a? imprimez a,

– mettez des valeurs polynomiales en x dans a,

– faites?map

– creez le tableau b des dérivées en x des termes de a.

5. Programmation MAPLE

– faites ?statement, ?proc, regardez les principaux éléments de la syntaxe MAPLE,

– faites une boucle “ for ” pour créez la liste [x1, x2, …, x30],

– quelle est la valeur de votre variable de boucle? annulez cette valeur,

– écrivez dans un fichier un petite procédure MAPLE qui calcule la suite de Fibonacci,

– faites?option,?local, ré-écrivez votre fonction fib le plus efficacement possible.

– programmez la suite de Fibonacci a l’aide de techniques matricielles (pensez

à la récursion linéaire vue en Math-Info) quel est le résultat. Il est vraisemblablement l’heure ! Si vous avez encore un peu de temps faites?time

pour comparer les différentes versions de la suite de Fibonacci.

6. Instabilité numérique

On veut tester si e^{π\sqrt{163}} est nul. Réaliser la suite de commandes suivantes et commentez :

  reel:=exp(Pi*sqrt(163); evalf(",35); evalf(ceil("),35);
evalf(""-",35); evalf(reel,25); ceil(")-"

7. Courbes

Soient une droite f croissante en dimension 2. Définir une fonction de 5 paliers qui approxime f. Ecrire les deux fonctions en maple, et les tracer avec plot sur un même graphe et sur deux graphes différents. Sauver les en Postcript et aller voir dans le fichier poscript pour en modifier l’impression.

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Mise en oeuvre de programmes à partir d’une formule

Soient les séries génératrices

E(t) = ∏_{r≤0} e_{r}t^{r} et P (T) = ∑_{r≤1} p_{r}t^{r−1} ,

vérifiant E(t) = ∏_{i≤1}(1 + x_{i}t) et P (t) = ∑_{i≤1} ∑_{r≤1} x_{i}^{r}t^{r−1}. Les p_{1}, …, p_{m}, … sont appelées les fonctions puissances et e_{1}, e_{2}, …, e_{m}, … sont appelées les fonctions symétriques élémentaires.

(1) Démontrer que

P (−t) = \frac{d}{dt}log(E(t)) = \frac{E′(t)}{E(t)} .

(2) En déduire les formules de Girard-Newton vraies pour tout n ∈ N :

p_{n} − e_{1}p_{n−1} + e_{2}p_{n−2} − ⋯ + (−1)^{n}ne_{n} = 0 ,

Nous supposerons qu’il existe un indice n_{0} à partir duquel e_{m} = 0 pour tout m > n_{0} (i.e. x_{m} = 0 pour tout m > n_{0}).

(3) Soient m un entier naturel et les elem formé de n_{0} et des i premières fonctions symétriques élémentaires e_{1}, …, e_{i} où i = inf(m, n_{0}). Ecrire une fonction ele2pui (m,les elem) qui rend n_{0} et p_{1}, …, p_{m} en fonction de e_{1}, …, e_{i} avec la même structure de données que les elem.

(4) Ecrire la fonction réciproque pui2ele(m,les pui) permettant de calculer les fonctions symétriques élémentaires à partir des fonctions puissances.

(5) Vérifier que ele2pui(m,pui2ele(m,les pui))=les pui et que de même
pui2ele(m,ele2pui(m,les ele))=les ele.

(6) Montrer que toutes les fonctions puissances dépendent algébriquement des n_{0} premières fonctions puissances.

(7) Ecrire une fonction permettant d’exprimer une fonction puissance en fonction des n_{0} premières fonctions puissances.

(8) Ecrire une fonction puireduc(m,les pui) qui calcule les m premières fonctions puissances en fonction des n_{0} premières données dans les pui.

(9) Traduire matriciellement les formules de Girard-Newton. Vous remarquerez que les fonctions demandées peuvent donc s’écrire également avec des calculs matriciels. Programmez cette autre méthode et comparez.

Dans toutes ces fonctions si l’utilisateur ne donne pas toutes les fonctions symétriques élémentaires ou toutes les fonctions puissances, elles devront être remplacées par des variables em ou pm. Par exemple, en supposant que les elem = [n_{0}, e_{1}, e_{2}, …, e_{i}], l’appel à ele2pui(5,[4,2]) devra rendre le même résultat que l’appel à ele2pui(5,[4,2,e2,e3,e4]). Pour compléter les pui, il y a deux possibilités : la première est de faire comme pour les elem et la seconde est d’utiliser puireduc. Il faudra faire les deux.

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Recherche d’une équation différentielle minimale

Soit P (x, y) un polynôme en les variables x et y. Nous le noterons P (y) quand nous le considèrerons comme polynôme en la variable y à coefficients dans les polynômes en la variable x. Nous supposerons que P (y) n’a pas de racine multiple.

Nous rappelons qu’une équation différentielle linéaire est donnée par L(y) = 0 où L est de la forme :

L(y) = y + b_{1}y′ + b_{2}y′′ + ⋯ + b_{m}y^{(m)}, (1)

où y^{(k)} est la dérivée k-ième de y = y(x) en x et b_{1}, b_{2}, …, b_{m} sont des polynômes en x à coefficients dans Q. L’entier m est appelé l’ordre de L.

Le but de ce TD est de calculer une équation différentielle linéaire L(y) = 0 d’ordre minimal tel que toute solution y_{0}(x) à P (y) = 0 soit également solution de L(y) = 0. Pour cela nous allons employer la méthode ci-dessous :

Soit y_{0} = y_{0}(x) une solution quelconque de P (y) = 0 (i.e. P (x, y_{0}(x)) = 0). 1-Calculer la dérivée du polynôme P (x, y) en x 2-En déduire y′_{0} en fonction de y_{0} 3-Chercher, par identification, s’il existe une relation linéaire entre y_{0} et y′_{0} : y_{0}+b_{1}y′_{0} = 0 . (On utilisera la relation trouvée en 2- pour ce ramener à une équation polynomiale en y_{0}, puis on utilisera l’hypothèse P (y_{0}) = 0 et enfin on remarquera qu’un polynôme de degré strictement plus petit que P (y) ne peut avoir autant de racines de P (y) sans être nul). Si on ne trouve pas de b_{1} solution polynômiale en x alors on passe à l’étape suivante. 4-Recommencer avec y” en dérivant P une seconde fois et chercher s’il existe b_{1}, b_{2} des polynômes en x tels que y + b_{1}y′ + b_{2}y′′ = 0.

Ainsi de suite on finira par trouver une équation différentielle L comme en (1).

(1) Mettre en oeuvre l’algorithme à l’aide des polynômes P_{1}(x, y) = y +x^{2} puis P_{2}(x, y) = y^{2} + (2x + 2)y + x − 1 et P_{3}(x, y) = y^{4} + (3x + 1)y^{3} − x^{3} − 1 en MAPLE.

(2) Décrire proprement l’algorithme.

(3) Ecrire le programme en MAPLE. indications : Faire?students,?assign,?coeff,?changevar A propos de Math-Info faire :?rsolve

(Ce TD a été conçu à partir d’une idée de Félix Ulmer)

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Le Calcul Modulaire

Le calcul modulaire permet de faire plusieurs “petits” calculs afin d’en éviter un “gros”.

1. Rappel de cours

Soient m_{1}, …, m_{n} des entiers premiers entre eux deux à deux. Soit u un entier et u_{1}, … u_{n} donnés par u = u_{i} mod m_{i} pour i = 1, …, n.

Pour i, j ∈ [1, … n], notons B_{j,i} et B_{i,j} des coefficients de Bézout de m_{i} avec m_{j}

B_{j,i}m_{i} + B_{i,j}m_{j} = 1 (2)

Notons p_{i} = ∏_{j≠i} B_{i,j}m_{j} pour i = 1, …, n, alors l’entier l = u_{1}p_{1} + ⋯ + u_{n}p_{n} est tel que l = v mod m_{1} ⋯ m_{n} ssi v = u_{i} mod m_{i} pour i = 1, …, n.

Donc si on connait une borne pour u, et qu’on choisit m_{1}, …, m_{n} de telle sorte que leur produit soit supérieur à deux fois cette borne, alors on peut obtenir u à partir de u_{1}, … u_{n} qui ont pour avantage de ne pas dépasser la valeur sup{m_{i} | i = 1, … n}.

2. Les bases

– Faites?mod, lisez la documentation, comment faire en sorte que les calculs soient fait de façon modulaire et pas en entier puis tronqués ensuite?

– Les calculs modulaires nécessitent les coefficients de Bezout de nombres ou de polynômes, faites?gcd, trouvez comment obtenir les coefficients de Bezout pour deux polynômes, deux entiers.

– Exprimez un entier u avec u_{1}, …, u_{n} tels que u = u_{i} mod m_{i} où i = 1, …, n et où les m_{i} sont des entiers premiers entre eux deux à deux dont le produit m_{1} ⋯ m_{n} est supérieur à deux fois une constante C donnée. Il faudra donc écrire une fonction code chinois prenant u et C en argument et rendant u_{1}, …, u_{n} et m_{1}, …, m_{n}.

– Connaissant u_{1}, …, u_{n} et m_{1}, …, m_{n} (premiers entre eux deux à deux), calculez l’ entier u sachant que | u | < C et m_{1} ⋯ m_{n} > 2C. Vous écrirez donc une fonction decode chinois.

– Faites de même avec des polynômes.

– Vous disposez maintenant de deux nouvelles fonctions MAPLEpermettant de coder et décoder un entier représenté modulairement.

3. Un exemple

Il s’agit ici de calculer le déterminant d’une matrice en utilisant des méthodes modulaires.

– Entrez une matrice 10x10 (faites un petit programme !) à coefficients numériques, calculez son déterminant.

– Programmez la méthode de Gauss, pour triangulariser une matrice (on pourra supposer que les pivots intervenants sont non nuls).

– Calculez par récurrence un majorant du déterminant d’une matrice nxn en fonction de n et de la taille des coefficients de la matrice.

– Comme on l’a vu en programmant la méthode de Gauss, il est nécessaire de faire des divisions. Pour que les calculs modulaires se fassent dans un corps, il faut que le nombre modulo lequel on travaille soit premier. faites?prime pour savoir comment trouver et générer des nombres premiers.

– Reprogrammez la méthode de Gauss pour qu’elle soit modulaire, cette foisci on ne pourra plus supposer que les pivots intervenants sont non nuls (profitez en pour mettre à jour la fonction précédente !).

– Écrivez deux petites fonctions qui calculent le déterminant (normal et modulaire) en utilisant les formes triangulaires précédentes.

– Génerez des nombres premiers (3 ou 4) jusqu’à ce que leur produit dépasse une borne égale à deux fois celle du déterminant de votre matrice.

– Calculez les déterminants modulaires pour chacun de ces nombres.

– Il faut maintenant retrouver le résultat en se servant de ce qui précède, comme tout est défini modulo ∏_{i=1}^{n} m_{i} si le déterminant calculé depasse la borne c’est qu’en fait il est négatif.

4. Interpolation

On va appliquer les méthodes modulaires sur les polynômes au lieu des entiers, le but est de calculer un polynôme de degré fixé à partir des valeurs qu’il prend sur un certain nombre de points.

Soit donc P un polynôme de degré 9 que l’on cherche ; nous savons qu’il prend les valeurs p_{1}, ⋯ p_{10} aux points x_{1}, ⋯ x_{10} que vous pouvez vous fixer arbitrairement.

– dire que P (x_{1}) = p_{1}, c’est dire en termes de polynômes que le polynôme P (x) est congru à p_{1} modulo x − x_{1} ; de même pour les autres. Vérifiez ces relations en vous donnant P, et en l’évaluant en 10 points.

– Nous sommes donc dans les conditions du théorème chinois où nous connaissons une quantité modulo d’autres, nous savons que le degré du polynôme est plus petit que la somme des degrés des polynômes x − x_{i}. De la même manière que précédement les polynômes de Lagrange sont donnés par :

L_{i}(x) = ∏_{k≠i} \frac{x − x_{i}}{x_{k} − x_{i}}.

– Donnez vous 10 points et calculez le polynôme associé.

– Ecrivez un petit programme MAPLE qui prenne une liste de n points et une liste de n valeurs et qui retourne le polynôme associé.

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Représentation des données

Soit p(x) = 5/2x^{5}+3xy^{2}z+2yz^{2}−y^{2}x^{5}+7zyx^{2}+8xyz un polynôme de Q[x, y, z]. Nous savons que les anneaux de polynômes suivant sont isomorphes :

Q[x, y, z], Q[x][y, z], Q[x, y][z], Q[x][y][z], …

a) Nous désirons écrire mathématiquement p dans différents anneaux. Mais afin que chaque anneau ait une représentation canonique (en vue d’une écriture informatique) nous devons ordonner nos polynômes. Cet ordre étant arbitrairement choisi, nous en fixons un : Si A est un anneau, écrire un polynôme de A[x_{1}, …, x_{n}] signifiera que l’on donne un ordre x_{1} > x_{2} > ⋯ > x_{n} sur les variables. Chaque monôme commencera par x_{1} puis x_{2} … puis x_{n}. Puis choisissons l’ordre lexicographique sur les exposants dans N^{n} pour ranger les monômes dans le polynôme.

A partir de cette convention d’ordre, écrire p dans

Q[x, y, z],
Q[x][y, z], Q[z][x, y],
Q[x, y][z], Q[z, y][x],
Q[x][y][z], Q[y][z][x], Q[z][y][x].

b) Compter le nombre d’anneaux isomorphes à Q[x, y, z] d’abord sans considération d’ordre puis avec considération d’ordre (i.e. le nombre de représentations possibles). Puis généraliser à Q[x_{1}, …, x_{n}].

c) En déduire les représentations LISP correspondantes.

d) Donner un représentation distribuée de p dans

Q[x, y, z],
Q[x][y, z], Q[z][x, y].

e) Plaçons nous dans Q[x, y].

: Ecrire un programme de tri, TRI DIST, qui change l’ordre des variables dans la représentation distibuée d’un polynôme de Q[x, y]. Si le tri est réalisé par dichotomie sur un polynôme de degré n il est en nlogn. : Ecrire un programme de tri , DIS RECU, qui permette de passer de Q[x][y] à Q[x, y]. Si ce tri est effectué directement il est en n^{2}. : Ecrire un programme, RECU2DIST, qui passe de la représentation récursive dans Q[x][y] à la représentation distribuée dans Q[y, x]. : Ecrire un programme réciproque DIST2RECU. : Installer un compteur qui permette de comparer DIS RECU, théoriquement en n^{2}, avec le même résultat obtenu par la composition de RECU2DIST avec TRI DIS puis DIST2RECU qui est théoriquement en nlogn .

: Ecrire deux programmes permettant de passer de la représentation distribuée à la forme LISP dans Q[x, y] et réciproquement. : Ecrire deux programmes permettant de passer de la représentation récursive à la forme LISP dans Q[x, y] et réciproquement.

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Manipulations de Polynômes

Le but du TD est de réaliser les opérations simples sur les polynômes, en une ou plusieurs variables. Nous allons adopter une représentation distribuée creuse pour les polynômes : un polynôme sera une liste de monômes non nuls triés dans l’ordre lexicographique décroissant des exposants. La liste des variables est implicite (et n’est donc pas codée dans la représentation). Comment représente-t-on le polynôme nul ?

Un monôme sera représenté comme une liste à deux éléments où le premier terme est l’exposant et le deuxième est le coefficient.

Un exposant est une liste de longueur le nombre de variables contenant les degrés en chaque variable. Un coefficient est un objet MAPLE quelconque.

Ainsi nous avons la forme suivante pour un polynôme ayant m monômes non nuls sur n variables :

[ [ [ deg_{1,1} , …, deg_{n,1} ] , coeff_{1} ], …, [ [ deg_{1,m} , …, deg_{n,m} ] , coeff_{m} ] ]

En particulier en une seule variable on aura :

[ [ [ deg_{1} ] , coeff_{1} ], …, [ [ deg_{m} ] , coeff_{m} ] ]

Nous allons d’abord nous donner quelques utilitaires de programmation :

– Écrivez des procédures MAPLE mainMon et redPol qui retournent respectivement le monôme de tête et le polynôme formé de tous les autres monômes d’un polynôme (i.e privé du monôme de tête).

– Écrivez une fonction consPol à deux arguments (un monôme et un polynôme) et qui retourne le polynôme formé du monôme argument (en tête) et du polynôme argument. Faites de même une fonction insereMon qui mette le monôme argument “à sa place” dans le polynôme et non plus en tête.

– Écrivez des procédures MAPLE exposant et terme qui retournent respectivement la liste des degrés en les différentes variables, et le coefficient d’un monôme.

– Écrivez une fonction lexGt qui prenne deux monômes en arguments et qui retourne un booléen (true ou false) suivant que le premier monôme est ou non supérieur au second dans l’ordre lexicographique des exposants. Vous pourrez commencer par le cas simple d’une seule variable (c’est l’ordre usuel), puis de deux, puis généraliser.

– Écrivez une fonction lexOrder qui trie une liste de monômes pour retourner un polynôme et une fonction makeCan qui enlève d’une liste de monômes ceux dont le coefficient est nul.

– Écrivez une fonction polToMaple qui prenne en arguments un polynôme et une liste de variables (ayant le même nombre d’éléments que les listes des exposants des monômes) et qui retourne un objet MAPLE usuel.

Nous pouvons maintenant penser à implémenter les opérations arithmétiques, nous allons réaliser l’addition de 2 polynômes P_{1} et P_{2}.

– Que retourner si l’un des 2 polynômes est nul ?

– Nous allons examiner les monômes de tête M_{1} et M_{2} de P_{1} et de P_{2}. Que faut-il retourner si l’exposant de M_{1} est plus grand (strictement pour l’ordre lexicographique), plus petit, égal à celui de M_{2} ?

– Implémentez cet algorithme en MAPLE (attention au cas où les exposants

sont égaux !). Nous pouvons passer à la multiplication de P_{1} et P_{2}.

– Comment multiplier un polynôme par un monôme ? Implémentez une fonction MAPLE monMul qui multiplie un polynôme (passé en premier argument) par un monôme (passé en deuxième argument).

– Que reste-t-il à faire pour multiplier deux polynômes ? Écrivez une fonction

MAPLE qui multiplie deux polynômes. Pourquoi n’a-t-on pas de notion de division euclidienne sur les polynômes en plusieurs variables ? Lorsqu’il n’y a qu’une seule variable nous pouvons écrire la division euclidienne en utilisant les opérations sur les coefficients.

– Comment calcule-t-on le premier terme du quotient de la division de P par Q?

– Écrivez une fonction MAPLE polDiv à deux arguments (P et Q) qui calcule le quotient et le reste de la division euclidienne. Le résultat sera une liste de longueur 2 contenant le quotient et le reste.

– Écrivez deux fonctions MAPLE polQuo et polRem analogues à polDiv qui

calculent directement le quotient et le reste. Maintenant que nous avons la base, rajoutez quelques fonctions utilitaires ! Inspirez vous des fonctions déjà existantes en MAPLE.

Maîtrise d’Informatique Paris 6 Module Calcul Formel

Renaud Rioboo Annick Valibouze

Exercices d’application en Maple et comparaison avec Macsyma

La correction des exercices en Macsyma vous est fournie.

(1) Dynamique de Populations C’est un exemple d’application en Electrochimie de P. Turq et M. Simonin. On considère le système (A(t), B(t), C(t)) évoluant selon

A ⟶^{k_{1}} B ⟶^{k_{2}} C ⟶^{k_{3}} A .

Ce système est régi par l’équation différentielle

V^{.} (t) = MV (t) (3)

où V est le vecteur colonne de composantes (A, B, C) et

M = ( \begin{matrix}−k_{1} & 0 & k_{3} \\ k_{1} & −k_{2} & 0 \\ 0 & k_{2} & −k_{3} \end{matrix} ) .

La solution initiale de (3) est V (t) = e^{Mt}V_{0}, où V caractérise l’état initial du système. De sorte que

V (t) = ∑_{i=1}^{3} e^{λ_{i}t}P_{i}V_{0} (4)

où les λ_{i} sont les valeurs propres de M et les P_{i} les projecteurs associés aux λ_{i}. L’équation (4) montre que les modes de relaxation du système sont donc les valeurs propres de M.

(a) Détermination analytique des modes A l’aide de Macsyma ou maple, et forts des cours précédents et aussi en utilisant le manuel, procéder aux étapes suivantes : – Entrer la matrice M (méthode de votre choix).

– Calculer son polynôme caractéristique (idem).

– Essayer de factoriser. Conclusion.

– Extraire le polynôme du second degré et calculer son discriminant.

– Considérer les deux cas limites où l’une des deux constantes est très petite (à la limite nulle : k_{3} = 0), et où les trois constantes sont égales (k_{i} = k).

– Calculer explicitement les modes dans ce dernier cas. Extraire

les parties réelles et imaginaires des solutions.

(b) Calcul des fonctions A(t), B(t), C(t)

On suppose que A(t = 0) = A_{0}, B(t = 0) = C(t = 0) = 0 et l’on se place dans le cas où les constantes k_{i} sont égales.

– Ecrire (sur le papier) la transformée de Laplace de (3). Introduire dans macsyma (plusieurs possiblités) le nouveau système. Le résoudre. Exprimer la T.L. de A.

– Décomposer cette dernière expression en éléments simples (contour-

ner les problèmes éventuels) et calculer ainsi A(t).

(2) Résolution d’une équation différentielle (P. Turq et M. Simonin) Trouver la solution générale de l’équation différentielle

y′′ + y = \frac{1}{sinus (x)} .

Quelle est la solution qui vérifie y(π/3) = y′(π/3) = 1?

(3) Exercices d’algèbre linéaire Pour illustrer les manipulations sur les matrices réalisables sous un système de calcul formel, nous allons tout d’abord tester la diagonalisation de matrice avec le théorème suivant :

Théorème 1. Soient A une matrice carrée et d le pgcd des coefficients de la matrice adjointe de A − xI. Alors le polynôme minimal de A est égal au quotient de son polynôme caractéristique par d.

On sait que la matrice est diagonalisable si ce polynôme minimal n’a que des racines simples.

(a) Ecrire le programme permettant de tester si une matrice est diagonalisable.

(b) Ecrire le programme qui diagonalise une matrice si c’est possible.

(c) Applications :

( \begin{matrix}7 & 12 & −12 \\ −2 & −3 & 4 \\ 2 & 4 & −3 \end{matrix} ) (5)

( \begin{matrix}−1 & −2 & 3 & 2 \\ 0 & 1 & 0 & 1 \\ −2 & −2 & 4 & 2 \\ 0 & 0 & 0 & 2 \end{matrix} ) (6)

(4) La matrice de Wilkinson Une matrice de Wilkinson d’ordre n peut être ainsi définie :

(\begin{matrix}n & 1 \\ 1 & n − 1 & 1 \\ & 1 & n − 2 & 1 \\ & & ... & ... & ... & & (0) \\ & (0) & & 1 & 0 & 1 \\ & & & & ... & ... & ... \\ & & & & & 1 & n − 1 & 1 \\ & & & & & & 1 & n \end{matrix})

Ecrire le programme permettant d’obtenir une matrice de Wilkinson. Pour n = 13 donner une évaluation de ses valeurs propres. Que remarquez-vous?

(5) Polynôme de Wilkinson Créer (par une boucle simple) le polynôme

P (x) = (x − 1)(x − 2) … (x − 20).

Modifier, dans ce polynôme, le coefficient du terme de degré 19 dans une proportion de 2^{−32} (changement du dernier bit seulement). Déterminer toutes les racines de ce nouveau polynôme.

(6) Calcul d’une primitive Intégrer les fonctions suivantes :

f(x) = \frac{2x + 1}{x^{4} + 2x^{3} + 3x^{2} + 2x + 2}

g(x) = \frac{4x^{3} + 6x}{x^{8} + 6x^{6} + 15x^{4} + 18x^{2} + 10}