Vous êtes sur la page 1sur 5

Licence Mathématiques 2ème année, Méthodes Numériques 2, Institut Galilée, Année 2020-2021

Cours / TP avec Octave

1 L’environnement Octave (ou Matlab)


Le logiciel GNU Octave (http://www.octave.org) est un environnement de programmation
et de visualisation, qui ne nécessite pas d’étape de compilation et possède un grand nombre de
fonctions préprogrammées. Parmi les logiciels de calcul scientifique proche d’Octave e Matlab
distribués gratuitement mentionnons le logiciel Matlab.

1.1 Première utilisation d’Octave


Le logiciel une fois lancé, se présente sous la forme d’une fenêtre de commande possédant une
barre de menu. L’exercice 1 permet de découvrir la première utilisation possible d’Octave, en tant
que calculatrice scientifique.
Exercice 1. Taper successivement les lignes suivantes, appelées aussi instructions, dans la fenêtre
de commande.

2+2 sin([pi,pi/2])
a=2.5+1; z=1:4;
A=[1,2;3,4]; z
A eps
A*[2,3;1,1] % produit matriciel realmax
v=[1,2,3] realmin
w=v’

On remarquera que le point virgule en fin de ligne supprime l’affichage, et que % délimite sur
la gauche une ligne de commentaires.

1.2 Programmation en Octave


Octave dispose d’un langage de programmation qui diffère essentiellement des autres langages de
programmation (C,C++, Fortran, ...) par le fait que les variables n’ont pas besoin d’être déclarées.
C’est l’interpréteur d’Octave qui, lorsqu’il rencontre une nouvelle affectation de variable se charge
de la créer. Les instructions propres à la programmation ont toutes la propriété d’avoir une structure
bloc, c’est-à-dire un mot clé d’ouverture (if, for ... ) et un end de fermeture.
1. Les boucles. Il existe deux types de boucles : la boucle for et la boucle while.
(a) La boucle for permet d’executer une suite d’instructions un nombre donné de fois. Cette
boucle pointe sur un ensemble d’indices. La boucle ci-dessous permet de calculer la
somme des 10 premiers entiers.
n=10; % initialisation de n
sum=0; % initialisation de sum
for i=1:n % i prend les valeurs entières de 1 à n
sum=sum+i; % à chaque itération l’entier i est ajouté à sum
end
A la fin de cette boucle l’entier sum renvoie la somme des 10 premiers entiers.
(b) La boucle while permet d’executer une suite d’instructions tant qu’une condition don-
née est satisfaite. La boucle ci-dessous permet également de calculer la somme des 10
premiers entiers.
n=10;
i=0;
sum=0;
while i<=n
sum=sum+i;
i=i+1;
end

1
Licence Mathématiques 2ème année, Méthodes Numériques 2, Institut Galilée, Année 2020-2021

2. L’instruction conditionnelle : if then else. Voici un exemple d’instructions if then else permet-
tant de calculer la valeur absolue de x.

x=3.1;
if x<0 then
y=-x
else
y=x
end

On peut rajouter d’autres tests à l’aide de l’instruction elseif.


Les opérateurs logiques dans les tests sont : et & , ou | , non „, égal ““, différent „“, inférieur à
ă, supérieur à ą, inférieur ou égal à ă“, supérieur ou égal à ą“.
1.3 Script Octave
Afin d’exécuter une suite d’instructions plus longues ou plus complexes, il est préférable d’écrire
celles-ci dans un fichier plutôt que de les taper dans la fenêtre de commande. On parle dans ce cas
de l’écriture d’un script enregistré par exemble dans un fichier nommé nom-script.m. Il est ensuite
possible d’exécuter ce script en tapant la commande nom-script dans la fenêtre de commande. Il
existe dans Octave un éditeur de texte permettant d’écrire ces scripts. Pour lancer cet éditeur tapez
la commande edit ou utilisez la barre d’outils. L’exercice 2 propose un premier exemple d’écriture
et d’exécution d’un script.
Exercice 2. 1. Créer un répertoire de travail et se placer dans ce répertoire.
2. Créer un fichier nommé essai.m contenant les instructions suivantes :

A=rand(4,4);B=inv(A);
C=A*B

Comprendre et exécuter le script précédent.

1.4 Fonction Octave


Il existe des fonctions dans Octave (comme exp pour la fonction exponentielle).
Exercice 3. Aller dans Aide/Documentation/Installée_localement/Index_des_fonctions/
et trouver la fonction logarithme népérien.
Il est également possible de construire avec Octave de nouvelles fonctions mathématiques, en
complément de celles existantes. Ces fonctions peuvent prendre différents types d’arguments (sca-
laire, matrice, ...) et peuvent réaliser des opérations mathématiques plus ou moins complexes.
Toute fonction doit être enregistrée dans un fichier de même nom avec l’extension .m. L’exer-
cice 3 propose un exemple d’écriture de fonction.
Exercice 4. Créer un fichier nommé fact.m contenant la fonction suivante :
function [c]=fact(n)
if (n<0) | (ceil(n)~=n)
c=0;
else
c=1;
for i=1:n
c=c*i;
end
end
Tester cette fonction sur différentes valeurs en entrée. Quelle fonction bien connue reconnaı̂t-on ?
Exercice 5. Ecrire une fonction maxf.m qui retourne le maximum entre deux réels.
Remarque : on peut aussi utiliser “@“, par exemple pour définir la fonction f pxq “ 2 cospxq ` 3
on peut écrire : f=@(x) 2*cos(x)+3.

2
Licence Mathématiques 2ème année, Méthodes Numériques 2, Institut Galilée, Année 2020-2021

1.5 Aide en ligne


L’aide en ligne se présente sous la forme d’une liste de fichiers d’aide pour chaque instruction
disponible sous Octave. Pour effectuer une recherche par mot clé dans l’index (par exemple, trouver
la fonction qui retourne l’exponentielle), on peut taper exponential dans la fenêtre de recherche
(et découvrir que la fonction s’appelle exp). Au contraire, lorsqu’une instruction est connue (par
exemple norm), il est possible d’accéder directement à l’aide de celle-ci en tapant help norm sur la
ligne de commande. On peut aussi faire une recherche avec un mot clé à l’aide de la commande
lookfor (par exemple lookfor logarithm).
Exercice 6. Trouver avec l’aide en ligne, les fonctions Octave qui permettent
1. de construire les matrices, identité (mot clé ’identity’), de coefficients tous nuls (mot clé
’zero’), et de coefficients tous égaux à 1 (mot clé ’one’),
2. calculer les valeurs propres d’une matrice (mot clé ’eigenvalues’).

1.6 Manipulation de vecteurs


Il existe différentes façons de construire un vecteur (appelé v par la suite) :
1. lorsque la taille du vecteur est connue et est petite, en écrivant par exemple v=[1,2] pour un
vecteur ligne et v=[1 ;2] pour un vecteur colonne ;
2. lorsque les valeurs du vecteur suivent une progression arithmétique, en écrivant par exemple
v=2 :0.1 :3 ou bien v=linspace(2,3,11) ;
3. en initialisant le vecteur, puis en effectuant une boucle sur les indices avec des affectations
du type v(i)=2 ;
4. en initialisant v au vecteur vide : v=[], puis en concaténant dans une boucle chaque nouvel
élément avec des affectations du type v=[v,2] ;
5. en effectuant des opérations de somme (instruction +), de multiplication (instruction .*) et
de division (instruction ./) terme à terme à partir de vecteurs simples.
On peut accéder à la taille d’un vecteur v et à sa longueur avec les commandes size(v) et length(v)
respectivement. On peut également accéder à la ième composante de v en tapant v(i).

Pour les exercices ci-dessous (fonctions et scripts), voir le document TD_algo_corrige.pdf.


Exercice 7. Écrire la fonction PS.m qui calcule le produit scalaire de deux vecteurs u et v de Rn .
Écrire ensuite un script qui permet de tester votre fonction.
Exercice 8. Ecrire la fonction DisReg générant la discrétisation régulière d’un intervalle ra, bs de
R (a ă b) en n ` 1 points. Valider ensuite votre fonction.

1.7 Manipulation de matrices


Pour Octave, toute variable est un cas particulier de matrices de taille m ˆ n, la construction
d’une matrice A s’effectue donc de manière analogue à celle d’un vecteur.
1. Voici quelques exemples de construction d’une matrice.
(a) lorsque la taille de la matrice est connue et petite, en écrivant par exemple A=[1,2,3 ;3,4,5]
pour une matrice de taille 2 ˆ 3 ;
(b) en initialisant A, puis en effectuant une double boucle sur les indices avec des affectations
du type A(i,j)=2 ;
(c) en initialisant A à un vecteur ligne (ou colonne), puis en concaténant dans une boucle
chaque nouvelle ligne (ou colonne) avec des affectations du type A=[A ;v] (respectivement
A=[A,v]). A noter que cette méthode s’étend à la concaténation entre matrices ;
(d) en effectuant des opérations de somme (instruction +), de multiplication terme à terme
(instruction .*) ou de multiplication matricielle (instruction *), de division terme à terme
(instruction ./) à partir de matrices simples.
2. Comme pour les vecteurs on peut accéder à la taille d’une matrice, à un coefficient aij ou
encore à la ligne i (ou colonne j) en tapant size(A), A(i,j) et A(i, :) (A( :,j)) respectivement.
Pour l’exercice ci-dessous, voir le document TD_algo_corrige.pdf.
Exercice 9. Écrire la fonction ProdMatVec calculant le produit d’une matrice A de Mn pRq par
un vecteur x de Rn . Écrire ensuite un script qui permet de tester votre fonction.

3
Licence Mathématiques 2ème année, Méthodes Numériques 2, Institut Galilée, Année 2020-2021

1.8 Représentation graphique


Pour tracer une courbe Octave dispose de différentes commandes (se référer à l’aide) notamment
l’instruction plot. Voici un exemple d’utilisation.
Exercice 10. Créer un script graph.m contenant les lignes ci-dessous, puis exécuter ce script.
x=linspace(0,4,100);
y=x.^2;
z=cos(x);
plot(x,y,’r’);
hold on
plot(z,y,’b’);
hold off
xlabel(’x’)
ylabel(’y’)
legend(’x*x’,’cos(x)’);
title(’Représentations graphiques’);

2 Erreurs d’arrondis
Considérons par exemple le calcul de ex , x ă 0 qui est très sensible aux erreurs d’arrondi,
lorsqu’on le calcule par un développement en série de Taylor
8
ÿ pxqj x2 x3 x4
ex “ “1`x` ` ` ´ ¨¨¨
j“0
j! 2 6 24

Sur l’ordinateur, on doit se fixer un entier N et on calcule une valeur approchée de ex par la formule
N
ÿ xj
ex « . (1)
j“0
j!

Exercice 11. 1. Écrire la fonction Expf (à l’aide de la fonction fact) permettant de calculer
une valeur approchée de ex à l’aide de la formule (1).
2. Calculer les différentes valeurs approchées de e´20 en fonction de N , pour N prenant les
valeurs : 20, 60, 120, 200. Comparer vos résultats à la valeur de e´20 obtenue avec Octave
(taper exp(-20)). Quel problème observez-vous sur la précision obtenue avec vos calculs ?
3. Identifier d’où vient ce problème, et trouver un moyen d’y palier.

3 Travaux Pratiques
3.1 Interpolation polynomiale
La fonction polyfit.m d’Octave fourni les coefficient du polynôme d’interpolation de La-
grange p (noté Πn dans le cours), et la fonction polyval.m permet de calculer p aux nœuds
d’interpolation, afin de le réprésenter ensuite graphiquement.
Exercice 12.
Climatologie : lancer le programme PbClimat et observer ce qui se passe lorsque le degré du poly-
nôme d’interpolation est n “ 4 (figure 1), puis pour n “ 12 (figure 2).
Phénomène de Runge : lancer le programme PbRunge et observer ce que donne l’interpolation de
Lagrange (figure 1) et l’interpolation de Lagrange par morceaux (figure 2). Tester différentes valeurs
de n et observer le comportement de ces deux approches.

3.2 Intégration numérique


Dans cette partie on souhaite écrire puis programmer les algorithmes des méthodes composites
vues en cours, et les appliquer au problème de démographie du polycopié de cours. Pour une mé-
thode donnée, on commence par écrire l’algorithme à la main, puis on l’implémente en Octave.

4
Licence Mathématiques 2ème année, Méthodes Numériques 2, Institut Galilée, Année 2020-2021

Exercice 13. Écrire à la main deux fonctions Trapeze et Simpson calculant une valeur approchée
de l’intégrale de a à b d’une fonction f continue, par la méthode du trapèze composite et de Simpson
composite avec m sous-intervalles, respectivement.
Exercice 14. Écrire en Octave les fonctions de l’exercice 12. Ecrire un script permettant de
valider vos fonctions : on prendra par exemple a “ 0, b “ π, f pxq “ sinpxq, et on calculera l’erreur
şb
relative entre a f pxqdx (qui est connue ici) et sa quadrature. En particulier, si on double m, on
pb´aq2
doit observer que l’erreur (qui est en h2 “ m2 q doit être divisée par 4.
Exercice 15. On considère le problème de démographie du polycopié de cours. On cherche à
calculer une approximation du nombre d’individus dont la taille est comprise entre 1.8m et 1.9m.
1. Ecrire un script donnant une valeur approchée du nombre d’individus entre 1.8m et 1.9m par
la méthode du trapèze composite et de Simpson composite.
2. Pour chaque méthode (trapèze et Simpson composites), tester différentes valeurs de m, puis
trouver un nombre d’intervalle suffisant m0 permettant d’obtenir 27.1810 (i.e. tel que l’on
ait les mêmes 4 chiffres signicatifs après la virgule pour ces 2 méthodes). Donner une inter-
prétation de ces résultats.

Vous aimerez peut-être aussi