LICENCEMATH ´EMATIQUES 2 `EME ANNEE´ IS4 – 2005 – 2006
SESSION 2
P
ROGRAMMATION ET TRACES DE GRAPHES´
1. PROGRAMMATION
1.1. PROCEDURES´ .
On a d´ej`a vu dans la section consacr´ee aux fonctions la syntaxe la plus simple d’une proc´edure. Plus pr´ecis´ement, la syntaxe g´en´erale est la suivante :
nomproc:=proc(arg1::type1,arg2::type2,...,argn::typen) local var1:type1,var2:type2,...,varn:typen;
global Var1,Var2,...,Varn;
(suite d’op´erations) end;
o`uarg1,. . .argnsont les arguments d’appel de la proc´edure,var1, . . . ,varnsont les variables locales `a la proc´edure etVar1,. . . ,Varnsont les variables globales provenant de calculs ant´erieurs. Le typage des arguments et des variables est facultatif. En effet, Maple d´etermine automatiquement le type des variables. En ce qui concerne le typage des arguments, il peut ˆetre utile de le pr´eciser dans certains cas.
Le r´esultat de l’appel d’une proc´edure est le dernier r´esultat calcul´e. La commande return(expr) permet aussi le renvoi du r´esultat souhait´e dans une proc´edure.
1.2. BOUCLES.
On a d´ej`a rencontr´e la structure d’une bouclefor. Sa construction est : forifromdebuttofindocommandeod;
Les boucleswhilese construisent de la mˆeme mani`ere. Quant aux bouclesif, leur syntaxe est :
ifcondition1thencommande1elifcondition2thencommande2elsecommande3fi;
Les commandeselifetelsesont facultatives (on peut placer autant de commandeselifque n´ecessaire).
EXERCICE 1.
(1) D´eterminer ce que fait la proc´edure suivante : somme:=proc(n)
local i,resultat;
if n<0 then
print(‘Le calcul est impossible‘) else
resultat:=0;
for i from 1 to n do resultat:=resultat+i; od;
fi;
end;
(2) Entrer les instructions suivantes et expliquer les r´eponses deMaple:
somme(5); somme(4.5); somme(-3); somme(bonjour);
1
2
(3) Remplacer la premi`ere ligne du programme parsomme:=proc(n::integer)et taper les commandes de la question 1. Observer les diff´erences dans les r´eponses deMapleet les expliquer.
1.3. R ´ECURSIVITE´.
On dit qu’une proc´edure est r´ecursive si elle s’appelle elle-mˆeme. Par exemple, si l’on veut calculer la factorielle d’un entier positifn, on peut taper la proc´edure suivante :
> factorielle:=proc(n::integer) if n=0 then 1 else n*factorielle(n-1) fi end;
EXERCICE 2.Calculer la factorielle des 10 premiers entiers naturels.
EXERCICE 3. (Suite de Fibonacci)
Soit la suite(Fn)n∈Nd´efinie parF0=F1=1 etFn=Fn−1+Fn−2∀n≥2.
(1) ´Ecrire une proc´edure r´ecursive qui calcule les termes de cette suite. Calculer les 20 premiers termes de la suite de Fibonacci.
(2) Ajouter la commandeoption remember;avant la boucleifet recalculer les 20 premiers termes de la suite de Fibonacci. Observer la diff´erence de temps de calcul.
(3) ´Ecrire une fonction qui calculeFnen se servant de la formule de BinetFn= (1+√
5)n+1−(1−√ 5)n+1 2n+1√
5 pour
n∈Net calculer les 20 premiers termes.
EXERCICE 4. (algorithme d’exponentiation rapide) L’algorithme suivant r´ealise le calcul dexn plus rapidement que par le calcul usuelx×x×. . .×x
| {z }
nfois
: a = x, c = n, p = 1 tant que c > 0 faire
si c impair alors p = p*a
finsi
c = c div 2 a = a*a finfaire
Traduire l’algorithme d’exponentiation rapide en langageMaple. Calculer les 20 premi`eres puissances de 3 `a l’aide de cette proc´edure. Indications :
(1) Pour le test de parit´e dec, on utilisera la commandec mod 2qui retourne le reste de la division euclidienne decpar 2.
(2) Pour le calcul de c div 2, on utilisera la commande iquo(c,2) qui retourne le quotient de la division euclidienne decpar 2.
2. TRACES DE GRAPHES LE PLAN´ : y= f(x) 2.1. FONCTIONS SIMPLES.
On peut d´efinir le graphe `a repr´esenter soit par une expression, soit par une fonction ; par exemple :
> E1:=7*sin(x)+sin(7*x): plot(E1,x=-1..10);
> E2:=x->7*sin(x)+sin(7*x): plot(E2(x), x=-1..10);
> f:=t->(t-1)ˆ3+t/10000: plot(f(t),t=0..3);
Observer les effets quand on change la variable ou lorsque l’on ne sp´ecifie pas la variable :
> plot(f(a),a=5/10..15/10); plot(f,0..2);
> plot(E1,t=-1..10); plot(E1,-1..10);
On peut aussi limiter les ordonn´ees :
3
> plot(f,0.9..1.1,0..1/5000);
> plot(E,x=3..4,y=-3.4..-2.8);
Remarquer que ”y” est juste un label qui apparaˆıt sur le graphe. On peut le remplacer par autre chose.
EXERCICE 5.
(1) Repr´esenter la fonction f(x) =x2−3 sur[−4,4].
(2) Repr´esenter le polynˆomeP(x) =315x4−234x3−29x2+36x−6 sur[−2,2]. En d´eduire le nombre de solutions deP(x) =0 et deP(x) =−2.
2.2. AUTRES FONCTIONS.
On peut repr´esenter des fonctions avec des discontinuit´es, ou d´efinies par morceaux (commandepiecewise) :
> f:=x->piecewise(x<1,xˆ2,x>=1,1+1/x): plot(f,-1..2,0..3);
> plot(f,-1..2,0..3,discont=true);
On peut aussi d´efinir :
> g:=x->if x<-1 then -sqrt(-(1+x)) elif x<1 then sqrt(1-xˆ2) else Pi-arccos(x-2)
fi;
>plot(g,-3..3,-3..2,scaling=constrained);
On utilisescaling=constrainedpour un rep`ere orthonorm´e.Attention :la commandeplot(g(x),x=-3..3) ne convient pas !
EXERCICE 6.Repr´esenter les fonctions f1(x) = 1
x−1 sur[−2,2], f2(x) =tan(x)sur[−2π,2π], f3(x) =1+exp −1
√x
six>0 et f3(x) =1 six≤0, sur[−100,5000]puis sur[−1/10,1/10], 2.3. TRACES SIMULTAN´ ES´ .
On peut repr´esenter plusieurs fonctions sur un mˆeme rep`ere au moyen d’une liste (entre [...]) :
> f:=piecewise(x<0,cos(x),x>=0,1+xˆ2): df:=diff(f,x): ddf:=diff(f,x,x):
> plot([f,df,ddf],x=-2..2,discont=true,color=[red,green,navy]);
Une autre m´ethode consiste `a placer les graphes un `a un dans des variables et `a les afficher avec la commandeplots[display]:
> a:=plot(sqrt(x),x=-6..6,color=blue): b:=plot(ln(x),x=-7..7,color=red):
> c:=plot(arctan(x),x=-5..5,color=green):
> plots[display](a,b,c,view=[-4..4,-3..3],scaling=constrained);
EXERCICE 7.
(1) Soit fp(x) = 2 arctan(p2x)
π . En utilisant la commandeseq, tracer fp(x)pourp=1, . . . ,10 en bleu sur un mˆeme rep`ere avecx∈[−1,1].
(2) Tracer les fonctions f(x) =x2−1 etg(x) =sin(x)sur un mˆeme rep`ere avec deux couleurs diff´erentes.
(3) Tracer la famille de courbesy=e−(nx)2 pourn=1, . . . ,10 (quelle est la ”courbe limite” lorsquen→∞?).
(4) Tracer la courbe y=cos(x) et la famille de courbes y=
n
∑
k=0
(−x2)k
(2k)! , n∈ {1, . . . ,6} sur un mˆeme rep`ere or- thonorm´e pour(x,y)∈[−4π,4π]×[−9,9]avec les couleurs black, navy, blue, green, yellow, coral, red.
(5) On consid`ere la fonction f(x) =exp
−x2 2
. Calculer f0et f00. En d´eduire les extremum et les points d’inflexion.
Tracer la fonction f et les tangents aux extremum et aux points d’inflexion sur un mˆeme rep`ere.