### 1.46.12 Ερμιτιανή κανονική μορφή : ihermite

ihermite παίρνει ως όρισμα έναν πίνακα A με συντελεστές στο ℤ.
ihermite επιστρέφει δύο πίνακες U και B τέτοιους ώστε B=U*A, όπου ο U είναι αντιστρέψιμος στο ℤ ( det(U) = ± 1) και ο B είναι άνω τριγωνικός. Εκτός αυτού, η απόλυτη τιμή των συντελεστών πάνω από τη διαγώνιο του B είναι μικρότερη από τον οδηγό της στήλης διαιρεμένο δια 2.

Η απάντηση υπολογίζεται από έναν αλγόριθμο σαν τον αλγόριθμο αναγωγής Gauss κάνοντας μόνο πράξεις γραμμών με ακέραιους συντελεστές.
Είσοδος :

A:=[[9,-36,30],[-36,192,-180],[30,-180,180]]; [U,B]:=ihermite(A)

΄Έξοδος :

[[9,-36,30],[-36,192,-180],[30,-180,180]], [[13,9,7],[6,4,3],[20,15,12]],[[3,0,30],[0,12,0],[0,0,60]]

Εφαρμογή: Υπολογίστε μια ℤ-βάση του πυρήνα ενός πίνακα με ακέραιους συντελεστές
Έστω M ένας πίνακας με ακέραιους συντελεστές. Είσοδος :

(U,A):=ihermite(transpose(M)).

Αυτό επιστρέφει τους πίνακες U και τον A τέτοιους ώστε A=U*transpose(M) και επομένως
transpose(A)=M*transpose(U).
Οι μηδενικές στήλες του transpose(A) (στα δεξιά του πίνακα, προερχόμενες από τις μηδενικές γραμμές του A στο κάτω μέρος του πίνακα) αντιστοιχούν στις στήλες του transpose(U) οι οποίες σχηματίζουν μια βάση του Ker(M). Με άλλα λόγια, οι μηδενικές γραμμές του A αντιστοιχούν στις γραμμές του U οι οποίες σχηματίζουν μια βάση του Ker(M).
Παράδειγμα
Έστω M:=[[1,4,7],[2,5,8],[3,6,9]]. Είσοδος

[U,A]:=ihermite(tran(M))

Έξοδος:

U:=[[-3,1,0],[4,-1,0],[-1,2,-1]] και A:=[[1,-1,-3],[0,3,6],[0,0,0]]

Αφού A[2]=[0,0,0], μια ℤ-βάση του Ker(M) είναι U[2]=[-1,2,-1].
Επαλήθευση M*U[2]=[0,0,0].