F-X. Dehon - 16 nov. 2020 - dehon[@]unice.fr
Enoncé :
Méthode alternative pour 7b-c : On calcule une base orthogonale pour la forme bilinéaire de matrice en essayant d'appliquer l'algorithme de Gramm-Schmidt à la base canonique de .
⚠ Le code ci-dessous a été exécuté avec Sagemath 8.9 basé sur Python 2. Les nouvelles versions de Sagemath s'appuient sur Python 3 qui n'est pas totalement compatible avec Python 2, voir la page (peut être incomplète) https://wiki.sagemath.org/Python3-user.
banner()
A=matrix([[3,2,2],[2,0,1],[2,1,0]])
show(A)
#forme bilinéaire et forme quadratique de matrice A
def f(u,v):return(u*A*v)
def q(u):return(f(u,u))
var('x,y,z');print q(vector([x,y,z])).expand()
#projection de u sur le sous-espace dont B est une base orthogonale sans vecteur isotrope
def p(u,B):
return(sum(f(u,e)/f(e,e)*e for e in B))
#base canonique de R^3
f1,f2,f3=identity_matrix(3).rows()
print f1,f2,f3
print q(f1)
B=[f1]
e2=f2-p(f2,B)
print q(e2)
B=[f1,e2];print "B=",B
e3=f3-p(f3,B)
print q(e3)
B=[f1,e2,e3];print "B=",B
Sans argument sur la correction de l'algorithme utilisé ci-dessus, on peut simplement vérifier que la famille obtenue est bien une famille orthogonale pour sans vecteur isotrope donc libre (pourquoi ?) donc une base.
Voici un exemple de discussion sur math.stackexchange.com où des intervenants discutent, parfois de façon péremptoire, sans même avoir lu.
Qu'aurait on fait si on était tombé en cours de route sur un vecteur isotrope, par exemple en appliquant l'algorithme à la base ?
Dans la base , q est de matrice diagonale .
Si sont les coordonnées d'un vecteur dans cette base alors
, en particulier la signature de est .
. On peut prendre par exemple c'est à dire
#Vérification
u=2/3*B[0]+B[1]
print u,q(u)
Que soit isotrope pour est évident à regarder la matrice de puisque le deuxième terme sur la diagonale est nul. De même est isotrope. Il y a en fait tout un hyperboloïde de vecteurs isotropes :
qq(x,y,z)=q(vector([x,y,z])).expand()
xmin,xmax=(-3,3)
ymin,ymax=(-3,3)
zmin,zmax=(-3,3)
Axes=line3d([(xmin,0,0),(xmax,0,0),(xmin,0,0)])+line3d([(0,ymin,0),(0,ymax,0),(0,ymin,0)])+line3d([(0,0,zmin),(0,0,zmax),(0,0,zmin)])#dessin axes
T=text3d('x', (xmax, -.1, -.1))+text3d('y', (-.1, ymax, -.1))+text3d('z', (.1, .1,zmax))
P=implicit_plot3d(qq(x,y,z)==0,(x,xmin,xmax),(y,ymin,ymax),(z,zmin,zmax),color='orange', opacity=0.7)#graphe de q
show(P+Axes+T,frame=false,aspect_ratio=[1,1,1],viewer='threejs')