\documentclass{tp-caml}


\tp{
  title={Matrices},
  number=Second TD de maple,
  date=Vendredi 19 octobre 2012,
  class=MP1
}

\begin{document}

\newenvironment{maple}{
  \small
  \verbatim
}{\endverbatim}

\begin{corpus}
\section{Se familiariser avec les matrices}
\begin{exo}
Charger le package \texttt{LinearAlgebra} avec \texttt{with(LinearAlgebra);}.
\end{exo}

\begin{sol}
with(LinearAlgebra);
\end{sol}

\begin{exo}
Créer deux matrices A et B $3\times3$ de votre choix avec la fonction \texttt{Matrix}.
\end{exo}

\begin{sol}
A:=Matrix(3,3,[2,23,57,18,6,4,90,32,17]);
B:=Matrix(3,3,[65,37,94,33,96,73,4,49,59]);
\end{sol}

\begin{exo} Créer astucieusement une matrice identité, une matrice diagonale. \end{exo}

\begin{sol}
I:=IdentityMatrix(3);
\end{sol}

\begin{exo} Créer une superbe matrice C $10\times10$ aléatoirement remplie par Maple.\end{exo}

\begin{sol}
C:=RandomMatrix(10);
\end{sol}

\begin{exo} Les objets \texttt{Matrix} sont mutables : pour les copier, il faut utiliser la
          commande \texttt{copy} et non pas faire une simple assignation \texttt{:=}.
          Copier A dans D.\end{exo}

\begin{sol}
d:=copy(A);
\end{sol}

\begin{exo} Comparer les matrices A et B d'une part, A et D d'autre part, à l'aide de la
          fonction \texttt{Equal} \end{exo} 

\begin{sol}
Equal(A,d);
Equal(A,B);
\end{sol}

\begin{exo} Expérimentez les opérations matricielles~: addition, produit par un scalaire,
          produit matriciel (avec l'opérateur \texttt{.}), exponentiation, opérations
          sur chaque coefficient (fonction \texttt{Map}). \end{exo} 

\begin{sol}
A+B;
A*2+B;
A.B;
Matrix(2,2,[0,1,1,1])\^10;
Map(x->x\^3,A);
\end{sol}

\begin{exo} Extraire le bloc $4\times4$ en haut à gauche de C.\end{exo} 

\begin{sol}
C[1..4,1..4];
\end{sol}


\begin{exo} Calculer les traces de A et C.\end{exo}

\begin{sol}
Trace(A);Trace(C);
\end{sol}

\begin{exo} Calculer les déterminants de A et C.\end{exo}

\begin{sol}
Determinant(A);
\end{sol}

\begin{exo} Calculer les inverses de A et C (si possible, si pas possible changer A et C).\end{exo}

\begin{sol}
A\^(-1);C\^(-1);
\end{sol}

\begin{exo} Effectuer un pivot de Gauss sur C.\end{exo}

\begin{sol}
with(linalg); 
gausselim(C);
\end{sol}

\begin{exo} Calculer la transposée de C.\end{exo}

\begin{sol}
transpose(C);
\end{sol}

\begin{exo} Calculer les rangs de A et C.\end{exo}

\begin{sol}
rank(A);rank(C);
\end{sol}

\begin{exo} Calculer les noyaux de A et C.\end{exo}

\begin{sol}
NullSpace(A);NullSpace(C);
\end{sol}

\begin{exo} Calculer les images de A et C (hint~: en anglais, l'image est le column space).\end{exo}

\begin{sol}
ColumnSpace(A);ColumnSpace(C);
\end{sol}


\begin{exo} Calculer les polynômes caractéristiques de A et C.\end{exo}

\begin{sol}
Determinant(A-X.IdentityMatrix(3));\\
Determinant(C-X.IdentityMatrix(10));
\end{sol}

\begin{exo} Calculer les polynômes minimaux de A et C.\end{exo}

\begin{sol}
MinimalPolynomial(A,x);\\
MinimalPolynomial(C,x);
\end{sol}

\begin{exo} Calculer les valeurs propres et vecteurs propres de A et C (une valeur
          propre en anglais, c'est une eigen value).\end{exo}

\begin{sol}
Eigenvalues(A);\\
Eigenvectors(A);\\
Eigenvalues(C);\\
Eigenvectors(C);
\end{sol}

\begin{exo} Diagonaliser A et C si possible (ou trouver une jolie matrice à diagonaliser) à
l'aide de la fonction \texttt{JordanForm}~: \texttt{D,P := JordanForm(A, output = [’J’,’Q’]);}
donne D et P tels que $A = P^{-1} D P$ si A est diagonalisable. Notons que la même chose
marche pour la trigonalisation.
\end{exo}

\begin{sol}
JordanForm(A,output = ['J','Q']);
\end{sol}

\begin{exo} Calculer la matrice adjointe de C.\end{exo}

\begin{sol}
Adjoint(C);
Adjoint(C).C;
\end{sol}

\begin{exo} Expérimenter la résolution de problèmes du type $Ax = b$, $A$ et $b$ fixés,
          avec la fonction \texttt{LinearSolve}.
\end{exo}

\begin{sol}
LinearSolve(<{}<0,1>|<1,1>{}>,<8,13>);
\end{sol}

\begin{exo} Noter qu'on peut bien évidemment faire tout ça avec des variables formelles en
          lieu et place des nombres.
\end{exo}

\begin{sol}
LinearSolve(<{}<0,1>|<1,1>{}>,<X,Y>);
\end{sol}

\begin{exo} Lire la doc du package \texttt{LinearAlgebra}. Comment ça, c'est déjà fait ?
\end{exo}
\bigskip

\section{De la pratique}
\begin{exo} Donner une base du sous-espace de $\mathbb{R}^5$ défini par~:
\[
\begin{cases}
 x_1   + 2 x_2 - x_3 +  3 x_4 +  x_5 = 0 \\
       ~    x_2 + x_3 -  2 x_4 +  2 x_5  = 0 \\
2 x_1 +   x_2 - 5 x_3  ~  ~  -  4 x_5 = 0 
\end{cases}
\]
\end{exo}

\begin{sol}
NullSpace(<{}<1,0,2>|<2,1,1>|<-1,1,-5>|<3,-2,0>|<1,2,-4>{}>);

$\begin{pmatrix}
3 & 3 \\
-2 & -1 \\
0  & 1 \\
0 & 0 \\
1 & 0 
\end{pmatrix}$

\end{sol}

\bigskip

\section{De la dynamique}
\begin{exo} Implémenter une fonction donnant la plus grande sous-suite
croissante d'une suite de $n$ entiers. Par exemple, pour la suite
$3,1,6,2,5,3,9,8,4,9,1,7,2,10$, cette sous-suite est $1,2,3,4,7,10$. On
pourra, dans un premier temps, ne s'intéresser qu'à la longueur de cette
sous-suite. Dans les deux cas, la fonction devra s'effectuer en $O(n^2)$
opérations.
\end{exo}

\begin{solc}
pluslongue := proc(v, n, min)
local p1,p2;
option remember;
  if(n>nops(v)) then
    return op([]);
  else
    if(v[n]<=min) then
      return pluslongue(v,n+1,min);
    else
      p1 := pluslongue(v,n+1,min);
      p2 := v[n],pluslongue(v,n+1,v[n]);
      if(nops([p1])>nops([p2])) then
        return p1;
      else
        return p2;
      fi;
    fi;
  fi;
  return 42;
end;
pluslongue([3, 1, 6, 2, 5, 3, 9, 8, 4, 9, 1, 7, 2, 10],1,-1);  
\end{solc}

\end{corpus}


\end{document}



