[PDF] Premiers algorithmes numériques - AlloSchool



Previous PDF Next PDF







chapitre 01 second degre - Retour de classes

II- Equation du second degré - Factorisation Définition 1 Une racine d’un polynôme du second degré P(x) est une solution de l’équation P(x) = 0 Définition 2 Soit P(x) = ax2 +bx +c un trinôme du second degré, avec a 6= 0 On appelle discriminant du polynôme P(x) le réel ∆ défini par : ∆ = b2 −4ac



SECOND DEGRÉ - Texas Instruments

SECOND DEGRÉ Ce programme permet de résoudre les équations du type ax bx c2++=0 avec a ≠0 TI-80 TI-81 TI-82 & TI-83 TI-85 PROGRAM:DEGRE2:DISP"A":INPUT A:DISP"B":INPUT B



Le second degré - AlloSchool

1 1 Le trinôme du second degré Définition 1 : On appelle trinôme du second degré ou simplement trinôme, le polynôme P(x), à coefficients réels, de la forme : P(x)=ax2 +bx +c avec a 6= 0 Exemple : Les trois polynômes suivants sont des trinômes P1(x)=x2 +2x −8 P2(x)=2x2 +3x −14 P3(x)=−x2 +4x −5 1 2 Quelques exemples de formes



Le second degré A) Polynôme du second degré et parabole

Le second degré A) Polynôme du second degré et parabole 1 Forme d’un polynôme du second degré Définition : Un polynôme qui s’écrit ????2+ ????+ , où est différent de zéro, est un polynôme de degré 2, de la variable réelle ???? La fonction définie sur IR, par : f (x) =ax2 +bx +c (a 0) est une fonction polynôme du second



Exercices - pdfbibcom

Algorithme Algorithme de résolution de l'équation du second degré dans R Objectif : On souhaite écrire un programme C# de résolution dans R de l'équation du second degré : Ax2 + Bx +C = 0 Il s'agit ici d'un algorithme très classique provenant du cours de mathématique des classes du secondaire



1èreG 2019/2020 Correction Interrogation Ch1 Second Degré

Second Degré & Ch2 Suites Exercice 1: (4,5 points) Vos réponses doivent être justifiées On donne les algorithmes langage naturel suivants : Algorithme 1 Affecter une valeur à u IF u < 2 THEN u ← u 2 ELSE u ←2u Afficher u Algorithme 2 Affecter une valeur à n u ←3 For i allant de 1 à n Faire u ←2u Fin de For Afficher u



Premiers algorithmes numériques - AlloSchool

1 2Résolution d’une équation du second degré Le problème de l’égalité à 0 peut aisément être mis en évidence en cherchant à rédiger une fonction résolvant une équation du second degré à coefficients réels de la forme : ax2 +bx+c = 0 La figure 1 présente une solution naïve à ce problème from numpy import sqrt



1èreG 2019/2020 Interrogation Ch1 Second Degré & Ch2 Suites

Second Degré & Ch2 Suites NOM, Prénom : Exercice 1: (4,5 points) Vos réponses doivent être justifiées On donne les algorithmes langage naturel suivants : Algorithme 1 Affecter une valeur à u IF u < 2 THEN u ← u 2 ELSE u ←2u Afficher u Algorithme 2 Affecter une valeur à n u ←3 For i allant de 1 à n Faire u ←2u Fin de For



Remise à niveau en programmation JAVA

type Equation (résoudre l’équation) Remarque : On ne s’intéresse qu’au cas général (deux solutions) de l’équation du second degré à coefficients et valeurs dans les réels Approche objet

[PDF] organigramme equation second degré

[PDF] exercice algorithme avec correction pdf

[PDF] exercices corrigés algorithme pdf

[PDF] exercices corrigés algorithme tableau

[PDF] exercice algorithme boucle pour

[PDF] les boucles exercices corrigés pdf

[PDF] algorithme moyenne generale

[PDF] exercice corrigé d'algorithme

[PDF] ecrire un programme en c qui calcule la moyenne

[PDF] des exercice avec le corrige sur les tableau de l'algorithme

[PDF] écrire un algorithme permettant de calculer la moyenne de 3 notes

[PDF] langage c moyenne tableau

[PDF] cours d algorithme sur les tableaux

[PDF] ecrire un algorithme qui calcule la racine carré

[PDF] algorithme racine carrée entière

Chapitre 7informatique commune

Premiers algorithmes

numériquesDans ce chapitre, nous allons rencontrer nos premiers algorithmes numériques, c"est à dire des algorithmes qui

travaillent sur des nombres flottants et non plus sur des entiers. Il importe de se souvenir que contrairement

aux calculs sur le typeint, les calculs sur le typefloatcomportent de nombreuses approximations : conversion

entre nombres décimaux et nombres dyadiques, calculs approchés... avec pour conséquences les phénomènes

d"absorbtion et de cancellation1. 1.

É galitéentr enombr esflottants

De ceci il résulte que parler d"égalité entre nombres flottants n"a en général pas de sens car les nombres que l"on

cherche à comparer sont souvent le résultat de plusieurs calculs, chacun d"eux étant potentiellement entachés

de plusieurs approximations, sans même parler de l"approximation initiale issue de la conversion approximative

entre nombres décimaux et nombres dyadiques.

Dès lors que les quantités manipulées sont des flottants, il est donc potentiellement très risqué d"assurer la

terminaison d"un algorithme par un test d"égalitéx == y. On préférera en général une condition traduisant

peu ou prou le fait que les quantitésxetysont " proches », dans un sens qu"il conviendra de préciser.

1.1 C ommentdéfinir la " pr oximité» de deux nombr es?

Une première solution, simple, consiste à choisir une marge d"erreur absolue : étant donnée une valeur">0

fixée arbitrairement (par exemple"= 1012), sont considérés comme proches deux nombresxetytels que

jxyj6".

Par souci de simplicité il pourra arriver qu"on fasse un tel choix, mais ce n"est en général pas une bonne solution,

car une valeur choisie dans l"absolu parce qu"elle nous parait petite peut se révéler trop grande lorsque les

nombres à comparer sont eux-même très petits (on conçoit bien que comparer la proximité de deux nombres de

l"ordre de 1018avec"= 1012n"a pas grand sens) ou au contraire très grands.

Une solution plus raisonnable consiste à mesurer l"erreur relative : sont considérés comme égaux deux nombres

flottants qui vérifientjxyj6"jyj, où"est une valeur "petite» fixée arbitrairement. Mais cette situation présente

aussi des inconvénients : cette rela tionn "estpas symétrique : on peut a voirjxyj6"jyjetjyxj>"jxj;

cette relation présente un défaut majeur lorsquexetysont de signes opposés : siy=xcette relation

ne sera jamais vérifiée dès lors que"<2, même lorsquexetyseront égaux aux plus petits des nombres

flottants non nuls.

Bref, le problème de l"égalité de deux nombres flottants ne possède pas de réponse simple et absolue, et demande

souvent un traitement au cas par cas. Une telle discussion est esquissée dans l"exemple qui suit, mais dans la

suite de ce cours et pour des raisons de simplicité on se contentera le plus souvent d"une marge d"erreur relative

voire absolue (mais en gardant à l"esprit le problème que cela pose).

Remarque

. Il existe dans le moduleNumpyune fonctionisclosedédiée à la comparaison de deux nombres

flottants. Cette fonction possède deux valeursrtol(par défaut égale à"r= 105) etatol(par défaut égale à

"a= 108) et renvoie la valeurTruedès lors quejxyj6"a+"rjyj. On observera que cette fonction combine

une tolérance absolue et une tolérance relative; néanmoins elle n"est pas symétrique et dans de rares cas

isclose(x, y)peut retournerTrueetisclose(y, x)retournerFalse. Depuis la version 3.5 dePythonil

existe dans le modulemathune fonction de même nom qui elle utilise la relationjxyj6"a+"rmax(jxj;jyj)

(avec des valeurs par défaut"r= 109et"a= 0).1. Se référer au chapitre 4.

Jean-Pierre Becirspahic

7.2informatique commune

1.2

Résolution d"une équa tiondu second degr éLe problème de l"égalité à 0 peut aisément être mis en évidence en cherchant à rédiger une fonction résolvant

une équation du second degré à coefficients réels de la forme :ax2+bx+c= 0. La figure 1 présente une solution

naïve à ce problème.fromnumpyimportsqrt defsolve(a, b, c): delta = b*b4*a*c ifdelta < 0: print("pasde solution ") elifdelta > 0: x, y = (bsqrt(delta))/2/a, (b+sqrt(delta))/2/a print("deuxracines simples {} et {} ".format(x, y)) else: x =b/2/a

print("uneracine double {} ".format(x))Figure1 - Résolution naïve d"une équation du second degré.

Testons-la avec les valeursa= 0;01,b= 0;2 etc= 1 puis aveca= 0;011025,b= 0;21, etc= 1 :>>>solve(0.01, 0.2, 1)

deux racines simples10.000000131708903 et9.999999868291098 >>>solve(0.011025, 0.21, 1) pas de solution

Or dans les deux cas le discriminant de l"équation est nul (vérifiez-le en faisant le calcul à la main). Cependant les

erreurs de calculs inhérentes à la manipulation des nombres flottants conduisent dans le premier cas à obtenir un

discriminant égal à6;9388939039072281018= 257et dans le second cas à6;9388939039072281018=257.

Pour pallier à ce problème, on peut observer que lorsque le discriminant=b24acest très petit devantb2

les deux racines sont quasiment confondues. Une solution consiste donc à remplacer la condition= 0par

la conditionjj b2, ce qui va se traduire concrètement parjj6"b2, la valeur de"étant choisie petite. En

choisissant par exemple"= 252on obtient la version présentée figure 2.defsolve2(a, b, c, epsilon=2**(52)):

delta = b*b4*a*c ifdelta epsilon*b**2: x, y = (bsqrt(delta))/2/a, (b+sqrt(delta))/2/a print("deuxracines simples {} et {} ".format(x, y)) else: x =b/2/a

print("uneracine double {} ".format(x))Figure2 - Résolution numérique d"une équation du second degré.

Testons-la avec le même jeu de valeurs :>>>solve2(0.01, 0.2, 1) une racine double10.0 >>>solve2(0.011025, 0.21, 1) une racine double9.523809523809524Remarque

. La valeur"= 2522;221016n"est pas choisie au hasard, il s"agit de l"epsilon machine, c"est-à-dire

la plus grande erreur relative que peut provoquer l"arrondissement arithmétique en virgule flottante. En

d"autres termes,1+"est la plus petite quantité strictement supérieure à 1 qui soit discernable de 1. En effet, la

Premiers algorithmes numériques 7.3

représentation machine de 1+"est :

1+"= (1;00000000| {z }

51 fois 01)

220

(rappelons que les nombres flottants sont représentés avec une mantisse à 52 bits).En d"autres termes, il n"y a aucun intérêt à prendre une erreur relative plus petite, comme on peut le constater :>>>solve2(0.01, 0.2, 1, epsilon=2**(53))

deux racines simples10.000000131708903 et9.999999868291098 >>>solve2(0.011025, 0.21, 1, epsilon=2**(53)) pas de solution

et dans la pratique il sera prudent de choisir une valeur de"plus importante sachant que les erreurs d"approxi-

mation peuvent se cumuler. 2.

R echerched"une racine par dichot omie

Le premier problème numérique auquel nous allons nous intéresser est celui de la recherche d"une valeur

approchée de la racine d"une fonction. D"un point de vue mathématique, nous considérons une fonction continue

f: [a;b]!Rtelle quef(a)etf(b)soient de signes opposés, ce qui se traduit par la relation :f(a)f(b)60. Le

théorème des valeurs intermédiaires assure alors qu"il existe un réelc2[a;b]tel quef(c) = 0(illustration figure

3).xy abc a+b2

Figure3 - Recherche d"une racine par dichotomie.

2.1

Description de la méthode

Le principe de la recherche dichotomique consiste à calculerfa+b2 . Suivant le signe de cette quantité l"une des deux relations est nécessairement vérifiée : f(a)fa+b2

60 oufa+b2

f(b)60: Le premier cas assure l"existence d"une racine dans l"intervalleha;a+b2 i, le second dans l"intervalleha+b2 ;bi,

ramenant dans chacun des deux cas la recherche à un intervalle d"amplitude moitié moins grande.

L"algorithme de recherche consiste donc à itérer deux suites(un)n2Net(vn)n2Ndéfinies par les valeurs initiales

u0=aetv0=bet la relation de récurrence : (un+1;vn+1) =8 >><>>:(un;m) sif(un)f(m)60 (m;vn) sinonavecm=un+vn2

Jean-Pierre Becirspahic

7.4informatique commune

Analyse de l"algorithmeLa validité de cet algorithme est assurée par l"invariant :8n2N,f(un)f(vn)60, qui assure pour toutn2N

l"existence d"une racine dans l"intervalle [un;vn].

Il reste à choisir la condition de terminaison de cet algorithme. Sachant queunest une approximation par défaut

d"une racine defetvnune approximation par excès, on choisit une valeur">0et on retournewn=un+vn2dès

lors quevnun62". De la sorte, on est assuré qu"il existe une racinecdefvérifiant :jwncj6".u nv nw nc

62"6"Coût de l"algorithme

Il est facile de prouver quevnun=ba2

n(l"intervalle de recherche est divisé par deux à chaque itération); ainsi un résultat est retourné dès lors queba2 n62", c"est à dire :n>log2ba" 1.

En général, on choisit pour"une puissance de 10 car si"= 10pcet algorithme assurep1chiffres significatifs

après la virgule (en faisant bien entendu abstraction des approximations successives). Dans ce cas, l"algorithme

se termine dès lors quen>log2(ba)+plog2(10)1 = O(p); on peut donc affirmer qu"il s"agit d"un algorithme

de coût linéaire vis-à-vis du nombre de décimales souhaitées après la virgule2. 2.2

Mise en oeuvr epra tique

La recherche déchotomique nécessite quatre paramètres : la fonctionf, les valeurs deaetbet la valeur de"

(qui par défaut sera égal à 10

12).defdicho(f, a, b, epsilon=1e12):

iff(a)*f(b) > 0: returnNone u, v = a, b while abs (vu) > 2*epsilon: w = (u + v) / 2 iff(u)*f(w) <= 0: v = w else: u = w

return(u + v) / 2Utilisons cet algorithme pour chercher l"unique racine de la fonction sinus entre 3 et 4 :

>>>fromnumpyimportsin >>>dicho(sin, 3, 4)

3.141592653589214Obtenons maintenant une approximation de

p2 : >>>deff(x):returnx*x2 >>>dicho(f, 1, 2)

1.41421356237242432. Nous étudierons bientôt un algorithme bien plus rapide mais moins robuste, l"algorithme deNewton-Raphson.

Premiers algorithmes numériques 7.5Dans ce dernier exemple, il a été nécessaire de définir la fonctionf:x7!x22avant d"appliquer l"algorithme.

On aurait pu s"en passer en utilisant unefonction anonymeque l"on peut définir à l"aide du mot-cleflambda:>>>dicho(lambdax: x*x2, 1, 2)

1.41421356237242432.3Utilisa tiondu module scipy

scipy

est un ensemble de modules spécialement dédiés au calcul numérique; il n"est donc pas étonnant d"y

trouver une fonction permettant de réaliser la recherche dichotomique que nous venons d"étudier. Cette fonction

se nommebisectet se trouve dans le modulescipy.optimize. Comme la majorité des autres fonctions de ce

module ne nous intéressent pas pour l"instant, on se contente de charger en mémoire cette unique fonction :>>>fromscipy.optimizeimportbisectAvant de l"utiliser, lisons la documentation qui lui est associée :

>>>help(bisect)On trouvera figure 4 une version (un peu simplifiée) de ce qu"on obtient. bisect(f, a, b, xtol=1e12, maxiter=100)

Find root of a function within an interval.

Basic bisection routine to find a zero of the function f between the arguments aandb. f(a)andf(b) cannothave the same signs.

Slow but sure.

Parameters

f : function Python function returning a number. f must be continuous,and f(a)andf(b) must have opposite signs. a : number

One end of the bracketing interval [a,b].

b : number

The other end of the bracketing interval [a,b].

xtol : number, optional The routine converges when a rootisknown to lie within xtol of the valuereturn. Should be >= 0. maxiter : number, optional ifconvergenceis notachievedinmaxiter iterations,anderroris raised. Must be >= 0.

Returns

x0 :float Zero of f between aandb.Figure4 - La page d"aide de la fonctionbisect.

Comme on peut le constater, cette fonction agit peu ou prou de la même façon que la notre. Seul paramètre

supplémentaire : un nombre d"itérations maximal au delà duquel une erreur est déclenchée. Ceci peut en effet

être nécessaire si l"utilisateur de cette fonction choisit une valeur de"trop faible relativement aux valeurs dea

etb. Dans ce cas, et passé un certain rang, il se peut que les valeurs deuetvsoient tellement proches que le

calcul deu+v2 retourne la valeur deuou dev. Dans ce cas, l"algorithme ne se termine plus. Il est facile de modifier notre algorithme pour calquer ce comportement :

Jean-Pierre Becirspahic

7.6informatique communedefdicho(f, a, b, epsilon=1e12, maxiter=100):

iff(a)*f(b) > 0: returnNone n = 0 u, v = a, b while abs (vu) > 2*epsilon: n += 1 ifn > maxiter: chn ="Échecapr ès{} it érations.".format(maxiter) raiseRuntimeError(chn) w = (u + v) / 2 iff(u)*f(w) <= 0: v = w else: u = w

return(u + v) / 2L"instructionraisedéclenche une exception (ici l"exceptionRuntimeError) qui met immédiatement fin à

l"exécution de la fonction. Cette exception s"accompagne d"une chaîne de caractères qui s"affiche à la suite de

l"exception :>>>dicho(sin, 3, 4, maxiter=10)

RuntimeError

: Échec après 10 itérations.3.V aleurappr ochéed"une int égrale La calcul d"une intégrale définie de la forme : I u;v(f) =Z v u f(t)dt

oùfest une fonction continue sur le segment[u;v]à valeurs dansR, est un problème classique intervenant dans

de nombreux domaines, qu"ils soient scientifiques ou non. Cette évaluation peut cependant s"avérer difficile

voire impossible en pratique car il n"est pas toujours possible de déterminer une primitive de la fonctionf,

même en utilisant les techniques de changement de variable ou d"intégration par parties.

Nous allons nous intéresser à certaines méthodes de quadrature qui consistent à approcher la valeur de

l"intégrale par une somme pondérée finie de valeurs de la fonctionfen des points choisis; en d"autres termes

ces méthodes fournissent une approximation de I u;v(f) par la quantité : I pu;v(f) =p X i=0 if(xi)

les coefficients0;:::;pétant réels et dépendants de l"entierpet les pointsx0;:::;xpappartenant à [u;v].

Dans la formule ci-dessus les pointsxiet les coefficientsisont respectivement appelésnoeudsetpoidsde la

formule de quadrature. L"erreur de quadratureest la quantité : E u;v(f) = Iu;v(f)Ipu;v(f)

et on dira qu"une méthode de quadrature estd"ordrekquand l"erreur commise est nulle lorsquefest un

polynôme de degré inférieur ou égal àk.

Méthodes de quadratures composites

Les méthodes de quadratures composites pour calculer une valeur approchée de l"intégrale :

I(f) =Z

b a f(t)dt

consistent à subdiviser l"intervalle[a;b]ennsous-intervallesa=u0< u1<< un=b(en général avec un pas

constant) et à appliquer une méthode de quadrature sur chacun des intervalles[ui;ui+1]. Dans ce cas, l"erreur

Premiers algorithmes numériques 7.7

commise est égale à : E n(f) =n1X i=0E ui;ui+1(f) On gardera en mémoire l"expression d"une subdivision de pas régulier :uk=a+kban , 06k6n.abuquotesdbs_dbs4.pdfusesText_8