ALS Invité
|
Posté le: 01 Avr 2005 11:34 Sujet du message: Re: développement de sqrt(D) en fraction continuée |
|
|
La procédure calculer affiche pour k=0..max les valeurs des termes pk/qk et pk²-dqk² calculés à partir de fraccont(d,n).
Les fractions pk/qk sont des fractions rationnelles qui approchent sqrt(d) de mieux en mieux (appelées réduites d'ordre k).
On a donc la limite de pk/qk quand k tend vers l'infini qui est égale à sqrt(d).
Code: |
> calculer:=proc(d,n,max)
> local fc,p,q,a,k:
> fc:=fraccont(d,n):print(fc):
> for k to nops(fc) do a[k-1]:=fc[k] od:
> p[0]:=a[0]: p[1]:=a[0]*a[1]+1:
> q[0]:=1: q[1]:=a[1]:
> print(`k `=0,p[0],q[0],p[0]^2-d*q[0]^2); print(`k `=1,p[1],q[1],p[1]^2-d*q[1]^2);
> for k from 2 to max do
> p[k]:=a[k]*p[k-1]+p[k-2]:
> q[k]:=a[k]*q[k-1]+q[k-2]:
> print(`k `=k,p[k]/q[k],p[k]^2-d*q[k]^2)
> od
> end proc:
> calculer(103,100,10);
[10, 6, 1, 2, 1, 1, 9, 1, 1, 2, 1, 6, 20, 6, 1, 2, 1, 1, 9, 1, 1, 2,
1, 6, 20, 6, 1, 2, 1, 1, 9, 1, 1, 2, 1, 6, 20, 6, 1, 2, 1, 1,
9, 1, 1, 2, 1, 6, 20, 6, 1, 2, 1, 1, 9, 1, 1, 2, 1, 6, 20, 6,
1, 2, 1, 1, 9, 1, 1, 2, 1, 6, 20, 6, 1, 2, 1, 1, 9, 1, 1, 2,
1, 6, 20, 6, 1, 2, 1, 1, 9, 1, 1, 2, 1, 6, 20, 6, 1, 2, 1]
k = 0, 10, 1, -3
k = 1, 61, 6, 13
k = 2, 71/7, -6
203
k = 3, ---, 9
20
274
k = 4, ---, -11
27
477
k = 5, ---, 2
47
4567
k = 6, ----, -11
450
5044
k = 7, ----, 9
497
9611
k = 8, ----, -6
947
24266
k = 9, -----, 13
2391
33877
k = 10, -----, -3
3338
|
Donc sqrt(103)=10.14889157 approchée par 10/1=10, puis par 61/6=10.16666667, puis par 71/7=10.14285714, ....
A l'ordre 10, sqrt(103) est approchée par 33877/3338=10.14889155. |
|