next up previous contents index
suivant: Les programmes récursifs monter: Les quadriques précédent: Équation d'une quadrique   Table des matières   Index

Équation reduite d'une quadrique

Pour réaliser la réduction de l'équation d'une quadrique, on pose :
B:=A[0..2,0..2];
C:=A[0..2,3];
d:=A[3,3];
Les directions propres de B sont les directions principales de la quadrique Q.
Comme une matrice symétrique réelle est diagonalisable dans un repère orthonormé, il existe un repère orthonormé (O, u, v, w) dans lequel la quadrique a comme équation :
$ \tt s1*x1^2+s2*y1^2+s3*z1^2+2c1*x1+2*c2*y1+2*c3*z1+d1=0$
s1,s2,s3 sont les valeurs propres de B et u,v,w sont les vecteurs propres associés, choisis normés et orthogonaux.
Remarques Voici les différents cas :

Pour faciliter l'étude des différents cas le programme jortho va renvoyer 6 valeurs :
les 3 valeurs propres (en regroupant les valeurs propres égales et non nulles au début et en mettant les valeurs propres nulles à la fin) et les 3 vecteurs propres seront normés et orthogonaux sauf pour les vecteurs propres associés à 0.
Soit les trois valeurs propres sont : s1,s2,s3 et les trois vecteurs propres associés sont : u,v,w.
On a soit les zeros déjà à la fin et les valeurs égales non nulles déjà regroupées au début, soit on peut avoir 8 cas ( a!=0,b!=0,a!=b) :
(0,a,b) ou (0,a,a) ou (0,a,0) ou (b,a,a) ou (a,b,a) ou (0,0,a) ou (a,0,b) ou (a,0,a).
Pour les quatre premiers cas : Si (s1==0 ou s2==s3) et s2!=0) on renvoie s2,s3,s1 et v,w,u .
Ainsi on a maintenant :
(a,b,0) ou (a,a,0) ou (a,0,0) ou (a,a,b) ou (a,b,a) ou (0,0,a) ou (a,0,b) ou (a,0,a).
Pour les quatre derniers cas, on a :
(s2==0 ou s1==s3) et s3!=0) on renvoie s3,s1,s2 et w,u,v.

Il faut rendre u,v othogonaux lorsque s1==s2 si v*u!=0
v1:=-(v*u)*u+(u*u)*v ainsi v1*u=0 il faut rendre v,w othogonaux lorsque s3==s2==0 si v*w!=0
puis on norme u,v,w.
Voici les programmes :
jortho renvoie les valeurs propres et les vecteurs propres orthonormés.
quadrique renvoie la nouvelle origine la matrice de passage et la forme reduite ainsi que la verification.

jortho(A):={
local P,J,u,v,w,s1,s2,s3,a,b;
(P,J):=jordan(A);
u:=P[0..2,0];
v:=P[0..2,1];
w:=P[0..2,2];
s1:=J[0,0];
s2:=J[1,1];
s3:=J[2,2];
if ((s1==0 || s2==s3) && s2!=0){
b:=u;
u:=v; 
v:=w;
w:=b;
a:=s1;
s1:=s2;
s2:=s3;
s3:=a;
}
if ((s2==0|| s1==s3)&& s3!=0){
b:=w;
w:=v; 
v:=u;
u:=b;
a:=s3;
s3:=s2;
s2:=s1;
s1:=a;
}
//si s1==s2 et si v*u!=0 
a:=normal(u*u);
b:=normal(v*u);
if (b!=0) {
v:=-b*u+a*v;
}
//on norme u
u:=u/sqrt(a);
//si s3==s2==0 et si v*w!=0 
a:=normal(v*v);
b:=normal(v*w);
if (b!=0) {
w:=-b*v+a*w;
}
//on norme w et v 
w:=w/sqrt(normal(w*w));
v:=v/sqrt(a);
return (s1,s2,s3,u,v,w);
};

Le programme Quadrique renvoie le repere (la nouvelle origine et la matrice de passage) et l'équation réduite dans ce repère :

//q0(x,y,z):=4*x^2+y^2+z^2-4*x*y+4*x*z-2*y*z+8*x-4*y+4*z+2 
//           (s2=s3=0,c2=c3=0)
//q1(x,y,z):=x^2+3*y^2-3*z^2-8*y*z+2*z*x-4*x*y-1 
//           (s3=0,c3=0)
//q2(x,y,z):=5*x^2+y^2+z^2-2*x*y+2*x*z-6*y*z+2*x+4*y-6*z+1 
//           (s1,s2,s3!=0)
//Quadrique(q2)=[(-1)/2,-1,1/2],[[0,2/(sqrt(6)),
//-(1/(sqrt(3)))],[1/(sqrt(2)),-(1/(sqrt(6))),-(1/(sqrt(3)))],
//[1/(sqrt(2)),1/(sqrt(6)),1/(sqrt(3))]],
//-2*X^2+6*Y^2+3*Z^2-3
//q3(x,y,z):=2*x^2+2*y^2+z^2+2*x*z-2*y*z+4*x-2*y-z+3 
//           (s3=0,c3!=0)
//q4(x,y,z):=4*x^2+y^2+z^2-4*x*y+4*x*z-2*y*z+8*x-
//           6*y+4*z+2 
//           (((s2=s3=0,c2!=0||c3!=0))
//q5(x,y,z):=x^2+2*y^2-z^2-4*x*y+4*x*z+4*y*z+6*x-
//           4*y+2*z+1 
//           (root of)
//q6(x,y,z):=(x+y)*(y-z)+3*x-5*y 
//             (s3=0,c3!=0)
//q7(x,y,z):=7*x^2+4*y^2+4*z^2+4*x*y-4*x*z-2*y*z-
//             4*x+5*y+4*z-18 
//           (s1,s2,s3!=0)
//q8(x,y,z):=-x^2-3*z^2-4*x*y+4*x*z+4*y*z+6*x-4*y+2*z+1 
//q9(x,y,z):=x^2-3*x*y+y^2+x-y-z^2/2+sqrt(10)/5*z
//q est une fct de 3 variables de degre 2
//Quadrique renvoie la nouvelle origine,
// la matrice de passage,
//la forme reduite avec le vecteur de variables et
//la verification par ex pour q4 
//B:=[[4,-2,2],[-2,1,-1],[2,-1,1]];C:=[4,-3,2];
Quadrique(q):={
local Q,A,B,C,d,J,r,P,O1,c,c1,c2,c3,c4,s1,s2,
      s3,u,v,w,v1,w1,N,k;
Q(x,y,z,t):=normal(t^2*normal(q(x/t,y/t,z/t)));
A:=q2a(Q(x,y,z,t),[x,y,z,t]);
r:=rank(A);
B:=A[0..2,0..2];
C:=A[0..2,3];
d:=A[3,3];
//on rend P orthogonale sauf si il y a des val propres =0 
(s1,s2,s3,u,v,w):=jortho(B);
P:=tran([u,v,w]);
//c:=normal(diff(C*P*[x,y,z],[x,y,z]));
c:=normal(C*P);
//les vp nulles sont a la fin
c1:=c[0];
c2:=c[1];
c3:=c[2];
if (s1*s2*s3!=0) {
O1:=normal(-c1/s1*u-c2/s2*v-c3/s3*w);
//O1:=solve(B*[x,y,z]+C,[x,y,z])[0];
d:=q(O1[0],O1[1],O1[2]);
return (O1,P,s1*X^2+s2*Y^2+s3*Z^2+d,[X,Y,Z],r,
        normal(q(op(O1+P*[X,Y,Z]))));
}
if (s1*s2!=0) {
if (c3!=0) {
O1:=normal(-c1/s1*u-c2/s2*v);
d:=q(O1[0],O1[1],O1[2]);
O1:=normal(-c1/s1*u-c2/s2*v-d/(2*c3)*w);
return (O1,P,s1*X^2+s2*Y^2+2*c3*Z,[X,Y,Z],r,
           normal(q(op(O1+P*[X,Y,Z]))));
}
if (c3==0) {
O1:=normal(P*[-c1/s1,-c2/s2,0]);
d:=q(O1[0],O1[1],O1[2]);
return (O1,P,s1*X^2+s2*Y^2+d,[X,Y,Z],r,
           normal(q(normal(op(O1+P*[X,Y,Z])))));
}
}
if (s1!=0) {
if (c2 !=0 or c3 !=0) {
c4:=sqrt(c2^2+c3^2);
v1:=normal(P*[0,c3,-c2]/c4);
w1:=normal(P*[0,c2,c3]/c4);
O1:=normal(P*[-c1/s1,0,0]);
d:=q(O1[0],O1[1],O1[2]);
P:=P[0..2,0..0];
P:=border(P,v1);
P:=border(P,w1);
//en fait le nouveau c3 ci dessous ==c4 mais 
//ca ne marche pas avec c4 mystere (corrige?)
//c:=normal(diff(C*P*[x,y,z],[x,y,z]));
//c3:=c[2];
//O1:=O1+normal(P*[0,0,-d/(2*c3)]);
O1:=O1+normal(P*[0,0,-d/(2*c4)]);
d:=q(O1[0],O1[1],O1[2]);
return (O1,P,s1*X^2+2*c3*Z+d,[X,Y,Z],r,
        normal(q(normal(op(O1+P*[X,Y,Z])))));
//return (O1,P,s1*X^2+2*c4*Z+d,[X,Y,Z],r,
//          normal(q(op(O1+P*[X,Y,Z]))));
}
if (c2==0 && c3==0) {

//on rend P orthogonale
k:=normal(v*v);
w:=normal(-(w*v)*v+k*w);
w:=normal(w/sqrt(normal(w*w)));
v:=normal(v/sqrt(k));
P:=tran([u,v,w]);
O1:=normal(P*[-c1/s1,0,0]);
d:=q(O1[0],O1[1],O1[2]);

return (O1,P,s1*X^2+d,[X,Y,Z],r,
         normal(q(op(O1+P*[X,Y,Z]))));
}
}
}

On tape :
q0(x,y,z):=4*x^2+y^2+z^2-4*x*y+4*x*z-2*y*z+8*x-4*y+4*z+2
Quadrique(q0)
On obtient :
[(-2)/3,1/3,(-1)/3],[[2/(sqrt(6)),(sqrt(5))/5,(sqrt(30))/15],
[-(1/(sqrt(6))),0,(sqrt(30))/6],[1/(sqrt(6)),(-2*sqrt(5))/5,
(sqrt(30))/30]],6*X^2-2,[X,Y,Z],2,6*X^2-2
On tape :
q1(x,y,z):=x^2+3*y^2-3*z^2-8*y*z+2*z*x-4*x*y-1
Quadrique(q1)
On obtient :
[0,0,0],[[0,1/(sqrt(6)),5*(-(1/(sqrt(30))))],[1/(sqrt(5)),
2*(-(1/(sqrt(6)))),2*(-(1/(sqrt(30))))],[2/(sqrt(5)),
1/(sqrt(6)),1/(sqrt(30))]],-5*X^2+6*Y^2-1,[X,Y,Z],3,
6*Y^2-5*X^2-1
On tape :
q2(x,y,z):=5*x^2+y^2+z^2-2*x*y+2*x*z-6*y*z+2*x+4*y-6*z+1
Quadrique(q2)
On obtient :
[(-1)/2,-1,1/2],[[0,2/(sqrt(6)),-(1/(sqrt(3)))],[1/(sqrt(2)),
-(1/(sqrt(6))),-(1/(sqrt(3)))],
[1/(sqrt(2)),1/(sqrt(6)),1/(sqrt(3))]],
-2*X^2+6*Y^2+3*Z^2-3,[X,Y,Z],4
3*Z^2+6*Y^2-2*X^2-3
On tape :
q3(x,y,z):=2*x^2+2*y^2+z^2+2*x*z-2*y*z+4*x-2*y-z+3
Quadrique(q3)
On obtient :
[(-113)/144,41/144,17/72],
[[1/(sqrt(3)),-(1/(sqrt(2))),1/(sqrt(6))],
[-(1/(sqrt(3))),-(1/(sqrt(2))),
-(1/(sqrt(6)))],[1/(sqrt(3)),
0,2*(-(1/(sqrt(6))))]],
3*X^2+2*Y^2+(2*2*sqrt(6)*Z)/3,
[X,Y,Z],4,3*X^2+(4*sqrt(6)*Z)/3+2*Y^2
On tape :
q4(x,y,z):=4*x^2+y^2+z^2-4*x*y+4*x*z-2*y*z+8*x-6*y+4*z+2
Quadrique(q4)
On obtient :
[(-227)/180,(-71)/72,(-227)/360],
[[2/(sqrt(6)),(-(sqrt(5)))/5,(-(sqrt(30)))/15],
[-(1/(sqrt(6))),0,(-(sqrt(30)))/6],
[1/(sqrt(6)),(2*sqrt(5))/5,(-(sqrt(30)))/30]],
6*X^2+(2*sqrt(30)*Z)/6,[X,Y,Z],3,
(48*sqrt(30)*Z)/144+6*X^2
On tape :
q5(x,y,z):=x^2+2*y^2-z^2-4*x*y+4*x*z+4*y*z+6*x-4*y+2*z+1
Quadrique(q5)
On obtient :
[(-15)/13,5/13,(-7)/13],[[(-2)/3,(-sqrt(13)+1)/(sqrt(-8*sqrt(13)+52)),
(sqrt(13)+1)/(sqrt(8*sqrt(13)+52))],[(-1)/3,4/(sqrt(-8*sqrt(13)+52)),
4/(sqrt(8*sqrt(13)+52))],[(-2)/3,(sqrt(13)-3)/(sqrt(-8*sqrt(13)+52)),
(-sqrt(13)-3)/(sqrt(8*sqrt(13)+52))]],
2*X^2+sqrt(13)*Y^2+(-(sqrt(13)))*Z^2+(-49)/13,[X,Y,Z],4,
((-2*sqrt(13))*Z^2)/2+(2*sqrt(13)*Y^2)/2+2*X^2+(-49)/13
On tape :
q6(x,y,z):=(x+y)*(y-z)+3*x-5*y
Quadrique(q6)
On obtient :
[16/9,8/9,11/9],[[1/(sqrt(2)),1/(sqrt(6)),-(1/(sqrt(3)))],
[0,2/(sqrt(6)),1/(sqrt(3))],[1/(sqrt(2)),-(1/(sqrt(6))),
1/(sqrt(3))]],(X^2)/-2+(3*Y^2)/2+(2*(-4*sqrt(3))*Z)/3,
[X,Y,Z],4,-(X^2)/2-(8*sqrt(3)*Z)/3-(-3*Y^2)/2
On tape :
q7(x,y,z):=7*x^2+4*y^2+4*z^2+4*x*y-4*x*z-2*y*z-4*x+5*y+4*z-18
Quadrique(q7)
On obtient :
[11/27,(-26)/27,(-29)/54],[[1/(sqrt(5)),54*(-(1/(sqrt(30)*27))),
2/(sqrt(6))],[0,5/(sqrt(30)),1/(sqrt(6))],[2/(sqrt(5)),1/(sqrt(30)),
-(1/(sqrt(6)))]],3*X^2+3*Y^2+9*Z^2+(-602)/27,
[X,Y,Z],4,3*Y^2+3*X^2+9*Z^2+(-602)/27
On tape :
q8(x,y,z):=-x^2-3*z^2-4*x*y+4*x*z+4*y*z+6*x-4*y+2*z+1
Quadrique(q8)
On obtient (c'est tres long!):
[(-11)/54,223/108,61/54],[[(-sqrt(13)+1)/(sqrt(-8*sqrt(13)+52)),
(sqrt(13)+1)/(sqrt(8*sqrt(13)+52)),(-2)/3],[4/(sqrt(-8*sqrt(13)+52)),
4/(sqrt(8*sqrt(13)+52)),(-1)/3],[(sqrt(13)-3)/(sqrt(-8*sqrt(13)+52)),
(-sqrt(13)-3)/(sqrt(8*sqrt(13)+52)),(-2)/3]],
(sqrt(13)-2)*X^2+(-sqrt(13)-2)*Y^2-4*Z,[X,Y,Z],4,
((-4+2*sqrt(13))*X^2)/2+((-4-2*sqrt(13))*Y^2)/2-4*Z
On tape :
q9(x,y,z):=x^2-3*x*y+y^2+x-y-z^2/2+sqrt(10)/5*z
Quadrique(q9)
On obtient un cône car r=3 :
[-1/5,1/5,(sqrt(10))/5],[[1/(sqrt(2)),1/(sqrt(2)),0],[-(1/(sqrt(2))),
1/(sqrt(2)),0],[0,0,1]],(5*X^2)/2+(Y^2)/(-2)+(Z^2)/(-2),[X,Y,Z],3,
5/2*X^2+(-1)/2*Y^2+(-1)/2*Z^2
On tape :
q10(x,y,z):=x^2-3*x*y+y^2-x-y-z^2/2+sqrt(10)/5*z
Quadrique(q10)
On obtient :
[-1,-1,(sqrt(10))/5],[[1/(sqrt(2)),1/(sqrt(2)),0],
[-(1/(sqrt(2))),1/(sqrt(2)),0],[0,0,1]],
(5*X^2)/2+(Y^2)/(-2)+(Z^2)/(-2)+6/5,[X,Y,Z],4,
5/2*X^2+(-1)/2*Y^2+(-1)/2*Z^2+6/5


next up previous contents index
suivant: Les programmes récursifs monter: Les quadriques précédent: Équation d'une quadrique   Table des matières   Index
Documentation de giac écrite par Renée De Graeve