Formes bilinéaires et quadratiques#

L’algèbre n’est qu’une géométrie écrite, la géométrie n’est qu’une algèbre figurée.

Sophie Germain

Introduction#

L’algèbre linéaire étudie les applications linéaires. Mais de nombreuses situations — énergie cinétique, produit scalaire, courbure des surfaces, coniques — font intervenir des expressions bilinéaires. Ce chapitre développe la théorie des formes bilinéaires symétriques et des formes quadratiques, culminant avec le théorème de Sylvester (loi d’inertie) et les applications aux coniques et quadriques.

Dans tout ce chapitre, \(E\) désigne un \(\mathbb{K}\)-espace vectoriel de dimension finie \(n\), avec \(\mathbb{K} = \mathbb{R}\) ou \(\mathbb{C}\).

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import Ellipse

fig, axes = plt.subplots(3, 1, figsize=(9, 14))

# --- Coniques : classification par la forme quadratique ---
ax = axes[0]
theta = np.linspace(0, 2*np.pi, 500)

# Ellipse : x^2/4 + y^2 = 1 (sig. (2,0))
x_ell = 2*np.cos(theta); y_ell = np.sin(theta)
ax.plot(x_ell, y_ell, 'b-', lw=2, label='Ellipse: $(2,0)$')

# Hyperbole : x^2 - y^2/2 = 1 (sig. (1,1))
t = np.linspace(-2, 2, 200)
ax.plot(np.cosh(t), np.sinh(t)/np.sqrt(2), 'r-', lw=2)
ax.plot(-np.cosh(t), np.sinh(t)/np.sqrt(2), 'r-', lw=2, label='Hyperbole: $(1,1)$')

# Parabole : y = x^2/2
x_p = np.linspace(-2, 2, 200); y_p = x_p**2/4
ax.plot(x_p, y_p - 1.5, 'g-', lw=2, label='Parabole: rang 1')

ax.set_xlim(-3, 3); ax.set_ylim(-2.5, 2.5)
ax.set_aspect('equal')
ax.axhline(0, color='k', lw=0.5); ax.axvline(0, color='k', lw=0.5)
ax.legend(fontsize=8)
ax.set_title('Coniques et signature de la FQ', fontsize=11)

# --- Forme quadratique : courbes de niveau ---
ax = axes[1]
x = np.linspace(-2, 2, 300); y = np.linspace(-2, 2, 300)
X, Y = np.meshgrid(x, y)

# q(x,y) = 2x^2 + xy + y^2 (définie positive)
Q_pos = 2*X**2 + X*Y + Y**2
levels = [0.3, 0.6, 1.0, 1.5, 2.0]
cs = ax.contour(X, Y, Q_pos, levels=levels, colors='blue', linewidths=1.5)
ax.clabel(cs, inline=True, fontsize=8)
ax.set_title('FQ définie positive : $2x^2+xy+y^2$\n(ellipses de niveau)', fontsize=10)
ax.set_aspect('equal')
ax.axhline(0, color='k', lw=0.5); ax.axvline(0, color='k', lw=0.5)
ax.set_xlabel('$x$'); ax.set_ylabel('$y$')

# --- Forme indéfinie : selle ---
ax = axes[2]
Q_indef = X**2 - Y**2
cs2 = ax.contour(X, Y, Q_indef, levels=np.linspace(-2, 2, 17), cmap='RdBu_r', linewidths=1)
ax.contour(X, Y, Q_indef, levels=[0], colors='black', linewidths=2, linestyles='--')
ax.set_title('FQ indéfinie : $x^2 - y^2$\n(sig. $(1,1)$, noyau = diagonales)', fontsize=10)
ax.set_aspect('equal')
ax.axhline(0, color='k', lw=0.5); ax.axvline(0, color='k', lw=0.5)
ax.set_xlabel('$x$'); ax.set_ylabel('$y$')
plt.colorbar(cs2, ax=ax, shrink=0.8)

plt.suptitle('Formes quadratiques : géométrie des courbes de niveau', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/da46e104f94a9e18d4ec94b15cc61d2c68060577c9cad0e09effd299b793ff56.png

Formes bilinéaires#

Définition 179 (Forme bilinéaire)

Une forme bilinéaire sur \(E\) est une application \(\varphi : E \times E \to \mathbb{K}\) linéaire en chacune de ses deux variables. On note \(\mathcal{B}(E)\) l’ensemble des formes bilinéaires sur \(E\).

Exemple 94

  • Sur \(\mathbb{R}^n\) : \(\varphi(x, y) = x^T A y\) pour une matrice \(A \in \mathcal{M}_n(\mathbb{R})\)

  • Sur \(\mathbb{R}^n\) : \(\varphi(x, y) = \sum_i x_i y_i\) (produit scalaire canonique)

  • Sur \(\mathcal{C}([0,1])\) : \(\varphi(f, g) = \int_0^1 f(t)g(t)\,dt\)

  • Le déterminant \(\det(u, v)\) dans \(\mathbb{R}^2\) : forme bilinéaire antisymétrique

Définition 180 (Symétrie et antisymétrie)

\(\varphi\) est symétrique si \(\varphi(x,y) = \varphi(y,x)\) pour tous \(x, y \in E\). \(\varphi\) est antisymétrique si \(\varphi(x,y) = -\varphi(y,x)\) pour tous \(x, y \in E\).

Proposition 268 (Décomposition symétrique/antisymétrique)

Si \(\operatorname{car}(\mathbb{K}) \neq 2\), toute forme bilinéaire \(\varphi\) se décompose de manière unique :

\[\varphi = \varphi_s + \varphi_a, \quad \varphi_s(x,y) = \tfrac{1}{2}(\varphi(x,y)+\varphi(y,x)), \quad \varphi_a(x,y) = \tfrac{1}{2}(\varphi(x,y)-\varphi(y,x))\]

Proof. \(\varphi_s\) est symétrique et \(\varphi_a\) antisymétrique par construction. L’unicité : si \(\varphi = s + a\), évaluer en \((x,y)\) et \((y,x)\) donne \(s = \varphi_s\), \(a = \varphi_a\).

Définition 181 (Non-dégénérescence)

\(\varphi\) est non dégénérée si son noyau à gauche \(\ker_g(\varphi) = \{x : \forall y,\, \varphi(x,y) = 0\} = \{0\}\).

Si \(\varphi\) est symétrique, les noyaux à gauche et à droite coïncident.

Matrice d’une forme bilinéaire#

Définition 182 (Matrice associée)

Soit \(\mathcal{B} = (e_1, \ldots, e_n)\) une base de \(E\). La matrice de \(\varphi\) dans \(\mathcal{B}\) est

\[\operatorname{Mat}_{\mathcal{B}}(\varphi) = (\varphi(e_i, e_j))_{1 \leq i,j \leq n}\]

Proposition 269 (Expression matricielle)

Si \(X, Y\) sont les vecteurs colonnes des coordonnées de \(x, y\) dans \(\mathcal{B}\), alors

\[\varphi(x, y) = X^T A Y, \quad A = \operatorname{Mat}_{\mathcal{B}}(\varphi)\]

Proof. Par bilinéarité : \(\varphi(x,y) = \varphi(\sum_i x_i e_i, \sum_j y_j e_j) = \sum_{i,j} x_i y_j \varphi(e_i, e_j) = X^T A Y\).

Proposition 270 (Propriétés matricielles)

  • \(\varphi\) symétrique \(\iff\) \(A = A^T\)

  • \(\varphi\) antisymétrique \(\iff\) \(A = -A^T\)

  • \(\varphi\) non dégénérée \(\iff\) \(\det(A) \neq 0\)

Proposition 271 (Changement de base)

Si \(P\) est la matrice de passage de \(\mathcal{B}\) à \(\mathcal{B}'\), alors

\[\operatorname{Mat}_{\mathcal{B}'}(\varphi) = P^T \operatorname{Mat}_{\mathcal{B}}(\varphi)\, P\]

Proof. Si \(x\) a coordonnées \(X'\) dans \(\mathcal{B}'\), alors \(X = PX'\) dans \(\mathcal{B}\). \(\varphi(x,y) = X^T A Y = (PX')^T A (PY') = X'^T (P^T A P) Y'\).

Définition 183 (Congruence)

\(A, B \in \mathcal{M}_n(\mathbb{K})\) sont congruentes s’il existe \(P \in GL_n(\mathbb{K})\) telle que \(B = P^T A P\).

La congruence est une relation d’équivalence. Elle classifie les formes bilinéaires à changement de base près.

Remarque 101

Attention : congruence (\(B = P^T A P\)) \(\neq\) similitude (\(B = P^{-1} A P\)). Les valeurs propres sont invariantes par similitude, mais pas par congruence. La signature est l’invariant de la congruence réelle.

Formes quadratiques#

Définition 184 (Forme quadratique)

La forme quadratique associée à \(\varphi\) bilinéaire symétrique est

\[q : E \to \mathbb{K}, \quad q(x) = \varphi(x, x)\]

\(q\) est homogène de degré 2 : \(q(\lambda x) = \lambda^2 q(x)\).

Proposition 272 (Identités de polarisation)

La forme polaire \(\varphi\) se retrouve à partir de \(q\) (si \(\operatorname{car}(\mathbb{K}) \neq 2\)) :

\[\varphi(x, y) = \frac{1}{2}(q(x+y) - q(x) - q(y)) = \frac{1}{4}(q(x+y) - q(x-y))\]

Proof. \(q(x+y) = \varphi(x+y, x+y) = q(x) + 2\varphi(x,y) + q(y)\) par symétrie et bilinéarité. D’où la première formule. La seconde découle de \(q(x-y) = q(x) - 2\varphi(x,y) + q(y)\) en soustrayant.

Remarque 102

La correspondance \(\varphi \leftrightarrow q\) est une bijection (en car. \(\neq 2\)) : \(q\) détermine entièrement \(\varphi\) par polarisation.

Définition 185 (Rang et noyau)

Le rang de \(q\) est le rang de \(\varphi\). Le noyau de \(q\) est \(\ker(q) = \{x : \forall y,\, \varphi(x,y) = 0\}\).

\(q\) est non dégénérée si \(\ker(q) = \{0\}\), soit \(\operatorname{rg}(q) = n\).

Exemple 95

Sur \(\mathbb{R}^3\) : \(q(x,y,z) = x^2 + 2y^2 - z^2 + 4xy - 2xz\) a pour matrice

\[\begin{split}A = \begin{pmatrix} 1 & 2 & -1 \\ 2 & 2 & 0 \\ -1 & 0 & -1 \end{pmatrix}\end{split}\]

Les coefficients diagonaux donnent \(a_{ii} = \varphi(e_i, e_i)\), et \(a_{ij} = \varphi(e_i, e_j)\) est la moitié du coefficient de \(x_i x_j\).

Orthogonalité#

Définition 186 (Orthogonalité pour \(\varphi\))

\(x, y \in E\) sont \(\varphi\)-orthogonaux si \(\varphi(x,y) = 0\). L”orthogonal de \(A \subset E\) est \(A^\perp = \{x \in E : \forall a \in A,\, \varphi(x,a) = 0\}\).

Proposition 273 (Formule de dimension de l’orthogonal)

Si \(F\) est un sous-espace vectoriel de \(E\) et \(\varphi\) est une forme bilinéaire symétrique :

\[\dim(F) + \dim(F^\perp) = n + \dim(F \cap \ker(\varphi))\]

En particulier, si \(\varphi\) est non dégénérée : \(\dim(F) + \dim(F^\perp) = n\).

Proof. Considérons \(\Phi_F : E \to F^*\), \(x \mapsto \varphi(x, \cdot)|_F\). Son noyau est \(F^\perp\). Par le théorème du rang : \(n = \dim(F^\perp) + \dim(\operatorname{Im}(\Phi_F))\). L’application \(\Psi : F \to E^*\), \(y \mapsto \varphi(\cdot, y)\), a pour noyau \(F \cap \ker(\varphi)\) et \(\dim(\operatorname{Im}\Psi) = \dim(\operatorname{Im}\Phi_F)\) (par symétrie de \(\varphi\)). Donc \(\dim(F) - \dim(F \cap \ker(\varphi)) = n - \dim(F^\perp)\).

Bases orthogonales et algorithme de Gauss#

Définition 187 (Base orthogonale)

\((e_1, \ldots, e_n)\) est orthogonale pour \(\varphi\) si \(\varphi(e_i, e_j) = 0\) pour \(i \neq j\). Dans une base orthogonale, la matrice de \(\varphi\) est diagonale et

\[q(x) = \sum_{i=1}^n \lambda_i x_i^2, \quad \lambda_i = q(e_i)\]

Théorème 1 (Existence d’une base orthogonale)

Toute forme quadratique sur un espace de dimension finie admet une base orthogonale.

Proof. Par récurrence sur \(n\). Si \(q = 0\), toute base convient. Sinon, il existe \(e_1 \in E\) avec \(q(e_1) \neq 0\) (si tous les \(q(x) = 0\), polarisation donne \(\varphi \equiv 0\) donc \(q \equiv 0\) : contradiction).

Posons \(H = \{e_1\}^\perp\). Comme \(q(e_1) \neq 0\), on a \(e_1 \notin H\), donc \(\dim H = n-1\) et \(E = \operatorname{Vect}(e_1) \oplus H\) (décomposition : \(x = \frac{\varphi(x,e_1)}{q(e_1)} e_1 + (x - \frac{\varphi(x,e_1)}{q(e_1)} e_1)\)). Par hypothèse de récurrence, \(q|_H\) a une base orthogonale \((e_2, \ldots, e_n)\).

Remarque 103

Algorithme de Gauss (complétion du carré) :

Cas 1 : il existe \(i\) tel que \(a_{ii} \neq 0\). On complète le carré en \(x_i\) :

\[a_{ii} x_i^2 + \sum_{j \neq i} 2a_{ij} x_i x_j = a_{ii}\left(x_i + \sum_{j \neq i} \frac{a_{ij}}{a_{ii}} x_j\right)^2 - a_{ii}\sum_{j \neq i} \left(\frac{a_{ij}}{a_{ii}}\right)^2 x_j^2 - \ldots\]

Cas 2 : tous les \(a_{ii} = 0\) mais \(a_{ij} \neq 0\). Changement \(x_i = u+v\), \(x_j = u-v\) pour créer un terme \(u^2\).

Exemple 96

Réduire \(q(x,y,z) = 2xy + 2xz + 2yz\).

Tous les \(a_{ii} = 0\). Cas 2 : \(x = u+v\), \(y = u-v\).

\[q = 2(u+v)(u-v) + 2(u+v)z + 2(u-v)z = 2u^2 - 2v^2 + 4uz\]

Complétion en \(u\) : \(q = 2(u+z)^2 - 2z^2 - 2v^2\).

En posant \(U = u+z\), \(V = v\), \(W = z\) : \(q = 2U^2 - 2V^2 - 2W^2\).

Signature \((1, 2)\).

Signature d’une forme quadratique réelle#

Définition 188 (Signe d’une forme quadratique)

Soit \(q\) une forme quadratique réelle.

  • \(q\) est positive (resp. négative) si \(q(x) \geq 0\) (resp. \(\leq 0\)) pour tout \(x\)

  • \(q\) est définie positive (resp. négative) si \(q(x) > 0\) (resp. \(< 0\)) pour tout \(x \neq 0\)

  • \(q\) est indéfinie si elle prend des valeurs positives et négatives

Théorème 2 (Loi d’inertie de Sylvester)

Soit \(q\) une forme quadratique sur un \(\mathbb{R}\)-espace vectoriel de dimension \(n\). Dans toute base orthogonale,

\[q(x) = \underbrace{x_1^2 + \cdots + x_p^2}_{p \text{ termes}+} \underbrace{- x_{p+1}^2 - \cdots - x_{p+q}^2}_{q \text{ termes}-}\]

Le couple \((p, q)\), appelé signature de \(q\), est un invariant : il ne dépend pas de la base orthogonale choisie. On a \(p + q = \operatorname{rg}(q)\).

Proof. Existence : base orthogonale avec \(\lambda_1 > 0\), …, \(\lambda_p > 0\), \(\lambda_{p+1} < 0\), …, \(\lambda_{p+q} < 0\), puis \(0, \ldots, 0\). Le changement \(y_i = \sqrt{|\lambda_i|} x_i\) donne la forme canonique.

Unicité de \(p\) : soit \(F^+ = \operatorname{Vect}(e_1, \ldots, e_p)\) (sur lequel \(q > 0\) sauf en \(0\)) et \(G^- = \operatorname{Vect}(e_{p+1}, \ldots, e_n)\) (sur lequel \(q \leq 0\)). Si \(F\) est un sous-espace sur lequel \(q\) est définie positive, alors \(F \cap G^- = \{0\}\) (car \(q(x) > 0\) et \(q(x) \leq 0\) sont incompatibles pour \(x \neq 0\)). Donc \(\dim F \leq n - \dim G^- = p\). Ainsi \(p = \max\{\dim F : q|_F > 0\}\), qui est un invariant.

Remarque 104

Signature

Nom

\((n, 0)\)

Définie positive

\((0, n)\)

Définie négative

\((p, 0)\), \(p < n\)

Positive (semi-définie)

\((p, q)\), \(pq > 0\), \(p+q = n\)

Indéfinie non dégénérée

\((p, q)\), \(p + q < n\)

Dégénérée

Proposition 274 (Critère de Sylvester (mineurs principaux))

Soit \(A \in \mathcal{M}_n(\mathbb{R})\) symétrique. La forme quadratique \(q(x) = x^T A x\) est définie positive si et seulement si tous les mineurs principaux \(\Delta_k = \det(A_{[1..k, 1..k]})\) sont strictement positifs.

Proof. Par récurrence sur \(n\). Si \(\Delta_1 = a_{11} > 0\), on peut compléter le carré en \(x_1\). La matrice du reste est le complément de Schur \(A_{22} - A_{21} A_{11}^{-1} A_{12}\), dont les mineurs sont \(\Delta_k/\Delta_{k-1} > 0\).

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import seaborn as sns

fig, axes = plt.subplots(3, 1, figsize=(9, 14))

# --- Heatmap de la matrice de la FQ et visualisation de Sylvester ---
ax = axes[0]
A = np.array([[2., 1., -1.],
              [1., 3.,  0.],
              [-1., 0., 2.]])

im = ax.imshow(A, cmap='RdBu_r', vmin=-3, vmax=3)
for i in range(3):
    for j in range(3):
        ax.text(j, i, f'{A[i,j]:.0f}', ha='center', va='center', fontsize=14, fontweight='bold')

# Mineurs principaux
for k in range(1, 4):
    rect = plt.Rectangle((k-1-0.5, k-1-0.5), k, k, fill=False,
                          edgecolor=['tomato', 'royalblue', 'green'][k-1], lw=3)
    ax.add_patch(rect)
    dk = np.linalg.det(A[:k, :k])
    ax.text(k-0.5, k+0.1, f'$\\Delta_{k}={dk:.0f}$', fontsize=9,
            color=['tomato', 'royalblue', 'green'][k-1], ha='center')

plt.colorbar(im, ax=ax, shrink=0.8)
ax.set_title('Matrice FQ définie positive\n(mineurs $\\Delta_k > 0$)', fontsize=11)
ax.set_xticks(range(3)); ax.set_yticks(range(3))
ax.set_xticklabels(['$e_1$', '$e_2$', '$e_3$'])
ax.set_yticklabels(['$e_1$', '$e_2$', '$e_3$'])

# --- Ellipsoïde (définie positive 3D) ---
ax2 = fig.add_subplot(1, 3, 2, projection='3d')
vals, vecs = np.linalg.eigh(A)
u = np.linspace(0, 2*np.pi, 50)
v = np.linspace(0, np.pi, 50)
x = np.outer(np.cos(u), np.sin(v)) / np.sqrt(vals[0])
y = np.outer(np.sin(u), np.sin(v)) / np.sqrt(vals[1])
z = np.outer(np.ones_like(u), np.cos(v)) / np.sqrt(vals[2])
# Rotate by eigenvectors
xyz = np.stack([x.flatten(), y.flatten(), z.flatten()])
xyz_rot = vecs @ xyz
ax2.plot_surface(xyz_rot[0].reshape(50,50), xyz_rot[1].reshape(50,50), xyz_rot[2].reshape(50,50),
                alpha=0.5, cmap='Blues')
ax2.set_title('Surface $q(x)=1$\n(ellipsoïde, sig. $(3,0)$)', fontsize=10)
ax2.set_xlabel('x'); ax2.set_ylabel('y'); ax2.set_zlabel('z')

# --- Diagramme de signature ---
ax = axes[2]
ax.set_xlim(-0.5, 4.5); ax.set_ylim(-0.5, 4.5)

for p in range(5):
    for q in range(5):
        if p + q <= 4:
            if p > 0 and q == 0:
                color = 'royalblue'; label = 'Pos.' if (p,q) == (2,0) else ''
            elif p == 0 and q > 0:
                color = 'tomato'; label = 'Nég.' if (p,q) == (0,2) else ''
            elif p > 0 and q > 0:
                color = 'orange'; label = 'Indéf.' if (p,q) == (1,1) else ''
            else:
                color = 'gray'; label = 'Nulle' if (p,q) == (0,0) else ''
            circle = plt.Circle((p, q), 0.35, color=color, alpha=0.8)
            ax.add_patch(circle)
            ax.text(p, q, f'({p},{q})', ha='center', va='center', fontsize=8, fontweight='bold')

from matplotlib.patches import Patch
legend_elements = [Patch(facecolor='royalblue', label='Semi-définie +'),
                   Patch(facecolor='tomato', label='Semi-définie −'),
                   Patch(facecolor='orange', label='Indéfinie'),
                   Patch(facecolor='gray', label='Nulle')]
ax.legend(handles=legend_elements, fontsize=8, loc='upper right')
ax.set_xlabel('$p$ (termes $+$)'); ax.set_ylabel('$q$ (termes $-$)')
ax.set_title('Diagramme des signatures $(p,q)$\npour $n = 4$', fontsize=11)

plt.suptitle('Formes quadratiques : matrices, ellipsoïdes, signatures', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/eaab0d934a159391cd296679c3558f8811156c10fdc92730ecafce4613924faa.png

Application aux coniques et quadriques#

Définition 189 (Conique)

Une conique dans \(\mathbb{R}^2\) est l’ensemble des solutions de \(\varphi(x) = 0\)\(\varphi(x,y) = ax^2 + 2bxy + cy^2 + dx + ey + f\) (polynôme de degré \(\leq 2\)).

Proposition 275 (Classification des coniques par la signature)

En coordonnées principales (diagonalisant la partie quadratique), une conique réelle non dégénérée est :

  • Une ellipse si la signature de la FQ est \((2, 0)\) : \(\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1\)

  • Une hyperbole si la signature est \((1, 1)\) : \(\frac{x^2}{a^2} - \frac{y^2}{b^2} = 1\)

  • Une parabole si le rang de la FQ est \(1\) : \(y = ax^2\)

Proof. On diagonalise la matrice \(2 \times 2\) de la partie quadratique (symétrique réelle, donc diagonalisable en base orthonormée par le théorème spectral). En translatant pour éliminer les termes linéaires si possible, on obtient la forme canonique.

Exemple 97

Identifier la conique \(3x^2 + 4xy - y^2 - 2x + y + 1 = 0\).

Partie quadratique : \(q = 3x^2 + 4xy - y^2\), matrice \(A = \begin{pmatrix} 3 & 2 \\ 2 & -1 \end{pmatrix}\).

\(\det(A) = -3 - 4 = -7 < 0\) : signature \((1,1)\)hyperbole.

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize

fig = plt.figure(figsize=(9, 42))

x = np.linspace(-3, 3, 400)
y = np.linspace(-3, 3, 400)
X, Y = np.meshgrid(x, y)

# Coniques classiques
conics = [
    (X**2/4 + Y**2 - 1, 'Ellipse: $x^2/4 + y^2 = 1$\nSig. $(2,0)$', 'blue'),
    (X**2 - Y**2/2 - 1, 'Hyperbole: $x^2 - y^2/2 = 1$\nSig. $(1,1)$', 'red'),
    (Y - X**2/2, 'Parabole: $y = x^2/2$\nrang $1$', 'green'),
]

for i, (Z, title, color) in enumerate(conics):
    ax = fig.add_subplot(6, 1, i + 1)
    ax.contourf(X, Y, Z, levels=[-20, 0], colors=[color], alpha=0.2)
    cs = ax.contour(X, Y, Z, levels=[0], colors=[color], linewidths=2.5)
    ax.set_title(title, fontsize=10)
    ax.set_aspect('equal')
    ax.axhline(0, color='k', lw=0.5); ax.axvline(0, color='k', lw=0.5)
    ax.set_xlim(-3, 3); ax.set_ylim(-3, 3)

# Quadriques (surfaces de niveau en 3D)
from mpl_toolkits.mplot3d import Axes3D

# Paraboloïde
ax = fig.add_subplot(6, 1, 4, projection='3d')
x3 = np.linspace(-2, 2, 50); y3 = np.linspace(-2, 2, 50)
X3, Y3 = np.meshgrid(x3, y3)
Z3 = X3**2 + Y3**2
ax.plot_surface(X3, Y3, Z3, cmap='Blues', alpha=0.8)
ax.set_title('Paraboloïde: $z=x^2+y^2$\nSig. $(2,0)$', fontsize=9)
ax.set_xlabel('x'); ax.set_ylabel('y'); ax.set_zlabel('z')

# Selle (paraboloïde hyperbolique)
ax = fig.add_subplot(6, 1, 5, projection='3d')
Z3 = X3**2 - Y3**2
ax.plot_surface(X3, Y3, Z3, cmap='RdBu_r', alpha=0.8)
ax.set_title('Selle: $z=x^2-y^2$\nSig. $(1,1)$', fontsize=9)
ax.set_xlabel('x'); ax.set_ylabel('y'); ax.set_zlabel('z')

# Ellipsoïde
ax = fig.add_subplot(6, 1, 6, projection='3d')
u = np.linspace(0, 2*np.pi, 50); v = np.linspace(0, np.pi, 50)
xe = 2*np.outer(np.cos(u), np.sin(v))
ye = 1.5*np.outer(np.sin(u), np.sin(v))
ze = np.outer(np.ones_like(u), np.cos(v))
ax.plot_surface(xe, ye, ze, cmap='Greens', alpha=0.8)
ax.set_title('Ellipsoïde: $x^2/4+y^2/2.25+z^2=1$\nSig. $(3,0)$', fontsize=9)
ax.set_xlabel('x'); ax.set_ylabel('y'); ax.set_zlabel('z')

plt.suptitle('Classification des coniques et quadriques par la signature', fontsize=13, fontweight='bold')
plt.tight_layout()
plt.show()
_images/de8bfb6a1d2e18fcb431a20305ae844691686c87815afe14d21f813555f7234e.png

Formes bilinéaires non dégénérées et espaces quadratiques#

Définition 190 (Espace quadratique)

Un espace quadratique est un couple \((E, q)\) avec \(q\) forme quadratique non dégénérée sur \(E\).

Proposition 276 (Supplémentaire orthogonal)

Dans un espace quadratique \((E, q)\), pour tout sous-espace \(F\) :

\[E = F \oplus F^\perp \iff q|_F \text{ est non dégénérée}\]

Proof. \(q|_F\) non dégénérée \(\iff\) \(F \cap F^\perp = \{0\}\). Comme \(\dim F + \dim F^\perp = n\), cela équivaut à \(E = F \oplus F^\perp\).

Définition 191 (Isométrie et groupe orthogonal)

Une isométrie de \((E, q)\) est un automorphisme \(u \in GL(E)\) tel que \(q \circ u = q\).

Le groupe orthogonal est \(O(q) = \{u \in GL(E) : q \circ u = q\}\).

Pour \(q = \) produit scalaire standard : \(O(q) = O(n)\) (matrices orthogonales).

Proposition 277

\(u \in O(q)\) \(\iff\) \(\varphi(u(x), u(y)) = \varphi(x, y)\) pour tous \(x, y \in E\).

Proof. Par polarisation : \(\varphi(u(x), u(y)) = \frac{1}{2}(q(u(x)+u(y)) - q(u(x)) - q(u(y))) = \frac{1}{2}(q(x+y) - q(x) - q(y)) = \varphi(x,y)\).

Résumé#

Concept

Résultat clé

Forme bilinéaire

\(\varphi(x,y) = X^T A Y\)

Changement de base

\(A' = P^T A P\) (congruence)

Forme quadratique

\(q(x) = \varphi(x,x)\), polarisation

Base orthogonale

Existe toujours (Gauss)

Loi d’inertie

Signature \((p,q)\) invariante (Sylvester)

Définie positive

\((p,q) = (n,0)\), critère des mineurs

Coniques

Signature détermine le type

Groupe orthogonal

\(O(q) = \{u : q \circ u = q\}\)