• Aucun résultat trouvé

Les arguments d’entr´ee sont prot´eg´es, c’est `a dire que toute modification reste locale `a la fonction

N/A
N/A
Protected

Academic year: 2022

Partager "Les arguments d’entr´ee sont prot´eg´es, c’est `a dire que toute modification reste locale `a la fonction"

Copied!
4
0
0

Texte intégral

(1)

Universit´e de Pau et des Pays de l’Adour Master 1 MMS, 2015-2016 D´epartement de Math´ematiques Analyse Num´erique Fondamentale

TP 2 - Quelques ´el´ements de programmation - Illustrations

Jusqu’`a pr´esent, nous savons cr´eer des scripts, qui sont une suite d’instructions qui s’ex´ecutent s´equen- tiellement. Il arrive souvent qu’une mˆeme suite d’instructions doive ˆetre ex´ecut´ee de mani`ere r´ep´et´ee : il convient alors de regrouper ces instructions dans un fichier et d’en faire unefonction. Syntaxiquement, ce qui diff´erencie une fonction d’un script est que la premi`ere ligne d’une fonction s’´ecrit toujours sous la forme

function [resultat1, ..., resultatN] = nomfonc(donnee1, ..., donneeP)

Il faut nommer ce fichiernomfonc.m(la fonction et le fichier la contenant doivent avoir le mˆeme nom).

Remarques:

• Une fonction peut elle-mˆeme appeler une fonction.

• Le nombre des arguments d’entr´ee (donneei) et de sortie (resultati) peut ˆetre r´eduit `a 0.

• Les arguments d’entr´ee sont prot´eg´es, c’est `a dire que toute modification reste locale `a la fonction.

• Lorsqu’on lance Matlab, on dispose d’une zone de m´emoire appel´ee espace de travail (workspace) g´er´ee automatiquement par Matlab pour y stocker les variables. Tous les scripts et les commandes interactives utilisent cet espace de travail (cf commandewhos). Par contre, au cours de son ex´ecution, chaque fonction poss`ede son propre espace de travail, qui ne communique avec celui de l’appelant que par l’interm´ediaire des arguments (ou grˆace `a l’instruction global).

Utilisation

Il est possible d’appeler la fonction en ´ecrivant :

nomfonc(d1, ..., dP);

mais dans ce cas, seule la valeur de resultat1 est transmise et r´ecup´er´ee par l’appelant dans la variable ans; les autres r´esultats sont inaccessibles.

Pour obtenir tous les r´esultats, laseulefa¸con de proc´eder est d’appeler la fonction selon la syntaxe compl`ete : [R1, ..., RN] = nomfonc(d1, ..., dP);

Apr`es l’ex´ecution de cette instruction, les variablesRiauront ´et´e cr´e´ees (ou modifi´ees) dans l’espace m´emoire associ´e `a la fonction (ou au script) qui appelle la fonctionnomfonc.

Exercice 1.

Dans le fichierp3.m, ´ecrire une fonctionp3qui r´ealise l’applicationp3:t7→t3+ 2t2+t+ 2. L’en-tˆete de cette fonction sera : function y=p3(t). Utiliser des commandes vectorielles de fa¸con que la fonction transforme une matrice en une matrice de mˆeme taille en agissant ´el´ement par ´el´ement.

Test : taper>> sum(p3(-1:1)). Quel est le r´esultat ? Tracer la fonction en ex´ecutant les commandes :

>> x = -4:0.03:4; y = p3(x); plot(x,y) Taper ensuite : >> grid

A - M´ethode de dichotomie

La fonctionp3s’annule entre -4 et 4. Nous allons d´eterminer la racine par la m´ethode de dichotomie dont on rappelle ici le principe:

Soitf une fonction continue d’un intervalle [a, b] dansRtelle que

f(a)f(b)<0 etf ne s’annule qu’une fois dans l’intervalle [a, b].

On notexla solution de l’´equationf(x) = 0 dans [a, b].

1

(2)

L’algorithme est le suivant : on note a0 = a et b0 = b et on construit les suites (an)n≥1 et (bn)n≥1 comme suit : on calculexn−1=an−1+bn−1

2 ,

−sif(an−1)f(xn−1)<0, alors an=an−1,bn=xn−1,

−sif(an−1)f(xn−1)>0, alors an=xn−1,bn =bn−1,

−sinon la solution est atteinte.

On s’arrˆete d`es que|bn−an|< ε(εest une pr´ecision fix´ee au d´epart) ou qu’un nombre maximum d’it´erations ont ´et´e effectu´ees. La valeur approch´ee dexest alors le milieu du segment [an, bn].

Exercice 2.

a. Impl´ementation de la m´ethode avec Matlab.

Ecrire une fonction´ dicho.mqui met en œuvre la m´ethode de dichotomie. L’en-tˆete de cette fonction sera :

function [x,niter] = dicho(f,a,b,epsil,niterx)

% Methode de dichotomie

% Arguments d’entree :

% f : chaine de caracteres qui fait r´ef´erence au nom de la fonction

% dont on cherche la racine

% a : borne inferieure de l’intervalle

% b : borne superieure de l’intervalle

% epsil : precision pour le test d’arret

% niterx : nombre maximum d’iterations a realiser

% Arguments de sortie :

% x : valeur approchee de la racine

% niter : nombre d’iterations realisees, si une racine a ete trouvee On pourra utiliser une bouclewhileainsi que la commandereturnsi la solution est atteinte.

Nota : f est ici une chaˆıne de caract`eres qui fait r´ef´erence au nom du fichier contenant la fonction test (qui doit ˆetre le mˆeme que le nom de la fonction). Si ce fichier s’appelle fonc.m, l’appel sera alors [x,niter]=dicho(@fonc,a,b,epsil,niterx); et dans la fonction dicho, le calcul de f(x), o`u x peut d´esigner un vecteur, s’effectuera par l’instruction feval(f,x).

Tester cette fonction avecf(x) =p3(x) etε= 10−5, pour a=−3 etb= 3 puisa=−4 etb= 4.

b. Retrouver ce r´esultat en utilisant les commandes Matlab ad´equates. Rechercher ces commandes grˆace `a l’aide en ligne : commandeshelpoulookfor(en anglais, racine se dit root).

Exercice 3.

Dans le fichierFonc1.m, ´ecrire une fonctionFonc1qui r´ealise l’applicationt7→ t2+t−2

t3+ 2t2+t+ 2. Utiliser des commandes vectorielles de fa¸con que la fonction transforme une matrice en une matrice de mˆeme taille en agissant ´el´ement par ´el´ement.

Test : taper>> sum(Fonc1(0:3))et donner le r´esultat.

Tracer la fonction. Essayer avecx=-4:0.02:4. Expliquer.

Utiliser la fonctiondicho pour calculer la racine de cette fonction. Tester plusieurs intervalles et plusieurs pr´ecisions. −→voir le paragrapheOutils graphiquesen derni`ere page.

B - Estimation num´erique d’une vitesse de convergence

Le probl`eme est le suivant : on connaˆıt une estimation th´eorique d’erreur et on d´esire identifier un ordre ou un taux de convergence.

A l’aide d’une s´` erie de tests num´eriques, on dispose d’un ´echantillon (N, E) o`u N = (n1, . . . , nk) et E = (e1, . . . , ek) tels queej est l’erreur correspondant `anj. Notre probl`eme consiste `a d´eterminer la relation qui lieE `aN ; il s’agit d’un probl`eme de r´egression.

2

(3)

Pour parvenir `a notre but, on se ram`ene au cas de la r´egression lin´eaire :

- si la loi th´eorique est de la forme e ∼ Cn−p, on trace lnE en fonction de lnN (−p est le coefficient directeur de la droite) ;

- si la loi th´eorique est de la formee∼Cρn, on trace lnE en fonction de n, le coefficient directeur de la droite est lnρ;

- etc.

Exercice 4.

Dans la m´ethode de dichotomie, il est facile de montrer que|xn−x|6 b−a

2n . Illustrer ce r´esultat, avec la fonctionf(t) =et−2. Tracer ln(|xn−x|) en fonction de net interpr´eter le graphe.

Remarques:

• Il sera n´ecessaire de modifier la fonctiondicho en ajoutant un argument de sortie qui contiendra tous les it´er´esxn.

• Seule la partie `a peu pr`es rectiligne du graphe est exploitable. Pour ´evaluer la pente de cette partie, on peut tirer parti du graphe en choisissant convenablement deux points permettant de calculer ∆y/∆x mais on peut aussi utiliserpolyfit.

Exercice 5.

On sait que la suite un = 1 + 1

2 +· · ·+ 1

n −ln(n) converge vers la constante d’Euler γ dont une valeur approch´ee est 0.577 215 664 901 532.

De plus, sivn=un− 1

2n et wn =un− 1 2n+ 1

12n2, on a quandn−→ ∞

un−γ∼ 1 2n vn−γ∼ − 1

12n2 wn−γ=o

1

n3

Retrouver exp´erimentalement ces r´esultats. Pour chacune de ces suites : a. Evaluer l’ordre de convergencep. On pourra utiliser une bouclefor.

b. Evaluer la constanteC.

Ceci permet de pr´eciser exp´erimentalement le comportement dewn.

C - M´ethode de Newton

On reprend les notations du paragrapheA,f est une fonction num´erique d´efinie sur [a, b]. On suppose que xest l’unique solution de l’´equationf(u) = 0 et quef0 ne s’annule pas sur [a, b]. L’algorithme de lam´ethode de Newtons’´ecrit :

x0donn´e dans[a, b]

Sif0(x0) = 0−→Stop Sinon

On approche la fonction par sa tangentef0(x)au point(x0, f(x0)) et on r´esoutf0(x) = 0−→x1=x0−f(x0)/f0(x0)

On recommence l’op´eration pourx1`a la place dex0et ce jusqu’`a ce que le test d’arrˆet soit positif ou que le nombre maximum d’it´erations soit atteint.

Test d’arrˆet : L’it´eration s’arrˆete si|f(r)| < eps, pr´ecision donn´ee.

3

(4)

Exercice 6.

Ecrire une fonction´ newton.mqui met en œuvre la m´ethode de Newton. L’en-tˆete de cette fonction sera : function [r,k]=newton(f,fp,x0,eps,Nmax)

% M´ethode de Newton

% Arguments d’entr´ee :

% f : chaine de caract`eres qui fait r´ef´erence au nom de la fonction

% dont on cherche la racine (d’en-tete y = f(x))

% fp : chaine de caract`eres qui fait r´ef´erence au nom de sa d´eriv´ee

% x0 : valeur initiale

% eps : precision pour le test d’arret

% Nmax : nombre maximum d’iterations a realiser

% Arguments de sortie :

% r : valeur approchee de la racine (derni`ere it´er´ee)

% k : nombre d’it´erations r´ealisees

Faire les calculs pourf(x) =x4−3x2,eps = 1e−10,Nmax= 20 et montrer les r´esultats pour les 7 valeurs initialesx0 = 0.9 : 0.1 : 1.5 .

Outils graphiques

De puissants outils graphiques sont fournis par Matlab ; on en donne ici quelques exemples.

Graphes de fonctions

>> x=linspace(0,4,100);

>> y=sin(x);z=cos(x);

>> plot(x,y)

>> plot(x,z)

>> hold on

>> plot(x,y)

>> clf

>> plot(x,y,x,z)

>> clf

>> plot(x,y,’r’,x,z,’b--’)

>> loglog(x,abs(y))

Textes et l´egendes

>> legend(’sinus’,’cosinus’)

>> xlabel(’x’)

>> ylabel(’f(x)’)

>> title(’Graphes trigonometriques’)

Gestion des axes

>> axis off

>> axis on

>> axis equal

>> grid on

Partitionnement de la fenˆetre

>> figure(2)

>> subplot(1,3,1)

>> plot(x,y)

>> subplot(1,3,2)

>> plot(x,y,’r--’)

>> subplot(1,3,3)

>> plot(x,y,’go’)

Impression dans un fichier

>> print -f1 -deps fic

>> print -f2 -djpeg fic

4

Références

Documents relatifs

La compos´ee de deux bijections ´etant une bijection, l’application f g 1 est une bijection (et donc une injection) de { 1,. Soit E un ensemble fini.. Cardinal d’un ensemble

La compos´ee de deux bijections ´etant une bijection, l’application f ◦ g −1 est une bijection (et donc une injection) de {1,. Soit E un ensemble fini. Si E est non vide, le

K d´esignant le corps des r´eels ou celui des complexes, on note M n,p (K) le K-espace vectoriel des matrices `a coefficients dans K ayant n lignes et p colonnes.. On lui donne le

(2) En d´ eduire la fonction supprime qui prend en arguments une liste L et un nombre n et supprime le premier ´ el´ ement de la liste ´ egal ` a n.. Cette fonction renverra True si

Les deux op´ erations de base utilis´ ee utilis´ ees pour inverser une matrice sont l’´ echange de deux lignes et l’ajout une ligne ` a une autre.. Ecrivons

BCPST R´ esolution de syst` emes et inversions de matrice 2016-2017 Le but de ce TP est de finir le dernier TP en ´ ecrivant l’ensemble des algorithmes sur les matrices vus dans

Le but de cet exercice est donc de rechercher s’il existe une position du point T sur le segment [EM] pour laquelle l’angle ATB est maximum et, si c’est le cas, de d´ [ eterminer

Observons que chaque classe est non vide ; que deux classes sont disjointes ou confondues ; et que la r´eunion de toutes les classes est E.. Dans cette situation, nous dirons que