Corrigé de l’exercice 4 (spécialité) du bac S 2014

jeudi 3 juillet 2014
par  Alain BUSSER

Le sujet (au format pdf) est téléchargeable ici

  1. deuxPuissance = (x) -> Math.pow 2, x
  2. suite = []
  3. for p in [0..10]
  4.     if p%2 is 0
  5.         n = p/2
  6.         a = 600*(deuxPuissance n)-400
  7.     else
  8.         n=(p-1)/2
  9.         a = 800*(deuxPuissance n)-400
  10.     suite.push a
  11. dessineSuite suite, 10, 0, 20000, 3, "blue"

Télécharger

image/svg+xml 0 1 2 3 4 5 6 7 8 9 10 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000

(figure réalisée avec l’outil alcoffeethmique, à l’aide du script ci-dessus)

Question 1

Question où l’essentiel résidait dans la qualité de la rédaction ; plusieurs candidats ont utilisé un support graphique sur leur brouillon pour trouver, mais n’ont pas osé reproduire leurs graphes sur la copie [1]. Dommage, car il y avait là l’ébauche du graphe d’une chaîne de Markov [2], apparu sous forme d’une production spontanée puisque la notion n’est pas au programme...

Voici le brouillon d’un candidat, qui s’en est servi comme support de raisonnement après avoir inventé les graphes :

Un autre candidat a opéré en plusieurs étapes, en tenant compte du fait que les opérations ne sont pas toutes effectuées en même temps :

La suite, avec représentation fléchée des ajouts des 200 et 100 poissons, est une étape vers la généralisation de l’onglet suivant :

Question 2

Question a

On généralise le raisonnement du 1. Voici la suite du brouillon du second candidat de l’onglet précédent :

La suite consiste à transformer les écritures des suites a et b, en écriture matricielle. Ce qui est immédiat.

Question b

En réécrivant le système sous la forme X=AX+B, on peut le résoudre matriciellement. Ceci est fait dans le dernier onglet avec CoffeeScript. Mais on peut aussi considérer le système comme un de ceux qu’on résout au collège :

  • x = 2y+200
  • y = x+100

Pour le résoudre, on peut utiliser l’outil en ligne ci-dessous :

outil pour résoudre des systèmes
Ouvrir dans un autre onglet, ou télécharger (on peut utiliser hors ligne)

Le système se réécrit

  • x-2y = 200
  • -x+y = 100

Ou encore

  • (1)x+(-2)y = 200
  • (-1)x+(1)y = 100

Il suffit d’entrer ces nombres dans le fichier html ci-dessus et on a la solution :

La question suivante est un cas classique de transformation d’une suite arithmético-géométrique en une suite géométrique, à ceci près que la raison A est une matrice :

Question c

En appelant C la solution constante trouvée au b (exprimée sous forme d’un vecteur colonne), on a

$Y_n = X_n -C$ et $X_n = Y_n +C$

d’où

$Y_{n+1} = X_{n+1} - C=AX_{n}+B-C=A \left( Y_n + C)+B-C=AY_n+AC+B-C$

Mais $AC+B=C$ par définition de $C$ donc

$Y_{n+1}=AY_n + C - C=AY_n$

CQFD

Question 3

Question a

On a $Z_{n+1}=Y_{2(n+1)}=Y_{2n+2}=AY_{2n+1}=A^2Y_{2n}=A^2Z_{n}$

(on a utilisé deux fois la relation de récurrence sur Y, une fois pour n+1 et une fois pour n)

On peut calculer le carré de A pour se faire une idée de ce que cela donne ; par exemple en allant dans le dernier onglet et en y mettant le script suivant :

  1. A = $M [[0,2],[1,0]]
  2. alert (A.x A).inspect()

Télécharger

Ce faisant, on apprend que $A^2=2I$, d’où $Z_{n+1}=2IZ_{n}=2Z_{n}$, ce qu’il fallait démontrer.

Question b

Remarque : La seule formule démontrable par récurrence était admise...

On a $Y_{2n+1}=AY_{2n}=A\times2^nY_{0}=2^nAY_{0}=2^nY_{1}$

On en déduit alors par comparaison des abscisses, que

$a_{2n+1}+400 = 2^n \left( a_{1}+400 \right)$

$a_{2n+1}+400 = 2^n \left( 400+400 \right)$

$a_{2n+1}+400 = 800 \times 2^n$

$a_{2n+1} = 800 \times 2^n -400$

De même, la relation admise sur $Y_{2n}$ permet de montrer que $a_{2n} = 600 \times 2^n - 400$

Ceci permet de rédiger l’algorithme, sans avoir à boucler. Mais la formule explicite dépendant de la parité de p, il est nécessaire de mettre en œuvre un test : Algorithme rapide mais long à rédiger. Voir l’onglet suivant pour approfondir la question...

Diagonalisation

Comme la question porte sur du calcul formel, le logiciel Xcas peut théoriquement la résoudre. De fait, on peut trouver une formule explicite avec Xcas, dont il n’est pas si facile de vérifier que c’est la même que celle de l’énoncé. Ainsi, on entre A presque comme dans l’onglet suivant (CoffeeScript). Mais B est un vecteur ligne, qu’on a besoin de transposer (transformer en vecteur colonne) pour que les multiplications soient réalisables :

Pour la suite, il faut faire quelque chose qui est hors programme mais qui a été utilisé dans le sujet Liban 2014 (spé) : Diagonaliser A, en l’écrivant sous la forme $PDP^{-1}$ où $D$ est une matrice diagonale. Xcas peut calculer non seulement D (la matrice ayant sur sa diagonale les valeurs propres, ou eigenvalues, de A), mais aussi P (matrice des vecteurs propres ou eigenvectors) et son inverse P1 :

Alors on peut montrer par récurrence que $A^n=PD^nP^{-1}$. Et comme il est aisé d’écrire l’expression formelle de $D^n$, on a le résultat en calculant formellement le produit précédent :

Question 4

Plus généralement, dans cet onglet, est traité l’aspect algorithmique du sujet :

  • Utilisation des matrices de la question 2 pour abréger la boucle de l’algorithme de la question 4 ;
  • Utilisation des mêmes matrices pour résoudre le système (par inversion d’une matrice) ;
  • Test de l’algorithme de la question 4, en CoffeeScript ;
  • Réponse à la question 4.b

Le tout, en html parce que cela permet de tester les algorithmes, et même si on se sent aventureux, les modifications que l’on invente, en ligne.

Exercice 4 spé maths

Question 2

Bien que ce ne soit pas suggéré par l'énoncé, l'algorithme matriciel, qu'on va introduire ici, se révèle plus concis que l'algorithme de la question 4 (ci-dessous). Pour gérer les matrices dans cette page html, on y a ajouté le logiciel sylvester.js.

La matrice A

La matrice s'écrit A = $M [[0,2],[1,0]] et l'appel à alert A.inspect() produit l'affichage suivant:

[0, 2]
[1, 0]

Le vecteur B

La matrice B est en fait un vecteur-colonne; il se crée par B = $V [200,100] et l'affichage alert B.inspect() produit le résultat que voici :

[200, 100]

Le vecteur colonne X est géré par une méthode analogue.

Opérations

Multiplication de la matrice A par le vecteur X

Comme la lettre "x" ressemble à un signe de multiplication, sylvester multiplie A par X en écrivant A.x X

Addition de B

L'addition s'abrège en add ce qui fait que la boucle peut s'écrire en une seule ligne: X = (A.x X).add B

L'algorithme en CoffeeScript

Le système de la question 2

On peut résoudre le système en constatant que, si I est la matrice identité d'ordre 2, le système s'écrit indifféremment

  • X = AX+B
  • IX = AX+B
  • IX-AX = B
  • (I-A)X = B
  • CX = B
  • X = C-1B

(On a noté C la matrice I-A)

Un algorithme pour résoudre le système peut donc consister à créer la matrice I, lui soustraire A pour avoir C, inverser C puis multiplier le résultat par B :

Question 4

a) L'algorithme de l'énoncé

Pour simplifier l'écriture de l'algorithme, on crée une fonction qui, à n, associe 2n; elle s'appelle deuxPuissance ce qui fait que pour calculer 23 il suffira d'écrire deuxPuissance 3

On voit donc que l'algorithme ci-dessus calcule le nombre de poissons contenus dans le bassin A au bout de p années. Il suffira alors de le modifier un peu pour répondre à la question b

b) L'algorithme demandé

Remarque: Un modèle qui n'a de valeur que sur 10 ans n'est pas très utile...

Pour essayer dans un autre onglet du navigateur :

exercice 4 spé maths
Tous les algorithmes en CoffeeScript, à tester en ligne


[1par manque d’habitude

[2L’ajout des 200 et 100 poissons fait qu’il ne s’agit pas d’une chaîne de Markov, mais de quelque chose de plus complexe.


Commentaires