### 6.51.4 Procédé de Gramschmidt : `gramschmidt`

`gramschmidt` a un ou deux paramètres :

- une matrice vue comme une liste de vecteurs lignes, le produit scalaire ètant le produit scalaire canonique, ou
- un vecteur contenant la base d’un espace vectoriel et une fonction qui définit un produit scalaire.

`gramschmidt` donne une base orthonormale par rapport à ce produit scalaire.
On tape :

`normal(gramschmidt([[1,1,1],[0,0,1],[0,1,0]]))`

Ou on tape :

`normal(gramschmidt([[1,1,1],[0,0,1],[0,1,0]],dot))`

On obtient :

`[[(sqrt(3))/3,(sqrt(3))/3,(sqrt(3))/3], [(-(sqrt(6)))/6,(-(sqrt(6)))/6,(sqrt(6))/3], [(-(sqrt(2)))/2,(sqrt(2))/2,0]]`

Exemple
Pour les polynômes de degré <n, on considère le produit scalaire défini par :

P.Q= | ∫ |
1
−1
| P(x).Q(x)dx

On tape :

`gramschmidt([1,1+x],(p,q)->integrate(p*q,x,-1,1))`

Ou on écrit la fonction `p_scal`, on tape :
`p_scal(p,q):=integrate(p*q,x,-1,1)`
et on tape :

`gramschmidt([1,1+x],p_scal)`

On obtient :

`[1/(sqrt(2)),(1+x-1)/sqrt(2/3)]`