exercices classiques en Scilab

Les questions d’informatique sont de plus en plus présentes dans les épreuves de mathématiques et cela dans tous les types d’épreuves. Cependant, de nombreux candidats ne les traitent pas aux concours. Par conséquent, ceux qui y répondent (bien) sont très largement valorisés. On peut donc gagner beaucoup de points en traitant les questions Scilab.

De plus, les exercices Scilab sont souvent dans le même esprit. Aussi, il peut être très utile d’étudier les questions qui ont déjà été posées au cours des épreuves des années précédentes. Nous allons donc voir quelques exercices dont les questions sont très classiques et cela dans tous les types de sujet.

Pour information, ces exercices sont tirés d’annales EDHEC. Cette banque d’épreuves propose chaque année de nombreuses questions Scilab. Il est donc intéressant de travailler les annales EDHEC pour s’y préparer. La BCE ayant introduit le Scilab dans ses épreuves en 2015, il ne sert à rien d’aller en chercher avant.

Premier exercice classique en Scilab

Comme dans toutes les autres branches des mathématiques, les niveaux des question d’informatique sont variables et les exercices commencent souvent par des questions accessibles qui parfois même ne nécessitent pas de rédiger de script mais simplement de comprendre le sens d’un ou plusieurs scripts proposés par le sujet. C’est pour cela que je te conseille de lire toutes les questions Scilab et cela peu importe ton niveau. Certaines questions sont des points (très) facilement récupérable. Il ne faut donc pas éviter à tout prix le Scilab au cours des épreuves.

L’énoncé de l’exercice

C’est le cas de l’exercice suivant qui propose simplement de conjecturer le comportement d’une suite à travers le calcul de deux termes. C’est donc plus une question de mathématiques classiques que d’informatique.

D’abord, on peut noter qu’il n’existe pas d’exercice de Scilab à proprement parler. En effet, les questions Scilab sont incluses dans des exercices plus large. Comme on le voit sur l’exercice précédent, on utilise le contexte de l’exercice plus large pour proposer des questions Scilab. Tu peux retrouver l’énoncé complet ici.

Explications de l’énoncé

Pour en revenir à l’exercice, on voit que la question nous indique vers quel raisonnement nous tourner : comme la ligne numéro 3 de chacun des algorithmes nous montre que U5 ≤ 0,00001 tandis que U6 ≥ 100 000.

Pour comprendre cela, analysons les algorithmes. Comme ils sont similaires, nous ne détaillerons que le premier.

– La première ligne du premier algorithme créé une variable u qui prend la valeur 1, cette valeur correspond à U0 dans le contexte de l’exercice.

– La seconde ligne quant à elle initie la valeur de n à 0.

– La 3e ligne permet d’entrer dans la boucle « while », boucle de laquelle on sortira uniquement lorsque la valeur de u sera inférieure à 0,00001.

– La 4e ligne affecte à u une nouvelle valeur, celle-ci correspond exactement à la valeur f(u) dans le contexte de l’exercice.

– Puis la 5e ligne fait augmenter la valeur de n de 1.

Aussi on comprend que chaque passage dans la boucle modifie la valeur contenue dans u : elle passe de Un à Un+1 et celle contenue dans n à n+1.

L’algorithme renvoie alors la première valeur de n pour laquelle Un vérifie la condition de sortie de la boucle. Selon l’énoncé on sait que cette valeur vaut 5, donc U5 est la première valeur de n telle que Un ≤ 0,00001. Et cela vaut de même pour U6 qui est la première valeur de n telle que Un ≥ 100 000.

On peut donc conjecturer le fait que la suite (Un) diverge (pour mieux comprendre cela il faut étudier la fonction f, ce qui a été demandé dans la question précédant celle d’informatique).

Deuxième exercice classique en Scilab

Ensuite vient le niveau « intermédiaire » de difficulté au niveau des questions d’informatique. Il est intermédiaire car il nécessite de savoir rédiger des scripts Scilab ou du moins partiellement. Il faut donc être très rigoureux dans la façon dont on rédige ce script : faire attention aux alinéas, à ne pas confondre des parenthèses et des crochets etc… Ces exercices sont ceux qui rapportent le plus de points puisqu’ils demandent tout de même une certaine maîtrise du Scilab. Pourtant ils restent très accessible car ils ne demandent qu’un niveau assez basique de mathématiques et d’informatique. C’est donc encore une fois de nombreux points facilement récupérable pour des candidats sérieux.

De plus, dans ce type d’exercice, il est fréquent que des questions de mathématiques classiques et d’informatique soient mélangées : en général les questions de mathématiques permettent de rédiger les scripts demandés.

L’énoncé de l’exercice

L’exercice suivant en est un exemple puisqu’il propose d’abord de compléter un algorithme simplement en utilisant les données de l’énoncé puis après de réécrire ce script en nous ayant fait reformuler cet énoncé.

Si tu es intéressé par cette annale, tu peux retrouver le sujet dans son intégralité ici.

La première question

Comme on observe que cet énoncé fait appel à une fonction. Cela est un bon moyen de se rappeler qu’avant de définir une fonction il faut « l’appeler » avec la commande « function » et la faire se terminer avec la commande « endfunction » (on peut même noter qu’il devrait y avoir un alinéa au début de la 2e ligne).

Cette fonction nécessite l’utilisation de la fonction « cumprod » (pour cumulated product). Cette commande permet à partir d’un vecteur v=(a, b, c, d) de renvoyer un vecteur v’ de même taille dont les coefficients sont définis de la manière suivante : v’=(a, a*b, a*b*c, a*b*c*d).

En effet on observe que l’algorithme nous fait calculer la somme des puissances de x et ne nous laisse qu’une ligne pour cela. Il va donc nous falloir en une ligne paramétrer un vecteur qui permet de calculer les puissances consécutives de x jusqu’à la puissance n. Pour cela on peut utiliser le vecteur v suivant :

v=x*ones(1 :n) (puisqu’on a alors v=(x, x, x, x,…,x) où x est répété n fois).

On lui applique alors le cumprod et on a alors en notant v’=cumprod(v)

v’=(x, x^2, x^3,…, x^n).

Ainsi on peut compléter la ligne 2 de la façon suivante :

y=sum(cumprod(x*ones(1 :n)))

En effet la commande « sum » renvoie la somme des termes consécutifs d’un vecteur donné. Autrement dit si u=(a, b, c, d) on a sum(u)= a+b+c+d.

La deuxième question

On remarque que la deuxième question mélange des mathématiques classiques et de l’informatique puisque l’énoncé nous demande explicitement de réécrire la somme qu’il nous a donné initialement. Puis de réécrire un script qui permette de calculer la valeur de la fonction d’une autre façon.

Comme on reconnaît une somme géométrique on sait alors que :

f(x, n)=n si x=1

f(x, n)=x*(1-xn)/(1-x)      (car la somme commence au rang k=1).

Or cette disjonction de cas pour x=1 correspond exactement à ce que propose l’énoncé lorsqu’il met dans son script « if x==1 ». On peut noter que « == » est un opérateur test qui vérifie si x=1. Il ne faut donc pas confondre « a=b » qui est un commande qui affecte à a la valeur b et « a==b » qui vérifie si il y a égalité entre a et b.

On complète alors le script avec les résultats trouvés précédemment et cela donne alors

function y=f(x, n)

      if x==1 then y=n

                   else y=x*(1-x^n)/(1-x)

      end

endfunction