\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)}
{}
%%
%%
%%%%%%%%%%%%%%%%%%%%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} TP01 D\'ecouverte logiciel\hspace{0.5cm}}\hfill   agreg 2019 (F.Han\footnote{\url{http://webusers.imj-prg/frederic.han/agreg}})}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%% 
\columnsep 0.7cm
%%\begin{multicols}{2}
% restart;maple_mode(0);cas_setup(0,0,0,1,0,1e-10,25,[1,50,0,25],0,0,0);//radians,pas de cmplx, pas de  Sqrt
  
Minimum \`a retenir/r\'eviser avant l'\'epreuve, et donc \`a archiver cette annn\'ee:

  1) Etre habitu\'e  \`a utiliser l'aide.
  
  2) op\'erations classiques en mode exact, approch\'e, alg\`ebre lin\'eaire, calcul
modulaire et polynomial. Notamment, pgcd, couples de Bezout, produit
de matrices, noyau (y compris pour un \'el\'ement de $M_n(\rela/p\rela)$, 

3) Quelques instructions de programmation:
boucles \code{for}, \code{while} , suite: \code{seq}. Cr\'eer une fonction, cr\'eer
une fonction \`a partir d'un symbole.

4) Quelques instructions graphique de base, et surtout savoir obtenir ces
fonctions et leurs options via les menus d\'eroulant. Ex  fonctions (param\'etriques,
implicites, statistiques; ex histogrammes) et g\'eom\'etrie (points, droites...) et
options d'affichage via le menu d\'eroulant.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

\section{Pr\'esentation Xcas et Sage}
\subsection{Xcas}
\begin{itemize}
\item Types de base: entiers, flottants multipr\'ecision, symboles, fonctions, nombres modulaires, corps
finis non premiers.
\item Listes: deux types: \verb/()/ et \verb/[]/  . Le niveaux de parenth\`eses
  s'applatissent et ne comptent pas, en revanche les niveaux de crochets comptent.
\item ensembles
\end{itemize}
\subsection{Sage}
\begin{itemize}
\item Une multitude de types, il faut d\'eclarer chaque variable, cr\'eer les anneaux dans
lesquels on souhaite travailler et savoir r\'eguli\`erement changer d'anneaux. Le
symbolic ring \verb/SR/ a une philosophie similaire \`a celle d'Xcas, mais il ne
suffira pas sous sage. (\verb/PolynomialRing/ \dots)
\item Idem pour les Listes: beaucoup de types diff\'erents: t-uples, listes,
  vecteurs, matrices\dots. Les niveaux de parenth\`eses  et  de crochets comptent. Pour les applatir on utilise \verb/flatten/
\end{itemize}
\bigskip
{\bf Exemple:}
Un calcul nous am\`ene \`a une variable \verb/F/ contenant
\verb|(x^4-4)/(x-sqrt(2))|. Nous savons que \verb/F/ est en fait un polyn\^ome en
\verb/x/ et souhaitons calculer son pgcd avec par exemple \verb/x^2-2/.
%F:=(x^4-4)/(x-sqrt(2));
%gcd(F,x^2-2); // on a de la chance il a simplifie F avant
%normal(F); // cela aurait ete plus prudent de simplifier avant
%
%%\def\corrige{}
\ifdefined\corrige
\begin{xcasverb}
0>> F:=(x^4-4)/(x-sqrt(2))
1>> gcd(F,x^2-2); 
x+sqrt(2)
2>> normal(F); 
x^3+sqrt(2)*x^2+2*x+2*sqrt(2)
\end{xcasverb}
\begin{sageverb}
# sage 7.4 (cf. clefagreg 9.0, paquet sage disponible 2018)
sage: F=(x^4-4)/(x-sqrt(2))
sage: F.gcd(x^2-2)  # calcul dans SR impossible ds 7.4
...
ValueError: gcd: arguments must be polynomials over the rationals
sage: R.<x>=PolynomialRing(QQ[sqrt(2)])
sage: R(F)    # pas de coercion disponible pour sqrt(2) en sage 7.4
...
TypeError: <type 'sage.symbolic.expression.Expression'>

sage: Q2.<sqrt2>=QQ[sqrt(2)]
sage: F=(x^4-4)/(x-sqrt2)  # il faut donc travailler des le debut dans l'anneau R
sage: F.gcd(x^2-2)
x + sqrt2
\end{sageverb}
\begin{sageverb}
# avec sage 8.1
sage: F=(x^4-4)/(x-sqrt(2))
sage: F.gcd(x^2-2)   # PB: il n'y a pas eu simplification
x^2 - 2
sage: R.<x>=PolynomialRing(QQ[sqrt(2)])
sage: R(F)
x^3 + sqrt2*x^2 + 2*x + 2*sqrt2
sage: R(F).gcd(x^2-2)
x + sqrt2 
\end{sageverb}
\fi
%!s!<y>
%F=(x^4-4)/(x-sqrt(2))
%(F).gcd(x^2-2)   # calcul dans SR impossible ds 7.4 et ne simplifie pas dans 8.1
%# x^2 - 2
%R.<x>=PolynomialRing(QQ[sqrt(2)])
%R
%# Multivariate Polynomial Ring in x over Number Field in sqrt2 with defining polynomial x^2 - 2
%R(F) # ne fonctionne pas en 7.4 a cause du sqrt(2)
%Q2.<sqrt2>=QQ[sqrt(2)]
%F=((x^4-4)/(x-sqrt2))   # en 7.4 
%# x^3 + sqrt2*x^2 + 2*x + 2*sqrt2
%R(F).gcd(x^2-2)
%# x + (sqrt2)
%!s!
\subsection{Choisir sa configuration Xcas}
\danger Lors du premier lancement, les valeurs par d\'efaut ne co\"\i ncident
pas forc\'ement avec vos pr\'ef\'erences. Au premier lancement on r\'epond \`a
quelques questions. Choisissez le mode xcas car c'est celui de r\'ef\'erence par
d\'efaut dans la documentation. Si vous connaissez python, vous pouvez tentez le
mode Python qui permet d'utiliser quelques syntaxes python. Le mode maple est pour les experts en maple, et
le mode autre est pour le mode tortue logo...

On peut ensuite modifier/affiner ses choix dans le
menu \code{Cfg}. Ensuite, sauvez vos pr\'ef\'erences gr\^ace au  menu. Il faut donc
choisir le mode xcas  (\'eventuellement python) et \'etudier la configuration du "cas" pour ne
pas mal interpr\'eter les r\'eponses. (On peut l'obtenir rapidement en cliquant sur
la barre grise entre les boutons SAUVER et STOP)

%%Les diff\'erences entre les modes xcas et maple:
%%$i$ et $I$, les tableaux commencent \`a $0$ contre $1$ le symbole \%
%%est r\'eserv\'e au calcul modulaire pour xcas, au dernier r\'esultat pour
%%maple. Les commentaires sont \verb|//| resp \verb|#|. L'instruction
%%\code{subs} prend ses arguments dans des ordres invers\'es. (On utilisera donc
%%plutot \verb/subst/) 

Pour la configuration du "cas", je conseille de:

\noindent{\sc cocher} \code{radians}, et de {\sc d\'ecocher:} \code{approx},
\code{complex}, 
  \verb/Cmpx_var/, \code{Sqrt}. On travaillera ainsi en mode exact
  dans le corps engendr\'e par les coefficients de l'expression, alors
  que si l'on coche complex ou Sqrt, on rajoute $i$ et des racines
  carr\'ees ce qui ne permet pas par exemple une factorisation de
  polyn\^ome sur un corps prescrit.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

\section{Calcul symbolique, calcul approch\'e}
  {\bf Observez dans le Tutoriel:}\\
  Dans le tutoriel:
  \begin{itemize}
  \item Pour Xcas {\sc menu Aide$>$D\'ebuter en Calcul Formel}
  \item {\sc Menu Help/ tutoriel sage}
  \end{itemize}
 on trouve facilement comment manier les objets du calcul formel.     

Ex: comment affecter une variable, d\'efinir une fonction, substituer

C'est aussi un endroit o\`u l'on trouve facilement la syntaxe compl\`ete de programmation.


\subsection{D\'ecouverte du logiciel}
\exo
%%NB: Certaines syntaxes d\'ependent de la langue choisie (ou de la version
%%install\'ee). %%Il se peut que dans nos salles certaines instructions francaises
            %%ne marchent pas.

\def\code{{\sc }}

\qusqu Comment obtenir de l'aide sur un mot donn\'e que l'on connait \`a peu pr\`es
(par exemple sqrt) on fait: \code{?sqrt}. Par exemple, comment
fait on $\sqrt[3]{23}$? Rangez le dans la variable \verb/z/
% root(3,23);
% surd(23,3);//c'est plutot celui ci que l'on trouve dans la doc avec ?gcd
% 23^(1/3) ; // tout simplement
\squ Donner une valeur approch\'ee de \verb/z/ \`a la pr\'ecision par d\'efaut. (Soit en
for\c cant le logiciel a \^etre en flottants (Ex \code{1.}) 
%root(3,23.);evalf(root(3,23.));root(3,approx(23));
\squ Trouver la syntaxe des constantes r\'eelles ou complexes $\pi$, $e$,
$i$ (o\`u $i^2=-1$). Faire afficher (sans que la pr\'ecision par d\'efaut soit
modifi\'ee pour  la suite.) les $1000$ premi\`eres d\'ecimales de $\pi$.  
%evalf(Pi,1000);approx(Pi,1000);
%maple_mode(0);evalf(E);evalf(e);
%!s!<c>
% Attention mettre plusieurs Digits:= sur une meme ligne a l'air de poser probleme?
%!s!
% Digits:=1000; //maladroit
% sqrt(2.0);
% Digits:=10;
% sqrt(3.0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%!s!<c>
%-------------------------------------EXERCICE---------------------------------
%!s!
\qu On trouve aussi dans le tutoriel des explications sur les diff\'erentes
notions de d\'evelopper et simplifier.

{\bf L'interface:}
Apprenez \`a supprimer, copier, d\'eplacer une ligne, un dessin, un programme...(ie l'entr\'ee et la r\'eponse)


\qu {\sc Aide bulle sur un mot connu:~}Tapez \verb/seq(/ et \'etudiez les
param\`etres de cette fonction avec l'aide bulle\footnote{Laisser la souris sur la
ligne avec la parenth\`ese ouverte, et attendre que la bulle apparaisse.}. Cette
m\'ethode est utile lorsque l'on connait le mot mais pas tr\`es  bien les arguments
ou les options. 
\qu {\sc Etudier le menu aide. R\'ef\'erence\footnote{C'est le plus utile. \`a retenir} calcul formel}.
Cette m\'ethode est la plus adapt\'ee (avec les menus d\'eroulants, ou bien lorque ces
derniers sont trop succincts) pour trouver une
instruction dont on ne connait pas le mot clef.

Par exemple trouver la fonction pgcd de deux entiers en utilisant ce menu.
\squ Comment ajouter un \'el\'ement \`a une liste? Ex ajoutez l'\'el\'ement $55$ \`a la
liste \verb/l:=[1,33,4]/. La liste \verb/l/ a t'elle \'et\'e modifi\'ee?
% l:=[1,33,4];
% augment(l,55);
% l; // augment ou append ne modifient pas l
% l:=append(l,55);
% l; 
%%
\ifdefined\corrige
\begin{xcasverb}
30>> l:=[1,33,4];
[1,33,4]
31>> augment(l,55);
[1,33,4,55]
32>> l; 
[1,33,4]
33>> l:=append(l,55);
[1,33,4,55]
34>> l; 
[1,33,4,55]
\end{xcasverb}
\begin{sageverb}
l=[1,33,4]
l.append(55)  # ici l est modifiee
l+l           # concatenation des listes
a=11111
del(a)        # pour liberer a
\end{sageverb}
\fi
%%
\squ \verb/a:=1111;/. Comment lib\'erer la variable \verb/a/?
% a:=11111;
% purge(a); // cf menu deroulant Prg memoire
% a;
% a:=11111; del(a) ; // fonctionne aussi TB
%%%%%%%%%%%%
%!s!<y>
%l=[1,33,4]
%l.append(55)  # ici l est modifiee
%l+l           # concatenation des listes
%a=11111
%del(a)        # pour liberer a
%
%!s!
\ifdefined\corrige
\begin{xcasverb}
a:=11111;
purge(a); // cf menu deroulant Prg memoire
a;
a:=11111; del(a) ; // fonctionne aussi TB
\end{xcasverb}
\begin{sageverb}
a=11111
del(a)        # pour liberer a
\end{sageverb}
\fi
%%
\squ On fait avec la liste pr\'ec\'edente: \verb/l2:=l ; l2[0]:=66/. La liste
\verb/l/ a t'elle \'et\'e modifi\'ee? (Dans Xcas, si l'on souhaite une affectation par
adresse m\'emoire on pourra utiliser \verb/=</)
% l2:=l; // sous xcas il y a recopie
% l2[0]:=66;
% l;
% l3=<l; // si l'on veut vraiment une affectation par adresse
% l3[0]=<77; // encore ici
% l;     // alors l est modifiee aussi
%%%%%%%
%!s!<y>
%l2=l     # en sage/python c'est une affectation par adresse
%l2[0]=55
%l2
%!s!
\ifdefined\corrige
\begin{xcasverb}
48>>  l2:=l; 
[1,33,4,55]
49>>  l2[0]:=66;
[66,33,4,55]
50>>  l;
[1,33,4,55]
51>>  l3=<l; 
[1,33,4,55]
52>>  l3[0]=<77; 
[77,33,4,55]
53>>  l;     
[77,33,4,55]
\end{xcasverb}

\begin{sageverb}
sage: l=[1,33,4,55]
sage: l
[1, 33, 4, 55]
sage: l2=l
sage: l2[0]=66
sage: l
[66, 33, 4, 55]
sage: l2
[66, 33, 4, 55]
\end{sageverb}
\fi
\qu Affectez \`a \verb/a/ la valeur $e^{2i\pi/7}$. Calculez/Simplifiez
$\sum_{i=10}^{16}a^i$. Essayez de simplifier $\sqrt[3]{7}+\sqrt{5}$ expliquez la
notion de polyn\^ome pour xcas et en d\'eduire la signification d'un
\verb/rootof/. Quel est l'int\'er\^et d'un "rootof" pour des calculs du type
$(\sqrt[3]{7}+\sqrt{5})^{100}$?
% a:=exp(2*i*pi/7);
% S:=sum(a**k,k,10,16);
% simplify(S); // comment peut il trouver 0?
% simplify(a);
%!s!<c>
%Pour trouver 0 pour S on a eu de la chance que xcas transforme a en une classe
%dans un corps de rupture. Les calculs sont alors bien plus simple puisqu'il
%suffit de faire une division Euclidienne de la somme de la somme en a^k par
% le polynome minimal de a
%!s!
%!s!<y>
%a=exp(2*i*pi/7)
%S=sum([a**k for k in range(10,17)])
%S.simplify()  # ne donne rien (sage 8.1) car a n'est pas defini algebriquement.
%# il faudra creer un corps de rupture plutot que le SR
%!s!
%%
\ifdefined\corrige
\begin{xcasverb}
54>>  a:=exp(2*i*pi/7);
exp(2*i*pi/7)
55>>  S:=sum(a**k,k,10,16);
exp(2*i*pi/7)^16+exp(2*i*pi/7)^15+exp(2*i*pi/7)^13+exp(2*i*pi/7)^12+exp(2*i*pi/7)^11+exp(2*i*pi/7)^10+1
56>>  simplify(S); 
0
57>>  simplify(a);
rootof([[1,0,0],[1,-1,1,-1,1,-1,1]])

/* Pour trouver 0 pour S on a eu de la chance que xcas transforme a en une classe
dans un corps de rupture. Les calculs sont alors bien plus simple puisqu'il
suffit de faire une division Euclidienne de la somme de la somme en a^k par
 le polynome minimal de a */
\end{xcasverb}
\begin{sageverb}
sage: a=exp(2*i*pi/7)
sage: S=sum([a**k for k in range(10,17)])
sage: S.simplify()  # ne donne rien (sage 8.1) car a n'est pas defini algebriquement.
e^(6/7*I*pi) + e^(4/7*I*pi) + e^(2/7*I*pi) + e^(-2/7*I*pi) + e^(-4/7*I*pi) + e^(-6/7*I*pi) + 1
sage: # il faudra creer un corps de rupture plutot que le SR
\end{sageverb}
\fi
%%
%%
\qu Rangez la matrice $
\left(\begin{array}[c]{ccc}
  1 & 2 & 3\\
  4 & 5 & 6
\end{array}
\right)$ dans la variable \verb/M1/. Calculez le produit de \verb/M1/ avec sa
transpos\'ee, calculez le noyau de \verb/M1/. Rangez le vecteur $(1,2,2)$ dans la
variable \verb/v1/ et calculez \verb/M1*v1/ et le produit scalaire de \verb/v1/
avec lui m\^eme. 
% M1:=[[1,2,3],[4,5,6]];
% M1*transpose(M1);
% v1:=[1,2,2];
% M1*v1;
% v1*v1;
% ker(M1);
%%%%%
%!s!<y>
%M1=matrix([[1,2,3],[4,5,6]]);
%M1.kernel()    # attention c'est un noyau a gauche !!
%M1.right_kernel() 
%!s!
%%
\ifdefined\corrige
\begin{xcasverb}
58>>  M1:=[[1,2,3],[4,5,6]];
[[1,2,3],[4,5,6]]
59>>  M1*transpose(M1);
matrix[[14,32],[32,77]]
60>>  v1:=[1,2,2];
[1,2,2]
61>>  M1*v1;
[11,26]
62>>  v1*v1;
9
63>>  ker(M1);
[[-1,2,-1]]
\end{xcasverb}
\begin{sageverb}
sage: M1=matrix([[1,2,3],[4,5,6]]);
sage: M1.kernel()    # attention c'est un noyau a gauche !!

Free module of degree 2 and rank 0 over Integer Ring
Echelon basis matrix:
[]
sage: M1.right_kernel() 

Free module of degree 3 and rank 1 over Integer Ring
Echelon basis matrix:
[ 1 -2  1]
\end{sageverb}
\fi
{\sc L'index (ou compl\'etion par tabulation)}. Utile pour obtenir un mot
clef et ses synonymes, mais aussi des intructions connexes non \'equivalentes.

On peut aussi obtenir l'index par le menu aide.

\subsection{Symboles, fonctions, programmes}
Dans vos logiciels de calculs formel, il ne faut pas confondre les symboles, les
fonctions, et m\^eme les petits programmes que l'on fait. Un progamme du type:
\begin{verbatim}
f(x):={
   if(x<0){
     return 0
   };
   else{
     return x;
   }
}
\end{verbatim}
ne pourra pas \^etre utilis\'e pour d\'eriver $f$.

Il faut maintenant maitriser la diff\'erence entre fonctions et symboles, car
certaines instructions attendent des symboles et d'autres des fonctions.
\exo
Par exemple on d\'efinit le
symbole \verb!P:=x/(x^2+1)! et la fonction \verb!Q(x):=sin(1/x)! (sous xcas on
peut aussi faire de mani\`ere \'equivalente: \verb!Q:=x->sin(1/x)!) 
\squ Etudiez les types de \verb/P/ \verb/Q/  \verb/Q(x)/ \verb/Q(5)/
\verb!Q(6/pi)! (on pourra simplifier). D'une mani\`ere g\'en\'erale, il vaut mieux
effectuer les calculs compliqu\'es avec des symboles plutot qu'avec des
fonctions. Les r\'esultats seront le plus souvent bien plus lisibles et rapides.
% purge(x);// pour etre sur que x est libre.
% x=='x';//vaut 1 si x est libre. Car dans ce cas, x il coincide avec le symbole 'x'
% P:=x/(x^2+1);
% Q:=x->sin(1/x);
% type(P);//un symbole
% type(Q);//une fonction
% type(Q(x));//un symbole
% type(Q(5));//un symbole car sin(1/5) est laisse tel quel
% type(normal(Q(6/pi)));// un rationel car c'est une valeur remarquable (si l'on a simplifie)
\squ Calculer les d\'eriv\'ees de $P$ et $Q$.
% diff(P,x);
% function_diff(Q);
% Q'; // pour une fonction cela suffit
\squ (A retenir!) Comment\footnote{Cf tutoriel d\'ebuter en calcul formel} obtenir \`a partir du symbole $P$ d\'efini ci dessus, la fonction $x
\mapsto \frac{x}{x^2+1}$? En d\'eduire la d\'eriv\'ee de $\frac{\sin(1/x)}{(\sin(1/x))^2+1}$
% unapply(P,x);// cr\'ee la fonction P (cf tuto debuter en calcul formel)
% simplify(function_diff(unapply(P,x)(Q)));// cr\'ee la fonction P et la compose avec Q
% simplify(diff(sin(1/x)/(sin(1/x)^2+1),x));//verif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifdefined\corrige
\begin{xcasverb}
64>>  purge(x);
"No such variable x"
65>>  x=='x';
vrai
66>>  P:=x/(x^2+1);// un symbole
x/(x^2+1)
67>>  Q:=x->sin(1/x);// une fonction
 (x)->sin(1/x)
68>>  type(P);
expression
69>>  type(Q);
func
70>>  type(Q(x));
expression
71>>  type(Q(5));//un symbole car sin(1/5) est laisse tel quel
expression
72>>  type(normal(Q(6/pi)));// un rationel car c'est une valeur remarquable (si l'on a simplifie)
rational
81>>  diff(P,x);
(x^2+1-x*2*x)/(x^2+1)^2
82>>  function_diff(Q);
 (` x`)->-1/` x`^2*cos(1/` x`)
83>>  Q'; 
 (x)->-1/x^2*cos(1/x)
84>>  unapply(P,x);// cr\'ee la fonction P (cf tuto debuter en calcul formel)
 (x)->x/(x^2+1)
85>>  simplify(function_diff(unapply(P,x)(Q))); // cr\'ee la fonction P et la compose avec Q 
(` x`)->(-1/` x`^2*cos(1/` x`)*(sin(1/` x`)^2+1)+sin(1/` x`)*2/` x`^2*cos(1/` x`)*sin(1/` x`))/(sin(1/` x`)^2+1)^2)
86>>  simplify(diff(sin(1/x)/(sin(1/x)^2+1),x));
-cos(1/x)^3/(x^2*cos(1/x)^4-4*x^2*cos(1/x)^2+4*x^2)
\end{xcasverb}
\begin{sageverb}
sage: x=var('x')
sage: P=x^2+1
sage: Q(x)=sin(1/x)
sage: type(P)
<type 'sage.symbolic.expression.Expression'>
sage: type(Q)
<type 'sage.symbolic.expression.Expression'>
sage: Q
x |--> sin(1/x)
sage: P
x^2 + 1
sage: diff(P,x)
2*x
sage: Q'
  File "<ipython-input-47-f13e18ce214c>", line 1
    Q'
     ^
SyntaxError: EOL while scanning string literal

sage: diff(Q)
x |--> -cos(1/x)/x^2
sage: fP(y)=P.subs(x=y)
sage: fP
y |--> y^2 + 1
\end{sageverb}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exo
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qu Exprimer $\cos 5a$ en fonction de $\cos a$ (o\`u $a$ est une variable formelle).
%purge(a);
% trigexpand(cos(5*a));
\qu Calculer $\int_0^{\frac{\pi}{2}} \frac{1}{2+\sin(5 x)}dx$. Dans quels cas de
fractions trigonom\'etriques pensez vous que votre logiciel ne puisse pas vous
donner la r\'eponse? 
% normal(int(cos(5*x)/(2+sin(x)),x=0..Pi/2));//simplify ne marche pas?
%%                     -209 ln(2) + 209 ln(3) - 254/3
% P:=int(cos(5*x)/(2+sin(x)),x);
% !s!<c>
% La forme developpee avant l'integration est plus simple:
% !s!
% P:=int(trigexpand(cos(5*x)/(2+sin(x))),x);
% simplify(diff(P,x)-cos(5*x)/(2+sin(x))); //NB: normal ne suffit pas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%!s!<c>
% -------------------------------------EXERCICE---------------------------------------------
% !s!
\qu Calculez $\int \frac{1}{2+\sin(5x)}$. Affichez un dessin de la r\'eponse pour v\'erifier la continuit\'e.
%!s!<c>
%La decomposition en elements simples introduit une extension de corps. (Que le
%logiciel ne pourra pas toujours trouver)
%!s!
%% PB SAGE 8 le retour de I2 n'est pas continu.
% I2:=int(1/(2+sin(5*x)));// reponse assez compliquee 
% plot(I2); // mais on remarque que c'est continu
%%%%%%%%%%%%
%!s!<y>
%I2=(1/(2+sin(5*x))).integrate(x); I2 # reponse assez simple Mais:
%plot(I2);  # PB de constante locale, pas continue
%!s!
%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Dessins, calcul formel}
% !s!<c>
% -------------------------    Exercice           -------------------
%  Courbe parametr\'ee, points align\'es et equation cart\'esienne
%!s!
\exotitre{(cf Ecrit 2007)}
On acc\`edera aux fonctions graphiques facilement via le menu d\'eroulant.
\qu Cr\'eer une fonction: $M:t \mapsto (\frac{\cos
  t}{\sin^3t},\frac{\sin t}{\sin^3t})$
% M:=t->(cos(t)/sin(t)^3,sin(t)/sin(t)^3);
\qusqu En mode g\'eom\'etrie, dessiner le point $M(\pi/2)$
\squ D\'essiner la courbe $C_1:t\mapsto M(t)$. (Cf menu d\'eroulant pour trouver l'instruction)
%!s!<c>
%Si l'autoscale ne nous convient pas, on peut regler les bornes du dessin en
%cliquant sur cfg  (a dte du dessin)
%!s!<g>
%C1:=plotparam(M(t),t=0..Pi);
\squ En utilisant la commande \verb/assume(t1=[0.7,0,Pi]);/ en g\'eom\'etrie
int\'eractive\footnote{Sous sage on peut regarder {\it interact}}, utilisez le bouton apparu \`a droite pour expliquez ce qu'est une
courbe param\'etr\'ee en affichant le point \verb/point(M(t1))/. Sous Xcas, on peut ins\'erer des
\verb/attributs/ graphiques via le menu d\'eroulant.
\squ Ajoutez aussi l'\'el\'ement  \verb/t2/ de $]0..\pi[$ et dessiner
$M(t_1),M(t_2),M(-t_1-t_2)$. Afficher ces points avec une grosse croix en taille
un peu plus grande. 
%% t1:=element(0..Pi,0.7);
%assume(t1=[0.7,0,Pi]);
%%t2:=element(0..Pi,0.6);
%assume(t2=[0.6,0,Pi]);
%%couleur(point_width_2+point_etoile);//pb les droites ne s'affichent plus?
%M1:=point(M(t1),affichage=point_width_2+point_etoile);
%M2:=point(M(t2),affichage=point_width_2+point_etoile);
%M3:=point(M(-t1-t2),affichage=point_width_2+point_etoile);
%droite(M1,M2,affichage=blue);
%!s!
\squ Dessiner la droite $M(t1),M(t2)$ en bleu. Que conjecturez vous?
\qu D\'emontrez votre conjecture par un calcul formel.%% (Les vecteurs se notent simplemenent \verb/[ , , ]/ (et les parenth\`eses ne comptent pas).
%mm:=[[M(-t1-t2)]-[M(t1)],[M(t2)]-[M(t1)]];
%det(mm);
\qusqu Exprimez les coordonn\'ees de $M(t)$ en fonction de $u=\tan(t/2)$. On
pourra utiliser une instruction logicielle pour passer en $\tan(t/2)$ puis subtituer les
\verb|tan(t/2)| par des \verb/u/ ou trouver une m\'ethode directe.  Stockez les dans \verb/xu/ et \verb/yu/.
%xu:=subst(halftan(M(t)[0]),tan(t/2)=u);
%yu:=subst(halftan(M(t)[1]),tan(t/2)=u);
%tsimplify(subst(M(t),t=2*arctan(u))); // autre methode
%%mystere:=factors(resultant(x-xu,y-yu,u))[2];
%mystere:=factors(resultant(denom(xu)*x-numer(xu),denom(yu)*y-numer(yu),u))[2];
%mystere2:=eliminate([x=xu,y=yu],u)[0];
\squ On consid\`ere l'\'equation (un des buts de l'option C sera de bien comprendre
ce que font ces commandes):\\
\verb/mystere:=factors(resultant(denom(xu)*x-numer(xu),denom(yu)*y-numer(yu),u))[2];/ ou bien celle ci: \verb/mystere2:=eliminate([x=xu,y=yu],u)[0];/ Dessinez la.
%C2:=implicitplot(mystere,x,y);
\squ D\'emontrez que $M(t)$ appartient \`a cette courbe.
%f:=unapply(mystere,x,y);
%simplify(f(M(t)));
%!s!<c>
%Pour ajuster le pas d'un trace implicit on utilise xstep et ystep
%pour abscisse et ordonnee, quels que soient les noms de variables.
%!s!
%
%%%%%%%%%
%!s!<y>
%M(t)=(cos(t)/sin(t)^3,sin(t)/sin(t)^3) 
%d1=parametric_plot(M(t),(t,-pi,pi))      # d1 echelle trop grande
%d1.show(xmin=-5,xmax=5,ymin=-1,ymax=10)  # on limite le cadre sinon on ne voit rien
%u,x,y=var('u,x,y')
%xu,yu=M(2*arctan(u))
%xu=xu.trig_simplify();xu
%yu=yu.trig_simplify();yu
%
%# avec sage 8.1 une Expression a tout de meme un attribu resultant
%myst1=(xu.denominator()*x-xu.numerator()).resultant(yu.denominator()*y-yu.numerator(),u).factor()
%#mais pas avec sage 7.4 il faut aller dans un anneau de polynomes pour l'avoir.
%R.<u,x,y>=PolynomialRing(QQ)
%myst1=R(xu.denominator()*x-xu.numerator()).resultant(R(yu.denominator()*y-yu.numerator()),u).factor()
%myst1.unit()
%mystere=myst1[0][0]    # le premier terme de la factorisation hors unites
%f(x,y)=mystere       # on definit une fonction de deux variables
%implicitplot(f(x,y),(x,-5,5),(y,-5,5))
%f                    #  f attend deux arguments
%l=(1,2);f(*l)        #  f(l) ne marche pas car l est un t-uple et f attend deux arguments
%f(*M(t)).trig_simplify()  #  on verifie bien que le point est sur la courbe 
%
%@interact(t1=0.7,t2=0.5)
%def dd(t1=0.7,t2=0.9):
%    D=implicit_plot(f(x,y),(x,-5,5),(y,-1,8))
%    M1=point(M(t1),rgbcolor=(1,0,0))
%    M2=point(M(t2),rgbcolor=(1,0,0))
%    D+=line([M(t1),M(t2)],rgbcolor=(0,0,1))
%    D+=M1
%    D+=M2
%    D+=point(M(-t1-t2),rgbcolor=(1,0,0))
%    return D.show(xmin=-5,xmax=5,ymin=-2,ymax=8)
%
%!s!
\subsection{Petit programme}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{Illustration Newton}
Dans cet exercice nous allons illustrer ce que repr\'esente une convergence
quadratique: ie ce que repr\'esente une majoration du type:
$$|l- u_{n+1}| \leq C. |l-u_n|^2 $$
On rencontre par exemple ce genre de majoration dans la m\'ethode de Newton pour
trouver un z\'ero non multiple d'une fonction $f$ assez r\'eguli\`ere.

Nous allons ici prendre $f: x\mapsto x^2 -2$ et trouver une valeur approch\'ee de
$\sqrt{2}$.
\qu Comparez \`a la main la m\'ethode de Newton $x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$ avec
celle de Heron qui calcule $\sqrt{d}$ en d\'efinissant $u_{n+1}$ comme la moyenne
de $u_n$ et $\frac{d}{u_n}$.
\qu On consid\`ere la suite
r\'ecurrente: $$x_{n+1}=\frac{x_n}{2}+\frac{1}{x_n},~x_0=2$$
Cr\'eez une fonction \verb/newt(n,d)/ qui calcule de mani\`ere it\'erative $x_n$ avec
$d$ chiffres significatifs. \danger On prendra soin de faire tous les calculs en valeur
approch\'ee avec $d$ chiffres significatifs. Evitez de modifier la variable
\verb/Digits/ car il faut bien comprendre sa port\'ee, et pr\'eferez une fonction
qui convertisse un entier en un flottant de pr\'ecision $d$.
\qu Pour $0\leq n\leq 12$ donnez la valeur exacte de
$$
E(\log_{10}(|x_n-\sqrt{2}|))
$$
et expliquez gr\^ace \`a cette illustration la notion de convergence quadratique en language commun.
%!s!<c>
%------------------------------ Exercice  --------------------------------
% !s!
% sq2:=approx(sqrt(2),10000);
% !s!<m>
% newt(n,d):={
%   local u;
%   u:=approx(2,d);
%   while(n>0){
%     n--;
%     u:=u/2+1/u;
%     //print(approx(u-sq2,20));
%   }
%   return u;
% }  
%!s!
%newt(5,10);
%!s!<c>
%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.
%!s!
%seq(floor(log10(abs(newt(k,5000)-sqrt(2)))),k=0..12);
%[ floor(log10(abs(newt(k,5000)-sqrt(2))))  for k in range(13) ]; //idem
\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

\subsection{D\'evelopper/factoriser}
\exo
\qu Trouver le coefficient de $a^3b^2cd^2$ dans $(a+b+c+d)^8$. V\'erifier votre
r\'eponse th\'eorique avec la forme d\'evelopp\'ee (utiliser \verb/normal/ pour
d\'evelopper un calcul lourd ). (On pourra \'etudier l'aide de
\code{coeff} pour recup\'erer le coefficient d'un mon\^ome).
% l:=normal((a+b+c+d)^8);
% coeff(l,[a,b,c,d],[3,2,1,2]);
% binomial(8,3)*binomial(5,2)*binomial(3,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exo
\qu Il existe dans xcas plusieurs fa\c cons de d\'evelopper\footnote{sans compter les
  synonymes}: \verb/ratnormal/, \verb/normal/, \verb/simplify/, \verb/expand/. Lors de calculs
lourds sur les polyn\^omes il faut vraiment pr\'ef\'erer  "ratnormal" ou "normal" qui
optimiseront. "simplify" sera plus lent car il tentera des simplifications plus sophistiqu\'ees. On pourra
l'utiliser apr\`es avoir fait un "normal" non satisfaisant. En fait, "expand"
travaillera avec les objets les plus g\'en\'eraux et pourra \^etre tr\`es
lourd car il ne regroupe pas les d\'enominateurs. Essayez ces intructions sur, \verb!P1:=(x^2-1)/(x-1)!,
\verb!P2:=-cos(5*x)+16*cos(x)*sin(x)^4-12*cos(x)*sin(x)^2+cos(x)! et  \verb!P3:=(a*sqrt(3)+b/sqrt(6))^4!
% P1:=(x^2-1)/(x-1);
% expand(P1);//developpe dans Q(x)
% normal(P1),simplify(P1);//les 2 simplifient
% P2:=-cos(5*x)+16*cos(x)*sin(x)^4-12*cos(x)*sin(x)^2+cos(x);
% expand(P2);
% normal(P2);
% simplify(P2);
\qu Factoriser  $x^{12}-1$ dans $\rela[x]$. En factorisant des polyn\^omes
judicieusement choisis, obtenir la valeur du polyn\^ome cyclotomique $\Phi_{12}$?
% factor(X^12-1);
% !s!<c>
% phi12 est le facteur qui n'apparait pas dans: 
%!s!
% factor(X^6-1);factor(X^4-1);
%%\qu On pose $a=e^{\frac{2i\pi}{12}}$. V\'erifiez que $a^{12}$ vaut bien
%%$1$ pour xcas. Etudier $e^{\frac{2i\pi}{9}}$.
\qu Factorisez $P=(2x+1)^2(x^5-1)/(x-1)$ dans $\reel[x]$
et dans $\complex[x]$. Peut t'on esp\'erer un r\'esultat exact?
% P:=(2*x+1)^2*(x^5-1)/(x-1);
% complex_mode:=1;factor(P*1.1);factor(approx(P));
% complex_mode:=0;factor(P*1.0);factor(approx(P,5));factor(P);
\squ Factoriser $X^{12}-1$ sur $\ratio[\sqrt{3}]$ et sur $\ratio[\sqrt{3},i]$ et
sur $\ratio[e^{2i\pi/9}]$. (On peut tenter de rajouter une liste d'\'el\'ements en
option de factor)
% !s!<c>
% On peut factoriser en imposant une extension algebrique avec une syntaxe
% comme dans maple.
% Mais je ne le trouve pas dans la doc (c'est rare). Exemples:
%!s!
% factor(X^12-1,sqrt(3)); 
% factor(X^12-1,[sqrt(3),i]);
% factor(X^12-1,exp(2*i*Pi/9));
% !s!<c>
% selon les versions, cFactor(...,a) est plus sur si l'on veut etre sur que i a ete utilise. (en fait ca veut  plutot dire Q[I,a] factor)
% !s!
% cFactor(X^12-1,sqrt(3));//est probablement plus sur


%%\newpage
%% \end{multicols}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\end{document}

%%le menu Aide/Manuels/Algorithmes
\url{http://www-fourier.ujf-grenoble.fr/~parisse/giac/algo.pdf}

\section{Divers, facultatif}
%!s!<c>
%-------------------------------------EXERCICE---------------------------------
%!s!
\exo
\qusqu Effectuer un changement de variable pour que les in\'egalit\'es $0<a<b<c$ soient
facile \`a lire.
\squ D\'emontrer en demandant un calcul \'el\'ementaire au logiciel que $$3/2\leq
\frac{a}{b+c} + \frac{b}{a+c} + \frac{c}{a+b}$$ 
(Il ne s'agit pas de trouver une instruction du logiciel pour  r\'esoudre
directement ce probl\`eme en tenant compte des hypoth\`eses, mais de poser une
question judicieuse pour que la r\'eponse rende la preuve \'evidente.) 
% purge(a,u,v);
% b:=a+u;c:=b+v;//on ordonne a,b,c
% F:=a/(b+c)+b/(a+c)+c/(a+b)-3/2;
% !s!<c>
% le numerateur et le denominateur n'ont que des coefficients positifs, donc F>0
% pour 0<a, 0<u , 0<v
%!s!
%numer(F);
%denom(F);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exotitre{\bf D\'enombrement et s\'eries g\'en\'eratrices.}
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qu Afficher le coefficient de $t^3$ dans la s\'erie formelle associ\'ee \`a
$\prod_{i=1}^4\frac{1}{1-a_i.t}$?
%purge(a,b,c,d,e,t);
% P:=((1-a*t)*(1-b*t)*(1-c*t)*(1-d*t))^(-1);
% s:=series(P,t=0,3);
% !s!<c>
%On constate que le coefficient de t^n est la somme de tous les monomes de degre
%n en les 4 variables a,b,c,d. Ces monomes sont en bijections avec les suites
%croissantes (au sens large) de n \'el\'ements de {1,2,3,4}.
%!s!
% coeff(s,t^3);
\qu G\'en\'eraliser l'exemple pr\'ec\'edent pour en d\'eduire de mani\`ere th\'eorique le
nombre d'\'el\'ements croissants dans $\{1,2,3,4\}^n$, puis dans $\{1,\dots,k\}^n$
%!s!<c>
% La bijection est la suivante:
%A un n-uplet:
%(u_i)_{1 <= i <= n} , u_i <= u_{i+1} et u_i dans {1,2,3,4}
%on associe le monome de degre n en a_1,a_2,a_3,a_4: prod_{i=1}^n a_{u_i}
%Par exemple:
%!s!
%V:=[a,b,c,d]; bij:= L -> product(seq(V[u -1],u=L));
%bij([1,1,1,1,3,3,4,4,4,4]);
%bij([1,1,1,2,2,2,3,4,4,4]);
\qu Quel est le cardinal de:
$\{(x_1,\dots,x_5)\in\nat^5 |  x_1+3x_2+2x_3+x_4+4x_5=208\}$
% !s!<c>
%Pour r\'esoudre ce Pb on met des poids aux variables. Ex: a,d de degre 1, b: 3, c:
%2, et f: 4. et l'on cherche les monomes de degres 208.
%!s! 
% P:=1/((1-a*t)*(1-b*t^3)*(1-c*t^2)*(1-d*t)*(1-f*t^4));
% s:=series(P,t=0,4):;
% coeff(s,t^4); //Ex on verifie bien que f a un poids de 4
% P:=1/((1-t)*(1-t^3)*(1-t^2)*(1-t)*(1-t^4));
% s:=series(P,t=0,208):;
% coeff(s,t^208);
\qu En adaptant la formule $\sum_{n>0}p_n.t^n=\Pi_{i=1}^\infty \frac{1}{1-t^i}$
o\`u $p_n$ est le nombre de partitions\footnote{Une partition de $n$ est une suite
d\'ecroissante d'\'el\'ements de $\nat^*$ de somme $n$.} de $n$, calculer $p_{50}$. 
% !s!<c>
%Pour calculer le coefficient de t^n, seuls les termes en 1/(1-t^i) pour i<n+1
%du produit vont contribuer, on n'a donc pas besoin du produit infini pour n fixe
% !s!
% P:=n->mul(1/(1-t^j),j=1..n);
% !s!<c>
% On cherche donc le coefficient de t^50 dans:
%!s!
% series(P(50),t,0,50);
% coeff(series(P(50),t,0,50),t^50);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exotitre{(type colle)}
Expliquez et illustrez une m\'ethode pour  param\'etrer une conique avec des
fractions rationnelles,  et comment l'appliquer au calcul de primitives de
fractions rationnelles en $x$ et $\sqrt{x^2+ax+b}$. 
