\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
%%macros taille page
\newlength{\elargir}
\setlength{\elargir}{2cm}
\addtolength{\leftmargin}{-\elargir}
%%\addtolength{\hoffset}{-\elargir}
\addtolength{\oddsidemargin}{-\elargir}
\addtolength{\evensidemargin}{-\elargir}
\addtolength{\elargir}{\elargir}
\addtolength{\textwidth}{\elargir}
\addtolength{\textheight}{13\baselineskip}
\topmargin=-4\baselineskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
\everymath={\displaystyle}
\begin{document}
\noindent{\bf Universit\'e de Paris 7 \hfill \framebox{\Large \bf
    \hspace{ 1cm} TP01: Alg\`ebre Lin\'eaire \hspace{1cm}}\hfill   agreg 2016-2017 (F.Han\url{http://www.imj-prg.fr/~han/agreg})}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%%
\columnsep 0.7cm
%% \begin{multicols}{2}
\exotitre{(A savoir, cf. TP00)}
\qu 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/?
\qu Lib\'erer une variable pour pouvoir l'utiliser comme symbole.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%!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:=[seq(j,j=1..4)]!   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;
Les matrices se notent \verb/M:=[[1,2,3,4],[5,6,7,8]]/ et leur lignes sont
\verb/M[0]/ \verb/M[1]/ ... et les coefficients \verb/M[i,j]/

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 $M2=M\cdot (^t M)$, $M2^2$. Comment obtenir rapidement $M2^n$?
% M*v1; //est bien un vecteur.
% M*v2;
\squ Que fait \verb/v1*v2/?
%v1*v2; // produit scalaire
\qusqu   En utilisant une instruction qui cr\'ee des listes automatiquement
(ex pour xcas: \code{seq}) et une instruction pour cr\'eer des matrices diagonales par blocs,
cr\'eer une matrice diagonale de valeurs propres $1,2,3,4$.
% diag(seq(1,4)); diag(1$4); // l'identite
% diag(seq(j,j=1..4));
\qusqu Essayer/commenter\footnote{idem dans xcas et sage}
\linebreak\code{A:=matrix(4,4)+1;}
\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),op(v)]; //ajoute une ligne facilement.
%A*v;// Attention il retourne une ligne,pour xcas les vecteurs sont en ligne
\qu Une syntaxe tr\`es utile et \`a retenir est de cr\'eer une matrice \`a partir d'une
fonction de deux variables en utilisant\footnote{idem dans sage} \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$. Sous\footnote{Dans
  sage d\'efinir un nouvel anneau de polynomes} 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{center}
\verb/f1(u,v):=x[u]^v;V:=matrix(6,6,f1);/  
\end{center}
\squ Si l'on souhaite vraiment des noms de variables sans crochets, il faut
savoir convertir une chaine en une variable ou symbole:

Cf: Aide/R\'ef Cal Form/ Chap 9
%% Sous sage, creer un anneau de polynomes, ou utiliser: var
\begin{verbatim}
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{verbatim}

\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. 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{Introduction aux matrices nilpotentes}
\qu 
\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]));
\qusqu 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$. 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
%
\exo
On a souvent besoin d'obtenir "au hasard" une matrice \`a coefficients entiers de
d\'eterminant $1$. (Par
exemple pour cr\'eer un exemple ou un exercice avec un type de r\'eponse voulu). Quel
r\'esultat sur $SL_n(\rela)$ va nous \^etre utile?
%!s!<c>
%SL_n(Z) est engendre par les transvections. Cf operations ligne/colonne 
%!s!
\qusqu Cr\'eer une fonction \verb/T(a,b,l,n)/ qui retourne la matrice carr\'ee de
taille $n$ avec des $1$ sur la diagonale, telle que $T_{a,b}=l$ si $a\neq b$ et
que $T$ ait des $0$ ailleurs. (le plus
simple est probablement de partir de l'identit\'e et de modifier un coefficient ).
Quel est l'inverse de la matrice \verb/T(a,b,l,n)/?
%!s!<m>
% T(a,b,l,n):={
%     local M ;
%     M:=idn(n);
%     if(a !=b){ M[a,b]:=l};
%     M;};
%!s!
% T(2,3,l,5);
\squ V\'erifiez que votre variable \verb/a/ est bien libre\footnote{comment la lib\'erer?}, et cr\'eez la matrice
$5\times 5$ \verb/A/ de coefficients \verb/a[i,j]/ avec $0\leq i,j \leq n-1$. Et
illustrez/commentez le lien entre une op\'etation ligne ou colonne et $T$.
% purge(a);// ou bien:
% a:='a';//NB: 'a' est la forme inerte, "a" est la chaine de caracteres.
% A:=matrix(5,5,(u,v)->a[u,v]);
\qu En d\'eduire comment obtenir un \'el\'ement de $SL_n(\rela)$ "au hasard" un peu compliqu\'e.
%!s!<p>
%randSL(n):={
% local j,m,M,a,b,l;
% m:=rand(15*n);//pour ne pas avoir trop de zeros selon n.
% M:=idn(n);
% for(j:=0;j<m;j++){
%    a:=rand(n);b:=rand(n);l:=rand(2*n)-n;
%     M:=M*T(a,b,l,n);
% }
%M;}
%!s!
%M:=randSL(10);det(M);

\end{document}
