63
Math ´ ematiques - ECS1 30 Scilab L yc ´ ee La Bruy ` ere 30 avenue de P aris 78000 Versailles c 2015, Polycopié du cours de mathématiques.

Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

Embed Size (px)

Citation preview

Page 1: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

Mathematiques - ECS1

30

Scilab

Lycee La Bruyere30 avenue de Paris78000 Versailles

c©2015, Polycopié du cours de mathématiques.

Page 2: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

2

Table des matières

30 Scilab 3

30.1 Présentation 330.1.1 Scilab, c’est quoi ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330.1.2 Premier contact avec Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . 330.1.3 Calculs numériques simples. . . . . . . . . . . . . . . . . . . . . . . . . . 430.1.4 Quelques fonctionnalités d’édition de la console . . . . . . . . . . . . . . . 6

30.2 Les objets Scilab 730.2.1 Les nombres réels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730.2.2 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . 830.2.3 Les booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830.2.4 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930.2.5 Création de matrices et de vecteurs . . . . . . . . . . . . . . . . . . . . . . 1230.2.6 Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

30.3 Représentations graphiques. 2130.3.1 Fonctions usuelles prédéfinies . . . . . . . . . . . . . . . . . . . . . . . . 2130.3.2 Tracé de courbes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2230.3.3 Diagramme à barres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2530.3.4 Histogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

30.4 Fonction d’entrée et sortie : « input » et « disp ». 2630.4.1 La commande « input » . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2630.4.2 La commande « disp » . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

30.5 Programmer avec Scilab 2730.5.1 Les scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2730.5.2 Algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2830.5.3 Boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2930.5.4 Boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3330.5.5 Instructions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . 3530.5.6 Les fonctions Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

30.6 Résolution de l’équation f (x) = 0 3930.6.1 Dichotomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3930.6.2 Méthode du point fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4030.6.3 Méthode de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

30.7 Calcul de valeurs approchées d’une intégrale 4130.7.1 Methode des rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4130.7.2 Formule du point milieu . . . . . . . . . . . . . . . . . . . . . . . . . . . 4330.7.3 Fonction de répartition de la loi normale centrée réduite . . . . . . . . . . . 44

30.8 Algèbre linéaire 4430.8.1 Calcul matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4430.8.2 Résolution de systèmes linéaires AX = B . . . . . . . . . . . . . . . . . . . 47

30.9 Simulations aléatoires 5130.9.1 Les générateurs aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 5130.9.2 Simulation de lois discrètes . . . . . . . . . . . . . . . . . . . . . . . . . . 5230.9.3 Loi uniforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5330.9.4 Loi de Bernoulli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5430.9.5 Loi binômiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5530.9.6 Loi géométrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5530.9.7 Loi de Poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5630.9.8 Loi exponentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5730.9.9 Loi normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Page 3: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

3

30.10 Exemples de simulations en probabilité. 5830.10.1 Méthode de Monte-Carlo pour approcher une intégrale. . . . . . . . . . . . 6030.10.2 Méthode du rejet de Von Neuman . . . . . . . . . . . . . . . . . . . . . . 60

Page 4: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30 Scilab

30.1 Présentation

30.1.1 Scilab, c’est quoi ?

Scilab (à prononcer à l’anglaise) est un « gros » logiciel de calcul numérique. C’est unlogiciel libre développé initialement par l’INRIA 1 et l’ENPC 2. C’est maintenant la sociétéScilab Enterprises qui en assure la maintenance et le développement.

Le logiciel Scilab peut être installé sur plusieurs plateformes, en particulier sous Linux,Windows et Mac Os X. Pour l’installer chez vous, il vous suffit de vous rendre à l’adressewww.scilab.org et de choisir la version qui convient à votre système.

Ce polycopié présente les commandes que vous devez connaître à l’issue de la pre-mière année ainsi que quelques applications du cours de mathématiques par l’informatique.Après avoir lancé Scilab, je vous demande de lire ce document en exécutant les commandesproposées une par une en suivant l’ordre de présentation pour en observer l’effet.

Chaque commande ou notion Scilab est suivie d’applications directes et certaines sontaccompagnées d’un ou plusieurs exercices en lien avec le cours de mathématiques que jevous demande de traiter à l’aide de Scilab.

30.1.2 Premier contact avec Scilab

Au lancement de Scilab, il apparaît une fenêtre appelée « console Scilab » reconnais-sable à l’invite de commande --> appelé aussi « prompt. »

A l’invite, on passe une commande, on valide (en appuyant sur la touche Entrée),Scilab l’interprète, évalue la ou les instructions, donne le résultat puis redonne l’invite.

Voici quelques exemples de commandes pour commencer.

--> 1+2+3-4

Après validation, vous obtenez

ans =2.

cela signifie que le résultat de l’instruction est 2 ; il est affecté à une variable nomméeans .

On peut également faire des calculs appelant des fonctions spéciales.Par exemple, dans Scilab, la fonction exponentielle se nomme exp et la fonction ln

se nomme log si bien que l’instruction

-->exp(log(3))

donnera après validation

ans =3.

1. INRIA : Institut national de recherche en informatique et automatique2. ENPC : Ecole nationale des ponts et chaussée

4

Page 5: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.1 Présentation 5

On peut donner à Scilab plusieurs instructions en même temps, il suffit pour cela deséparer celles-ci par une virgule , : la suite d’instructions

--> 2+3*4-5, (2+3)*4-5, 2+3*(4-5)

renvoie

ans =9.

ans =15.

ans =-1.

Il est parfois inintéressant de faire afficher le résultat d’une instruction ou d’une suited’instructions, dans ce cas on terminera la ou les instructions dont on ne veut pas faireafficher le résultat par un point-virgule ; . La suite d’instructions

--> 2+3*4-5,(2+3)*4-5; 2+3*(4-5)ans =9.

ans =- 1.

affiche les résultats du premier et du dernier calcul alors que le résultat du deuxième calculne l’est pas, bien que le calcul ait été réalisé.

Enfin, pour effacer tout ce qui a été tapé dans la console, on dispose de la commandeclc.

--> clc

30.1.3 Calculs numériques simples.

— Scilab ne fait pas de calculs formels : il ne sait pas calculer avec des variables quin’ont pas de valeurs. En particulier, il ne sait pas calculer l’expression d’une dérivée, d’uneprimitive, il ne sait pas simplifier des expressions algébriques, etc.

— Scilab ne fait que des calculs numériques avec des matrices.La notion de matrice sera vue de manière précise en cours ultérieuerement, mais en

attendant, on considèrera qu’une matrice est un tableau rectangulaire de nombres repérés àl’aide des lignes et des colonnes.

Voici une matrice : 1 −2 3√

2−1 2

3 0 75 − ln 3 −3 8

On dira que − ln 3 est le coefficient d’indices (3, 2) car il est à l’intersection de la 3e

ligne et 2e colonne, et de même 7 est le coefficient d’indices (2, 4),etc.

— Les opérations se notent : + pour l’addition, – pour la soustraction, *pour la multiplication, / pour la division et ^ pour l’exponentiation.

— Les ordres de priorité sont les mêmes que sur toutes les machines à calculer stan-dard :

– d’abord l’élévation à une puissance « ˆ »,– puis la multiplication et la division (« *, / »)

Page 6: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

6 Scilab

– et enfin l’addition et la soustraction (« +, - »).Pour modifier l’ordre des opérations ou encore pour le mettre en évidence, on utilise

des parenthèses.

Exercice 1. Exécutez, en anticipant le résultat, les instructions suivantes :

--> (-3 + 2)*5-3--> -3 +2*(5-3)--> -3 + 2*5-3--> 1/3 - 5/3--> -2^3 + (1.2- 0.7)^2-->(-1)^(-2)/(-1)^(-3)--> (2-3*(4-3))*4/5

Faire calculer par Scilab, l’expression : 5 −3

5 + 5+3−3×3

.

— Remarquez que la virgule des nombres décimaux est notée avec un point . .

— Les nombres e et π sont représentés par %e et %pi , qui ne sont en fait que desapproximations numériques (suffisantes pour tous les calculs). Ces constantes sont prédéfi-nies et leur valeur ne peut être modifiée.

Exercice 2. Exécutez les commandes suivantes :

--> %e--> %pi--> sin(2*%pi/3)--> cos(%pi/4)--> log(%e)

— Il est important de bien distinguer minuscules et majuscules en Scilab pour queles calculs s’effectuent correctement. L’instruction

--> Log(%e)

donne après validation

!--error 4Varaible non definie : Log

qui est un message d’erreur vous indiquant que « Log » n’est pas définie.

— Pour simuler des phénomènes aléatoire, Scilab dispose de la fonction rand. L’ins-truction

--> randans =0.2113249

renvoie un nombre aléatoire entre 0 et 1 suivant une loi uniforme. Cette fonction possèded’autres options, comme on le verra par la suite.

— On peut aussi faire des calculs avec des vecteurs.

Page 7: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.1 Présentation 7

Il y a deux types de vecteurs à distinguer : les vecteurs lignes (notés en ligne !) et lesvecteurs colonnes (notés en colonne !). Pour les définir, on utilise les crochets « [ et ] » (quipermettront de définir aussi des matrices quand le moment viendra).

Pour définir un vecteur ligne (de petite « taille »), il suffit d’entrer entre crochets, sescomposantes en les séparant par une virgule. Par exemple, pour additionner deux vecteurslignes (à trois composantes), on pourra taper

--> [1, -1, 0] + [2, -1, 1]

On obtient alors le résultat sous forme d’un vecteur ligne

ans =3. -2. 1.

Pour définir un vecteur colonne (toujours de petite « taille »), il suffit d’entrer entrecrochets, ses coordonnés en les séparant par un point-virgule. Par exemple, pour additionnerdeux vecteurs colonnes (à trois composantes), on pourra taper

--> [1 ;-1; 0] + [2; -1; 1]

On obtient alors le résultat sous forme d’un vecteur colonne

ans =3.-2.1.

Si on essaie d’additionner un vecteur ligne et un vecteur colonne, par exemple,

--> [1 -1 0] + [2; -1; 1]

on obtient un message d’erreur

!--error 8Addition incoherente.

On peut convertir un vecteur ligne en vecteur colonne et vice-versa à l’aide de l’apos-trophe ’ : l’instruction

--> [1, -1, 0]’

renvoie

ans =1.-1.0.

30.1.4 Quelques fonctionnalités d’édition de la console

A l’aide de la touche ↑ du clavier, il est possible de rappeler l’instruction précé-dente. Pour rappeler une instruction passée, on appuiera sur ↑ autant de fois qu’il le faut.Si vous êtes allés trop loin en arrière, vous pouvez revenir avec la touche ↓ .

Certaines combinaisons permettent de naviguer rapidement dans la ligne courante, parexemple :

Page 8: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

8 Scilab

— Ctrl-a ramène le curseur en début de ligne ;— Ctrl-e positionne le curseur en fin de ligne ;— Ctrl-k efface tous les caractères suivant le point d’insertion.

30.2 Les objets Scilab

30.2.1 Les nombres réels

Les nombres sont représentés avec une précision relative de l’ordre de 10−16. Les cal-culs réalisés par Scilab ne sont donc pas exacts mais ils sont suffisamment précis pour lesapplications.

Dans Scilab, les nombres réels ont une valeur absolue comprise entre 2, 2 × 10−308 et1, 8 × 10308.

Les résultats numériques sont affichés par défaut avec dix caractères, le signe et lepoint décimal inclus. Par exemple,

--> exp(20)ans =4.852D+08

Notez aussi l’utilisation de la notation scientifique sous Scilab : le résultat ci-dessussignifie que pour Scilab, e20 est égal à 4.852 × 108.

Si on veut plus de précision, on peut modifier le format d’affichage avec la fonctionformat :

--format(20)--exp(20)ans =485165195.409790277

Pour retourner au format par défaut, on tapera

--format(’v’,10)

Le nombre %eps est égal à 2, 22× 10−16 : il donne la plus petite précision relative pourun calcul.

Lorsqu’on demande la valeur de sin π, Scilab donne

--> sin(%pi)ans =1.225D-16

Bien que Scilab donne à sin π la valeur 1, 225 × 10−16, on la considère comme nulleLe signe d’un nombre s’obtient en Scilab avec la commande sign.

--> sign(-4^2+2*3-1)ans =-1.--> sign(99^100-100^99)ans =1.

Page 9: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 9

Exercice 3. La racine carrée s’obtient à l’aide de la commande sqrt. Par exemple,√

2s’obtient par sqrt(2). Les nombres suivant sont-ils égaux :

A =√

5 +

√22 + 2

√5 et B =

√11 + 2

√29 +

√16 − 2

√29 + 2

√55 − 10

√29

Exercice 4. Conversions. Le barn est une unité de mesure employé en physique nu-cléaire : un barn vaut 10−28m2.

Le parsec est une unité de longueur utilisée en astronomie : un parsec correspondà une distance de 3.262 années lumière.

Un megaparsec vaut 106 parsecs.Une année lumière vaut 9.461 × 1015 m.Un mètre cube correspond à 106 ml.Une petite cuillère à café peut contenir cinq ml.Un barn-megaparsec est donc une unité de volume. Combien faut-il de telles

cuillères à café pour faire un barn-megaparsec.

30.2.2 Les chaînes de caractères

Pour définir une chaîne de caractères, on utilisera des guillemets anglo-saxons " .Dans le cas où la chaîne contient des apostrophes, il faut les doubler.

--> "Je m’ ’appelle Scilab"ans =Je m’appelle Scilab.

On peut concaténer deux chaines de caractères en utilisant l’opérateur + :

--> "Je m’ ’appelle Scilab " + " et je fais plein de choses"ans =Je m’appelle Scilab et je fais plein de choses.

30.2.3 Les booléens

Une expression booléenne est une expression pouvant prendre soit la valeur « vrai »(T 3) soit la valeur « faux » (F).

Les résultats des opérateurs de comparaison == , < , <= , > , >= , <> sont des boo-léens.

a==b vrai si a = ba<b vrai si a < ba<=b vrai si a ≤ ba>b vrai si a > ba>=b vrai si a ≥ ba<>b vrai si a , b

3. T pour « true »

Page 10: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

10 Scilab

--> 2==3, 1.4 < sqrt(2), %pi^2<10, 1+sqrt(3)^2<>4ans =F

ans =T

ans =T

ans =T

Le dernier résultat peut paraître étonnant. Pour le comprendre, étudions l’écart et écartrelatif de 1 +

√32 et 4 rapport à %eps (qui est la plus petite précision relative que l’on peut

espérer dans un calcul) :

--> abs(1+sqrt(3)^2-4)<%epsans =F--> abs((1+sqrt(3)^2)-4)/4<%epsans =T

Dans le premier cas, on obtient une réponse F car on teste si l’écart est inférieur à %eps, alorsque dans le second cas, la réponse est T car c’est l’erreur relative que l’on teste.

On peut aussi réaliser des opérations logiques avec des expressions booléennes. DansScilab, le « ou » mathématique se note avec une barre verticale | et le « et » se noteavec le signe & .

-->(1< 2) & (2^2==4)ans =T

-->(sin(%pi)>=1) | (2^2==4)ans =T

Exercice 5. Exécutez, en anticipant les résultats, les instructions suivantes

--> (1< 2) & (2^2==4)--> (1==0) | (1<2) & (0<>1)--> (1==0) & (1<2) | (0<>1)--> [1,-1,3]>[0,2,%pi]

Les variables booléennes servent essentiellement à construire des instructions condi-tionnelles.

30.2.4 Les variables

— Les variables n’ont pas besoin de déclaration de type ou d’allocation de mémoirepour être utilisées, en revanche elles doivent avoir une valeur.

— On peut utiliser n’importe quel nom (dans la limite de 24 caractères) pour unevariable à condition que ce ne soit pas une variable prédéfinie en Scilab.

Quand on demande la valeur de la variable t sans lui avoir donné une valeur avant, onobtient :

Page 11: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 11

--> t!--error 4

Varaible non definie : t

Par contre, si l’on affecte une valeur à la variable t, il n’y a plus de problème. L’ins-truction

--> t=%pi/4t =0.7853982

permet de créer la variable t en lui affectant la valeur π4 .

On peut désormais utiliser la variable t (ayant pour valeur π4 ) dans un calcul. Par

exemple,

--> sin(t)^2ans =0.5

On remarque que si l’on n’affecte pas le résultat du calcul à une variable, le résultatest par défaut affecté à la variable temporaire ans qui est conservée tant qu’elle n’est pasredéfinie.

La variable ans contient donc le résultat de la dernière instruction sans affectation.Si on demande le contenu de ans :

--> ansans =0.5

--> k=2*3;--> ansans =0.5

--> sin(t)-cos(t);--> ansans =- 1.110D-16

Les variables sont donc crées au vol par affectation. La création de variable se faitpar la syntaxe nom=expression On retiendra que le signe = affecte à la variable àsa gauche la valeur de l’expression à sa droite. Par conséquent, il ne faut pas confondre l’opérateur = avec l’opérateur de test == .

On peut aussi modifier le contenu d’une variable en cours de travail. Dans l’exemplesuivant,

--> t=%pi/2;cos(t), t=t+%pi/2;cos(t)ans =6.123D-17

ans =- 1.

on assigne d’abord à la variable t la valeur π2 , on évalue cos t, puis on modifie la va-

riable t en lui assignant la précédente valeur de t additionée à π2 et on evalue à nouveau

cos t .

Page 12: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

12 Scilab

Exercice 6. Quel est, à chaque fois, le contenu de la variable y si l’on éxécute les suitesd’instructions suivantes ? Anticiper les résultats avant de passer à Scilab.

--> y=1/2; y=2*y+1; y=2*y+1;y=2*y+1;--> y=1/2; y=1/y; y=1/y ; y=1/y;--> y=2/3 ; y=1-y; y=1-y ; y=1-y;--> y=3 ; y=y^2; y=y^2 ; y=y^2;--> y=1; y=2*y ; y=3*y; y=4*y;

— Une variable peut être de type numérique, matricielle ou chaine de caractère.Dans la suite d’instructions suivantes, on définit deux vecteurs u et v puis un troi-

sième w comme combinaison linéaire des deux premiers w=2u+3v

--> u=[1,0,1];v=[-1, 1,2]; w=2*u+3*vw =- 1. 3. 8.

Un autre exemple, avec des chaînes de caractères :

--> r=" Scilab, ";s=" c’’est super ! "; rs=r+srs =Scilab, c’est super !

Pour définir la matrice m =

1 −2 7 65 4 −3 2−1 0 9 −8

, on utilise les crochets « [ et ] » en entrant

les éléments ligne par ligne, les lignes étant séparés par un ; :

--> m=[1, -2, 7, 6 ; 5, 4, -3, 2 ; -1, 0, 9, -8 ]m =1. - 2. 7. 6.5. 4. - 3. 2.- 1. 0. 9. - 8.

L’élément à l’intersection de la 2e ligne et la 3e colonne - élément d’indice (2, 3) -s’obtient en tapant :

--> m(2,3)ans =-3

Exercice 7. Exécutez les commandes suivantes et notez l’effet de chaque instruction.

--> m(1,:)--> m(2,:)--> m(3,:)--> m(:,2)--> m(:,3)--> m’--> m(2,4)=18; m--> m(:,3)=[2;4;8]

Page 13: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 13

— Scilab est sensible à la casse : les lettres minuscules et majuscules sont distinguées.Ainsi, t et T sont deux noms de variable distincts. Si on demande le contenu de T :

--> T!--error 4

Varaible non definie : T

— Il peut être intéressant de savoir si un nom de variable est déjà utilisé. Il y a pourcela une fonction notée exists : pour la variable t , on obtient

--> exists("t")ans =

1

alors que pour la variable z , Scilab affiche

--> exists("z")ans =

0

ce qui signifie que le nom de variable z est libre.— On peut libérer la place mémoire occupée par une variable en la détruisant à l’aide

de la fonction clear. L’instruction

--> clear t

ne renvoie rien mais si on teste le nom de variable t, on obtient

--> exists("t")ans =

0

ce qui signifie que le nom de variable t est de nouveau libre.

30.2.5 Création de matrices et de vecteurs

La principale caractéristique de Scilab est de pouvoir travailler sur les objets de baseen les stockant et en les traitant sous forme vectorielle, c’est à dire sous forme de tableaux.

Dans Scilab, une matrice est un tableau . Un vecteur est un tableau à une ligne ou unecolonne.

Les matrices et les vecteurs sont définis à l’aide des opérateurs « [ ] », « , », « ; ». Lescrochets délimitent le contenu de la matrice, la virgule est utilisé pour séparer les colonneset le point-virgule pour séparer les lignes.

Les objets contenus dans une matrice doivent être de même type. Création de matrices

Pour construire une matrice (de petite « taille ») à partir de ses coefficients, on les placeentre deux crochets « [ et ] ». Les éléments d’une ligne sont séparés d’un espace ou d’unevirgule, les lignes sont séparées par un point-virgule. A l’affichage, une matrice de nombresest représentée comme un tableau sans encadrement.

Par exemple, la matrice m =

0 1 2 5−1 0 1 72 3 4 7

est crée par l’instruction

--> m=[0,1,2,5;-1, 0, 1,7; 2,3, 4,7];

Pour obtenir le format ou la taille d’une matrice, on utilise la fonction size :

Page 14: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

14 Scilab

--> size(m)ans =3. 4.

--> size(m,1)ans =3.

--> size(m,2)ans =4.

Le résultat de l’instruction size(m) est un vecteur dont le premier élément est lenombre de lignes, et le deuxième élément, le nombre de colonnes.

Les instructions size(m,1) et size(m,2) renvoie respectivement le nombre de ligneset le nombre de colonne.

Dans une instruction trop longue pour tenir sur une ligne, on mettra · · · en fin deligne avant de terminer l’instruction à la ligne suivante.

--> [11,12,13,14,15,16,17,18,19;21,22,23,24,25,...--> 26,27,28,29;31,32,33,34,35,36,37,38,39]ans =11. 12. 13. 14. 15. 16. 17. 18. 19.21. 22. 23. 24. 25. 26. 27. 28. 29.31. 32. 33. 34. 35. 36. 37. 38. 39.

Pour construire une matrice ne comportant que des zéros, ou que des uns, il y a deuxfonctions très pratiques :

--> zeros(3,5)ans =0. 0. 0. 0. 0.0. 0. 0. 0. 0.0. 0. 0. 0. 0.

--> ones(3,5)ans =1. 1. 1. 1. 1.1. 1. 1. 1. 1.1. 1. 1. 1. 1.

La commande eye(m,n) permet de créer une matrice de taille m×n dont les élémentsd’indice (i, i) valent 1 et tous les autres 0.

La matrice identité n × n s’obtient donc par l’instruction eye(n,n).

--> eye(3,3)ans =1. 0. 0.0. 1. 0.0. 0. 1.

--> eye(3,5)ans =1. 0. 0. 0. 0.0. 1. 0. 0. 0.0. 0. 1. 0. 0.

La fonction rand, qu’on a déjà vue, permet aussi de créer des matrices aléatoires detaille quelconque, les coefficients suivant tous une loi uniforme sur [0, 1], les réalisationsétant indépendantes.

Page 15: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 15

--> rand(2,3)ans =0.3303271 0.6283918 0.68573100.6653811 0.8497452 0.8782165

Création de vecteursDans Scilab, un vecteur ligne est une matrice à une ligne et un vecteur colonne est une

matrice à une colonne. On crée donc des vecteurs avec les mêmes règles ci-dessus.On peut à partir de plusieurs vecteurs en construire un autre, obtenu en les concaténant

(création de vecteur par blocs) :

--> u=[3,2,1];v=[4,5,6];w=[9,8,7,6];z=[v,u,w]z =4. 5. 6. 3. 2. 1. 9. 8. 7. 6.

Pour construire un vecteur ligne d’indices allant de a à b, on utilise l’opérateur « : »avec la syntaxe nom = a:b

Par exemple,

--> J=3:9J =3. 4. 5. 6. 7. 8. 9.

Pour construire un vecteur ligne contenant des indices allant de a à b par pas de h, lasyntaxe est nom = a:h:b

Par exemple,

--> J=1:3:13J =1. 4. 7. 10. 13.

Le pas de construction peut être négatif, si on souhaite un vecteur de valeurs décrois-sante

Par exemple,

--> J=13:-3:1J =13. 10. 7. 4. 1.

En revanche, l’instruction

--> J=1:-3:13J =[]

renvoie le vecteur vide puisqu’il n’y a pas de valeur inférieur à 3 et supérieure à 13.Lorsque le pas h n’est pas entier, on n’obtient pas toujours le bon nombre d’éléments

souhaité dans le vecteur obtenu. Il vaut mieux utiliser des pas entiers dans la constructiondu vecteur puis de diviser par le nombre qu’il faut pour retrouver le pas h. Par exemple,plutôt que d’écrire

--> J=0:0.2:10;

on préfèrera

Page 16: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

16 Scilab

--> J=0:2:100; J=J/10;

Pour construire une discrétisation régulière d’un intervalle, on dispose de la commandelinspace(a,b,n) qui crée un vecteur ligne contenant n valeurs également réparties entre

a et b.Par exemple,

--> t=linspace(0,1,5)t =0. 0.25 0.5 0.75 1.

Exercice 8. — Construire les vecteurs suivants

U =

31−1−3−5

, V =(1 1.25 1.5 1.75 2 2.25 2.5

), W =

(4 9 16 25 36 49

)

Extraction et insertionL’élément d’indice (i, j) d’une matrice A s’obtient par la commande A(i,j) . Par

exemple, avec la matrice m précédente,

--> m(3,2)ans =

3.

Si on souhaite modifier le coefficient d’indice (i, j) d’une matrice A et lui donner lavaleur c, on le fera par la commande A(i,j)=c. Par exemple,

--> m(3,2)=5m =0. 1. 2. 5.- 1. 0. 1. 7.2. 5. 4. 7.

et la matrice est alors modifiée.Le ie élément d’un vecteur x s’obtient par la commande x(i) . Par exemple,

--> J=1:3:13; J(3)ans =7.

De même, si on souhaite modifier le ie élément d’un vecteur x en a, on le fera par lacommande x(i)=a. Par exemple,

--> u=[1,2,3,4,5,6,7]u =1. 2. 3. 4. 5. 6. 7.

--> u(3)=7; u(7)=3; uu =1. 2. 7. 4. 5. 6. 3.

Page 17: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 17

La ie ligne d’une matrice A s’obtient par la commande A(i,:) et la je colonne par

la commande A(:,j)

Le symbole « : » utilisé à la place d’un indice signifie « tout. »

Reprenons l’exemple de la matrice m =

0 1 2 5−1 0 1 72 3 4 7

définie plus haut

--> m=[0,1,2,5;-1, 0, 1,7; 2,3, 4,7];

et supposons que nous voulions modifier la deuxième colonne en

123 On écrira

--> m(:,2)=[1;2;3]; mm =0. 1. 2. 5.- 1. 2. 1. 7.2. 3. 4. 7.

Pour modifier des lignes, on procède de la même manière.

On peut ajouter une ligne ou une colonne à une matrice de manière dynamique. Parexemple, pour ajouter une quatrième ligne

(0 0 0 0

)à la matrice m précédente, on écrira

--> m(4,:)=[0,0,0,0]; mm =0. 1. 2. 5.- 1. 2. 1. 7.2. 3. 4. 7.0. 0. 0. 0.

Si on veut intercaler le vecteur colonne

6666

après la deuxième colonne, on pourra le

faire par l’instruction

--> c=[6;6;6;6]; m=[m(:,1:2) , c, m(:,3:4)]m =0. 1. 6. 2 5.- 1. 2. 6. 1. 7.2. 3. 6. 4. 7.0. 0. 6. 0. 0.

Pour supprimer la deuxième ligne, on la remplace par une ligne vide :

--> v=[ ]; m=[m(1,:) ; v; m(3:4,:)]m =0. 1. 6. 2 5.2. 3. 6. 4. 7.0. 0. 6. 0. 0.

On peut aussi modifier ou compléter un vecteur de manière dynamique. Par exemple,

Page 18: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

18 Scilab

--> u=1:4u =1. 2. 3. 4.

--> u([5,6,7])=[-3,7,0];uu =1. 2. 3. 4. - 3. 7. 0.

--> u([7 9])=[-1 8];uu =1. 2. 3. 4. - 3. 7. - 1. 0. 8.

Remarquez que la taille du vecteur u ou de la matrice m est automatiquement ajustéelorqu’on insère des éléments au delà de sa taille courante.

Exercice 9. Construire, avec Scilab, de plusieurs manières, les matrices suivantes :

A =

1 2 3 42 3 4 53 4 5 6

, B =

1 1 1 14 7 10 13

12 9 6 3

, C =

1 1 −2 21 1 −2 21 1 −2 2

— Construire la matrice 6×7 dont tous les éléments sont nuls sauf ceux du « bord »

qui valent 1.— Soit a le vecteur

(1 3 5 7

)et b le vecteur

(2 4 6 8

)Former la matrice dont le

terme général est aib j.

Exercice 10. Inversion de l’ordre des éléments d’un vecteur. Etant donné un vecteurx =

(x1 x2 . . . xn

), faire afficher par Scilab le vecteur

(xn xn−1 . . . x1

)(sans recopier

les éléments).

L’opérateur $.Le dollar $ signifie en Scilab, le dernier indice pour une ligne ou une colonne. Il

peut être utilisé de manière algébrique, c’est à dire que $-1 fait référence à l’avant dernierindice, $-2 à l’avant avant dernier indice, etc.

Par exemple,

--> A=[1,2,1,0;0,1,2,1;1,0,1,2;2,1,0,1];--> A(1,$)ans =0.

--> A($,2)ans =1.

--> A($-1,$)ans =2.

Il est souvent employé pour ajouter un élément à la fin d’un vecteur, une ligne ou unecolonne à la fin d’une matrice.

Par exemple,

Page 19: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 19

--> A=[1,2,1,0;0,1,2,1;1,0,1,2;2,1,0,1];--> A(1:4,$+1)=[6;7;8;9]A =1. 2. 1. 0. 6.0. 1. 2. 1. 7.1. 0. 1. 2. 8.2. 1. 0. 1. 9.

La fonction « find. »La fonction « find » permet de rechercher les éléments d’un vecteur ou d’une matrice

vérifiant une certaine propriété.Par exemple, pour trouver les éléments nuls d’un vecteur v,on pourra faire :

-->v=[-1,2,0,3,0,4,1,-2,7];--> find(v==0)ans =3. 5.

Le vecteur renvoyé est celui des indices des éléments nuls, dans notre cas, les élémentsd’indice 3 et 5.

Si on recherche les éléments strictement positifs du vecteur v,on fera :

--> find(v>0)ans =2. 4. 6. 7. 9.

Pour une matrice, l’interprétation du vecteur retourné par la fonction « find » est plus

délicate. Par exemple, si A est la matrice m =

1 2 0 0−1 4 3 00 −1 1 0

et si on recherche les éléments

nuls de la matrice A, l’instruction find(A==0) donne :

--> A=[1,2,0,0;-1, 4,3,0; 0,-1,1,0];--> find(A==0)ans =3. 7. 10. 11. 12.

Un élément dans une matrice est repéré par deux indices (un pour la ligne et un autrepour la colonne). Mais ici, le vecteur retourné par la fonction find donne les positions deséléments nuls de A dans le « grand » vecteur colonne obtenu en concaténant les colonnesde A.

De même, si on recherche les éléments de A strictement inférieurs à 2 et différent de0, on donnera l’instruction :

--> find((A<2)&(A<>0))ans =1. 2. 6. 9.

Opérations arithmétiques sur les matrices et les vecteurs— On peut additionner et soustraire des matrices (ou vecteurs) de même format conte-

nant le même type d’objets. Cette addition (ou soustraction) se fait élément par élément àl’aide des opérateurs + et - .

Page 20: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

20 Scilab

--> A=[0,1;-1, 1; 2,3]; B= [2,3;-1, 1; 4,-5]; C=A+BC =2. 4.- 2. 2.6. - 2.

--> D=["ta", "ti"; "to", "tu"]; E=D+DE =!tata titi !! !!toto tutu !

Remarquez qu’une matrice de chaînes de caractères est encadrée par des points dÕex-clamation.

Scilab accepte aussi, mais c’est pour faciliter la programmation, d’addtionner (ou sous-traire) un nombre à une matrice. Dans ce cas, Scilab ajoute (ou soustrait) ce nombre à tousles éléments de cette matrice.

--> A=[0,1,3;-2, 1,4]; B=A+5B =5. 6. 8.3. 6. 9.

— Le produit de deux matrices ou d’une matrice et d’un vecteur se fait à l’aide del’opérateur * . Attention, il ne s’agit pas du produit élément par élément mais bien duproduit matriciel au sens mathématique.

--> a=[1 2;3 4];--> b=[5 6;7 8];--> a*bans =19. 22.43. 50.

— La ke puissance d’une matrice (carrée) A s’obtient à l’aide de l’opérateur ^ parl’instruction A^k .

--> a=[0 1;1 -1];--> m=a^2, M=a^3, p=a^4m =1. - 1.- 1. 2.M =- 1. 2.2. - 3.

p =2. - 3.- 3. 5.

Si la matrice dont on calcule la puissance n’est pas carrée, on a un message d’erreur

--> a=[0 1 2;1 -1 3];--> a^3!--error 20

Type errone du premier argument : Une matrice carree attendue.

Page 21: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.2 Les objets Scilab 21

— Pour faire le produit élément par élément de deux matrices ou vecteurs de mêmetaille, on utilisera l’opération . * à ne pas confondre avec *

--> a=[1 2;3 4];--> b=[5 6;7 8];--> a.*bans =5. 12.21. 32.

De même, pour faire la division élément par élément de deux matrices ou vecteurs demême taille, on utilisera l’opération . /

--> a=[1 2;3 4];--> b=[5 6;7 8];--> a./bans =0.2 0.33333330.4285714 0.5

Pour obtenir la matrice des inverses (des éléments de a), il faudra faire

--> (1)./aans =1. 0.50.3333333 0.25

car l’instruction

--> 1./aans =- 2. 1.1.5 - 0.5

donne non pas la matrice des inverses mais la matrice inverse de a au sens mathématique.

—Pour élever à une puissance terme à terme, une matrice ou un vecteur, on utiliseral’opération . ^ qui ne doit pas être confondu avec ^ .

--> a.^2ans =1. 4.9. 16.

Exercice 11. Soit a le vecteur(1 1

315

17

)et b le vecteur

(12

14

16

18

).

Former le vecteur dont le terme général estaibi

ai + bi.

Construire le vecteur colonne X à 9 composantes dont la ie est égale à (−1)i

2i .

Page 22: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

22 Scilab

Exercice 12. Pour tout n ∈ N, on pose un =2n

n8 .— Construire un vecteur ayant pour composantes les vingt premiers termes de la

suite (un).— Peut on conjecturer un comportement pour cette suite lorsque n tend vers l’in-

fini ?— Construire un vecteur ayant pour composantes les cinquantes premiers termes

de la suite (un). Reprendre la question précédente.

30.2.6 Aide en ligne

Pour obtenir l’aide de Scilab, il suffit de taper dans la console

--> help

ou si on désire de l’aide sur une fonction particulière de Scilab, en faisant suivre helpdu nom de cette fonction. Par exemple,

--> help exists--> help linspace--> help find

30.3 Représentations graphiques.

30.3.1 Fonctions usuelles prédéfinies

Scilab propose beaucoup de fonctions dans des domaines très variés. Les fonctionsnumériques usuelles au programme pour nous sont résumées dans le tableau ci-dessous :

log fonction logarithme lnexp fonction exponentiellefloor fonction partie entièreabs fonction valeur absoluesqrt fonction racine carréesin fonction sinuscos fonction cosinus

Exercice 13. Exécutez les commandes suivantes :

--> log(%e^2), log(sqrt(%e))--> log(exp(-3))--> log(exp(3))-exp(log(3))--> %e^2 -exp(2), %e^2/exp(2)--> log(2*3)-log(2)-log(3), log(2*3)/(log(2)+log(3))

Que remarquez vous pour les deux derniers calculs ?

L’instruction floor(x) renvoie la partie entière 4 du réel x.

4. La partie entière d’un nombre est le plus grand entier inférieur ou égal à ce nombre.

Page 23: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.3 Représentations graphiques. 23

Exercice 14. Vérifiez ce qui précède en testant les cas suivants :

--> floor(%pi)--> floor(%e)--> floor(sqrt(3))--> floor(-2.6)--> floor(-sin(%pi))

Exercice 15. Faire afficher les valeurs approchées calculées par Scilab des nombressuivants :

cos(√

ln 3), e− sin e, ln∣∣∣∣1 +

√2

1 −√

2

∣∣∣∣Ces fonctions s’appliquent à des nombres, des vecteurs ou des matrices. Quand elles

reçoivent comme argument un vecteur ou une matrice, elles s’appliquent à chaque élémentdu vecteur ou de la matrice. Par exemple,

--> x=[0:%pi/6:%pi]; sin(x)ans =0. 0.5 0.8660254 1. 0.8660254 0.5 1.225D-16

Le vecteur affiché est simplement la liste des images des éléments du vecteur x par lafonction sinus.

Si, au lieu de sin, on prend la fonction x 7→x2e−x

| sin(πx)|3 + 1et si on veut le vecteur y

des images des nombres entre 1 et 2 par pas de 0.01, on pourra faire

--> x=[100:200]; x=x/100;--> y=(x.^2.*exp(-x))./(abs(sin(%pi*x)).^3 +1);

Exercice 16. Construire une discrétisation de l’intervalle [0, 2π] avec un pas de π6 et

faire calculer les images de ces points par les fonctions x 7→ esin x et x 7→ xecos x.Faire de même avec la fonction définie par x 7→ sin

( x cos xx2 + 3x + 1

)

30.3.2 Tracé de courbes

Pour les représentations graphiques, on dispose de plusieurs fonctions. Pour le mo-ment, on se contentera d’étudier la fonction plot .

Dans l’exemple suivant,

-->y=[0,-1.3, 2.8,-3.5]; plot(y)

la courbe tracé est obtenue en reliant par des segments de droite les points (1, 0); (2,−1.3);(3, 2.8); (4,−3.5).

Lorsque la commande plot ne reçoit en argument qu’un seul vecteur x de taille nayant pour composantes x1, x2, . . . , xn, la courbe tracée est une ligne brisée joignant lespoints (i, xi) où i varie de 1 à n.

Page 24: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

24 Scilab

Exercice 17. Créer le vecteur de taille 1 × 100 dont la ne composante est le réel

qn =nne−n √n

n!.

On pourra consulter l’aide à propos de la fonction factorial. Représenter graphique-ment les cent premiers termes de la suite (qn).Que peut-on dire du comportement de la suite ?

Si on souhaite relier des points (x1, y1), (x2, y2), . . . , (xn, yn), on utilise l’instructionplot(x,y) où x est le vecteur de composantes x1, x2, . . . , xn et y est le vecteur de com-posantes y1, y2, . . . , yn.

Par exemple, relier les points de coordonnées (−1, 2) et (3,−5) se fait par les instruc-tions :

--> x=[-1, 3]; y=[2, -5]; plot(x,y)

Pour relier les points (−1, 2); (0,−1); (1, 0) et (2, 3) on donnera comme instructions :

--> x=[-1, 0, 1, 2]; y=[2, -1, 0, 3]; plot(x,y)

Exercice 18. Reproduire avec Scilab la courbe suivante

Chaque commande plot superpose le graphique courant sur les graphiques précé-dents. La fenêtre graphique n’est donc pas effacée. Pour effacer la fenêtre graphique, onutilise la commande

--> clf()

Pour afficher une autre fenêtre graphique, on utilise la commande

--> scf()

La commande scf(n) permet de rendre active la fenêtre graphique portant le numéro n. Sielle n’existe pas, elle est crée par Scilab.

Pour représenter graphiquement une fonction f , on va donc commencer par construireune discrétisation [x1 x2 ... x_n] de [a, b] avec une précision de n points qu’on af-fectera à un vecteur x et on applique (au sens de Scilab) la fonction f au vecteur x parl’instruction y=f(x).

Enfin, on utilise la commande plot(x,y).

Page 25: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.3 Représentations graphiques. 25

La courbe est alors obtenue en reliant les points (xi, yi) où yi = f (xi). Pour obtenir unebonne précision, on prendra une valeur de n suffisamment grande.

Par exemple, les représentations de la fonction exp sur [−1, 3]avec n = 6 points etn = 20 points peuvent être obtenues ainsi :

--> clf()--> x=linspace(-1,3,6); y=exp(x); plot(x,y)--> scf()--> x=linspace(-1,3,20); y=exp(x); plot(x,y)

On a parfois besoin de représenter graphiquement des fonctions un peu plus compli-quée, comme celle définie par P : x 7→ (1 + 3x + 2x2 − x4)e−x.

Une méthode consiste à construire une discrétisation x de l’intervalle d’étude et deconstruire à l’aide de l’opérateur . * le vecteur y des images par la fonction P descomposantes de y :

--> clf()--> x=linspace(-3,3,50); y=(1+3*x+2x.^2-x.^4).*exp(-x);--> plot(x,y)

Exercice 19. Représenter la fonction polynôme x 7→ x7 − 7x6 + 21x5 − 35x4 + 35x3 −

21x2 + 7x − 1 sur l’intervalle [0.988, 1.012] à l’aide d’une discrétisation de l’intervalle[0.988, 1.012] par pas de 0.0001.Commentaires ?

Il existe encore un autre moyen pour représenter graphiquement la fonction précé-dente en définissant la fonction P dans Scilab : c’est l’objet d’une prochaine section « Lesfonctions Scilab. »

On peut choisir la couleur et l’aspect en mettant les indications de couleur et de styleentre guillemets « " » :

indication "b" "k" "r" "g" "c"couleur bleu noir rouge vert cyan

indication "." "+" "o" "x" "*"style · + × ?

Par exemple,

--> x=linspace(0,2*%pi,20);--> plot(x, cos(x), "-or")

— On peut tracer simultanément plusieurs courbes, les vecteurs des abscisses despoints pouvant être les mêmes ou non.

Par exemple, si le vecteur des abscisses est le même, il suffit de mettre les valeurs àreprésenter dans une matrice, chaque colonne étant associée à une fonction :

--> x = (0:5:200*%pi)/100 ;--> plot(x, [exp(cos(x))’, exp(sin(x))’])

Si les vecteurs des abscisses ne sont pas les mêmes, on met à la suite les vecteursabscisses et images des fonctions à représenter. Par exemple,

Page 26: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

26 Scilab

--> x=linspace(0,%pi,100); t=linspace(%pi,2*%pi,100);--> plot(x, sin(x), "-og", t, sin(t-%pi), "-xr")

Exercice 20. Exécutez les instructions suivantes :

--> x=linspace(0,2*%pi,10);--> plot(x, x*sin(x))

Où se trouve l’erreur ?

L’option rect = [xmin, ymin, xmax, ymax] permet de limiter le tracé à la zonecomprise dans le rectangle défini par les valeurs dans la matrice.

Exercice 21. Représenter dans une même fenêtre les courbes représentatives des fonc-tions définies sur [0, 5] par

f (x) = cos2 x, g(x) = cos(2x), h(x) = cos(x2).

Utiliser une discrétisation régulière de l’intervalle [0, 5] avec 200 points et des couleursdifférentes pour les différentes courbes.

30.3.3 Diagramme à barres

Un diagramme à barres consiste en une suite de barres verticales de largeur identiqueet de longueur égale aux quantités à représenter.

Scilab dispose de la commande bar pour représenter des diagrammes à barres.

Année 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995Hauteur (mm) 611 707 734 573 501 472 645 663 699 670

Pour représenter ces données en un diagramme à barres, on procède ainsi :

--> x=1986:1995;--> y=[611,707,734,573,501,472,645,663,699,670];--> bar(x,y)

Représentons la loi binômiale de paramètre 20 et 0.4 en un diagramme à barre

--> x=0:20;--> y=binomial(0.4,20);--> bar(x,y)

Exercice 22. Représenter en diagramme à barres, la loi suivie par la somme des facesquand on lance deux dés à six faces équilibrés.

30.3.4 Histogramme

L’histogramme d’un échantillon (une série de données) est un diagramme constitué debarres verticales juxtaposées, chacune de ces barres représentant le nombre de termes del’échantillon appartenant à une classe donnée.

Page 27: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.4 Fonction d’entrée et sortie : « input » et « disp ». 27

Pour représenter un histogramme d’un échantillon, on commence par répartir les don-nées en classes, chaque classe correspondant à un intervalle de R. On représente alors cetteclasse par un rectangle vertical dont l’aire est proportionnel à son effectif.

Si l’échantillon est de taille n et les classes sont les K intervalles [a0, a1[, [a1, a2[, . . . , etenfin [aK−1, aK[ et si on note n1, . . . , nK les effectifs respectifs de ces classes, les rectanglesde l’histogramme auront respectivement pour hauteur

n1n

a1 − a0,

n2n

a2 − a1, . . . ,

nKn

aK − aK−1

de sorte que l’aire totale des rectangles soit égale à 1 (comme l’aire sous la courbe d’unedensité).

Sous Scilab, la commande histplot permet de tracer un tel histogramme. Elle s’utiliseavec la syntaxe suivante : histplot(n,x) où x est le vecteur des données et où n est soit unentier soit un vecteur.

Lorsque n est un entier, les classes sont de même amplitude au nombre de n (tous lesrectangles ont la même largeur).

Lorsque n est un vecteur, ses composantes représentent les extrémités des classes.Taper help histplot pour avoir l’aide.Par exemple, voici un échantillon donnant la taille en cm de vingt personnes :

162, 164, 191, 166, 166, 157, 168, 183, 167, 172,

161, 172, 174, 174, 177, 175, 172, 176, 175, 182

-->n=8;x=[162,164,191,166,166, 157,168,...-->183,167,172,161,172,174,174, 177,...-->175,172,176,175,182];-->histplot(n,x)

30.4 Fonction d’entrée et sortie : « input » et « disp ».

30.4.1 La commande « input »

On peut dans le cadre de certains programmes avoir à demander à l’utilisateur de four-nir des données supplémentaires comme une valeur, une suite de nombres, ou une chaînede caractères.

On dispose pour cela de la fonction input . Cette fonction envoie un message àl’utilisateur et se met en attente d’une réponse de l’utilsateur.

Elle a pour syntaxe : x=input(" message")

--> a=input(" Entrez un nombre")Entrez un nombre : 5a =5.

--> nom=input("Entrez votre nom : ", "string")Entrez votre nom : SIMPSONnom =SIMPSON

L’option "string" dans la fonction input permet de saisir une chaîne de caractères.

Page 28: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

28 Scilab

30.4.2 La commande « disp »

L’exécution d’une instruction Scilab terminée par une virgule ou un retour à la ligneproduit automatiquement l’affichage du résultat.

Lorsque l’instruction se termine par un point-virgule ou lorsqu’elle elle se trouve dansune fonction Scilab, la visualisation est désactivée. On peut alors explicitement demanderla visualisation en utilisant la fonction « disp ».

--> t=5;--> disp((1+sqrt(t))/2," la solution est ");

30.5 Programmer avec Scilab

30.5.1 Les scripts

L’environnement Scilab contient un éditeur de texte intégré. Cet éditeur peut être lancépar l’instruction

--> scinotes

directement depuis la console.Un programme Scilab est une suite d’instructions. Ces instructions peuvent être pla-

cées dans un fichier se terminant par « .sce », appelé script, à l’aide de l’éditeur de texteintégré à Scilab.

Ouvrez l’éditeur de texte et taper les lignes suivantes :

// Representation graphique de la fonction// x->e^-x^2/2/(sqrt(2*pi)) sur l’intervalle [-1,1]a=-1;b=1;n=100;x=linspace(a,b, n);y=exp(-x.^2/2)/sqrt(2*%pi);clf();plot(x,y,"-ob")

puis enregistrez votre fichier sous le nom « essai.sce. »On peut exécuter ce script dans la console avec l’instruction

--> exec("essai.sce")-->// Representation graphique de la fonction-->// x->e^-x^2/2/(sqrt(2*pi)) sur l’intervalle [-1,1]-->a=-1;-->b=1;-->n=100;-->x=linspace(a,b,n);-->y=exp(-x.^2/2)/sqrt(2*%pi);-->clf();-->plot(x,y,"-r")

Tout se passe alors comme si les instructions du fichier avaient exécutées l’une aprèsl’autre directement dans la console et affiche les différentes instructions. Le script pouvantêtre très long et l’affichage souvent inutile, on termine la commande exec par un point-virgule.

Page 29: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 29

--> exec("essai.sce") ;

Pour ajouter des commentaires à un script, ceux-ci doivent être précédés de //

comme dans l’exemple ci-dessus.

Conseils de mise en forme des scripts.— Ecrire une seule instruction par ligne— Une instruction trop longue pour tenir sur une seule ligne peut se continuer surune nouvelle ligne : il suffit de taper · · · à la fin d’une ligne pour indiquer que l’ins-truction se poursuit sur la ligne suivante.— Donner à votre script un nom significatif pour repérer rapidement vos programmes.— Mettez des commentaires aux passages compliqués pour vous y retrouver par lasuite, si vous devez reprendre votre script lors d’une autre séance.Les lignes de commentaires commencent par le symbole //— Sautez des lignes blanches et n’hésitez pas à indentez vos boucles, structuresconditionnelles,etc. surtout lorsqu’elles s’imbriquent afin de bien faire ressortir lastructure du programme.

30.5.2 Algorithmes

Un algorithme est la description non ambigüe en un nombre fini d’étapes d’uncalcul ou de la résolution d’un problème.

Un programme est la traduction d’un algorithme dans un langage de programmation( compréhensible ) par une machine.

L’algorithme suivant calcule les racines réelles d’une équation du second degré :

/ / pour calculer les racines réelles de l’equation ax2 + bx + c = 0 :(1) si a = 0 alors renvoyer un message d’erreur(2) sinon

(a) calculer ∆ = b2 − 4ac(b) si ∆ ≥ 0 alors

(a’) calculer δ =√

(b’) x1 = (−b − δ)/(2a)(c’) x2 = (−b + δ)/(2a)

(c) sinon message d’erreur

La description est finie, il n’y a que trois cas : a = 0 ou ∆ ≥ 0 ou ∆ < 0. Elle est nonambigüe car on sait réaliser toutes les opérations (+, –, ×, /, √ ).

Exercice 23. Sans chercher à les implémenter sous Scilab, les suites d’instructions sui-vantes constituent-elle des algorithmes ou non ?

(1) j = 0

(2) a = 0

(3) tant que a ≤ 100 fairea = a + 2 j

j = j + 1fin tant que

(4) afficher a

Page 30: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30 Scilab

(1) j = 0

(2) a = 0

(3) tant que j ≥ 0 fairea = a + 2 j

j = j + 1fin tant que

(4) afficher a

(1) s = 1

(2) x = 2

(3) si s est pair alors afficher ssinon faire s = s + xfin si

(4) afficher s

30.5.3 Boucle for

Lorsqu’on veut répéter une suite d’instructions un certain nombre de fois, on utiliseune boucle itérative « for ».

La syntaxe est

for i=a:b, instruction_1, instruction_2, ..., instruction_finale, end

Dans un script, on peut utiliser la présentation suivante, dans laquelle, le passage à laligne est équivalent à une virgule :

for i=a:binstruction_1instruction_2instruction_finaleend

où a est l’indice initial et b l’indice final.

La boucle « for » exécute les instructions qu’elle contient jusqu’au mot clé « end ».Dans l’exemple ci-dessus, les résultats des instructions seront affichés dans la console aumoment de l’exécution. Pour éviter l’ affichage du résultat d’une instruction, celle-ci doitêtre suivie d’un point-virgule.

Par exemple, pour calculer le produit des 100 premiers entiers (c’est à dire 100!), onpourra taper dans un script :

r = 1;for i=1:100r = r * i ;enddisp(r);

et l’exécuter.

Si la suite (un) est définie par u0 = 1 et pour tout n ∈ N, un+1 = un + sin un alors, onobtient u7 ainsi :

Page 31: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 31

u=1;for i=1:7u=u+sin(u);enddisp(u, "le terme d’indice 7 est ")

Pour réaliser une boucle dont l’indice va de a à b par pas de s, la syntaxe est la suivante

for i=a:s:b, instruction_1, instruction_2, ..., instruction_finale, end

ou, dans un script,

for i=a:s:binstruction_1instruction_2...instruction_finaleend

Par exemple, pour calculer la somme des 100 premiers entiers impairs, on pourra faire

s = 0;for i=1:2:199,s= s + i;enddisp(s, " la somme des 100 premiers entiers impairs est ")

Pour réaliser une boucle dont l’indice parcourt les éléments d’un certain vecteur v, la

syntaxe est

for i=vinstruction_1instruction_2...instruction_finaleend

Les instructions sont exécutées en donnant successivement à la variable i les valeurs du

vecteur v.

Page 32: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

32 Scilab

Conseil. Initialisez toujours les vecteurs et les matrices. La boucle ci-dessous

--> n=100000;--> x=zeros(1,n);--> timer(); for i=1:n,x(i)=i/(1+i^2);end;timer()ans =0.424049

est beaucoup plus rapide à l’exécution que la suivante

--> n=100000;--> timer(); for i=1:n,y(i)=i/(1+i^2);end; timer()ans =36.727156

et donne le même résultat.D’une part, la première permet de contrôler la taille du résultat (un vecteur ligne,alors que la seconde fournit un vecteur colonne). Et surtout, si le vecteur x est déjàdéfini et de longueur supérieure à n, la commande for i=1:n x(i)=i;end; ne mo-difie que les n premières composantes de x, et laisse les suivantes en place, ce quiconstitue une source fréquente d’erreur.D’autre part, ces commandes ne sont pas optimales. Il faut autant que faire se peutéviter les boucles lorsqu’on manipule des vecteurs ou des matrices qui ralentissentbeaucoup l’execution des programmes et priviliéger le plus possible les structures vec-torisées.Par exemple, la boucle précédente peut être remplacée par l’instructionx=(1:n)./((1:n).^2+1).

Exercice 24. Construire la matrice 10 × 10 dont le coefficient d’indices i, j est i − j.

Exercice 25. Recopiez les lignes suivantes dans un script et exécutez le.Que fait-il ?

L=[1 3 -2 7 8 5 -4 12 ];s=0;for i=L, s=s+i; ends

Faire de même avec les instructions suivantes

L=[1 3 -2 7 8 5 -4 12 ];s=0;for i=L, s=s+i^2; ends

Exercice 26. On considère l’algorithme suivant

S = 0;pour k=1 a N faireS = S + k;fin

Page 33: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 33

(a) Quel est le résultat produit par cet algorithme ?(b) Traduire cet algorithme en un script Scilab.(c) Pour un entier N, combien cet algorithme fait il d’opérations ?

Exercice 27. En vous aidant de l’algorithme suivant :

P = 1; F = 1; S = 1; x = 2;pour k=1 à N faireP = x ∗ P;F = k ∗ F;S = S + P/F;fin

écrire un script Scilab permettant de calculer la somme

S =

N∑k=0

xk

k!

pour un entier N donné.

Exercice 28. Ecrire un script Scilab permettant de calculer le produit

p =

N∏k=1

(1 −

k365

),

pour un entier N donné par l’utilisateur.

On peut aussi imbriquer plusieurs boucles, lorsqu’on a à faire à des objets doublementindexés.Par exemple, pour calculer la somme

S =

11∑i=1

12∑j=i+1

(i − j)2

on peut créer un script Scilab contenant les lignes suivantes

// calcul de la somme des (i-j)^2 pour les couples// (i,j) tels que 1<=i<j<=12

s=0;

for i= 1:11 dofor j=i+1:12 dos=s+(i-j)^2;end

end

disp(s, "la somme double vaut" )

Page 34: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

34 Scilab

Exercice 29. Ecrire un script demandant un entier n et affichant la matrice dont leslignes sont les n premieres lignes du triangle de Pascal.

Exercice 30. Soit (an)n≥1 la suite définie par a1 = 1 et pour tout n ≥ 1, an+1 = 1 +

a1a2 . . . an. En calculant les sommes partielles d’indice N pour quelques valeurs de N,

que pensez vous de la convergence de la série∑n≥1

1an

.

30.5.4 Boucle while

La boucle « for » permet de répéter plusieurs fois une instruction ou un groupe d’ins-truction, le nombre de répétitions êtant défini lors de la rédaction de l’algorithme.

Mais on peut aussi indiquer à quelle condition l’itération doit se poursuivre ou non.Dans ce cas il est nécessaire de s’assurer que la condition d’arrêt sera remplie au bout d’unnombre fini de tours de boucle pour garantir que l’algorithme comporte un nombre finid’étapes (condition de terminaison).

On utilisera alors une boucle « while » dont la syntaxe est

while condition then instruction_1, instruction_2, ..., instruction_finale, end

ou, dans un script,

while condition theninstruction_1instruction_2...instruction_finaleend

Dans la syntaxe ci-dessus, la condition se formule à l’aide des opérateurs de test « <,>, <=, >=, =, <> » et des opérateurs logiques « &, | »

Par exemple, la boucle suivante calcule le plus petit nombre Scilab qui ajouté à 1 donneun résultat numériquement différent de 1 :

--> x=1;--> while 1+x>1 then x=x/2; end--> x

Un autre exemple : le coefficient binômial(

np

)vérifie la relation de récurrence

(np

)=

np

(n−1p−1

). Pour avoir

(137

), on peut procéder ainsi :

Page 35: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 35

// on calcule 7 parmi 13c=1;n=13;p=7;while (n>0)&(p>0) then

c=c*n/p;n=n-1;p=p-1;end

disp(c," la valeur de 7 parmi 13 est ")

Exercice 31. Que calcule l’algorithme suivant :

n=input(" Entrez un entier non nul n : ")s=0; i=2;while i<=n thens=s+i;i=i+2;end;disp(s);

Et l’algorithme suivant :

n=input(" Entrez un entier non nul n : ")f=1;while n>0 thenf=n*f;n=n-1;end;disp(f);

Dans une boucle « while », le programme rencontre d’abord la condition-test et l’éva-lue avant d’executer les instructions. La condition est une condition de maintien dans laboucle : tant que la condition est vraie, le corps de la boucle est exécuté. Il est doncpossible que l’action de la boucle ne soit jamais exécutée si dès le début, la condition estfausse ou si l’initialisation est erronée. Il faut aussi s’assurer que la condition devient fausseen un nombre fini d’étapes, sinon la boucle est exécutée sans fin.

Conseil. Afin d’éviter les boucles infinies, il est préférable dans une boucle while decontroler aussi le nombre d’itérations...

Exercice 32. En étudiant f : x ∈] − 1,+∞[ 7→ ln(1 + x) − x et g : x ∈] − 1,+∞[ 7→ln(1 + x) −

x1 + x

on montre que les suites données par

un = 1 +12

+ . . . +1n− ln n, vn = 1 +

12. . . +

1n− ln(n + 1)

sont adjacentes et convergent vers un réel γ appelé constante d’Euler et de plus vn ≤ γ ≤

un pour tout n ∈ N∗. On peut prendreun + vn

2comme approximation de γ et pour tout

n ∈ N∗, on a ∣∣∣∣γ − un + vn

2

∣∣∣∣ ≤ ln(1 +

1n

)

Page 36: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

36 Scilab

Ecrire un script qui demande une précision ε à l’utilisateur et qui renvoie une valeurapprochée de γ à ε près.

Exercice 33. Calcul approchée de∞∑

k=1

1k2 . Pour tout n ∈ N∗, on pose sn =

n∑k=1

1k2 et

s =

∞∑k=1

1k2 .

(1) Montrer l’encadrement suivant pour tout n ∈ N∗

sn +1

n + 1+

12(n + 1)2 < s < sn +

1n−

12(n + 1)2

(2) Complétez le script suivant pour obtenir une valeur approchée de s à 10−4 près :

n=input("Entrez une valeur de n : ")s= ;i= ;while thens= ;i= ;enddisp(s, "la somme approchee de la serie ")

30.5.5 Instructions conditionnelles

Lorsqu’on on veut effectuer une certaine instruction si une certaine condition est vé-rifiée et une autre dans le cas contraire, on utilisera la structure « if. . . then. . . else. . . end »,dont la syntaxe est l’une de celle ci-dessous :

if conditions then groupe_d_instructions, end

if conditions then groupe_d_instruction_1, else groupe_d_instruction_2, end

ou leurs équivalents dans les scripts :

if conditions thengroupe_d_instructions

end

if conditions thengroupe_d_instruction_1

else groupe_d_instruction_2end

L’instruction suivant « then » n’est exécutée que si « conditions » a la valeur « true »,l’instruction suivant « else » n’est executée que si « conditions » a la valeur « false. »

Par exemple, l’instruction suivante est aisée à saisir :

if x=0 then y=y+1, else z=z-1, end

si x a la valeur 0, la variable y sera incrémentée d’une unité et le programme quittera lastructure conditionnelle sans modifier la variable z pour passer à l’instruction suivante.Dans le cas contraire, si x n’est pas nul, le programme décrémentera la variable z d’uneunité et quittera la structure conditionnelle sans modifier la variable y.

Page 37: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 37

Exercice 34. Ecrire un script demandant d’entrer deux nombres et qui affiche le plusgrand des deux précédé du message « le plus grand est ».

Exercice 35. Complétez le script suivant demandant d’entrer un vecteur (ligne) et quiaffiche la plus grande composante de ce vecteur précédé du message « le plus grandelement est ».

x=input("Entrez un vecteur x : ")l=size(x,2);max=x(1);if l=1 then max= ;

else for doif x(i)>max thenmax= ;end

endenddisp(max,"le maximum est ")

Exercice 36. Représenter sur l’intervalle [−2, 2] la fonction F définie sur R+ par

F(x) =

1 +√

x2 − 1 si − 2 ≤ x ≤ −1x2 si − 1 ≤ x ≤ 0sin( π2 x) si 0 ≤ x ≤ 1

11 + x2 si 1 ≤ x ≤ 2

On utilisera une discrétisation régulière de cet intervalle avec 100 points.

30.5.6 Les fonctions Scilab

Si certaines opérations doivent être appliquées à plusieurs paramètres, le langage Sci-lab permet de définir de nouvelles fonctions. Une fonction est un programme explicitant lamanière d’appliquer ces opérations aux arguments qui lui seront fournis lors de l’exécution.

La définition d’une fonction Scilab commence par le mot clé function suivi de ladescription de la syntaxe d’appel et des instructions à effectuer. Enfin, elle doit être terminéepar le mot clé endfunction.

Le plus souvent, on définit une fonction dans un fichier se terminant par « .sci » 5 Lenom du fichier doit obligatoirement être le même que le nom de la première 6 fonctionéditée dans le script.

Par exemple, pour définir la fonction x 7→ (1 + 3x + 2x2 − x4)e−x, on écrira dans unfichier P.sci :

function y=P(t)y=(1+3*t+2*t^2-t^4)*exp(-t^2)endfunction

5. Ce n’est pas obligatoire mais cela permet d’identifier les scripts de fonctions des autres scripts.6. On verra qu’on peut définir plusieurs fonctions dans un même script

Page 38: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

38 Scilab

Il faut ensuite charger la fonction dans Scilab, par la commande

--> exec("P.sci")

On peut alors utiliser cette fonction dans la console comme s’il s’agissait d’une autrefonction Scilab :

--> P(1), P(-1), P(sqrt(3))ans =1.8393972

ans =- 0.3678794ans =0.1591271

--> t=sqrt(log(3))t =1.0481471

--> P(t)ans =1.7115723

Pour représenter graphiquement cette fonction, il suffit de passer par la commandeplot :

-->x=linspace(-10,10,1000);-->plot(x,P)

Si on essaie d’appliquer la fonction P à un vecteur, on obtient le message d’erreursuivant

--> P([1,2,-3])!--error 10Multiplication incoherente.at line 2 of function P called by :P([1,2,-3])

Les opérations mises en jeu dans la description de la fonction ne permettent pas del’appliquer aux vecteurs élément par élément. Il faut donc modifier la fonction en utilisantdes opérations vectorielles cohérentes. On modifie donc le fichier ainsi :

function y=P(t)y=(1+3*t+2*t.^2-t.^4).*exp(-t.^2)endfunction

Après chargement de la fonction modifiée dans Scilab, il est possible de l’appliquervectoriellement :

Page 39: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.5 Programmer avec Scilab 39

--> exec("P.sci")-->function y=P(x)-->y=(1+3*x+2*x.^2-x.^4).*exp(-x.^2)-->endfunctionAttention : Redefinition de la fonction : P

--> P([1,2,-3])ans =1.8393972 - 0.0183156 - 0.0087621

Exercice 37. Représenter la densité et la fonction de répartition de loi exponentielle deparamètre 1.

Exercice 38. Representer sur un même graphique les fonctions x 7→ e−x22 et x 7→(

1 + x2

2n

)−npour n = 1, 2, . . . , 10.

Les fonctions peuvent avoir un nombre quelconque de paramètres d’entrée et de sortiede telle sorte que la syntaxe de la fonction qui a un nombre fixe d’arguments est la suivante :

[y_1,y_2,...,y_n]=mafonction(x_1,x_2,...,x_p)

Les arguments d’entrée et de sortie sont séparés par des virgules, et délimités par desparenthèses pour les arguments en entrée et par des crochets en sortie.

Par exemple, la fonction suivante renvoie le plus petit et le plus grand de deux nombres :

// Plus grand et plus petit de deux nombres// m: le plus petit, M: le plus grand[m,M] = min_max(x,y)if x<=y then

m=x;M=y;else m=y;

M=x;endendfunction

Pour récupérer toutes les valeurs en sortie d’une fonction, il faut les demander expli-citement en les nommant sous forme d’un vecteur, sinon, c’est la première valeur en sortie(la plus à gauche) qui est retournée.

--> [m,M]=min_max(2.3,-4.7)

--> m=min_max(2.3,4.7)

Page 40: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

40 Scilab

Exercice 39. Ecrire une fonction shuffle.sci ayant pour arguments d’entrée deuxvecteurs x et y et qui renvoie le vecteur z obtenu en alternant les composantes de x et y(dans le cas ou les vecteurs x et y n’ont pas la même taille, on brasse les composantesjusqu’à épuiser le vecteur de plus petite taille).

Exercice 40. Ecrire une fonction Scilab antitranspose.sci qui prend en argumentd’entrée une matrice A qui renvoie en sortie la matrice obtenue en retournant A par rap-

port à l’antidiagonale, c’est à dire que la matrice d’entrée

−4 −3 −2 −11 2 3 45 6 7 8

doit produire

en sortie la matrice

8 4 −17 3 −26 2 −35 1 −4

.

30.6 Résolution de l’équation f (x) = 0

30.6.1 Dichotomie

Si f : [a, b] −→ R est une fonction continue, le procédé de dichotomie pour résoudrel’équation f (x) = 0 sur l’intervalle [a, b] consiste à prendre pour nouvel intervalle encadrantla solution celui de [a, a+b

2 ] ou [ a+b2 , b] sur lequel f change de signe, en testant lequel de

f (a) f ( a+b2 ) ou f ( a+b

2 ) f (b) est strictement négatif.Le nouvel intervalle a une longueur de moitié inférieur à l’intervalle initial. On a donc

gagné en précision. On répète le procédé jusqu’à obtenir la précision souhaitée.Par exemple, pour approcher la solution positive de l’équation x2 − 2 = 0 à 10−3 près,

on pourra utiliser le script suivant :

// Approximation de racine de 2 par// dichotomieprec=1D-3;a=1;b=2;while b-a>prec thenif (a^2-2)*(((a+b)/2)^2-2)<0 then

a=a;b=(a+b)/2;

elsea=(a+b)/2;b=b;

endenddisp((a+b)/2, " la solution approchee est ");

Exercice 41. Déterminer une valeur approché de la solution sur l’intervalle [−1, 1] del’équation 1 + x − 2 sin2 x = 0 à 10−3 près.

Page 41: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.6 Résolution de l’équation f (x) = 0 41

30.6.2 Méthode du point fixe

Exercice 42. On souhaite résoudre l’équation : xe12 x2− 1 = 0 qui est équivalente à

x = e−12 x2

. Les solutions sont donc les points fixes de la fonction f : t 7→ e−12 t2

.

(1) Représenter graphiquement la fonction t 7→ e−t22 sur l’intervalle [−3, 3] et encadrez

la ou les solutions de l’équation.

(2) Montrer que l’équation f (x) = x admet une unique solution λ dans [0, 1].

(3) Montrer que : ∀x ∈ [0, 1], | f ′(x)| ≤ 1√

e

(4) On pose u0 = 0 et pour tout n ∈ N, un+1 = f (un).

(a) Ecrire un script demandant un entier n strictement poitif qui affiche en co-lonne les n premiers termes de la suites. Appliquer avec n = 20. La suitesemble-t-elle converger ?

(b) Montrer que pour tout n ∈ N, un ∈ [0, 1].

(c) Montrer que : ∀n ∈ N, |un+1 − λ| ≤1√

e |un − λ|

(d) En déduire que : |un − λ| ≤(

1√

e

)n

(5) Ecrire un script demandant une précison ε qui afiche une valeur approchée de λ àε près.

30.6.3 Méthode de Newton

On suppose maintenant que f :]a, b[−→ R est une fonction de classe C1 telle que f ′

ne s’annule pas sur ]a, b[, a, b dans R. On définit alors par récurrence une suite (xn)n∈N par

x0 ∈]a, b[ et xn+1 = xn −f (xn)f ′(xn)

Si (xn)n converge vers un réel x alors ( f (xn))n converge vers f (x), ( f ′(xn))n converge vers

f ′(x) car f et f ′ sont continues et donc à la limite, on aura : x = x −f (x)f ′(x)

soit f (x) = 0.

Exercice 43. On suppose qu’on a montré que l’équation f (x) = 0, avec f (x) = x3−2x−5admet une unique racine α avec 2 < α < 2, 1.

(0) Vérifiez l’hypothèse graphiquement.

(1) Ecrire l’équation de la tangente T au graphe de f au point (x, f (x)). Montrer que T

coupe l’axe des x au point d’abscisse g(x) = x −f (x)f ′(x)

(2) On considère la suite définie par récurrence par

x0 = 2.1, et ∀n ∈ N un+1 = g(un)

Interpréter graphiquement cette suite. Calculer les premières valeurs de la suite.La suite semble décroître et stationner à 2, 0945514815 à partir de u3.

(3) Montrer que, sur I = [α,+∞[ la fonction g est croissante et vérifie g(x) ≥ α. Onnotera que cela montre que I est stable et donc que la suite (un) est bien définieMontrer que un > α pour tout n puis que (un) est décroissante.

(4) Montrer que (un) a une limite que l’on précisera.

Page 42: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

42 Scilab

(5) Montrer que

g(x) − α =(x − α)2(2x + α)

3x2 − 2En déduire que |un+1 − α| ≤ 0.63 |un − α|

2 puis par récurrence que

|un − α| ≤1

0.630.632n

30.7 Calcul de valeurs approchées d’une intégrale

30.7.1 Methode des rectangles

Soit f : [a, b] −→ R une fonction suffisamment régulière. On cherche à approcher la

valeur de l’intégrale I f =

∫ b

af (x)dx.

Commençons par le principe.On approche l’intégrale I f par l’aire d’un rectangle construit sur l’intervalle [a, b], de

hauteur f (ξ), c’est à dire (b− a) f (ξ) où ξ est un point de l’intervalle [a, b] à choisir. On faitdonc l’approximation

I f ≈ I = (b − a) f (ξ)

L’erreur commise par cette approximation est e = |I − I f |. Si f est constante : f (x) = c alors∫ b

af (x)dx =

∫ b

acdx

= c(b − a)= f (a)(b − a) = f (b)(b − a).

La formule du rectangle avec ξ = a ou ξ = b est exacte pour les fonctions constantes.Supposons f de classe C1 sur [a, b], on a alors pour tout x ∈ [a, b]

f (x) = f (a) +

∫ x

af ′(t)dt

de sorte que | f (x) − f (a)| ≤ |x − a|M où M = maxt∈[a,b]

| f ′(t)| puis

e =∣∣∣∣ ∫ b

af (x)dx − f (a)(b − a)

∣∣∣∣≤

∫ b

a| f (x) − f (a)|dx

≤ M(b − a)2

2Si l’intervalle [a, b] est de longueur assez grande, utiliser l’approximation par l’aire durectangle de hauteur f (a) construit sur l’intervalle [a, b] est très grossier. On subdivise alorsl’intervalle [a, b] en intervalles de longueurs suffisamment petites, et on utilise la formuledu rectangle sur chacun de ces « petits intervalles. »

Soit n ∈ N∗.Pour tout k ∈ ~0, n, posons ak = a + k

b − an

: on a donc a0 = a < a1 < . . . < an = bet [a, b] = [a0, a1] ∪ . . . ∪ [an−1, an].

La formule du rectangle appliquée à chacun des intervalle [ak, ak+1], 0 ≤ k ≤ n − 1donne ∫ ak+1

ak

f (t)dt =b − a

nf (ak) + ek,

Page 43: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.7 Calcul de valeurs approchées d’une intégrale 43

avec |ek | ≤M(b − a)2

2n2 où M = maxt∈[a,b]

| f ′(t)|. La relation de Chasles donne alors

∫ b

af (x)dx =

n−1∑k=0

∫ ak+1

ak

f (t)dt

=b − a

n

n−1∑k=0

f (ak) +

n−1∑k=0

ek,

etn−1∑k=0

ek ≤ n ×M(b − a)2

2n2 ≤M(b − a)2

2n

La formule du rectangle avec ξ = a conduit à la méthode des rectangles à gauche qui

consiste à approcher l’intégrale∫ b

af (x)dx par la somme

b − an

n−1∑k=0

f(a + k

b − an

)

et l’erreur commise est au plus(b − a)2

2nmaxt∈[a,b]

| f ′(t)|. En choisissant l’approximation par

l’aire du rectangle de hauteur f (b) construit sur l’intervalle [a, b], on obtient la méthode des

rectangles à droite qui consiste à approcher l’intégrale∫ b

af (x)dx par la somme

b − an

n∑k=1

f(a + k

b − an

).

Des calculs identiques montrent que l’erreur commise est au plus(b − a)2

2nmaxt∈[a,b]

| f ′(t)|.

Théorème 1. Si f ∈ C1([a, b],R) alors pour n ≥ 1∣∣∣∣∣∣∫ b

af (x)dx −

b − an

n−1∑k=0

f(a + k

b − an

) ∣∣∣∣∣∣ ≤ M(b − a)2

2n

où M = maxt∈[a,b]

| f ′(t)|.

Exercice 44. Ecrire une fonction foncrep_n01.sci recevant en entrée un réel x et don-nant une valeur approchée à 10−3 près de l’intégrale ϕ(x) = 1

√2π

∫ x−∞

e−12 t2

dt.

On remarquera que pour x ∈ R, ϕ(x) = 12 + 1

√2π

∫ x0 e−

12 t2

dt

Comparer avec∫ x

0

(1 +

t2

2n

)−n

dt pour n = 1, 2, . . . , 10.

Exercice 45. Ecrire un script rectangle2.sce calculant l’intégrale de f (x) = ex + e−x

sur l’intervalle [0, 1] par la méthode des rectangles à gauche en découpant [0, 1] en 100intervalles de même longueur.

Page 44: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

44 Scilab

30.7.2 Formule du point milieu

La formule du rectangle avec ξ =a + b

2s’appelle formule du point milieu.

Cette formule est exacte pour les fonction polynôme de degré au plus 1 : si f (x) =

λx + µ alors∫ b

af (x)dx =

∫ b

a(λx + µ)dx

= λ

∫ b

axdx + µ

∫ b

adx

= λ(b2 − a2

2) + µ(b − a)

= (b − a)(λ

a + b2

+ µ

)= (b − a) f

(a + b

2

)Pour le calcul de l’erreur commise, on a

e =∣∣∣∣ ∫ b

af (x)dx − f

(a + b

2

)(b − a)

∣∣∣∣≤

∫ a+b2

a

∣∣∣∣ f (x) − f(

a + b2

) ∣∣∣∣dx +

∫ b

a+b2

∣∣∣∣ f (x) − f(

a + b2

) ∣∣∣∣dx

Si f est de classe C1 en utilisant les résultats précédents, on obtient une erreur d’au plus

M2

(b − a

2

)2

+M2

(b − a

2

)2

= M(b − a)2

8La méthode à n pas consistant à diviser l’intervalle [a, b] en n intervalles de longueurs égaleset à appliquer la formule du point milieu sur chacun de ces intervalles consiste à approcher∫ b

af (x)dx par la somme

b − an

n−1∑k=0

f(a +

(k +

12

)b − a

n

).

C’est la méthode des rectangles au point milieu.

Pour une fonction de classe C1, on aura une erreur de l’ordre de O(

1n

)comme pour la

méthode des rectangles à gauche ou à droite.Supposons maintenant f de classe C2 et posons

F(x) =

∫ x

a+b2

f (t)dt, x ∈ [a, b].

L’erreur devient

e =∣∣∣∣ ∫ b

af (x)dx − f (c)(b − a)

∣∣∣∣, c =a + b

2=

∣∣∣∣F(b) − F(a) − f (c)(b − a)∣∣∣∣

=∣∣∣∣F(b) − F(a) − F′(c)(b − a)

∣∣∣∣D’après la formule de Taylor avec reste intégral appliquée à F de classe C3(ie. C2+1),

on a

F(b) − F(c) = (b − c)F′(c) +(b − c)2

2F′′(c) +

∫ b

c

(b − t)2

2F(3)(t)dt

F(a) − F(c) = (a − c)F′(c) +(a − c)2

2F′′(c) +

∫ a

c

(a − t)2

2F(3)(t)dt

Page 45: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.8 Algèbre linéaire 45

ce qui donne par différence

F(b) − F(a) − F′(c)(b − a) =

∫ b

c

(b − t)2

2F(3)(t)dt −

∫ a

c

(a − t)2

2F(3)(t)dt

|F(b) − F(a) − F′(c)(b − a)| ≤ M(b − c)3

6+ M

(a − c)3

6

≤ M(b − a)3

24où M = max

t∈[a,b]|F(3)(t)| = max

t∈[a,b]| f ′′(t)|.

Théorème 2. Si f ∈ C2([a, b],R) alors pour n ≥ 1∣∣∣∣∣∣∫ b

af (x)dx −

b − an

n−1∑k=0

f(a +

(k +

12

)b − a

n

) ∣∣∣∣∣∣ ≤ M(b − a)3

24n2

où M = maxt∈[a,b]

| f ′′(t)|.

Exercice 46. Ecrire un script permettant le calcul une valeur approchée de∫ 1

0

1√

1 + t2dt à une précision donnée ε en utilisant la méthode des rectangles au point

milieu.

30.7.3 Fonction de répartition de la loi normale centrée réduite

Exercice 47. Soit X une var normale centrée réduite. Donner une valeur approchée desprobabilités suivantes :

P(X ∈ [−1, 1]), P(X ∈ [−2, 2]), P(X ∈ [−3, 3])

30.8 Algèbre linéaire

30.8.1 Calcul matriciel

Operations matricielles :

Exercice 48. Effectuer les produits matriciels suivants(3 1 52 7 0

2 1 −1 03 0 1 80 −5 3 4

, (−3 0 5

2−4−3

, 2−4−3

· (−3 0 5)

Exercice 49. On pose

A =

2 −3 −5−1 4 51 −3 −4

, B =

−1 3 51 −3 −5−1 3 5

Vérifiez que

Page 46: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

46 Scilab

(1) AB = BA = 0

(2) A2 − B2 = (A − B)(A + B)

(3) (A + B)2 = A2 + B2

(4) A2 = A et B2 = B

Exercice 50. On pose

A =

2 −2 −4−1 3 41 −2 −3

, B =

2 −3 −5−1 4 51 −3 −4

Vérifiez que

(1) A2 = A et B2 = B

(2) AB = A et BA = B

Transposition :

Pour obtenir la transposée d’une matrice sous Scilab, on utilise l’opérateur ’ .

--> A=[1,2,3;4,5,6]A =1. 2. 3.4. 5. 6.

--> B=A’B =1. 4.2. 5.3. 6.

Exercice 51. Ecrire une matrice A aléatoire 3 × 5, puis faire calculer tAA et AtA.

Interprétation géométrique des matrices.

Page 47: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.8 Algèbre linéaire 47

Exercice 52. (1) Construire deux vecteurs x et y, le premier contenant les abscissesdes sommets de la figure ci-dessus, l’autre contenant les ordonnées. Vérifier queplot(x,y) trace la figure ci-dessus.

(2) Construire la matrice p de taille 2 × 10 dont la première ligne est x et la secondeest y.

(3) Former les matrices

A =

( 12 00 1

), B =

(1 00 1

2

), C =

(0 112 0

), D =

( 12 00 −1

), R =

(cos π

4 − sin π4

sin π4 cos π

4

)(4) Former la matrice ap=A*p et visualiser l’effet de la matrice A sur la figure ci-dessus

en superposant avec la figure d’origine.

(5) Faire le même travail avec les matrices B,C,D,R.

Rang d’une matrice.Pour obtenir le rang d’une matrice, la fonction Scilab est rank.

--> a=[1,1,1; 1,2,1; 0,1,0];--> rank(a)ans =2.

Exercice 53. Trouvez le rang des matrices suivantes

A =

2 0 13 1 −67 0 4

, B =

1 2 13 6 32 4 2

, C =

1 2 3 60 1 1 22 2 4 81 1 2 4

Page 48: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

48 Scilab

Exercice 54. Ecrire une fonction compatible.sci prenant comme argument d’entréeune matrice A et un vecteur v et retournant 1 si v ∈ Im A et 0 sinon.

Exercice 55. Soit F le sous-espace vectoriel de R4 engendré par les vecteurs

f1 =

6442

, f2 =

00−31

, f3 =

−24−14

, f4 =

4865

(1) Quelle est la dimension de F ?

(2) Les vecteurs suivants appartiennent-ils à F :

v1 =

20−20

, v2 =

12−849

, v3 =

111−1

Exercice 56. — Ecrire une fonction libre.sci prenant comme argument d’entrée unematrice A et retournant 1 si les colonnes de A forment une famille libre et 0 sinon.

— Ecrire une fonction base.sci prenant comme argument d’entrée une matrice Aet retournant une matrice B dont les colonnes forment une base de =A

Inverse d’une matrice carrée.Pour inverser une matrice carrée, quand cela est possible, la fonction Scilab est inv.

--> a=[1,2 ; 1,3];--> b=inv(A)b =3. - 2.- 1. 1.-->a*bans =1. 0.0. 1.

Exercice 57. Trouvez, à l’aide de Scilab, l’inverse des matrices suivantes :

A =

2 0 13 1 −67 0 4

, B =

2 0 0 03 1 0 07 0 4 0−1 1 0 1

30.8.2 Résolution de systèmes linéaires AX = B

De nombreux problèmes se ramènent à la résolution d’une équation de la forme AX =

B où A est une matrice, B un vecteur et X le vecteur inconnu.

Il existe plusieurs manières de résoudre un système de la forme AX = B avec Scilab :

Page 49: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.8 Algèbre linéaire 49

— on peut faire X=inv(A)*B, ce qui correspond à faire X = A−1B, lorsque A estinversible. Par exemple, le système suivant possède une unique solution (réolvez le à la

main d’abord)

x − 2y = 33x + 5y = −2

--> A=[1,-2;3,5]; b=[3;-2];--> x=inv(A)*bx =1.- 1.

— On peut faire la division matricielle à gauche X=A\B ce qui équivalent à faireX=inv(A)*B lorsque A est une matrice carrée inversible.

--> A=[1,-2;3,5]; b=[3;-2];--> x=A\bx =1.- 1.

Lorsque A n’est pas une matrice inversible ou n’est pas carrée, et si le système estcompatible (c-à-d b ∈ Im A) alors la division matricielle renvoie une solution particulière

du système. Par exemple, avec le système suivant

3x + y + 4z = −26x + 2y + 8z = −4 on obtient

--> A=[3,1,4;6,2,8]; b=[-2;-4];--> x=A\bx =- 0.250.- 0.3125--> A*x-bans =0.0.

Exercice 58. Appliquez cette méthode au système suivant :3x + y + 4z = −2

6x + 2y + 8z = 1

(1) Le vecteur trouvé par Scilab est-il une solution ?

(2) Le système a-t-il des solutions ?

La méthode x=A\b ne permet pas d’avoir toutes les solutions en général et , parfois, neconduit même pas à une solution du système 7. Il faut donc être prudent quand on l’utilise.

7. Si A n’est pas carrée mais de rang maximal, l’instruction x = A\B renvoie la solution au sens des moindrescarrées, c’est à dire telle que la norme du vecteur AX − B est minimal.

Page 50: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

50 Scilab

— On peut aussi utiliser la fonction linsolve : si le système est compatible, l’instruc-tion [x0, kerA]=linsolve(A,-B) permet de retourner une solution particulière x0 et unebase du noyau de A formée par les colonnes de la matrice kerA.

Appliquons cette méthode au système suivant :

x + y − z + t = 2x − y + z + t = 2

--> A=[1,1,-1,1;1,-1,1,1]; b=[2;2];--> [x0,kerA]=linsolve(A,-b)kerA =0.0648783 - 0.70412410.7041241 0.06487830.7041241 0.0648783- 0.0648783 0.7041241x0 =1.4.807D-177.211D-171.

Effet des erreurs d’arrondi

Exercice 59. Soit la matrice A =

10 7 8 77 5 6 58 6 10 97 5 9 10

les vecteurs b =

32233331

et ε =

0.01−0.010.01−0.01

.Résoudre les systèmes Ax = b et Ay = b + ε.Conclusion.

Suite récurrente homographique

Exercice 60. On considère la suite définie par x0 ∈ R et pour tout n ∈ N, xn+1 = axn+bcxn+d .

– x0 = 3 et (a, b, c, d) = (1, 2, 1, 1). Essayez avec d’autres valeurs de x0 (parexemple −1.5).

– x0 = 3 et (a, b, c, d) = (1, 1,−2, 1).– x0 = 3 et (a, b, c, d) = (1, 1,−1, 1).

Soit A la matrice(a bc d

)et u0 le vecteur

(x0 1

).

Comment obtient-on xn+1 à l’aide de An et u0 ?On considère la suite (xn) pour (a, b, c, d) = (3, 5, 1, 2). Déterminer la valeur x0

pour laquelle x6 = −2.

Température dans une grille métallique

Exercice 61. Dans une grille de fils métaliques, la température aux points du bord estmaintenue constante, comme indiqué sur le schéma ci-dessous.

Quand l’équilibre thermique est atteint, la température d’une maille intérieure estégale à la moyenne des températures des mailles adjacentes.

Par exemple, T2 =T1 + T7 + T3 + 200

4.

Trouvez les températures des huit mailles intérieures.

Page 51: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.8 Algèbre linéaire 51

T1

T2

T3 T4 T5

T7 T6

T8

0

0

0

0

0200

200

200

0 200 400

Interpolation polynômiale

Exercice 62. Etant donnés une fonction f continue sur [0, 1] et n + 1 points distincts(x0, x1, . . . , xn) de l’intervalle [0, 1], on cherche un polynôme P de degré au plus n véri-fiant

∀i ∈ ~0, n, P(xi) = f (xi).

En notant (a0, a1, . . . , an) les coefficients de P dans la base canonique

P =

n∑k=0

akXk

on doit avoir

∀i ∈ ~0, n,n∑

k=0

ak xki = f (xi)

On note F le vecteur colonne dont la ie composante est f (xi−1) et U le vecteur colonneinconnu des coefficients de P.

(1) Montrer que le problème se ramène à résoudre le système matriciel

AU = F

où A est une matrice à déterminer.

(2) Ecrire un script demandant un entier n qui construit le vecteur dont les compo-santes sont 0, 1

n ,2n , . . . ,

n−1n , 1 et la matrice A.

(3) On fixe n = 5 et on prend pour f la fonction t 7→ ecos 5t. Représenter graphiquementle polynôme P et la fonction f sur un même graphique.

Equilibre d’une économie.On veut déterminer l’équilibre entre la demande et l’offre de certains biens. On sup-

pose que m usines produisent n ≤ m produits différents. Ces usines doivent répondre àune demande interne (l’entrée) et à une demande externe (la sortie) provenant des consom-mateurs. Leontief a proposéen 1930, un modèle de production linéaire, c’est à dire danslequel la sortie est proportionnelle à l’entrée. Sous cette hypothèse, l’activité des usines estentièrement décrite par deux matrices :

Page 52: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

52 Scilab

— la matrice d’entrée C = (ci j) où ci j représente la quantité du ie bien absorbé par laje usine sur une période fixée, et

— la matrice de sortie P = (pi j) où pi j représente la quantité du ie bien produit par laje usine sur la même période fixée.

La matrice A = P−C est appelée matrice d’entrée-sortie : lorsque ai j est positif (resp.négatif), il représente la quantité du ie bien produit (resp. absorbé) par la je usine.

On suppose aussi que le système de production satisfait à la demande du marché,représentée par un vecteur b = (bi) où bi représente la quantité du ie bien absorbée par lemarché.

L’équilibre est atteint quand le vecteur x = (xi) représentant la production totale estégale à la demande totale, c’est à dire vérifie Ax = b.

Lorsque les usines produisent des biens différents, on a n = m et P = In.

Exercice 63. On considère un ensemble de vingt usines qui produisent vingt biensdifférents. On suppose que la matrice C a pour coefficients ci j = i + j tandis que bi = i.L’équilibre peut-il être atteint ?

30.9 Simulations aléatoires

30.9.1 Les générateurs aléatoires

— La commande rand permet de simuler une variable aléatoire uniforme sur [0, 1].— La commande rand(p,q) renvoie une matrice p × q aléatoire dont les coefficients

suivent des variables aléatoires indépendantes uniformes sur [0, 1]. Si A est une matrice, lacommande rand(A) fournit une matrice aléatoire de même taille que A. Pour obtenir desnombres suivant une loi normale centrée réduite, on utilisera l’option ’n’ dans la commanderand : rand(p,q,’n’).

Exercice 64. Effectuez N = 50, 100, 1000, 10000 réalisations d’une loi uniforme avecrand.

Représentez chaque fois l’échantillon sous forme d’un nuage de points sur l’inter-valle [0, 1]. On pourra utiliser l’option "+" de la commande plot.

Constatez graphiquement que lorsque N est grand, ces valeurs remplissent « uni-formément » l’intervalle [0, 1].

Représenter l’histogramme de cet échantillon en 100 classes et comparez le à larépartition théorique.

Exercice 65. Ecrire une fonction uniform.sci prenant en argument deux réels a < b etun entier n, qui retourne un échantillon de n nombres aléatoires suivant la loi uniformesur l’intervalle ]a, b[.

— On peut modifier le comportement par défaut pour obtenir des nombres aléatoiressuivant une loi normale centrée réduite par la commande rand(’normal’). Pour revenir aucomportement par défaut (loi unforme), on fera rand(’uniform’). Si vous n’êtes pas sûrde l’état du comportement, vous pouvez le vérifier en tapant rand(’info’).

— Un grand nombre de lois sont déjà préprogrammées dans Scilab.La commande grand permet de simuler directement la plupart des lois usuelles : lois

uniformes, lois géométriques, lois normales, lois exponentielles,...

Page 53: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.9 Simulations aléatoires 53

Toutefois, la fonction grand ne permet pas de simuler des lois discrètes directement.Par exemple, l’instruction grand(m,n,"nor",mu,sigma) génère une matrice m× n de

nombres aléatoires suivant la loi normale d’espérance µ et d’écart type σ.

Exercice 66. Effectuez N = 100, 1000, 10000 réalisations d’une loi normale centréeréduite avec grand.

Représenter l’histogramme de cet échantillon en b√

Nc classes et comparez le à larépartition théorique en représentant sur la même figure la densité.

30.9.2 Simulation de lois discrètes

La méthode générale.On suppose que l’on dispose d’une variable U suivant une loi continue uniforme sur

[0, 1[ :

∀a ∈ [0, 1[, b ∈ [0, 1], a < b, P(U ∈ [a, b[) = b − a

et on souhaite simuler une variable aléatoire X discrète finie dont la loi est donnée :

X(Ω) = x1, x2, . . . , xn, P(X = xk) = pk, pour tout 1 ≤ k ≤ n.

On a

P(0 ≤ U < p1) = p1

P(p1 ≤ U < p1 + p2) = p2

. . .

P(p1 + . . . + pk−1 ≤ U < p1 + . . . + pk) = pk

A partir de la variable aléatoire U, on peut donc former la variable Y définie par

Y = xk si U ∈ [sk−1, sk[

où s0 = 0, s1 = p1 et sk = p1 + . . .+ pk pour 2 ≤ k ≤ n. On vérifie que Y a même loi que X.En pratique, pour un U donné dans [0, 1[, on va chercher l’unique indice k ∈ 1, . . . , n

tel que sk−1 ≤ U < sk et on décide alors de poser Y = xk.

function x=drand(p)// nombre aleatoire de loi// donnee par p sur 1,2,..., n ou n est la// longueur de p

s=cumsum(p);u=rand();ind=find(u>=s);x=ind($)+1;endfunction

Exercice 67. Transformez la fonction précédente pour qu’elle prenne en entrée desindices k, l et le vecteur des probabilités p et retourne une matrice aléatoire de nombressuivant la loi donnee par p. Puis une loi donnée par p mais d’image x1, x2, x3, . . . , xn

Page 54: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

54 Scilab

30.9.3 Loi uniforme

Pour une loi uniforme sur 1, 2, . . . , n, l’implémentation de la méthode précédente estplus simple car les nombres (s j) sont de la forme s j =

jn donc

sk−1 ≤ U < sk ⇐⇒k − 1

n≤ U <

kn

⇐⇒ k − 1 ≤ nU < k⇐⇒ k − 1 = bnUc

Ainsi, pour un nombre U donné dans [0, 1[, on posera k = 1 + bnUc.

Exercice 68. Transformez la fonction précédente pour qu’elle prenne en entrée desindices k, l et un entier n et retourne une matrice aléatoire de nombres suivant une loiuniforme sur ~1, n

Exercice 69. Fréquence de 0 dans une suite aléatoire. On considère ici l’expériencequi consiste à tirer au hasard une boule d’une urne en contenant 10 de forme identiqueet numérotées de 0 à 9.

Pour cette expérience, la probabilité théorique d’apparition du chiffre 0 est de 0.1.Simuler cette expérience et observer les fréquences d’appritions du chiffre 0. On

procèdera ainsi :

(1) Choisir un entier N qui sera le nombre de répétition de l’expérience.

(2) Générer un vecteur aléatoire d’entiers compris entre 0 et 9 en suivant une loi uni-forme.

(3) A l’aide de la fonction find, calculer la fréquence d’apparition de 0.

Exercice 70. Simulation du Pile ou Face. On considère l’expérience du Pile ou faceavec une pièce honnête. On associe 0 à Pile et 1 à Face.

Pour cette expérience, on sait que la probabilité d’apparition du coté Pile est 0.5.On simule cette expérience de la façon suivante :

(1) Choisir un entier N qui sera le nombre de répétition de l’expérience.

(2) Générer un vecteur aléatoire de 0 ou 1 en suivant une loi uniforme.

(3) A l’aide de la fonction find, calculer la fréquence d’apparition de 0.

Exercice 71. Simulation d’ un lancer de dés. Simuler l’expérience qui consiste àlancer deux dés parfaits et on considère la somme des faces obtenues.

Observer les fréquences de réalisation d’une somme égale à 7. Et celles correspon-dantes à une somme de 4 ?

N=input(’nb de lancers : ’);c=0;j=0;while j<=N dox= ;

Page 55: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.9 Simulations aléatoires 55

y= ;if x+y= then c=c+1;j=j+1;end

enddisp(c/N, ’frequence de 7 = ’);

Exercice 72. Représenter graphiquement, la suite de points Xn = (xn, yn) définie de lamanière suivante :

X0 =

(00

)et Xn+1 = AXn + b

où A est la matrice( 1

2 00 1

2

)et le vecteur b est choisi au hasard à chaque étape parmi les

vecteurs(00

),

( 120

),

( 14√3

4

).

On pourra utiliser l’ option ’*’ de plot.

30.9.4 Loi de Bernoulli

Pour simuler une loi de Bernoulli de paramètre p, on remarque que si U suit une loiuniforme continue sur [0, 1[, l’événement [U ≤ p] est réalisé avec probabilité p et soncontraire avec probabilité 1 − p.

Exercice 73. Ecrire une fonction recevant en entrée un nombre p ∈ [0, 1] simulant unevariable aléatoire de Bernoulli de paramètre p.

Exercice 74. Une variable aléatoire X prend la valeur 1 avec probabilité 13 et la valeur

2 avec probabilité 23 .

(1) Ecrire une fonction recevant en entrée un nombre n ∈ N∗ et retournant n réalisa-tions de X.

(2) Déterminer pour n = 100, 1000 et 10000 les fréquences d’apparition de la valeur1.

Exercice 75. Suite de Fibonacci aleatoire. On pose x0 = 0, x1 = 1 et pour tout n ∈N, xn+2 est égal à xn+1 + xn ou xn+1 − xn de manière équiprobable.

Ecrire une fonction fibo_rand.sci prenant en entrée un entier n et renvoyant lesn premiers termes de cette suite aléatoire.

Etudier expérimentalement le comportement de |xn| pour les grandes valeurs de n.

Page 56: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

56 Scilab

Exercice 76. Série harmonique aléatoire. On sait que la série∑n≥1

(−1)n−1

nconverge

vers ln 2. On désire étudier la série aléatoire∑n≥1

εn

noù εn prend les valeurs −1 et 1

suivant une loi de Bernoulli de paramètre12

.Calculer 50000 sommes partielles de 100 termes chacunes et représenter ces va-

leurs sous forme d’un histogramme.

30.9.5 Loi binômiale

Pour simuler une loi binomiale, plutot que d’utiliser la méthode générale exposée cidessus, on remarque que la somme de n variables aléatoires de Bernoulli de paramètre psuit une loi binômiale B(n, p).

Etant données des nombres U1, . . . ,Un de lois uniformes sur [0, 1] et indépendantes,on posera

Y = nombre de termes Ui inférieurs ou égaux à p.

On évite ainsi le calcul des coefficients binomiaux dans la simulation.

Exercice 77. Ecrire une fonction recevant en entrée un entier n ∈ N∗ et un nombrep ∈ [0, 1] simulant une variable aléatoire binômiale de paramètre n et p.

On peut aussi utiliser la fonction grand : l’instruction grand(m,n,"bin",N,p) génèredes nombres aléatoires suivant la loi binômiale de paramètres N (entier strictement positif)et p (réel de[0, 1]).

Exercice 78. Simuler 10000 réalisations d’une loi binômiale de paramètre n et p etreprésenter cet échantillon sous forme d’un histogramme.

Remarque. Il existe une fonction binomial prenant en argument un entier n > 0 et unréel p ∈ [0, 1] et retournant le vecteur

(p1 p2 . . . pn+1

)où p j+1 =

(nj

)p j(1 − p)n− j est la

probabilité d’obtenir j succès dans une répétition de n épreuves de Bernoulli indépendantesde paramètre p.

30.9.6 Loi géométrique

La loi géométrique de paramètre p est la loi du temps d’ attente d’ un premier suc-cès dans une suite d’épreuves de Bernoulli répétées indépendantes ayant chacune mêmeprobabilité de succès p.

Exercice 79. Proposer un algorithme simple pour simuler une loi géométrique. Onpourra compléter la fonction suivante :

function k=loigeom(p)u=rand;k=1;while u>= dou= ;

Page 57: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.9 Simulations aléatoires 57

k= ;endendfunction

La boucle while n’est pas optimale car la condition de sortie peut être longue.On peut s’inspirer de la méthode générale pour simuler une loi discrète exposée plus

haut et l’adapter au cas d’une loi discrète infinie.Si X suit une loi géométrique de paramètre p alors X(Ω) = N∗ et P(X = i) = (1−p)i−1 p

pour tout i ∈ N∗.Posons alors s0 = 0 et pour tout k ≥ 1

sk =

k−1∑i=1

P(X = i) = 1 − P(X ≥ k)

= 1 − P(′ les k − 1 premiers sont des echecs ′)= 1 − (1 − p)k

On a

sk−1 ≤ U < sk ⇐⇒ 1 − (1 − p)k−1 ≤ U < 1 − (1 − p)k

⇐⇒ (1 − p)k < 1 − U ≤ (1 − p)k−1

⇐⇒ k >ln(1 − U)ln(1 − p)

≥ k − 1

⇐⇒ k − 1 =ln(1 − U)ln(1 − p)

En pratique, pour un nombre U suivant une loi unforme sur [0, 1[ on posera donc

Y = 1 +⌊ ln(1 − U)

ln(1 − p)

⌋Comme 1−U suit aussi une loi uniorme continue sur [0, 1[, on peut simplement poser

Y = 1 +⌊ ln Uln(1 − p)

⌋Exercice 80. Ecrire une fonction recevant en entrée un nombre p ∈]0, 1[ simulant unevariable aléatoire géométrique de paramètre p.

Simuler 10000 réalisations d’une loi géométrique de paramètre 23 et représenter cet

échantillon sous forme d’un histogramme.

Il est aussi possible d’utiliser la fonction grand de la manière suivante : grand(m,n,"geom", p)pour générer des nombres aléatoires suivant la loi geométrique de paramètre p.

30.9.7 Loi de Poisson

L’instruction grand(m,n,"poi",mu) génère une matrice m × n de nombres aléatoiressuivant la loi de Poisson d’espérance µ.

A l’aide d’une simulation, comparons la loi binomiale de paramètre N et p avec uneloi de Poisson.

Les conditions d’approximations du programme sont N ≥. Fixons N = et p =. On peutdonc approcher la loi B(, ) par une loi de Poisson P(λ) où λ = N p =.

Page 58: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

58 Scilab

--> bino=grand(1,10000,’bin’,50, 1/25);--> poisson=grand(1,10000,’poi’,2);--> classes=linspace(-0.5,50.5,52);--> histplot(classes,bino,style=2);--> histplot(classes,poisson,style=5);

30.9.8 Loi exponentielle

Pour obtenir une matrice aléatoire m×n de nombres suivant une loi exponentielle de pa-ramètre λ, on utilise la fonction grand avec les options suivantes : grand(m,n, ’exp’,1/lambda).Attention, le dernier paramètre à entrer est l’éspérance de la loi et non le paramètre.

Exercice 81. Simuler 10000 réalisations d’une loi exponentielle de paramètre 1 et re-présenter cet échantillon sous forme d’un histogramme.

Voici un exemple de simulation avec une loi exponentielle. Après une étude sur lenombre de clients à un distributeur de billets, on constate qu’il arrive en moyenne 131clients entre 09h et 12h. On suppose que la durée séparant deux arrivées au distributeur suitune loi exponentielle d’espérance 180

131 .On souhaite simuler les temps d’arrivée au distributeur pour 50 clients.On crée un script, arrivee_au_dab.sce, contenant les instructions :

m=180/131;ta=grand(50,1,’exp’,m);t=cumsum(z);

Exercice 82. Pour accomplir une mission, un ouvrier doit terminer k chantiers dansl’ordre. Le temps qu’il faut pour finir le chantier i est une loi exponentielle de paramètreλi. Une fois le chantier i terminé, l’ouvrier passe au chantier suivant avec une probabilitéαi : l’ouvrier peut donc cesser le travail et ne pas achever sa mission avec une probabilité1 − αi.

On note T le temps passé par l’ouvrier au travail. Simuler la variable aléatoire Tavec

k = 5, ∀i ∈ ~1, k, λi =34, ∀i ∈ ~1, k − 1, αi = 1 −

i5

Exercice 83. Une compagnie d’assurance possède mille clients. Chaque client fait unedemande pour un dédommagement avec une probabilité de 0.05. Les montants des dé-dommagements sont des variables aléatoires indépendantes, exponentielles de moyenne800 euros.

Estimez, par simulation, la probabilité que la somme de ces dédommagements dé-passe 50000 euros.

Page 59: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.10 Exemples de simulations en probabilité. 59

Exercice 84. Une boutique informatique estime que, les semaines précédant Noel, lenombre de clients par jour est en moyenne de 140. On suppose aussi que la durée quisépare l’arrivée de deux clients suit une loi exponentielle. Les horaires d’ouvertures sont09h-17h. La moitié des clients choissisent une console, et l’autre moitié une tablette.L’étude révèle aussi qu’en moyenne 2

3 des clients règlent leur achat comptant, et le restepar carte de crédit.

Faire une simulation sur 30 clients renvoyant pour chacun l’heure d’arrivée (enmin.), le choix du produit et le mode de rglement.

30.9.9 Loi normale

On rappelle que l’instruction grand(m,n,"nor",mu,sigma) génère une matrice m× nde nombres aléatoires suivant la loi normale d’espérance µ et d’écart type σ.

Comparons, à l’aide d’une simulation, la loi binomiale de paramètre N et p avec uneloi normale.

Les conditions d’approximations du programme sont N ≥ 30, N p ≥ 5 et N(1− p) ≥ 5.Fixons donc N = 30, p = 1

6 . La loi binomiale B(30, 16 ) est donc approchée par loi normale

N(µ, σ2) où µ = N p = 5 et σ =√

N p(1 − p) ∼ 2.041.

--> bino=grand(1,10000,’bin’,30, 1/6);--> norml=grand(1,10000,’nor’,5,2.041);--> classes=linspace(-0.5,30.5,32);--> histplot(classes,bino,style=2);--> histplot(classes,norml,style=5);

30.10 Exemples de simulations en probabilité.

On considère une expérience aléatoire qu’on répète n fois et un évènement A. L’ap-proche intuitive de la notion de probabilité consiste à définir la probabilité P(A) de l’ évè-nement A comme la limite quand n tend vers l’infini, des fréquence

nA

nde réalisation de A

(nA est le nombre fois que A est apparu au cours des n répétitions de l’expérience). Danscette partie, on étudie numériquement le comportement de ces fréquences pour certainesexpériences.

Exercice 85. On lance un couple de dés parfaits à six faces jusqu’à ce que toutes lessommes possibles soient apparues au moins une fois.

Ecrire un script permettant d’estimer le nombre de lancers nécessaires en moyenne.

Exercice 86. Permutations aléatoires.Un statisticien désire développer une expérience pour comparer les effets de m

traitements différents sur un ensemble de n individus.Il décide de partager les individus en m groupes distincts d’effectif n1, n2, . . . , nm

avec n1 + . . . + nm = n tels que les individus du groupr i reçoivent le traitement i.Pour éviter toute sorte de biais lors de l’affectation des individus aux groupes de

traitements (l’interprétation de l’expérience serait faussée s’il s’avérait que les meilleurssujets (les plus résistants aux traitements) étaient affectés au même groupe !), il est im-pératif que l’affectation d’un individu à un groupe donné soit faite de façon aléatoire.

Page 60: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

60 Scilab

Une procédure simple consiste à numéroter les individus de 1 à n de façon arbitrairepuis à générer une permutation aléatoire σ de 1, . . . , n.

— Le groupe 1 sera alors constitué des individus σ(1), . . . , σ(n1), puis— le groupe 2 constitué des individus σ(n1 + 1), . . . , σ(n1 + n2), etc. . . ,— jusqu’au groupe m constitué des individus σ(n1 + . . . + nm−1 + 1), . . . , σ(n).On procde de la façon suivante :

(1) Choisir une permutation arbitraire, par exemple σ =Id

(2) Générer un nombre aléatoire k entre 1 et n et poser X(n) := σ(k) et X(k) := σ(n)et X(i) := σ(i) pour tous les i distincts de k et n.

(3) Générer un nombre aléatoire k′ entre 1 et n − 1 et poser X(n − 1) := X(k′) etX(k′) := X(n − 1) et X(i) reste inchangé pour tous les i distincts de k′ et n − 1.

(4) Continuer le procédé

Application informatique avec n = 20,m = 4.

n = 20;m = 4;x=1:n;

for j= dok= ;a=x(j);b=x(k);

x(k)= ;x(j):= ;

enddisp(x);

Exercice 87. Un jeu comporte cent cartes numérotés de 1 à 100. Après avoir mélangéles cartes, on les retourne une à une. On obtient un succès chaque fois que la ie carteretournée porte le numéro i.

(1) Ecrire un script simulant le jeu et estimer l’espérance et la variance du nombre desuccès.

(2) Comparer avec les valeurs exactes après les avoir calculées.

Exercice 88. Un facteur ivre distribue n lettres à n destinataires. On note X la variablealéatoire égale au nombre de courriers arrivés à bonne destination.

A l’aide d’une simulation, estimez l’espérance de X en réalisant 10000 tournéespour n = 20.

Faites de même pour n = 7, 15, 28, 47.

Exercice 89. Promenade dans 0, 1, . . . , 9. Un mobile part de 0 et se déplace dansl’ensemble 0, 1, . . . , 9. A chaque instant, soit il reste sur place avec probabilité p soitil avance d’un cran vers la droite avec probabilité 1 − p (si le mobile est en 9 et qu’ilavance d’un cran alors il se retrouve en 0).

Page 61: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

30.10 Exemples de simulations en probabilité. 61

(a) Ecrire une fonction "suivant" prenant en argument la position x, p et retournant laposition suivante.

(b) Retourner une trajectoire issue de 0 des instants de 0 à 20.

(c) On note T le temps de retour à l’origine 0. C’est le premier instant strictement aprèsl’instant 0 pour lequel le mobile se retrouve en position 0. En particulier, si lemobile reste en 0 au premier coup, ce qui se produit avec probabilité p, ce tempsde retour vaut 1. Ecrire une fonction "TempRet" simulant cette variable aléatoire.

Exercice 90. Urne de Polya. Une urne contient initialement une boule rouge et unboule verte. On effectue n tirages successifs en remettant cette boule dans l’urne aprèschaque tirage et en ajoutant dans l’urne une boule de la même couleur que celle qui aété tirée.

On note Xn la proportion de boules rouges à l’issue de l’expérience.Simuler 100 tirages de cette urne.Simuler 100 expériences indépendantes de 100 tirages et donner une valeur appro-

chée de E(Xn).Simuler 1000 réalisations de Xn et représenter cet échantillon sous forme d’un

histogramme. Conjecturer la loi de Xn.

30.10.1 Méthode de Monte-Carlo pour approcher une intégrale.

Exposé de la méthode

Exercice 91. Pour approcher l’intégrale∫ +∞

0 ze−12 z2

dz, on l’interprète comme√

2πE(|Z|) où Z est une variable aléatoire normale centrée et réduite.

(1) Générer un vecteur aléatoire comportant n = 100 valeurs suivant la loi normalecentrée réduite.

(2) Evaluer la moyenne mn des valeurs absolues de ces n réalisation de la loi normalecentrée réduite.

(3) Recommencer avec n = 500, 1000, 5000, 10000. Que constatez vous pourmn√

2π ?

(4) Vérifiez que E(|Z|) =

√2π.

Exercice 92. Distribution de l’erreur dans l’approximation de π par la méthode de Buf-fon.

30.10.2 Méthode du rejet de Von Neuman

On désire simuler une variable aléatoire X bornée par a et b dont une densité est donnéepar x 7→ f (x).

(1) soit c tel que : ∀x ∈]a, b[, f (x) ≤ c

(2) soit U1 et U2 deux variables aléatoires indépendantes et uniformes sur ]0, 1[

(3) on pose Y = a + (b − a)U1

Page 62: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

62 Scilab

(4) si U2 ≤f (Y)

c alors X = Y ,sinon on retourne au point 2.

Exercice 93. En utilisant l’algorithme précédent, simuler une variable aléatoire de den-sité f (x) = 20x(1 − x)3 pour 0 < x < 1.

Page 63: Mathematiques ´ - ECS1skaddouri.maths.free.fr/Page_web_fichiers/Informatique/PolyScilab.pdf · Mathematiques´ - ECS1 30 Scilab Lycee´ La Bruyere` 30 avenue de Paris 78000 Versailles

Bibliographie

[1] J.P. Chancelier, F. Delebecque, C. Gomez, M. Goursat, R. Nikoukhah, S. Steer, Intro-duction à Scilab, Springer, 2007.

[2] Scilab pour l’enseignement des mathématiques, www.scilab.org, 2013[3] R. Seroul, Programming for mathematicians, Springer, 2000.[4] S. Ross, Simulation

[5] C. Moler, Numerical computing

[6] S. Otto, J.P. Denier, An introduction to programming

63