• Aucun résultat trouvé

La lentille demi-boule

Dans le document Licence de physique L3 PHYTEM (Page 41-48)

En optique g´eom´etrique, on utilise toujours des lentilles minces parce qu’elles permettent de travailler dans les conditions de Gauss (petits angles) ce qui simplifie con-sid´erablement la vie : on a des formules simple pour cal-culer la focale, etc. Que se passe-t-il avec une lentille

´epaisse ? Un programme tr`es simple permet de r´epondre, avec un effort minimal, `a la question.

3.2.1 Pr´ eliminaires analytiques

Cette partie correspond en gros `a ce qu’on ferait en TD.

O H F

I

d R

i

M r

S

r−i

Figure3.1 – Lentille demi-boule

Prenons une lentille demi-boule (figure 3.1) de rayonR, et nous voulons calculer la distance OF en fonction ded, la distance du rayon incident IM `a l’axe optique, ce rayon est consid´er´e comme parall`ele au dit axe optique. Un peu de g´eom´etrie ´el´ementaire, additionn´ee de la loi de Snell-Descartes, nous dit que :

sini = d R OH = Rcosi nsini = sinr tan(r−i) = d

HF et ainsi la focalef s’´ecrit :

f = OF =Rcosi+ d tan(r−i)

On peut v´erifier que dans les conditions de Gauss, on retrouve la formule habituelle :

cosi ≈ 1 sini ≈ i sinr ≈ r tan(r−i) ≈ r−i soit :

f ≈R+ R n−1 Or, habituelement, on a

flentille mince= R n−1

C’est simplement que, dans le cas d’une lentille mince, les points O et S sont confondus. On constate que la distance focale, dans ces conditions, ne d´epend pas ded, ce qui est bien le signe d’un syst`eme stigmatique.

41

42 Licence de physique L3: PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

3.2.2 Ecriture d’un programme ´

En gros, il s’agit de recopier la formule de la focale : f = rayon*cos(i) + d/tan(r-i)

avec la pr´ecaution que comme le langagefortranne dis-tingue pas entre les lettres majuscules et minuscules, il faut deux variables au nom distinctrpour l’angle etrayon pour R. Reste `a calculer les variables qui ne le sont pas encore, faire une boucle pour faire varier d de z´ero `a sa valeur maximum, d´eclarer toutes les variables et s’occuper des entr´ees-sorties. C¸ a peut donner quelque chose comme : program lentille

implicit none

real, parameter :: rayon = 1.0, n = 1.5 ! indice du verre real :: d, i, r, f, d_max

integer, parameter :: l_max= 500 integer :: l

d_max = rayon/n ! au-dela, c’est la reflexion totale open(10,file=’lentille.res’)

do l = 1, l_max d = l*d_max/l_max

i = asin(d/rayon) ! arcsinus r = asin(n*d/rayon)

f = rayon*cos(i) + d/tan(r-i) write(10,*) d, f

enddo close(10)

end program lentille

Pour ´ecrire un tel programme, il n’est pas utile de vouloir tenter de commencer par la premi`ere ligne et ter-miner par la derni`ere. . . Il vaut bien mieux commencer par la ligne de code strat´egiquequi donnef en fonc-tion de d, puis compl´eter au fur et `a mesure des besoins, par les d´eclarations, chaque fois qu’on introduit des nou-velles variables, les lignes qui d´efinissent les variables non encore calcul´ees, la boucle, ses bornes, et enfin les entr´ees-sorties. Ne pas h´esiter `a commenter un programme : l’ex-emple ci-dessus reste tr`es sobre de ce point de vue ; dans un programme plus complexe, chaque d´eclaration est accom-pagn´ee d’un commentaire qui explique ce que repr´esente la variable, on peut aussi pr´evoir un commentaire g´en´eral au d´ebut du programme qui explique ce que calcule ce pro-gramme, par quelle m´ethode, la date d’´ecriture, un num´ero de version, ´eventuellement un historique des diff´erentes versions ou des modifications apport´ees, etc. Dans le cas d’un TP, des commentaires bien plac´es peuvent aider votre enseignant, qui lit votre compte-rendu, `a comprendre ce que vous avez tent´e de faire. . .

En g´en´eral, une premi`ere compilation produit une liste impressionnante d’erreurs : NE PAS se laisser impres-sionner ! Remontez jusqu’`a la premi`ere erreur de la liste, corrigez-l`a (on s’habitue assez vite aux diagnostics qui sont assez explicites), sauvegardez votre programme et recom-pilez : apr`es quelques it´erations, les choses devraient aller nettement mieux !

3.2.3 Premiers r´ esultats

La figure 3.2 donne le r´esultat du calcul.

Commentaire : on constate que pour d < 0.1R, la dis-ance focale est une constante et la valeur f = 3 est bien celle qu’on attendait. Ces remarques peuvent paraˆıtre triv-iales : elles le sont en effet, mais il est tr`es important de v´erifier qu’un programme donne bien les r´esultats

1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7

f

d

Figure3.2 – Focale d’une lentille demi-boule pourR= 1 etn= 1.5

dus dans les cas o`u l’on sait `a quoi s’attendre ! C’est un excellent, sinon le seul, d´etecteur d’erreurs de logique. . .

On constate ensuite que la distance focale, pourdplus grand que 0.1, d´ecroˆıt, ce n’est plus une constante. Ainsi, une lentille demi-boule n’est pas un dispositif stigmatique,

`

a un point de l’image, ne correspond pas un point de l’ob-jet. Ce n’est donc pas un dispositif tr`es utilisable dans l’optique conventionnelle, c’est ce qu’on appelle l’aber-ration g´eom´etrique et c’est ce qui justifie g´en´eralement l’utilisation de lentilles minces qui fonctionnent toujours dans l’approximation de Gauss (mais ¸ca reste une approx-imation mˆeme pour les lentilles minces).

3.2.4 Trac´ e des rayons

Si on donne une liste de points au programmegnuplot, ces points ´etant d´efinis par leurs coordonn´ees (x, y), il trac-era ces points comme autant de croix. Si, lors du trac´e, on sp´ecifie que l’on veut des lignes (with lines), gnuplot tracera des lignes entre les points : on peut utiliser cela pour tracer les rayons.

Pour une valeur dedun rayon est d´efini par trois points I, M et F : il suffit alors d’´ecrire leurs coordonn´ees dans un fichier, puis de recommencer pour une autre valeur de d, etc. On a, par exemple :

I −R

d

, M

Rcosi d

, F

f 0

Il suffit d’apporter quelques petites modifications au programme initial :

program lentille implicit none

real, parameter :: rayon = 1.0, n = 1.5 ! indice du verre real :: d, i, r, f, d_max

integer, parameter :: l_max= 10 ! nombre de rayons a tracer integer :: l

d_max = rayon/n ! au-dela, c’est la reflexion totale open(10,file=’lentille.res’)

open(20,file=’lentille.ray’) do l = 1, l_max

d = l*d_max/l_max

i = asin(d/rayon) ! arcsinus r = asin(n*d/rayon)

f = rayon*cos(i) + d/tan(r-i)

-1 -0.5 0 0.5 1

-1 -0.5 0 0.5 1 1.5 2 2.5 3

Figure3.3 – Trajet des rayons

write(10,*) d, f write(20,*) -rayon, d write(20,*) rayon*cos(i), d write(20,*) f, 0.

write(20,*) ! ca, c’est juste pour

! sauter une ligne dans le fichier resultat enddo

close(10) ; close(20) end program lentille

Le r´esultat est donn´e sur la figure 3.3. Pour obtenir l’arc de cercle, on a simplement ajout´e au programme une autre boucle pour tracer les points de coordonn´ees (Rcosi, Rsini), i∈[−π/2, π/2]. Pour obtenir un rapport d’aspect convenable entre les axes x et y (ce sont des distances, a priori, dans la mˆeme unit´e) on a sp´ecifi´e `a gnuplot: set size ratio -1

Avec cette figure, on visualise directement l’aberration g´eom´etrique : les rayons proches de l’axe optique conver-gent bien tous vers la focale officielle , alors que les autres se rapprochent davantage de la lentille.

3.2.5 Au-del` a de la r´ eflexion totale

Si on va au-del`a de l’angle de r´eflexion totale, on s’at-tend `a ce que les rayons restent pi´eg´es dans la lentille.

Pour en tenir compte, la boucle surdne doit pas s’arrˆeter

`a dmax=R/nmais aller jusqu’`aR. Il faudra alors mettre une condition : si d < R/n, on fait comme avant, sinon, on fait la r´eflexion totale. Dans ce deuxi`eme cas, comme on ne sait pas d’avance combien il y aura de r´eflexions, il faut mettre une boucle sans indice avec un crit`ere d’arrˆet et un exit.

Cela peut donner le programme suivant (on laisse le soin au lecteur de retrouver les formules utilis´ees. . .) :

program lentille implicit none

real, parameter :: rayon = 1.0, n = 1.5 ! indice du verre real :: d, i, r, f, d_max

integer, parameter :: l_max= 20 ! nombre de rayons a tracer integer :: l

real :: alpha ! angle entre deux reflexions totales real :: beta

real, parameter :: pi = acos(-1.0) ! nombre pi d_max = rayon/n ! au-dela, c’est la reflexion totale

-1 -0.5 0 0.5 1

-1 -0.5 0 0.5 1 1.5 2 2.5 3

Figure3.4 – Trajet des rayons, avec r´eflexion totale.

open(10,file=’lentille.res’) open(20,file=’lentille.ray’) do l = 1, l_max-1

d = l*rayon/l_max

i = asin(d/rayon) ! arcsinus if ( d < d_max ) then

r = asin(n*d/rayon)

f = rayon*cos(i) + d/tan(r-i) write(10,*) d, f

write(20,*) -rayon, d write(20,*) rayon*cos(i), d write(20,*) f, 0.

else

write(20,*) -rayon, d write(20,*) rayon*cos(i), d alpha = pi -2*i

beta = i do

beta = beta - alpha if ( beta < -pi/2 ) exit

write(20,*) rayon*cos(beta), rayon*sin(beta) enddo

endif

write(20,*) ! ca, c’est juste pour

! sauter une ligne dans le fichier resultat enddo

close(10) ; close(20)

open(30,file=’lentille.dioptre’) do l = -20,20

i = acos(-1.0)*l/40.

write(30,*) rayon*cos(i), rayon*sin(i) enddo

close(30)

end program lentille

Et l’on obtient ais´ement la figure 3.4.

44 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

Chapitre 4

M´ ethodes num´ eriques.

Ce chapitre d´eveloppe les principales m´ethodes num´eriques utilis´ees par les physiciens : afin d’´eviter d’en faire un manuel de math´ematiques appliqu´ees, que d’autres seraient sans doute mieux `a mˆeme de r´ealiser, chaque m´ethode est illustr´ee par un exemple de physique puis´e dans la mesure du possible dans le bagage d’un

´etudiant de licence de physique, quitte `a anticiper l´eg`erement sur certains cours (en physique quantique ou en thermodynamique statistique en particulier).

4.1 Recherche des z´ eros d’une fonction.

Partons d’un exemple compl´etement acad´emique mais tr`es simple : un pendule simple de masse m porte `a son extr´emit´e une charge q. On place `a proximit´e une autre chargeq(figure 4.1). Trouver l’angle d’´equilibreθdu pen-dule en fonction de la valeur deq.

q

q’

θ

Figure4.1 – Le pendule charg´e

L’´energie potentielle de gravitation du pendule peut s’´ecrire :

Vg=mgz=−mgℓcosθ

o`uℓest la longueur du pendule etθl’angle qu’il fait avec la verticale ; de mˆeme, l’´energie potentielle ´electrostatique des charges s’´ecrit :

Ve= 1 4πε0

qq

p(ℓsinθ−xq)2+ (ℓ(1−cosθ)−yq)2 o`uxqetyq sont les coordonn´ees de la chargeq. L’´equilibre est, comme d’habitude, donn´e par :

d(Vg+Ve)

dθ = 0

On obtient apr`es quelques lignes de calcul : sinθ+ qq

4πε0mg

xqcosθ+ (yq−ℓ) sinθ [(ℓsinθ−xq)2+ (ℓ(1−cosθ)−yq)2]32

= 0 (4.1)

ce qui n’est pas ´evident `a r´esoudre analytiquement1. Il s’agit d’un cas particulier du probl`eme de la recherche du ou des z´ero(s) d’une fonction, c’est-`a-dire trouver le ou lesxtel(s) que

f(x) = 0

Il existe deux m´ethodes principales pour r´esoudre num´eriquement ce genre de probl`eme.

4.1.1 M´ ethode de la dichotomie.

Comme son nom l’indique, il s’agit d’une recherche dans un intervalle que l’on d´ecoupe en sous-intervalles (fig. 4.2).

ε f(a)

f(b)

a x b

Figure4.2 – Recherche de z´ero par dichotomie. Les zones gris´ees sont ´elimin´ees par la recherche. Le rectangle allong´e horizontalement d´elimite la pr´ecisionεrequise.

Admettons que sur l’intervalle [a, b] la fonctionf ait un z´ero et un seul : elle change de signe sur l’intervalle et donc le produitf(a)f(b) est n´egatif. Coupons alors l’intervalle [a, b] en deux, ce qui nous donne le point x = a+b

2 . Si le produitf(a)f(x) est n´egatif, c’est que le z´ero recherch´e se trouve dans l’intervalle [a, x], sinon il se trouve dans l’intervalle [x, b]. Il reste `a rediviser en deux l’intervalle

1. On pourrait tenter de poser par exemplex= sinθety= cosθ, avecx2+y2= 1. On tomberait alors sur un polynˆome de degr´e 8 enxety. . .

45

46 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

o`u se trouve le z´ero et `a refaire la mˆeme recherche. On r´ep`ete encore la mˆeme op´eration plusieurs fois jusqu’`a ce que la pr´ecision requise soit atteinte. Comme on r´ep`ete la mˆeme proc´edure plusieurs fois de suite, on appelle cela un processus it´eratif.

Deux crit`eres diff´erents sont possibles pour choisir d’arrˆeter ou non la recherche :

– soit l’on d´esire une certaine pr´ecision sur la valeur de x et, donc, on arrˆete la recherche quand la longueur de l’intervalle devient inf´erieure `a une valeurεchoisie

`a l’avance,

– soit l’on veut que f(x) soit proche de z´ero avec une certaine pr´ecision comme sur la figure 4.2, c’est-`a-dire

|f(x)|< ε.

Une fonction informatique qui fasse cela pourrait s’´ecrire : real function dicho(f, a, b, epsilon)

! recherche de zero par dichotomie

! f = fonction reelle dont on cherche le zero

! a et b = bornes de l’intervalle de recherche

! epsilon = precision recherchee sur la valeur de f

!

! les variables y, y1, et y2 servent a conserver

! les valeurs prises par f afin d’eviter les

! calculs inutiles si f est longue a calculer implicit none

real :: a, b, f, epsilon, y, y1, y2, x, x1, x2 x1 = a ; x2 = b ! initialisation de l’algorithme y1 = f(a) ; y2 = f(b)

! verification de l’intervalle if( y1*y2 > 0. ) then

write(*,*) ’Intervalle mal choisi’

stop endif

do ! *** debut de la boucle ***

x = 0.5*(x1+x2) ; y = f(x) ! dichotomie if ( abs(y) < epsilon ) exit ! critere d’arret

! de quel cote le zero se trouve-t-il ? if ( y1*y < 0 ) then

x2 = x ; y2 = y ! a gauche [x1,x]

else

x1 = x ; y1 = y ! a droite [x,x2]

endif

enddo ! *** fin de la boucle ***

dicho = x end

L’´equation (4.1) devient ais´ee `a r´esoudre num´eri-quement `a l’aide d’un programme qui aurait l’allure suiv-ante :

module pendu

! mise en commun de variables pour

! << sauter >> par-dessus dicho

! valeur et position de la charge real :: c, xq, yq

end

program zero use pendu implicit none

real :: a, b, eps, dicho, x external pendule

xq = .1 ; yq = 0.

a = -1.57 ; b = 1.57 ; eps = 0.00001

open(1,file=’zero.out’) ! fichier ou l’on mettra

! les resultats c = 0.

do ! boucle pour faire varier c

x = dicho(pendule, a, b, eps) write(1,*) c, x

c = c + 0.01 if ( c > 2.0 ) exit enddo

close(1) end

!

!---real function pendule(theta) use pendu

implicit none real :: theta

! l = 1

! c = q*qprime/(4*pi*eps0*m*g)

pendule = sin(theta) & ! la formule occupe 3 lignes + c*( xq*cos(theta)-(1.-yq)*sin(theta))/ &

((sin(theta)-xq)**2+((1.-cos(theta))-yq)**2)**1.5 end

La fin est bien sˆur constitu´ee de la fonction dicho. Le r´esultat du calcul est donn´e figure 4.3.

−1.4

−1.2

−1

−0.8

−0.6

−0.4

−0.2 0

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

freq_eq

C

Figure4.3 – Solution du probl`eme du pendule en fonction dec= 4πεqq

0mg pourℓ= 1.

On constate, sans v´eritable surprise, que plusc (ou la charge) augmente, plus le pendule s’´ecarte de la verti-cale. . .

La m´ethode de la dichotomie est assez p´edestre, elle est sˆure, sans surprise. Elle n´ecessite une connaissance pr´ealable de la fonction puisqu’elle suppose qu’il y ait un et un seul z´ero dans l’intervalle de recherche : il faut donc pouvoir choisir celui-ci judicieusement.

4.1.2 M´ ethode de Newton.

La m´ethode de Newton est `a la fois plus efficace et plus dangereuse. Il s’agit, `a partir d’un point de d´epartx0 judi-cieusement choisi, d’approcher la fonction par sa tangente et de chercher l’intersection de celle-ci avec l’axe des x.

Comme la fonction n’est pas a priori lin´eaire le r´esultat est faux, mais il constitue le point de d´epart d’une nou-velle recherche (figure 4.4).

x0

y0 x1 y1

x2 y2

Figure4.4 – La m´ethode de Newton.

Si l’on part d’un point d’abscisse x0, on doit pouvoir calculer f(x0) et la pente de la tangente f(x0). L’inter-section de la tangente avec l’axe des xest donn´ee par

x1=x0− f(x0) f(x0)

Il suffit de r´ep´eter l’op´eration pourx1, x2,. . . xn+1=xn− f(xn)

f(xn)

jusqu’`a ce que le crit`ere de convergence que l’on aura choisi soit v´erifi´e.

Imaginons, par exemple, que l’on veuille chercher la point d’intersection d’un rayon lumineux avec un diop-tre en utilisant la loi de Descartes (figure 4.5) : le rayon part d’un point de coordonn´ees

−a y

dans un mi-lieu d’indice n1 pour arriver en un point de coordonn´ees a

−y

dans un milieu d’indice n2, en passant par le dioptre au point de coordonn´ees

x 0

. L’inconnue du probl`eme est x.

y y

a a

x i1

i2 n1

n2

Figure4.5 – Loi de Descartes : notations pour utiliser la m´ethode de Newton

La loi de Descartes s’´ecrit ´evidemment n1sini1=n2sini2

et un peu de trigonom´etrie ´el´ementaire donne i1= arctana+x

y , i2= arctana−x y ainsi nous avons a rechercher la racine de la fonction

f =n1sin

arctana+x y

−n2sin

arctana−x y

o`uxest l’inconnue. Si nous voulons utiliser la m´ethode de Newton, nous avons besoin de la d´eriv´ee def par rapport

` ax:

df dx = n1

y cos 1

1 +

a+x y

2 +n2

y cos 1

1 +

ax y

2

Le programme suivant fait exactement cela :

module params ! definition des parametres du probleme implicit none

real, parameter :: n1 =1.0, n2 = 1.5, a = 1., y = 1.

end module params program decartes use params implicit none

real, parameter :: eps = 1.e-5 ! precision requise

real :: newton

external :: trajet

real :: x = 0. ! condition initiale

! ce programme ne comporte qu’une instruction write(*,*) newton(x,trajet,eps), &

n1*sin(atan((a+x)/y)) - n2*sin(atan((a-x)/y)) end

subroutine trajet(x, f, df ) ! calcul de la fonction

use params ! et de sa derivee

implicit none

real, intent(in) :: x real, intent(out) :: f, df

real :: r1, r2

r1 = (a + x)/y ; r2 = (a - x)/y

f = n1*sin(atan(r1)) - n2*sin(atan(r2))

df = n1*cos(1./(1.+r1**2))/y + &

n2*cos(1./(1.+r2**2))/y end

real function newton(x,f,eps) ! methode de Newton implicit none

integer :: i, imax = 100 ! nombre max d’iterations real :: x, eps, xp, y, d

do i = 1, imax call f(x, y, d) xp = x - y/d

if (abs(xp-x) < eps ) exit x = xp

enddo newton = xp end

Cela donne :0.36264408 -0.000014537249. On laissera le soin au lecteur de v´erifier que c’est correct. . .

La m´ethode de Newton a plusieurs avantages par rap-port `a la m´ethode de la dichotomie. Elle est en g´en´eral beaucoup plus rapide, ce qui dans certains cas peut s’av´erer d´ecisif. Elle a par ailleurs le tr`es gros avantage

48 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

de pouvoir se g´en´eraliser ais´ement `a plusieurs dimensions comme on le verra dans la suite. Elle a l’inconv´enient qu’il faut pouvoir calculer, ou au moins estimer la d´eriv´ee de la fonction, ce qui est parfois un peu laborieux (voir l’´equation (4.1) par exemple).

Elle rec`ele toutefois quelques pi`eges parfois redoutables.

Si par exemple, l’un des points xn est tel quef(xn)∼0, le point xn+1 risque de se trouver projet´e fort loin du point de d´epart2, un r´esultat contrariant alors qu’il s’agit d’une recherche en principe locale puisque bas´ee sur une approximation lin´eaire. Un deuxi`eme pi`ege est que si la fonction ´etudi´ee poss`ede plusieurs z´eros, rien ne permet de choisir `a coup sˆur celui que l’on veut puisqu’il n’y a pas d’intervalle de recherche pr´e-d´efini : on peut certes forcer le r´esultat `a rester dans un intervalle donn´e. Parfois, enfin, l’algorithme ne converge pas, mˆeme si une solution existe, en cas de changement de courbure malencontreux par exemple : un choix plus judicieux du point de d´epart peut r´egler le probl`eme.

4.1.3 Comment s’y prendre ?

Les paragraphes pr´ec´ecents d´ecrivent deux m´ethodes diff´erentes pour r´esoudre le mˆeme type de probl`eme, cha-cune avec ses qualit´es et ses d´efauts. En consultant des ouvrages sp´ecialis´es, on s’apercevra rapidement qu’il en existe d’autres. Comment proc´eder, alors ?

La premi`ere ´etape est de tenter de d´egrossir qualita-tivement le probl`eme par des r´esolutions graphiques par exemple, soit `a l’aide de programmes de trac´e de courbes commegnuplot, soit avec une calculette graphique, soit. . .

`a la main, ce qui est parfois le plus efficace car programmes et calculettes travaillent toujours dans un intervalle d´efini a priori et ne disent rien sur ce qui se passe `a l’ext´erieur de cet intervalle, en particulier les asymptotes.

La deuxi`eme ´etape est souvent de tenter de reformuler le probl`eme de fa¸con qu’il n’y ait qu’un seul z´ero dans le domaineutile. Par exemple, rechercher le z´ero de

tanhx−ax= 0

poura <1 donne trois solutions dont une solution triviale pour x = 0 (figure 4.6) ; or l’ordinateur ne sait pas qu’elle est sans int´erˆet. Il peut ˆetre habile alors de chercher plutˆot les solutions de

tanh(x)

x −a= 0

qui ´elimine la solution triviale si a6= 1, puisque

xlim0

tanh(x)

x = 1

C’est alors qu’on peut choisir une m´ethode, Newton si le probl`eme s’av`ere assez civilis´e dichotomie sinon.

4.2 Repr´ esentation des nombres

Dans le document Licence de physique L3 PHYTEM (Page 41-48)