### 1.49.4 Ορθοκανονικοποίηση `Gramschmidt``:` `gramschmidt`

`gramschmidt` παίρνει ένα ή δύο ορίσματα :

- έναν πίνακα που αναπαρίσταται σαν μια λίστα διανυσμάτων (γραμμών), όπου από προεπιλογή ως εσωτερικό γινόμενο θεωρείται το κανονικό εσωτερικό γινόμενο, ή
- μια λίστα στοιχείων που είναι η βάση ενός διανυσματικού υποχώρου, και μια συνάρτηση που ορίζει ένα εσωτερικό γινόμενο σε αυτόν τον διανυσματικό χώρο.

`gramschmidt` επιστρέφει την ορθοκανονική βάση ως προς αυτό το εσωτερικό γινόμενο.
Είσοδος :

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

ή εισάγετε :

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

Έξοδος :

`[[(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]]`

Παράδειγμα
Ορίζουμε ένα εσωτερικό γινόμενο στον διανυσματικό χώρο των πολυωνύμων με:

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

Είσοδος :

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

ή ορίζουμε την συνάρτηση `p_scal`, και εισάγουμε :
`p_scal(p,q):=integrate(p*q,x,-1,1)`
και μετά εισάγουμε :

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

Έξοδος :

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