suivant: Développement en fraction continue
monter: Développement en fraction continue
précédent: Propriétés des réduites
Table des matières
Index
Le programme f2dfc :
On veut transformer une fraction en son développement en fraction continue :
.
Pour obtenir le développement en fraction continue de a/b, on cherche le
quotient q et le reste r de la division euclidienne de a par b.
On a : q = a0 et
a/b = a0 + r/b = a0 + 1/(b/r) et, on continue en cherchant
la partie entiére de b/r qui sera a1....On reconnait
l'algorithme d'Euclide : la suite
(a0, a1,...an) est donc la suite
des quotients de l 'algorithme d'Euclide.
On écrit le programme :
f2dfc(fract):={
local r,q,l,lres,a,b;
l:=f2nd(fract);
a:=l[0];
b:=l[1];
lres:=[];
while (b>0) {
q:=iquo(a,b)
lres:=concat(lres,q);
r:=irem(a,b);
a:=b;
b:=r:
}
return lres;
}
On tape :
f2dfc(2599/357)
On obtient :
[7,3,1,1,3,14]
Le programme f2reduites :
On veut obtenir la suite des réduites de a/b.
L'algorithme pour obtenir les réduites ressemble beaucoup à l'algorithme
que l'on pour obtenir les coefficients u et v de l'identité de
Bézout (cf 5.3.5).
En effet on a :
P0 = a0 = a0*1 + 0 alors que v0 = 0
Q0 = 1 = a0*0 + 1 alors que u0 = 1
P1 = a0a1 +1 = P0*a1 + 1 alors que v1 = 1
Q1 = a1 = a1*Q0 + 0 alors que u1 = 0
Pp = Pp-1*ap + Pp-2 alors que
vp = vp-2 - ap-2vp-1
Qp = Qp-1*ap + Qp-2 alors que
up = up-2 - ap-2up-1
Ainsi :
P0 = 0 + a0*1 = v0 - a0*v1 = - v2
P1 = 1 + P0*a1 = v1 - v2*a1 = v3
P2 = P0 + P1*a2 = - v2 + v3*a2 = - (v2 - v3*a2) = - v4
On a donc pour tout p
0, si ap est la suite des quotients de
l'algorithme d'Euclide :
Qp = Qp-1*ap + Qp-2 avec Q-2 = 1 et P-1 = 0 et,
Pp = Pp-1*ap + Pp-2 avec P-2 = 0 et P-1 = 1
Donc la suite Qj est donc la suite des | u| et la suite Pj est la suite
des | v|. Il faut une valeur absolue car
up = up-2 - up-1*ap-2 donc
Q0 = u2 mais Q1 = - u3 et donc Q2 = u4 etc...
Qn = (- 1)nun+2 et,
P0 = - v2 mais P1 = v3 et donc P2 = - v4 etc...
Pn = (- 1)n+1vn+2.
On écrit le programme (calqué sur le programme Bezout avec les
listes) qui transforme une fraction en la suite de ces réduites :
f2reduites(fract):={
local lr,q,l,lres,la,lb;
l:=f2nd(fract);
//a:=l[0];b:=l[1];
la:=[1,0,l[0]];
lb:=[0,1,l[1]];
lres:=[];
while (lb[2]>0) {
q:=iquo(la[2],lb[2])
lr:=la-q*lb;
lres:=concat(lres,abs(lr[1])/abs(lr[0]));
la:=lb;
lb:=lr;
}
return lres;
}
Remarque :
On peut aussi remplacer :
lr:=la-q*lb;
lres:=concat(lres,abs(lr[1])/abs(lr[0]));
par :
lr:=la+q*lb;
lres:=concat(lres,lr[1]/lr[0]);
On tape :
f2reduites(2599/357)
On obtient :
[7,22/3,29/4,51/7,182/25,2599/357]
Le programme dfc2reduites :
On veut obtenir la suite des réduites d'une liste l (qui sera par exemple
le développement en fraction continue de a/b)
On écrit le programme (calqué sur le programme Bezout sans les
listes) qui transforme une liste
[a0, a1,..an] en la
liste
[a0, a0 +1/a1,....,(a0 +1/a1 +1/... +1/an-1 +1/an)] :
dfc2reduites(l):={
local s,p0,q0,p1,q1,p,q,lres,j;
s:=size(l);
lres:=[];
p0:=0;
p1:=1;
q0:=1;
q1:=0;
for (j:=0;j<s;j++){
p:=p0+l[j]*p1;
q:=q0+l[j]*q1;
lres:=concat(lres,p/q);
p0:=p1;
q0:=q1;
p1:=p;
q1:=q;
}
return lres;
}
On remarquera que :
-la suite des P est initialisée par
p0 et p1, puis, quand j = 0, on fait le calcul de P0 qui est mis dans
p, puis, quand j = 1 on fait
le calcul de P1 qui est mis dans p, etc... et que
- la suite des Q est initialisée par :
q0 et q1, puis, quand j = 0 on fait le calcul de Q0 qui est mis dans
q, quand j = 1, on fait
le calcul de Q1 est mis dans q, etc...
On tape :
dfc2reduites([7,3,1,1,3,14])
On obtient :
[7,22/3,29/4,51/7,182/25,2599/357]
suivant: Développement en fraction continue
monter: Développement en fraction continue
précédent: Propriétés des réduites
Table des matières
Index
Documentation de giac écrite par Renée De Graeve