%\RequirePackage{atbegshi}
\documentclass[french]{beamer}
\usepackage{etex}

\usepackage[beamer,utf8x]{preambuleTrm}



\usepackage{iwona}


\mode<presentation>
{
  %\usetheme{Bergen}%Montpellier}
  % or ...Frankfurt, 
  \usetheme[secheader]{Madrid}

  \setbeamercovered{highly dynamic}
  % or whatever (possibly just delete it)
  \usefonttheme{progressbar}
  \useoutertheme{progressbar}
  %\useinnertheme{progressbar}
  \progressbaroptions{% titlepage=normal,
    imagename=/home/moi/Photos/Maths/brazilian
}
}

\usepackage{elephantbird}


%\usepackage[french,vlined,boxed]{algorithm2e}
\usepackage{bookmark,multido}
%\usepackage{xlop}

\ifpdf \DeclareGraphicsRule{*}{mps}{*}{} \fi
\usepackage{tikz}
\usetikzlibrary{automata,fit,trees,matrix,arrows,decorations.pathmorphing,shapes,arrows,chains,positioning,intersections,backgrounds,calc,through,mindmap,shadows,patterns}
\newcommand{\myunit}{1.1cm}
\usepackage{tkz-graph}
\usepackage{circuitikz}
\hypersetup{pdfpagemode=FullScreen}

\usepackage[detect-all]{siunitx}

\usepackage{caption}
\captionsetup{labelformat=empty,font=footnotesize}

\usepackage{scalefnt}

%\usepackage{multimedia}
% \usepackage{cclicenses}
% \usepackage{cclicence}
\setbeamertemplate{theorems}[numbered]

\usepackage[square]{daedale}
\bibliographystyle{cyclope}


\usepackage{algo}

\renewcommand{\algocommentfont}{\tiny\ttfamily\itshape}


\newtheorem{exercice}{Exercice}


\setlength{\columnseprule}{0pt}

%\setlength{\parskip}{0pt}


\graphicspath{{/home/moi/IUT/Figures/}{/home/moi/VISA_III/figures_visa/}{/home/moi/Lycee/TDmaple/2006_7/}{/home/moi/Figures/Arbres_Graphes/}{/home/moi/Figures/FigSTI/}{/home/moi/Figures/FigMaple/}{/home/moi/Photos/Maths/}{/home/moi/Photos/Tehessin/}{/home/moi/Figures/FigSTI/}{/home/moi/Figures/FigSeconde/}{/home/moi/Lycee/Informatique/XCAS/2008_9/}{/home/moi/Lycee/TDmaple/2008_9/}{/home/moi/IUT/Thierry/Conversions/}{/home/moi/Photos/informathix/}{/home/moi/Lycee/Informatique/PafAlgo/}{/home/moi/Figures/figuresAlice/}{/home/moi/Figures/FigSeconde/}{/home/moi/Biocam/robot/}{/home/moi/Biocam/CoursIni3d/}{/home/moi/Biocam/central/figures/}{/home/moi/Biocam/central/}{/home/moi/IUT/INFO2/Images/}{/home/moi/IUT/INFO2/2011_12/graphes/}{/home/moi/IUT/INFO1/CM1/}{/home/moi/Figures/figuresTS/}{/home/moi/Photos/Tehessin/}{/home/moi/Figures/FigSTI/}{/home/moi/Alice/figures3/}{/home/moi/Alice/figures3/newcourbes/}{/home/moi/Alice/figures/}{/home/moi/Figures/figuresAlice/}{/home/moi/Photos/Maths/}{/home/moi/Lycee/TS/}{/home/moi/Lycee/TS/2009_10/}{/home/moi/Figures/FigMaple/}{/home/moi/Figures/figuresTS/newcourbes/}{/home/moi/Figures/FigEspace/}{/home/moi/PROG/HASKELL/FLOAT/}{/home/moi/PREPA/IPT/2014_15/Poly/}{/home/moi/PROG/PYTHON/Matrix/}}




\setcounter{tocdepth}{2} %\setcounter{page}{0}


\newcommand{\triangleup}{\Delta}

















\begin{document}


\title[]% (optional, use only with long paper titles)
{Programmation et algèbre linéaire}

\subtitle{INFO1 - semaines 47 à 48}

\author[] % (optional, use only with lots of authors)
{Guillaume CONNAN }
% - Give the names in the same order as the appear in the paper.
% - Use the inst{?} command only if the authors have different
%   affiliation.

\institute{\textsc{Iut} de Nantes - Dpt d'informatique}% (optional, but mostly needed)

\logo{\includegraphics[width=0.1\textwidth]{logo_iut}}

%\logo{\includegraphics[scale=0.15]{big_connan}}

\date[] % (optional, should be abbreviation of conference name)
{novembre 2015}
% - Either use conference name or its abbreviation.
% - Not really informative to the audience, more for people (including
%   yourself) who are reading the slides online

\subject{ }


\beamerdefaultoverlayspecification{<+->}

% \AtBeginSubsubsection[]
% {
%   \begin{frame}<beamer>
%     \frametitle{Sommaire}
%  {\scriptsize
% \begin{multicols}{2}
%     \tableofcontents[currentsection,currentsubsection]
%        \end{multicols}
% }

%   \end{frame}
% }




\AtBeginSubsection[]
{\scriptsize
  \begin{frame}<beamer>
    \frametitle{Sommaire}
 {\tiny
\begin{multicols}{2}
    \tableofcontents[currentsection,currentsubsection]
       \end{multicols}
}

  \end{frame}
}





\AtBeginSection[]
{
  \begin{frame}<beamer>
    \frametitle{Sommaire}
 {\scriptsize
\begin{multicols}{2}
    \tableofcontents[currentsection]
       \end{multicols}
}

  \end{frame}
}


% If you wish to uncover everything in a step-wise fashion, uncomment
% the following command: 

\beamerdefaultoverlayspecification{<+->}




\newcommand{\TR}{\mathcal{T}}


\begin{frame}
%\ThisCenterWallPaper{1}{logoiremBigInv}
 \Large \titlepage 
\end{frame}

\begin{frame}
 \frametitle{Sommaire}
{\scriptsize
\begin{multicols}{2} 
 \tableofcontents
\end{multicols}
}

 
 \end{frame}

\normalsize


\section{Vecteur}

\begin{frame}
  
%\begin{figure}
\begin{center}
  \includegraphics[width=\linewidth]{vect_moustique}
\end{center}
%\end{figure}

\end{frame}

\begin{frame}
  \textit{Du latin vector, dérivé de veho (« transporter »)}

\pause


\textit{Organisme qui ne provoque pas lui-même une maladie mais qui disperse l'infection en transportant les agents pathogènes d'un hôte à l'autre. }

\end{frame}



\begin{frame}
  
%\begin{figure}
\begin{center}
  \includegraphics[height=0.9\textheight]{grassmann}
\end{center}
%\end{figure}

\end{frame}




\begin{frame}
  
%\begin{figure}
\begin{center}
  \includegraphics[height=0.6\textheight]{grassmann2}
\end{center}
%\end{figure}

\end{frame}


\begin{frame}
  
%\begin{figure}
\begin{center}
  \includegraphics[width=0.85\linewidth]{hamilton_stone}
\end{center}
%\end{figure}

\end{frame}






%
\begin{frame}
  \begin{center}
  \includegraphics[height=0.8\textheight]{marystein21}
\end{center}

\pause

$3\times      \text{Marylin}      +
 \text{Albert}$

\end{frame}

%
\begin{frame}
  \begin{center}
  \includegraphics[height=0.8\textheight]{marystein11}
\end{center}

\pause

$   \text{Marylin}    +
      \text{Albert}$

\end{frame}




%
\begin{frame}
  \begin{center}
  \includegraphics[height=0.8\textheight]{marystein13}
\end{center}


\pause

$ \text{Marylin} + 3\times\text{Albert}$
\end{frame}



\begin{frame}[fragile]\frametitle{Complexe comme la donnée de deux réels}
\begin{pythoncode}
class Complex:
    def __init__(self, reel, imag=0.0):
        self.reel = reel
        self.imag = imag  
\end{pythoncode}
\end{frame}


\begin{frame}[fragile]\frametitle{Complexe comme la donnée de deux réels}
  Il y a une loi de groupe pour les additionner:

\begin{pythoncode}
def __add__(self, other):
        return Complex(self.reel + other.reel, self.imag + other.imag)  
\end{pythoncode}

\pause


\begin{pythoncode}
In [28]: Complex(1,2) + Complex(4,10)
Out[28]: Complex(5, 12)
\end{pythoncode}



\end{frame}



\begin{frame}[fragile]\frametitle{Complexe comme la donnée de deux réels}
Il y a une loi de composition \textbf{\textit{externe}} pour multiplier un complexe par un réel:

\begin{pythoncode}
def __mul__(self, k):
            return Complex(self.reel*k, self.imag*k)  
\end{pythoncode}

\pause

\begin{pythoncode}
In [29]: Complex(1,2) * 3
Out[29]: Complex(3, 6)  
\end{pythoncode}


\pause


\begin{pythoncode}
In [30]: Complex(1,2) * 3 + Complex(5,7)
Out[30]: Complex(8, 13)  
\end{pythoncode}


\end{frame}





\begin{frame}[fragile]

\begin{pythoncode}
image = 3*marylin + einstein
imshow(image, cmap = cm.gray)
\end{pythoncode}


 \begin{center}
  \includegraphics[height=0.8\textheight]{marystein21}
\end{center}

\end{frame}






%
\begin{frame}
  \begin{definition}[$\bbk$-espace vectoriel]
Un $\bbk$-espace vectoriel $V$ sur un corps commutatif $\langle \bbk,\oplus,\odot\rangle$ est un groupe
abélien  $\langle V,\dagger\rangle$  muni  d'une  loi de  composition
\textit{externe}  $\cdot$  de  $\bbk\otimes V$  dans  $V$  vérifiant
les  quatre  axiomes  suivant,  $\lambda$ et  $\mu$  désignant  des  scalaires
quelconques, $\mathbf{u}$ et $\mathbf{v}$  des vecteurs quelconques et
$1_\odot$ l'élément neutre de la loi $\odot$ sur $\bbk$:

\begin{tabular}{ll}
  $(\lambda\oplus \mu)\cdot \mathbf{u}=\lambda\cdot\mathbf{u}\dagger \mu\cdot\mathbf{u}$ &(distributivité
    vectorielle);\\
  $\lambda\cdot(\mathbf{u}\dagger\mathbf{v})=\lambda\cdot\mathbf{u}\dagger \lambda\cdot\mathbf{v}$ &(distributivité
    scalaire);\\
 $(\lambda\odot \mu)\cdot\mathbf{u}=\lambda\cdot(\mu\cdot\mathbf{u})$ &(associativité);\\
 $1_\odot\cdot\mathbf{u}=\mathbf{u}$ &(axiome d'identité)\\
\end{tabular}

On dit que le corps $\bbk$ \textit{opère} sur le groupe  $\langle V,\dagger\rangle$.
 
\end{definition}



\end{frame}



\subsection{Vecteur-séquence}


\begin{frame}[fragile]\frametitle{Une classe Vecteur}
\begin{pythoncode}
class Vecteur:
    def __init__(self, *composantes):
        self.composantes = composantes

    def __str__(self) :
        return str(tuple([c for c in self.composantes]))

    def __repr__(self) :
        return 'Vecteur' + str(self)  
\end{pythoncode}


\end{frame}





\begin{frame}[fragile]\frametitle{Une classe Vecteur}
\begin{pythoncode}
 def __add__(self, other) :
        c1, c2 = self.composantes, other.composantes
        l1, l2 = len(c1), len(c2)
        assert l1 == l2, "Tailles incompatibles"
        s = ....????
        return Vecteur( *(x for x in s) )  
\end{pythoncode}
\pause


\begin{pythoncode}
In [37]: Vecteur(1,2,3,4,12) + Vecteur(2,41,10,-1,0)
Out[37]: Vecteur(3, 43, 13, 3, 12)  
\end{pythoncode}


\end{frame}




\begin{frame}[fragile]\frametitle{Une classe Vecteur}
\begin{pythoncode}
In [36]: Vecteur(1,2,3,4) + Vecteur(2,41,10,-1,0)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-36-86a61c4cf67e> in <module>()
----> 1 Vecteur(1,2,3,4) + Vecteur(2,41,10,-1,0)

/home/moi/PROG/PYTHON/Matrix/vector.py in __add__(self, other)
     12     #     return Complex(-self.reel, -self.imag)
     13 
---> 14 
     15     # def __sub__(self, other):
     16     #     return self + (- other)

AssertionError: Tailles incompatibles  
\end{pythoncode}


\end{frame}




\begin{frame}[fragile]\frametitle{Une classe Vecteur}
\begin{pythoncode}
    def __mul__(self, k) :
        return ????

    def __neg__(self) :
        return ????

    def __sub__(self, other) :
        return ????

    def __eq__(self, other):
        ???
\end{pythoncode}


\end{frame}




\begin{frame}
  Cette classe peut s'appliquer à toute classe ayant une structure de corps.

\pause

Définissez une classe pour représenter le corps $\bbf_2$

\end{frame}


\begin{frame}[fragile]
\begin{pythoncode}
class F2:
    def __init__(self,val) :
        assert val in {0,1}, "Le représentant doit être dans {0,1}"
        self.val = val

    def __str__(self) :
        return 'O' if self.val == 0 else 'I'

    def __repr__(self) :
        return str(self)

    def __add__(self, other) :
        return ???????????

    def __mul__(self, other) :
        return ??????????

    def __neg__(self) :
        return ???????????

    def __sub__(self, other) :
        return ???????????

    def __truediv__(self, other) :
        ??????????
        return ?????????
\end{pythoncode}
\end{frame}


\begin{frame}[fragile]
Alors :

\begin{pythoncode}
In [61]: v1 = Vecteur(F2(0), F2(1), F2(1), F2(1))

In [62]: v1
Out[62]: Vecteur(O, I, I, I)

In [63]: v2 = Vecteur(F2(1), F2(1), F2(0), F2(1))

In [64]: v2
Out[64]: Vecteur(I, I, O, I)

In [65]: v1 + v2
Out[65]: Vecteur(I, O, I, O)
\end{pythoncode}
\end{frame}


\subsection{Produit scalaire / Vecteur-fonction}

\begin{frame}\frametitle{Produit scalaire}
  
Soit deux vecteurs $\mathbf{u}$ et $\mathbf{v}$ de $\bbk^n$.

Alors le produit scalaire de ces deux vecteurs est défini par:

$$\mathbf{u}\cdot_{\bbk^n}\mathbf{v}=\sum_{k=1}^n\mathbf{u}[k]\times_{\bbk} \mathbf{v}[k]$$

\pause

\begin{block}{NB}
Le produit scalaire de deux vecteurs est un...scalaire et surtout pas un vecteur.
\end{block}

\end{frame}




\begin{frame}\frametitle{Fermeture éclair avec}
  
%\begin{figure}
\begin{center}
  \includegraphics[width=0.9\linewidth]{eclair}
\end{center}
%\end{figure}

\end{frame}


\begin{frame}\frametitle{Un vecteur comme un dictionnaire}
  
Nous  ne sommes  pas obligés  d'indicer les  composantes d'un  vecteur avec  des
entiers.

\pause

Par exemple, supposons que vous effectuiez  votre stage chez une société de fret
qui  transporte  des  déchets  nucléaires,  des  bombes  atomiques,  des  missiles
chimiques, des mines anti-personnel, des knackys-herta.

\pause

On peut  travailler dans un ensemble  isomorphe à $\bbr^5$ dont  les composantes
sont les armes précédentes dans l'ordre.
\pause

On  peut  s'intéresser  au vecteur  qui  associe  les  prix  au kilo  des  armes
précédentes.\pause On  va utiliser  la structure de  dictionnaire qui  permet de
représenter les fonctions de domaine fini.

\pause

On peut aussi s'intéresser au vecteur qui associe les quantités achetées.


\end{frame}



\begin{frame}[fragile]
\begin{pythoncode}
prix = {'centrale' : 100, 'bombe' : 200, 'missile' : 150, 'mine' : 1, 'knacky' : 300}
\end{pythoncode}

\pause

\begin{pythoncode}
quantités = {'centrale' : 2, 'bombe' : 3, 'missile' : 10, 'mine' : 100, 'knacky' : 20}
\end{pythoncode}

\pause

Comment obtenir le prix total des quantités achetées?

\end{frame}


\begin{frame}[fragile]
\begin{pythoncode}
In [93]: prix = Vec(domaine, {'centrale' : 100, 'bombe' : 200, 'missile' : 150, 'mine' : 1, 'knacky' : 300})

In [94]: quantités = Vec(domaine,  {'centrale' : 2, 'bombe' : 3, 'missile' : 10, 'mine' : 100, 'knacky' : 20})

In [95]: prix.dot(quantités)
Out[95]: 8400
\end{pythoncode}
\end{frame}



\begin{frame}[fragile]
Le squelette de la classe des vecteurs définis par des dictionnaires:
\begin{pythoncode}
class Vec:
    def __init__(self, domaine, dico):
        self.domaine = domaine
        self.dico = dico

    def __str__(self) :
        return str(self.dico)

    def __repr__(self) :
        return 'Vecteur' + str(self)

    def __add__(self, other) :
        ??????

    def __mul__(self, k) :
        return ?????

    def __neg__(self) :
        return ??????

    def __eq__(self, other):
        return ????

    def dot(self, other) :
        ???
\end{pythoncode}
\end{frame}




\subsection{Ensemble des combinaisons linéaires d'une famille de vecteurs}




%
\begin{frame}
  \begin{definition}[Combinaison linéaire de vecteurs]
Soit $\langle\bbk,\oplus,\odot\rangle$ un corps  opérant sur le groupe
$\langle V,\dagger\rangle$ pour former  un espace vectoriel de produit
externe $\bullet$.

Soit   $\langle   \mathbf{u_0},\mathbf{u_1},\cdots,\mathbf{u_p}\rangle$   une
famille de vecteurs de $V$.


Un  vecteur $\mathbf{v}$  de $V$  est une  combinaison linéaire  de la
famille des $\langle \mathbf{u_i}\rangle_{0 \leqslant i \leqslant p}$ si, et
seulement si, il existe une famille 
$\langle \lambda_0,\lambda_1,\cdots,\lambda_p\rangle$ de  scalaires
de $\bbk$ vérifiant:

$$
\mathbf{v}            =            \displaystyle\daggersum_{i=0}^{i=p}\lambda_i\bullet
\mathbf{u_i}=\lambda_0\bullet\mathbf{u_0}\dagger
\lambda_1\bullet\mathbf{u_1}\dagger\cdots\dagger \lambda_p\bullet\mathbf{u_p}
$$


L'ensemble de ces combinaisons linéaires est noté:

$$\sev{\mathbf{u_0},\mathbf{u_1},\cdots,\mathbf{u_p}}$$
  
\end{definition}


\end{frame}





\multido{\n=0+1}{21}{%
  \begin{frame}
    \begin{center}
      \includegraphics[height=\textheight]{ow\n}
    \end{center}
  \end{frame}
}




\begin{frame}[fragile]
\begin{pythoncode}
import matplotlib.image as mpimg
import matplotlib.pyplot as plt 

w = mpimg.imread('welsh.png')[:591,:,:]
o = mpimg.imread('ouzbek.png')

def fondu(n) :
    for k in range(n) :
        t = k / float(n)
        plt.imshow(o*t + (1 - t)*w)
        plt.savefig('ow' + str(k) + '.pdf')  
\end{pythoncode}




\end{frame}


\begin{frame}[fragile]
  \begin{texcode}
\multido{\n=0+1}{21}{%
  \begin{frame}
    \begin{center}
      \includegraphics[height=\textheight]{ow\n}
    \end{center}
  \end{frame}
}    
  \end{texcode}
\end{frame}





\subsection{Sous-espace vectoriel}







%
\begin{frame}
  \begin{definition}[Sev]
Soit $\langle\bbk,\oplus,\odot\rangle$ un corps  opérant sur le groupe
$\langle V,\dagger\rangle$ pour former  un espace vectoriel de produit
externe $\bullet$.

Soit $W$ un sous-ensemble de $V$.

Si,  muni  des mêmes  opérations  que  $V$,  $W$  a une  structure  de
$\bbk$-espace   vectoriel,    alors   on   dit   que    $W$   est   un
\textbf{sous-espace vectoriel} de $V$.
  
\end{definition}

\end{frame}





%
\begin{frame}
  \begin{theorem}[Caractérisation (1) des sous-espaces vectoriels]\label{sev1}
Soit $\langle\bbk,\oplus,\odot\rangle$ un corps  opérant sur le groupe
$\langle V,\dagger\rangle$ pour former  un espace vectoriel de produit
externe $\bullet$.

Soit $W$ un sous-ensemble de $V$.

$W$ est un sous-espace vectoriel (sev) de $V$ si, et seulement si:

\begin{itemize}
\item $W\neq \emptyset$
\item      $(\forall      \mathbf{u})(\forall      \mathbf{v})(\langle
  \mathbf{u},\mathbf{v}\rangle   \in    W^2   \limp   \mathbf{u}\dagger
    \mathbf{v}\in W)$
\item $(\forall \lambda)(\forall      \mathbf{u})(\langle
  \lambda,\mathbf{u}\rangle \in \bbk\otimes W \limp \lambda\bullet \mathbf{u} \in W)$
\end{itemize}
  
\end{theorem}

\end{frame}






%
\begin{frame}
  \begin{theorem}[Caractérisation (2) des sous-espaces vectoriels]\label{sev2}
Soit $\langle\bbk,\oplus,\odot\rangle$ un corps  opérant sur le groupe
$\langle V,\dagger\rangle$ pour former  un espace vectoriel de produit
externe $\bullet$.

Soit $W$ un sous-ensemble de $V$.

$W$ est un sous-espace vectoriel (sev) de $V$ si, et seulement si:

\begin{itemize}
\item $\mathbf{0}\in W$

\item $(\forall \lambda)(\forall      \mathbf{u})(\forall      \mathbf{v})(\langle
  \lambda,\mathbf{u},\mathbf{v}\rangle   \in  \bbk\otimes   W\otimes  W\limp
  \mathbf{u}\dagger \lambda\bullet \mathbf{v} \in W)$
\end{itemize}
  
\end{theorem}
\end{frame}



%\section{Équations linéaires}




\end{document}
%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
