Classification automatique des quadriques

Une quadrique est une surface définie implicitement par une équation f(x,y,z) = 0, où f est un polynôme du second degré en x, y et z. Par exemple, la sphère de rayon r, centrée en (a,b,c), est une quadrique, car elle est définie par le polynôme (x-a)^2 + (y-b)^2 + (z-c)^2 - r^2 = 0.
Une quadrique est donc donnée en général par une équation de la forme :
c1 x^2 + c2 y^2 + c3 z^2 + 2 c4 x y + 2 c5 x z + 2 c6 y z + 2 c7 x + 2 c8 y + 2 c9 z + c10 = 0
où les 10 coefficients c1,....,c10 sont des nombres réels.
On donnera plus tard la justification des calculs à effectuer pour reconnaître quelle est la quadrique f(x,y,z) = 0.
Pour utiliser la commande ci-dessous, on introduit dans Mathematica la matrice symétrique m, 4 x 4, construite avec les ci, de la manière suivante :
m = {{c1, c4, c5, c7},{c4, c2, c6, c8},{c5, c6, c3,c9},{c7,c8,c9,c10}}

Avant de commencer, on charge la librairie :
<<LinearAlgebra`MatrixManipulation`
puis on introduit la commande :
classquad[m_]:= Module[{mat, gd, pd, tr, sm, deg, class},
mat=m;gd=Det[mat];pd=Minors[mat,3][[1,1]];tr=Sum[mat[[k,k]],{k,3}];
sm=Sum[Minors[TakeMatrix[mat,{1,1},{3,3}],2][[k,k]],{k,3}];
deg=Sum[Minors[mat,3][[k,k]],{k,2,4}];inv={gd,pd,tr,sm,deg};
class=Which[TakeMatrix[mat, {1, 1}, {3, 3}] == {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}},"pas une quadrique!",
pd!=0 && gd>0 && pd*tr>0 && sm>0,"ellipsoide imaginaire",
pd!=0 && gd<0 && pd*tr>0 && sm>0,"ellipsoide",
pd!=0 && gd<0 && (pd*tr<=0||sm<=0),"hyperboloide a deux nappes",
pd!=0 && gd>0 && (pd*tr<=0||sm<0),"hyperboloide a une nappe",
pd!=0 && gd==0 && pd*tr>0 && sm>0,"cone imaginaire",
pd!=0 && gd==0 && (pd*tr<=0||sm<=0),"cone",
pd==0 && gd<0 && sm>0, "paraboloide elliptique",
pd==0 && gd>0 && sm<0,"paraboloide hyperbolique",
pd==0 && gd==0 && sm>0 && deg!=0,"cylindre elliptique",
pd==0 && gd==0 && sm<0 && deg!=0,"cylindre hyperbolique",
pd==0 && gd==0 && sm==0 && deg!=0,"cylindre parabolique",
pd==0 && gd==0 && sm==0 && deg==0,"paire de plans",1==1,
"pas une quadrique!"]]

Exemple 1
La sphère d'équation x^2 + y^2 + z^2 -1 = 0 donne la matrice
m = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,-1}}
On obtient alors
classquad[m] ==> ellipsoide (la sphère est un cas particulier d'un ellipsoide !)

Exemple 2
Choisissons 10 nombres entiers, pseudo-aléatoires et compris entre -20 et +20, avec la commande :
choix = Table[Random[Integer,{-20,20}],{10}]
Construisons la matrice m en utilisant la commande suivante :
m = {{choix[[1]],choix[[4]],choix[[5]],choix[[7]]},{choix[[4]],choix[[2]],choix[[6]],choix[[8]]},
{choix[[5]],choix[[6]],choix[[3]],choix[[9]]},{choix[[7]],choix[[8]],choix[[9]],choix[[10]]}}
Pour calculer le polynôme correspondant, exécuter :
Expand[{x,y,z,1} . m . {x,y,z,1}] (sans oublier les points!)
Ce polynôme égalé à zéro définit (presque toujours!) une quadrique, à savoir ...
classquad[m]
ATTENTION : la réponse va dépendre de la liste des coefficients obtenus. À chaque exécution de la commande :
choix = Table[Random[Integer,{-20,20}],{10}]
on obtient une nouvelle liste de coefficients!

Retour à ma page personnelle

©jmt : création le 000907 - dernière modification le 011221