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