\documentclass[12pt,a4paper]{article}
\usepackage{url}
\usepackage{multicol}
\usepackage[french]{babel}
\newfont{\mini}{cmssi10 scaled 480}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\euro{\mbox{\textsf{C}\kern -2.33em{\raise0.24ex\vbox{\small\it =}}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fin{\nolinebreak \raise-0.1em\hbox{$\Box$}}
\def\stackunder#1#2{\mathrel{\mathop{#2}\limits_{#1}}}
\def\dual{ ^{\rm v}}
\def\bidual{ ^{\rm vv}}
\def\primedual{ ^{\prime \rm v}}
\def\ideal{{\cal J}}
\def\LL{{\cal L}}
\def\max{{\cal M}}
\def\quot#1#2{\mbox{\raise 0.1cm\hbox{$#1$}{\big /}\raise -0.1cm\hbox{$#2$}}}
\def\danger{{\Large \bf
    $\bigtriangleup$}\kern-0.32cm\raise0.05cm\hbox{\small
    !}\kern0.32cm\lower0.05cm\hbox{}}
%%%%%%%
\newlength{\largeurtmp}
\def\rela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.6\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.6\largeurtmp}
\def\petitrela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.4\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.4\largeurtmp}
\def\petitcomplex{{
    \settoheight{\largeurtmp}{$_C$}{\rm C}\kern -\largeurtmp
    \rule{0.25pt}{1.3\largeurtmp}\kern \largeurtmp}}
\def\complex{{
    \settoheight{\largeurtmp}{Q}{\rm C}\kern -0.66\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.66\largeurtmp}}
\def\ratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.75\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.75\largeurtmp}}
\def\petitratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.6\largeurtmp
    \rule{0.25pt}{0.6\largeurtmp}\kern 0.6\largeurtmp}}
\newcommand{\proj}{{\rm I} \! {\rm P}}
\newcommand{\reel}{{\rm I} \! {\rm R}}
\newcommand{\Fp}{{\rm I} \! {\rm F}_p}
\newcommand{\nat}{{\rm I} \! {\rm N}}
%%%%%%%%%%%%%%%Debut de macros de fiches d'exos
%%les macros sont \exo, \qu, \quskip \squ \qusqu \qusquskip
\newcounter{exo}
\newcounter{question}
\newlength{\lng}
\newcounter{sousquestion}
\setcounter{exo}{1}
\def\exo{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}:}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\exotitre#1{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}: #1}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\qu{

  \addtocounter{question}{1}\arabic{question})
  \setcounter{sousquestion}{1} }
\def\quskip{

  \bigskip
  \qu}
\def\squ{

  \settowidth{\lng}{\arabic{question})
  }\hspace{\the\lng}\alph{sousquestion}) \addtocounter{sousquestion}{1}} 
\def\qusqu{\qu\nopagebreak \vskip -1\baselineskip \squ}
\def\qusquskip{\quskip\nopagebreak \vskip -1\baselineskip \squ}

%%reference pour exos,squ \`a placer avant la question, qu est a placer apres
\def\labelexo#1{\expandafter\edef\csname refexo#1\endcsname {\Roman{exo}}}
\def\refexo#1{\csname refexo#1\endcsname}
\def\labelqu#1{\expandafter\edef\csname refqu#1\endcsname {\arabic{question})}}
\def\refqu#1{\csname refqu#1\endcsname}
\def\labelsqu#1{\expandafter\edef\csname refsqu#1\endcsname
  {\arabic{question}\alph{sousquestion})}} 
\def\refsqu#1{\csname refsqu#1\endcsname}  

%%%%%%%%%%fin de macros fiche d'exos
\usepackage{listings}
\usepackage{algorithm2e}

\SetKwInput{Donnes}{Donn\'ees}
\SetKwInput{Res}{R\'esultat}
\SetKwInput{Entree}{Entr\'ee}
\SetKwInput{Sortie}{Sortie}
\SetKw{KwA}{ \`a }
\SetKw{Retour}{retourner}
\SetKwBlock{Deb}{d\'ebut}{fin}
\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fsi}
%%\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}
\SetKwFor{Pour}{pour}{faire}{fpour}
\SetKwFor{Tq}{tantque}{faire}{ftantque}
%%\SetKwFor{PourCh}{pour chaque}{faire}{finprch}
%%\SetKwFor{PourTous}{pour tous}{faire}{finprts}
\SetKwRepeat{Repeter}{repeter}{jusqu\_a}
%% \eSi{condition}{bloc du alors}{bloc du sinon}

%%macros taille page
\newlength{\elargir}
\setlength{\elargir}{2.5cm}
\addtolength{\leftmargin}{-\elargir}
%%\addtolength{\hoffset}{-\elargir}
\addtolength{\oddsidemargin}{-\elargir}
\addtolength{\evensidemargin}{-\elargir}
\addtolength{\elargir}{\elargir}
\addtolength{\textwidth}{\elargir}
\addtolength{\textheight}{14\baselineskip}
\topmargin=-6\baselineskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\lstset{language=C}
\lstset{basicstyle=\footnotesize}
\lstnewenvironment{sage}
{\lstset{language=Python}
 \lstset{frameround=fttt,frame=trBL,title={\it (sage)}} 
 \lstset{mathescape}
 \lstset{showstringspaces=false}
}
{}
\lstnewenvironment{sageverb}
{\lstset{language=Python}
 \lstset{frameround=fttt,frame=trBL,title={\it (sage)}} 
 \lstset{mathescape}
 \lstset{showstringspaces=false}
 \lstset{keywordstyle=}
}
{}
\lstnewenvironment{xcasverb}
{\lstset{language=C++}
 \lstset{frameround=fttt,frame=trBL,title={\it (giac/xcas)}} 
 \lstset{mathescape}
 \lstset{showstringspaces=false}
 \lstset{keywordstyle=}
}
{}
\lstnewenvironment{xcas}
{\lstset{language=C++}
  \lstset{frameround=fttt,frame=trBL,title={\it (giac/xcas)}}
  \lstset{morekeywords={si,alors,sinon,fsi}}
  \lstset{morekeywords={pour,de,jusque,pas,fpour}}
  \lstset{morekeywords={tantque,faire,ftantque}}
  \lstset{morekeywords={repeter,jusqu_a}}
  \lstset{morekeywords={fonction,ffonction}}
  \lstset{morekeywords={print,afficher,retourne}} 
  \lstset{mathescape}
  \lstset{showstringspaces=false}
}
%%{\it\scriptsize (giac/xcas)}
{}
%%<\qu Diff\'erences symboles/fonctions. Ex: si la variable \verb/R/ contient le symbole
%%
%%%%%%%%%%%%%%%%%%%%CORRIGES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%% \def\corrige{}                                         %
\def\corrige{}   %% pour afficher les corrections         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\everymath={\displaystyle}
\begin{document}

\noindent{\bf Universit\'e de Paris 7 \hfill \framebox{\Large \bf
    \hspace{ 0.5cm} TP02: initiation 2 \hspace{0.5cm}}\hfill   agreg 2018-2019
  (F.Han \footnote{\url{http://www.imj-prg.fr/~han/agreg}})}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%%
\columnsep 0.7cm
%% \begin{multicols}{2}

%
\hrule
\bigskip
{\sc Comp\'etences acquises en s\'eance 1}
\begin{itemize}
\item Prendre ses rep\`eres dans l'aide. (Tutoriel, aide sur mots clefs, menus, \dots)  
\item Diff\'erences symboles/fonctions. Ex: si la variable \verb/R/ contient le symbole
\verb!(a+b)/(1-a^2)! comment cr\'eer les fonctions $a \mapsto  \frac{a+b}{1-a^2}$
et $(a,b) \mapsto  \frac{a+b}{1-a^2}$ \`a partir de \verb/R/?
\item Lib\'erer une variable pour pouvoir l'utiliser comme symbole.
\item Premi\`eres matrices.  
\item Quelques dessins.  
\end{itemize}

\bigskip
\hrule
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{listes, modulaires}
Dans xcas (\`a partir de 1.4.9) et sage, on peut cr\'eer des listes automatiquement
avec une syntaxe type python suivante:
\begin{center}
  \verb![ 1/k for k in range(1,11) ]!
\end{center}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%!s!<c>
%--------------------------------EXERCICE-------------------------------------
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% [ 1/k for k in range(1,11) ];
% [seq(1/k, k=1..10)];
dans xcas on pourrait aussi faire de mani\`ere \'equivalente:
\verb![seq(1/k, k=1..10)]!
mais attention, cette fonction a de nombreuses options qui retournent des choses
diff\'erentes\footnote{Ex: r\'eponse entre crochets ou pas} pour des raisons de
compatibilit\'e avec d'autres syntaxes. Si vous l'utilisez tester toujours votre
fa\c con de l'utiliser.
\qu Cr\'eez une liste \verb/L1/ des \'el\'ements non nuls de $\rela/17\rela$.
% L1:=[ k mod 17 for k in range(1,17)]; // mode xcas ou python
% L1:=[ k % 17 for k in range(1,17)]; // mode xcas uniquement
%%
\ifdefined\corrige
\begin{xcasverb}
3>>  L1:=[ k mod 17 for k in range(1,17)];  // mode xcas ou python
[1 % 17,2 % 17,3 % 17,4 % 17,5 % 17,6 % 17,7 % 17,8 % 17,-8 % 17,-7 % 17,-6 % 17,-5 % 17,-4 % 17,-3 % 17,-2 % 17,-1 % 17]
4>>  L1:=[ k % 17 for k in range(1,17)];  // mode xcas uniquement 
[1 % 17,2 % 17,3 % 17,4 % 17,5 % 17,6 % 17,7 % 17,8 % 17,-8 % 17,-7 % 17,-6 % 17,-5 % 17,-4 % 17,-3 % 17,-2 % 17,-1 % 17]
\end{xcasverb}
\fi
%%
\qu Cr\'eez la liste des inverse des \'el\'ements de \verb/L1/
% [ 1/k for k in L1];
%%
\ifdefined\corrige
\begin{xcasverb}
5>>  [ 1/k for k in L1];
[1 % 17,-8 % 17,6 % 17,-4 % 17,7 % 17,3 % 17,5 % 17,-2 % 17,2 % 17,-5 % 17,-3 % 17,-7 % 17,4 % 17,-6 % 17,8 % 17,-1 % 17]
\end{xcasverb}
\fi
%%
\qu En cr\'eant un ensemble, donnez la liste des \'el\'ements du groupe
engendr\'e par $2$ dans $(\rela/17\rela)^\times$.
% L3:=seq( (2 mod 17 )^k, k=0..16);
% L4:=[ (2 mod 17)^k for k in range(17)]
% G:=set[L3]; // la reponse de seq n'a pas de crochets
% G:=set[op(L4)]; // ou bien, on enleve les crochets avec op
%%
\ifdefined\corrige
\begin{xcasverb}
7>>  L3:=seq( (2 mod 17 )^k, k=0..16);
1,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17,1 % 17,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17,1 % 17
8>>  L4:=[ (2 mod 17)^k for k in range(17)]
[1,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17,1 % 17,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17,1 % 17]
9>>  G:=set[L3]; // la reponse de seq n'a pas de crochets
set[1,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17]
10>>  G:=set[op(L4)]; // ou bien, on enleve les crochets avec op
set[1,2 % 17,4 % 17,8 % 17,-1 % 17,-2 % 17,-4 % 17,-8 % 17]
print(
\end{xcasverb}
\fi
%%
%%%%%%%%%%%%%%%% 
\exotitre{(Petits programmes)}
Dans le tutoriel de votre logiciel vous trouverez les syntaxes usuelles de
programmation. Sous Xcas dans une entr\'ee normale on fait Shift+Return pour aller
\`a la ligne sans \'evaluer. Mais pour un programme plus long, il est plus
confortable d'ins\'erer un \'editeur de programme via le menu:
\verb/Programme>Nouveau programme/. Sous Sage, on fait Shift+Return pour \'evaluer
et Return pour aller \`a la ligne sans \'evaluer
\qu Faire l'exercice V de la s\'eance 1.
\ifdefined\corrige
\begin{xcasverb}
sq2:=approx(sqrt(2),10000);

newt(n,d):={
  local u,j;
  u:=approx(2,d);
  for(j:=0;j<n;j++){
    u:=u/2+1/u;
  }
  return u;
}  
\end{xcasverb}
\fi
\ifdefined\corrige
\begin{xcasverb}
54>> newt(5,10);
1.41421356237
/* Il faut augmenter la precision pour que la difference avec sqrt(2) soit non
nulle. Asymptotiquement le nombre de chiffres exacts est multiplie par 2 d'une
iteration sur l'autre. */
55>> seq(floor(log10(abs(newt(k,5000)-sqrt(2)))),k=0..12);
-1,-2,-3,-6,-12,-25,-49,-98,-196,-392,-784,-1568,-3136
// Time 0.43
56>> [ floor(log10(abs(newt(k,5000)-sqrt(2))))  for k in range(13) ]; 
[-1,-2,-3,-6,-12,-25,-49,-98,-196,-392,-784,-1568,-3136]
\end{xcasverb}
\fi

\qu D\'efinir une fonction $g: x \mapsto \sin(x)-x/2$, dessinez son graphe et
cr\'eez un programme \verb/dicho(f,a,b)/ qui cherche une racine d'une fonction $f$ entre
$a$ et$b$ avec $f(a)f(b)<0$. 
%!s!<p>
% dicho(f,a,b,epsi):={
%     local c;
%     while(b-a >epsi){
%       c=(a+b)/2
%       if(f(a)*f(c) <=0){ // ne pas mettre <0 sinon pb avec le cas f(c)=0 
%         b:=c;
%       }
%       else{
%         a:=c;
%       }
%     }
%     return a,b;  
% };
%!s!
%g(x):=sin(x)-x/2;
%dicho(g,-1,1,1e-5); // donne: -1/131072,0
\ifdefined\corrige
\begin{xcasverb}
dicho(f,a,b,epsi):={
    local c;
    while(b-a >epsi){
      c=(a+b)/2
      if(f(a)*f(c) <=0){
        b:=c;
      }
      else{
        a:=c;
      }
    }
    return a,b;  
};
g(x):=sin(x)-x/2;
dicho(g,-1,2,1e-5); // donne: -1/262144,1/524288
dicho(g,-1,1,1e-5); // donne: -1/131072,0
\end{xcasverb}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%!s!<c>
%--------------------------------EXERCICE-------------------------------------
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exotitre{Alg\`ebre lin\'eaire}
\qusqu Dans xcas les vecteurs\footnote{dans sage, type: vector} n'ont pas un type particulier ce sont juste des
listes et se notent entre: \verb/[ ]/. Par exemple, essayez:
\verb!v1:=[j for j in range(1,5)]!   et \verb/v2:=[a,b,c,d]/ et \verb/t*v1+v2/
% v1:=[seq(j,j=1..4)];
% v2:=[a,b,c,d];
% t*v1+v2;
Dans Xcas, les matrices se notent \verb/M:=[[1,2,3,4],[5,6,7,8]]/ ou bien  aussi
\verb/matrix([[1,2,3,4],[5,6,7,8]])/ comme dans Sage. Leur lignes sont
\verb/M[0]/ \verb/M[1]/ ... et les coefficients \verb/M[i,j]/. Dans Xcas si l'on
souhaite des indices commen\c cant \`a 1 au lieu de 0 on utiliser des \verb/M(1)/ au
lieu de \verb/M[0]/

Les vecteurs s'affichent en ligne, mais ce sont bien des vecteurs et non des
matrices lignes. Remarquez la diff\'erence d'affichage entre \verb/[v1]/  et
\verb/v1/, et copiez\footnote{Notez que l'on peut copier une sortie pour en faire
une entr\'ee, m\^eme si l'aspect semble diff\'erent. Ca n'est pas toujours facile de
s\'electionner une sortie \`a cause de la structure d'arbre d'une formule. Control a
selectionne tout} collez la sortie (noire) de \verb/[v1]/ dans une zone
d'entr\'ee pour \'etudier les \verb/[]/.
% M:=[[1,2,3,4],[5,6,7,8]];
% M[0];
% M
% [v1]; // une matrice ligne
\squ Les lois usuelles en alg\`ebre lin\'eaire utilisent encore \verb/+/ et
\verb/*/. Calculez les images de $v_1$ et $v_2$ par $M$ (remarquez que la sortie
est bien un vecteur). Calculez $M_2=M\cdot (^t M)$, $M_2^2$. Comment obtenir rapidement $M_2^n$?
% M*v1; //est bien un vecteur.
% M*v2;
\squ Que fait \verb/v1*v2/?
%v1*v2; // produit scalaire
\squ Remaquez que dans xcas la fonction op\'erande: \verb/op/ permet d'enlever un
niveau de crochets. On ajoute donc une ligne tres facilement sans connaitre les
instructions d\'edi\'ees.
% A:=matrix(4,4)+1;
% v:=[seq(1,j=1..4)];
% [op(A),v]; //on ajoute une ligne facilement.
%A*v;// Attention il retourne une ligne,pour xcas les vecteurs sont en ligne
\qu Une syntaxe tr\`es utile dans Xcas et Sage qu'il faut retenir, est de cr\'eer une matrice \`a partir d'une
fonction\footnote{Attention, dans sage, il faut un programme et non une fonction
symbolique} de deux variables en utilisant \verb/matrix/:
\squ Par exemple, cr\'eez dans votre logiciel la fonction: $f: (x,y) \mapsto
x+10^y$ puis la matrice suivante:
\begin{center}
\verb/matrix(6,6,f);/  
\end{center}
% f:=(x,y)->x+10^y;
% matrix(6,6,f);
% matrix(6,6,(x,y)->x+10^y); 
\squ On souhaite travailler avec un nombre de variables que l'on peut facilement
modifier. On aimerait donc des noms du type $x1,x2,\dots$. Dans
  sage on peut d\'efinir un nouvel anneau de polynomes et injecter les variables
  si besoin. Sous Xcas, une premi\`ere solution est
d'utiliser plutot des noms du type \verb/x[j]/ o\`u \verb/x/ est une lettre
inutilis\'ee. On peut alors cr\'eer la matrice de Vandermonde de taille 6 ainsi:
\begin{xcasverb}
f1(u,v):=x[u]^v;V:=matrix(6,6,f1);
\end{xcasverb}
\squ Si l'on souhaite vraiment\footnote{inutile de perdre trop de temps pour un
  probl\`eme esth\'etique} des noms de variables sans crochets, il faut
savoir convertir une chaine en une variable ou symbole:

Sous Xcas Cf: Aide/R\'ef Cal Form/ Chap 9
%% Sous sage, creer un anneau de polynomes, ou utiliser: var
\begin{xcasverb}
A:="tutu"; // une chaine
A+1; // une chaine
B:=#A; // B et C sont des symboles utilisables pour des calculs
C:=expr(A); // un symbole  utilisable ds un calcul
f2(u,v):=(#("x"+u))^v;
matrix(6,6,f2);
\end{xcasverb}
sous Sage, creer un anneau de polyn\^omes ou utiliser \verb/var/
\squ Calculez le d\'eterminant de Vandermonde formel en taille 6x6 et factorisez le.
% V:=matrix(6,6,(k,l)->x[k]^l);
% dv:=det(V);
% factor(dv);
\squ Lorsqu'il y a beaucoup de variables et que la taille de la matrice n'est
pas trop grande, le calcul du d\'eterminant par la m\'ethode des mineurs s'av\`ere
plus efficace (Je ne sais pas si c'est possible sous Sage). En d\'eduire un moyen
d'obtenir le d\'eterminant de Vandermonde en
taille 8x8, puis factorisez le. (pour les calculs longs on a int\'er\^et \`a stocker
d'abord le d\'eterminant puis tenter de factoriser.)
%f2(u,v):=(#("x"+u))^v;
%V8:=matrix(8,8,f2);
%d8:=det_minor(V8); // en taille 8x8 seule cette methode abouti
%factor(d8);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{center}
  {\it Pour la syntaxe  de programmation, regardez le tutoriel dans le menu:
    Aide/D\'ebuter en Calcul Formel}
\end{center}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%!s!<c>
%--------------------------------EXERCICE-------------------------------------
%!s!
\exotitre{blocs, polyn\^omes, matrices nilpotentes}
\qu ({\bf Matrices par blocs})
\squ Cr\'eez une fonction \verb/JJ(n)/ qui retourne une matrice de taille $n\times
n$ ayant pour seuls termes non nuls des $1$ sur la droite $ j-i=1$.
% fjj:=(ii,j)->if(ii=j-1) then 1 else 0 fi;
% JJ(n):=matrix(n,n,fjj);//forme classique d'ordre n.
% JJ(5);
\squ {\sc Mini programme}. (Sous xcas on pourra utiliser/d\'ecouvrir l'\'editeur de
programme, et regarder le tutoriel).

Cr\'eez une fonction \verb/J(L)/ qui associe \`a une liste d\'ecroissante d'entiers
naturels non nuls \verb/L/ \footnote{exemple: [2,2,1,1]}, une
matrice diagonale par blocs constitu\'es des \verb/JJ(n)/ correspondants. On cherchera
une instruction pour construire des matrices diagonales par blocs, et l'on
v\'erifiera que la suite est bien d\'ecroissante.
% Jbasic(L):=diag([seq(JJ(l),l=L)]);//l parcourt la liste L
% Jbasic([3,2,2,1]);
% !s!<p>
% J(L):={
%   local j,n;
%   a:=L[0];
%   n=size(L);
%   for(j:=0;j<n-1;j++){
%     if(L[j]<L[j+1]){return "Erreur";}
%   }
%   return diag([seq(JJ(l),l=L)]);
% }
%!s!
%J([3,2,1,1]);
\squ Etudiez sur divers exemples les rangs et noyaux des puissances de \verb/J(L)/ en fonction
de $L$. Conclusion?
%!s!<c>
%Comme chaque bloc a un noyau de dimension 1 et qu'ils sont en somme directe,
% La dimension du noyau de J(L) est le nombre de blocs.
%!s!
% ker(J([3,2]));
% length(ker(J([3,2])));
% rank(J([3,3]));
\qu ({\bf Matrices et polyn\^omes}) Cette ann\'ee, nous aurons souvent besoin de trouver des
matrices d'applications d\'efinies par des polyn\^omes.
\squ Cr\'eez une fonction \verb/M(P,Q)/ qui aux deux polyn\^omes $P,Q$ en la variable
$x$ associe la matrice dans la base canonique $(1,x,\dots, x^{\deg(Q)-1})$ de l'application:
$$
\begin{array}[c]{ccc}
  \ratio[x]/(Q) & \longrightarrow & \ratio[x]/(Q) \\
  R     & \mapsto & R\cdot P
\end{array}
$$
Indications: on cherchera une fonction qui donne \`a $i$ fix\'e le coefficient de $x^i$
dans un polynome en $x$ plut\^ot que de convertir des polyn\^omes en
liste. (Pourquoi? quelle serait la longueur de la liste pour $1+x^3, 2+x,\dots$ ?)
%!s!<p>
%Mv1(P,Q):={
%   local M,u,v,n;
%   n:=degree(Q,x); // on precise la variable c'est plus prudent
%   M:=matrix(n,n); // on cree une matrice nulle
%   for(v:=0;v<n;v++){
%       R:=rem(x^v*P,Q,x); // reste de la division par Q
%       for(u:=0;u<n;u++){
%          M[u,v]:=coeff(R,x,u);
%       };
%     };
%   return(M);
%}
%!s!
%Mv1(x+2,x^4-1);
%!s!<p>
%M(P,Q):={
%   local n,f;
%   n:=degree(Q,x);
%   f:=(u,v)->{
%      coeff(rem(x^v*P,Q,x),x,u);
%   }
%   return(matrix(n,n,f));
%};
%!s!
% M(x+2,x^4-1);
\squ V\'erifiez que $M(x+2,x^4-1)$ vaut: $\left(\begin{array}{cccc}
2 & 0 & 0 & 1 \\
1 & 2 & 0 & 0 \\
0 & 1 & 2 & 0 \\
0 & 0 & 1 & 2
\end{array}\right) $
\qu On consid\`ere la matrice $N=M(P,Q)$ o\`u :
$$P=x^{5}-2\cdot x^{4}+x^{3}-2\cdot x^{2}-2\cdot x+4$$
$$Q=\left(x^{2}-1\right)^{2} \left(x^{2}+2\right)^{5} (x^{3}-5\cdot x^{2}+8\cdot x-4)$$
% P:=x^5-2*x^4+x^3-2*x^2-2*x+4;
% Q:=(x^2-1)^2*(x^2+2)^5*(x^3-5*x^2+8*x-4)
% N:=M(P,Q);
\squ Quel est le polyn\^ome caract\'eristique de $N$? (NB: l'instruction directe est
plus efficace que $\det(A-x.I)$. Quel est le polyn\^ome minimal de $N$?
% pcar(N,x); // N est nilpotente
% pmin(N,x); // N est d'ordre 5
\squ Comment obtient t'on une base du noyau de $N$? Par exemple, comment
calculer la somme du second et troisi\`eme vecteur de cette base? Comment obtenir la dimension du noyau
de $N$? (On cherchera une technique qui fonctionne aussi pour les applications
injectives)
% N1:=ker(N);
% size(N1);// il y a donc 5 blocs
% size(ker(idn(5)));// donne bien 0 alors que rowdim([]) donne une erreur. 
\squ En demandant au logiciel de calculer des rangs de certaines matrices, d\'eterminer
l'unique $L$ pour que  $J(L)$ et  $N$ puissent \^etre semblable. (On rappelle que
l'on impose \`a $L$ d'\^etre d\'ecroissante \`a valeur dans $\nat^*$, et on n'utilisera
pas de commande de Jordanisation du logiciel)
%!s!<c>
% la difference des dimensions des noyaux de N^(k+1) et N^k est le nombre
% de blocs de jordan de taille au moins k
%!s!
%seq(size(ker(N^(k+1)))-size(ker(N^k)),k=0..4);// donc N semblable a J([5,5,3,2,2])
%J55322:=J([5,5,3,2,2]);
%seq(size(ker(J55322^(k+1)))-size(ker(J55322^k)),k=0..4);// donc N semblable a J([5,5,3,2,2])
%%\squ Combien y a t'il de possibilit\'es en taille $17$ pour $J$? On pourra v\'erifier
%%avec $\prod_{n\geq 1}\frac{1}{1-t^n} $
\squ Donnez une base de $\ker N^4$, et choisissez deux vecteurs $a_1,a_2$ de $\ker N^5$
ind\'ependants modulo $\ker N^4$. Que devez vous demander au logiciel pour prouver que
$a_1,a_2$ conviennent?
%N4:=ker(N^4);// N4[0],...N4[14] forment une base de ker(N^4)
%a1:=[1,0$16];// essayons deja ces deux vecteurs
%a2:=[0,1,0$15];
%verifN4:=[seq(j,j=N4 ),a1,a2];
%!s!<c>
%Pour montrer que a1,a2 est libre modulo ker(N^4) on montre que a1,a2 complete
%une base de ker(N^4) en une base de QQ^17
%!s!
%rank(verifN4)==17;// oui, donc a1,a2 est libre modulo ker(N^4)
\squ Prenez un vecteur $a_3$ dans $\ker N^3$ tel que $N^2(a_1),N^2(a_2),a_3$ soient
ind\'ependants modulo $\ker N^2$ (Prennez en un au hazard et  prouvez avec votre
logiciel que votre choix de $a_3$ est l\'egitime).
%N3:=ker(N^3);
%a3:=N3[0];// essayons le premier, sinon il faut faire une combi lineaire
%N2:=ker(N^2);
%verifN3:=[seq(j,j=N2),N^2*a1,N^2*a2,a3];
%rank(verifN3)==size(N3);//vrai
\squ Prenez deux vecteurs $a_4,a_5$ de $\ker(N^2)$ tels que
$N^3(a_1),N^3(a_2),N(a_3),a_4,a_5$ soient libres modulo $\ker(N)$.
%a4:=N2[0];
%a5:=N2[1];
%N1:=ker(N); size(N1);
%verifN2:=[seq(j,j=N1),N^3*a1,N^3*a2,N*a3,a4,a5];
%rank(verifN2)==size(N2);//si on a des a4 a5 qui ne marchent pas on peut faire ainsi:
%[a4,a5]:=ranm(2,size(N2))*N2;// on prend donc une combinaison lineaire random deslignes
%verifN2:=[seq(j,j=N1),N^3*a1,N^3*a2,N*a3,a4,a5];
%rank(verifN2)==size(N2);
%
\squ On consid\`ere la famille de vecteurs
$$N^4(a_1),\dots,N(a_1),a_1,N^4(a_2),\dots,N(a_2),a_2,N^2(a_3),\dots,a_3,N(a_4),a_4,N(a_5),a_5.$$
V\'erifiez\footnote{vu que l'on a fait les v\'erifications pr\'ec\'edentes, on pourrait d\'emontrer que
  cette derni\`ere v\'erification est inutile}
que c'est une base de $\ratio^{17}$. Donnez ma matrice $P_N$ de passage associ\'ee,
et conjuguez $N$ pour obtenir une matrice de type \verb/J(L)/.
%tP:=[seq(N^k*a1,k=4..0),seq(N^k*a2,k=4..0),seq(N^k*a3,k=2..0),seq(N^k*a4,k=1..0),seq(N^k*a5,k=1..0)];
%P:=transpose(tP);// car la matrice de passage veut les coord des vecteurs en colonne
%rank(P);
%P^(-1)*N*P==J([5,5,3,2,2]);// Elles sont bien semblables
%

\end{document}
