\documentclass[12pt]{article} \usepackage[height=250mm,width=183mm]{geometry} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} \usepackage[french]{babel} \usepackage[upright]{fourier} \usepackage{amsmath,amssymb,amsbsy,amsfonts,amstext,amscd,amsopn,amsxtra} \usepackage{listings,keystroke} \usepackage{xcolor,hyperref} \usepackage[french]{varioref} \usepackage[dvips,final]{graphicx} %\usepackage{bold-extra,fancyvrb} %\usepackage{luximono} \newcommand{\ie}{\leqslant} % inferieur ou egal \newcommand{\se}{\geqslant} % superieur ou egal \lstset{numbers=none,language=XCAS,xleftmargin=10pt,% keywordstyle =\color{red}\usefont{OT1}{cmtt}{b}{n},basicstyle=\ttfamily\footnotesize\color{red},commentstyle=\normalfont\scriptsize\slshape,breaklines=true,backgroundcolor=\color{0.9white}} \newcommand{\MarqueCommandeGiac}[1]{% \color{red}$>\ $} \newcommand{\MarqueLaTeXGiac}{% \color{blue}} \newcommand{\InscriptionFigureGiac}[1]{% \begin{center} \includegraphics[width=0.7\linewidth]{#1} \end{center}} \definecolor{0.6white}{rgb}{0.6,0.6,0.6} \definecolor{0.4white}{rgb}{0.4,0.4,0.4} \definecolor{0.8white}{rgb}{0.8,0.8,0.8} \definecolor{0.2white}{rgb}{0.2,0.2,0.2} \definecolor{0.9white}{rgb}{0.9,0.9,0.9} %% On redéfinit l'allure des sections en gardant \section, etc. \usepackage{sectsty} \sectionfont{\LARGE \sffamily\color{0.2white}} \subsectionfont{\sffamily\color{0.4white}} \renewcommand\thesection{\Roman{section} -} \renewcommand\thesubsection{\arabic{subsection}. } \subsubsectionfont{\sffamily\color{0.6white}} \renewcommand\thesubsubsection{\alph{subsubsection}. } \title{L'épreuve pratique de maths du Bac S sans tableur...} \author{Guillaume CONNAN\\ \href{http://gconnan.free.fr}{http://gconnan.free.fr}} \begin{document} \setlength{\parindent}{0mm} \maketitle %\initablor .gp string = text .gp commande = listing \section{Sujet 003}\label{003} %\subsection{Variante sans tableur} On va construire une procédure \texttt{toscane(n)} qui va réaliser \texttt{n} simulations de $\nombre{10000}$ lancers de trois dés en renvoyant~: \begin{itemize} \item les fréquences de sortie de 9 et 10~; \item les probabilités de gain de Bob et Alice~; \item les boîtes à moustaches correspondant à chaque événement. \end{itemize} \subsection{Commandes utilisées} \begin{description} \item[rand(n)]~:~cette commande renvoie un entier $n$ vérifiant $0\ie n< n$. Par exemple .g rand(2), rand(2), rand(2), rand(2), rand(2) Pour simuler le lancer d'un dé cubique, nous utiliserons donc~: .g rand(6)+1 \item[ranm(n,p,'tirage')]~:~construit un tableau de n lignes et p colonnes, chaque cellule contenant l'issue d'un tirage. Par exemple~: .g T:=ranm(2,15,'rand(6)+1') donne $2\times 15$ tirages d'un dé cubique. \item[count\_eq(n,T)]~:~compte le nombre d'occurrences de n dans le tableau T. Par exemple~: .g count_eq(4,T) compte le nombre de sorties de 4 dans le tableau T. \item[moyenne(L)]~:~calcule la moyenne des éléments d'une liste~: .g moyenne([16,15,12,10,19,7]) Attention~! T n'est pas une liste mais un tableau, c'est-à-dire une liste de listes. La n\textsuperscript{e} ligne étant obtenue en entrant \texttt{T[n-1]} car XCAS commence à compter à partir de 0. .g moyenne(T[0]) Le résultat est sous forme exacte. Pour avoir une approximation, on utilise \texttt{evalf} .g evalf(moyenne(T[0])) Si l'on ne veut que deux chiffres après la virgule, on peut par exemple utiliser \texttt{format}~: .g format(moyenne(T[0]),"f2") \item[moustache(L)]~:~renvoie la «~boîte à moustache~» correspondant à la liste T~: .g moustache(T[0],couleur=magenta+rempli+epaisseur_ligne_3) la partie \verb|couleur=magenta+rempli+epaisseur_ligne_3| est bien sûr optionnelle mais permet de choisir l'aspect du graphique. \end{description} \subsection{Observation du problème} On va simuler n séries de $\nombre{10000}$ lancers de trois dés. On créera une liste \texttt{neuf} qui contiendra le nombre d'occurrences de 9 dans chacune des n séries et pareil pour 10. On en calculera les moyennes et les boîtes à moustache correspondant. .g: toscane(n):={ neuf:=NULL; // une séquence vide au départ pour compter les 9 dix:=NULL; // idem pour 10 pour k de 1 jusque n faire // pour chacun des n simulations T:=ranm(1,10000,'rand(6)+rand(6)+rand(6)+3') // on lance 10000 fois 3 dés et on fait la somme des numéros obtenus. neuf:=neuf,count_eq(9,T); // on compte le nombre de 9 dans T et on le rajoute dans notre séquence dix:=dix,count_eq(10,T); // idem pour 10 fpour; N:=moyenne([neuf])/10000*100; // fréquence des sorties de 9 D:=moyenne([dix])/10000*100; // fréquence des sorties de 10 mousN:=moustache([neuf],couleur=magenta+rempli+epaisseur_ligne_3); mousD:=moustache([dix],couleur=vert+rempli+epaisseur_ligne_3); print("Sur "+10000*n+" essais, la fréquence de sortie de 9 est de "+format(N,"f2")+"% et celle de 10 est de "+format(D,"f2")+"%"); mousN,mousD; }:; .end Par exemple, pour obtenir 100 simulations de $\nombre{10000}$ lancers on entre~: .g toscane(100) \begin{center} \textcolor{blue}{"Sur 1000000 essais, la fréquence de sortie de 9 est de 11.26\% et celle de 10 est de 12.53\%"} \end{center} \subsection{À la recherche de l'origine du problème} On peut se demander si les six lancers correspondant à 9 sont équiprobables~;~la question se pose évidement en les mêmes termes pour 10. Pour se donner une idée, on va déterminer la fréquence de sortie de chacun de ces lancers en en simulant $\nombre{10000}$. On utilise à bon escient la notion d'ensemble pour XCAS~:~il s'agit d'une collection d'éléments non ordonnée qu'on écrit entre \%\{ et \%\}. On utilise également la fonction \texttt{apply(fonction,liste)} qui applique une fonction à chaque élément d'une liste. .g: neneuf():={ L:=[0$6]; neuf:=NULL:; pour k de 1 jusque 10000 faire a:=rand(6)+1:;b:=rand(6)+1:;c:=rand(6)+1:; si a+b+c==9 alors neuf:=neuf,[a,b,c]; // on liste les tirages donnant 9 fsi:; fpour:; N:=[neuf]:; n:=size(N)-1; pour k de 0 jusque n faire si %{op(N[k])%}==%{6,1,2%} alors L[0]:=L[0]+1; sinon si %{op(N[k])%}==%{5,2,2%} alors L[1]:=L[1]+1; sinon si %{op(N[k])%}==%{5,3,1%} alors L[2]:=L[2]+1; sinon si %{op(N[k])%}==%{4,4,1%} alors L[3]:=L[3]+1; sinon si %{op(N[k])%}==%{4,3,2%} alors L[4]:=L[4]+1; sinon si %{op(N[k])%}==%{3,3,3%} alors L[5]:=L[5]+1; fsi;fsi;fsi;fsi;fsi;fsi; fpour; s:=sum(L); T:=[["6,1,2","5,2,2","5,3,1" ,"4,4,1","4,3,2" ,"3,3,3"],apply(x->floor((x/s)*100),L)]; return(T); }:; .end %$ Lançons $\nombre{10000}$ fois nos trois dés : .g neneuf() On remarque que les tirages comportant un double sortent 2 fois moins que les tirages de faces toutes distinctes. La proportion est de 6 contre 1 pour le tirage "3,3,3". On peut aisément adapter la procédure à 10~: .g: didix():={ L:=[0$6]; dix:=NULL:; pour k de 1 jusque 10000 faire a:=rand(6)+1:;b:=rand(6)+1:;c:=rand(6)+1:; si a+b+c==10 alors dix:=dix,[a,b,c]; fsi:; fpour:; N:=[dix]:; n:=size(N)-1; pour k de 0 jusque n faire si %{op(N[k])%}==%{6,3,1%} alors L[0]:=L[0]+1; sinon si %{op(N[k])%}==%{6,2,2%} alors L[1]:=L[1]+1; sinon si %{op(N[k])%}==%{5,4,1%} alors L[2]:=L[2]+1; sinon si %{op(N[k])%}==%{5,3,2%} alors L[3]:=L[3]+1; sinon si %{op(N[k])%}==%{4,4,2%} alors L[4]:=L[4]+1; sinon si %{op(N[k])%}==%{4,3,3%} alors L[5]:=L[5]+1; fsi;fsi;fsi;fsi;fsi;fsi; fpour; s:=sum(L); T:=[["6,3,1","6,2,2","5,4,1","5,3,2","4,4,2","4,3,3"],apply(x->floor((x/s)*100),L)]; return(T); }:; .end %$ .g didix() Il ne reste plus qu'à prouver ce phénomène par des considérations probabilistes... \section{Sujet 007} %\subsection{Solution sans tableur} On va obtenir directement $a_n$ et $b_n$ pour tout naturel $n$ à l'aide du programme suivant qui calcule les listes $[a_n,b_n]$. Ainsi, $a_n=w(n)[0]$, le premier élément de la liste w(n) et $b_n=w(n)[1]$, le deuxième élément de la liste w(n)~: .g: w(n):={ W:=[20,60]; si n=0 alors return(W); sinon pour k de 1 jusque n faire W:=[(2*W[0]+W[1])/4,(W[0]+2*W[1])/4] // on calcule le nouveau W en fonction du précédent fpour; fsi; }:; .end Par exemple~: .g w(50) Pour en avoir une valeur approchée, on utilise \texttt{evalf} .g evalf(w(50)) Et si l'on veut tous les termes pair jusqu'à $w_{50}$~: .g [seq(evalf(w(2*j)),j=0..25)] On obtient encore plus facilement les termes des suites $(u_n)$ et $(v_n)$~: .g u(n):=w(n)[0]+w(n)[1]:; .g v(n):=w(n)[1]-w(n)[0]:; Visualisons les premiers termes grâce à la commande \texttt{seq}~: .g seq(v(j),j=0..10) .g seq(u(j),j=0..10) Pour enfoncer le clou, étudions les rapports entre termes consécutifs~: .g seq(v(j+1)/v(j),j=0..10) .g seq(u(j+1)/u(j),j=0..10) \section{Sujet 030} %\subsection{Étude sans tableur} Encore une suite définie par une relation de récurrence~! Nous commençons à savoir comment faire~! Petite variante ici~:~le premier terme varie et nous voulons une représentation graphique. .g: u(n):={ U:=uo; si n==1 alors U; sinon pour k de 2 jusque n faire U:=U/(k-1)+1.0; fpour; fsi; }:; .end Par exemple, fixons uo à $-10$ et observons les 15 premiers termes~: .g uo:=-10:; .g seq(u(k),k=1..15) ou, de manière plus lisible~: .g [[seq("u("+k+")",k=1..15)],[seq(format(u(k),"f2"),k=1..15)]] Ensuite, regardons ce que cela donne graphiquement~: .g seq(point(k,u(k)),k=5..30) ou, de manière plus visible~: .g seq(couleur(point(k,u(k)),rouge+point_width_3),k=5..30) Est-ce que le premier terme joue un rôle important~? Créons un curseur le faisant varier en ouvrant une fenêtre de géométrie (\Alt + \keystroke{G})~: \begin{lstlisting} uo:=element((-100) .. 100) // uo varie entre -100 et 100 seq(couleur(point(k,u(k)),rouge+point_width_3),k=1..30) graphe(1,x=0..30,couleur=bleu) // pour visualiser la limite \end{lstlisting} Il ne reste plus qu'à faire varier le curseur~: \begin{center} \includegraphics[width=\textwidth]{capture030.eps} \end{center} \section{Sujet 044} Nous allons ré-utiliser n donc vidons les mémoires d'affectation~: .g restart(NULL) Le problème ici, c'est que XCAS peut donner directement la réponse~! .g factoriser((6/n)*somme(k^2,k=1..n)) ... donc faisons comme si nous ne le savions pas... Nous allons donc construire une somme avec une boucle \textit{pour}~: .g: u(n):={ local s,k; s:=0; pour k de 1 jusque n faire s:=s+k^2; // on rajoute k^2 à chaque fois fpour; return(6*s/n) // on n'oublie pas de multiplier par 6/n }:; .end Nous obtenons alors~: .g seq(u(j),j=1..10) ou, sous forme de tableau~: .g [[seq("u("+k+")",k=1..10)],[seq(u(k),k=1..10)]] Si ces nombres ne nous parlent pas, observons graphiquement~: .g seq(point(j,u(j)),j=1..100) Puisqu'il s'agit d'un sujet de Bac, il ne faut pas chercher trop loin :-) Ça ressemble à un segment de parabole donc on va chercher $f(n)$ sous la forme d'une expression du type $an^2+bn+c$. On peut calculer facilement $u_1$, $u_2$ et $u_3$ donc on peut par exemple résoudre le système~: \[ \begin{cases} a+b+c=u_1\\ 4a+2b+c=u_2\\ 9a+3b+c=u_3 \end{cases} \] ce qui donne avec XCAS~: .g f(n):=a*n^2+b*n+c // on définit f .g linsolve([f(1)=u(1),f(2)=u(2),f(3)=u(3)],[a,b,c]) // on résout le système On obtient donc que $f(n)=2n^2+3n+1$~: .g [a,b,c]:=linsolve([f(1)=u(1),f(2)=u(2),f(3)=u(3)],[a,b,c]):; f(n) Observons graphiquement~: .g seq(point(j,u(j)),j=1..100),graphe(f(n),n=1..100,couleur=bleu) Cela semble correspondre graphiquement. Du point de vue numérique~: .g seq(f(k)-u(k),k=1..30) \section{Sujet 063} Tiens, encore une suite~! Bon, cette fois-ci, c'est en arithmétique mais c'est malgré tout plus simple informatiquement puisque nous avons la formule explicite donnant $u_n$ en fonction de $n$. .g u(n):=12*n+5:; .g seq(u(k) mod 20, k=0..19) Le \% 20 indique que nous travaillons modulo 20. XCAS donne par défaut le reste symétrique. Si nous voulons avoir des entiers, il faut donc travailler «~modulo zéro~»~: .g seq((u(k) mod 20)%0, k=0..19) On nous demande ensuite de faire varier a, b et p. Nous allons donc construire une fonction dépendant de ces trois variables~: .g f(a,b,p):=seq((a*k+b mod p)%0, k=0..19):; Observons les cas particuliers demandés~: .g f(5,-3,20) .g f(5,-3,7) On peut multiplier les exemples. On peut observer les influences de chaque paramètre. Construisons d'abord une procédure donnant la période~: .g: periode(a,b,p):={ K:=1; tantque (a*K+b) mod p != b mod p faire K:=K+1; ftantque; K; }:; .end puis observons avec plusieurs valeurs de p~: .g seq(periode(5,-3,p),p=1..20) Est-ce que b semble influer~? .g [seq([seq(periode(5,b,p),p=1..20)],b=-3..3)] et a ~? .g [seq([seq(periode(a,-3,p),p=1..20)],a=1..10)] Ça change plus... Il semble y avoir des liens entre la période et le PGCD de a et p... mais ceci est une autre histoire. \section{Sujet 066} Une suite~! Bon, elle est aléatoire cette fois nous dit le sujet... Construisons-la~: .g: s(n):={ local S,k; S:=0; pour k de 1 jusque n faire si rand(2)==0 alors S:=S+1; sinon S:=S-1; fsi; fpour; }:; .end Observons~: .g seq(s(k),k=1..10) simulons à plus grande échelle~: .g [seq([seq(s(k),k=1..10)],j=1..20)] À chaque fois que nous tapons sur \Enter, nous obtenons 20 nouvelles simulations~:~ça fait gagner un peu de place... Voyons un peu plus loin et effectuons $\nombre{10000}$ simulations~: .g A:=[seq([seq(s(k),k=1..10)],j=1..10000)]:; cela peut prendre jusqu'à 15 secondes avec un ordinateur peu performant. Occupons-nous du calcul des fréquences. Le problème revient à comptabiliser, pour une colonne donnée, la fréquence d'apparition de 0. Notre tableau a 10 colonnes et $\nombre{10000}$ lignes. Pour extraire la j\textsuperscript{e} colonne on entre \verb+col(A,j-1)+ car XCAS commence à compter à O~! On n'oublie pas d'utiliser la commande \verb+count_eq+ rencontrée au paragraphe~\vref{003}. .g seq(count_eq(0,col(A,j))/100,j=0..9) Ou, plus joliment~: .g [[seq("A"+j,j=0..9)],[seq(evalf(count_eq(0,col(A,j))/100)+"%",j=0..9)]] %\nettoyer \end{document} %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: