Дан двумерный массив (матрица) размером NxN.Реализовать  функцию диагонализации матрицы методом Гаусса.Преобразовать матрицу.
Работает ли код корректно?
Код F#
Код:
//open Microsoft.FSharp.Math
//let rnd = System.Random()
#r "FSharp.PowerPack.dll"
//let A = Matrix.init 2 3 (fun i j -> System.Math.Round(rnd.NextDouble()*10., 0))
//Ввод матрицы.
let m : Matrix<float> = matrix [ [ 1.;2.;3.];[5.;5.;6.];[7.;4.;9.]] 
//Функция  диагонализации матрицы методом Гаусса.
let diagonalize (m:Matrix<float>) =
    let nrows = m.NumRows-1
    let ncols = m.NumCols-1
    let norm j =
        (m.Row j) |> Seq.iteri (fun i x -> m.[j,i] <- x / m.[j,j])
    let swaprow i j =
        let r = m.[i..i,0..ncols]
        m.[i..i,0..ncols] <- m.[j..j,0..ncols]
        m.[j..j,0..ncols] <- r
    let rec swapnz i j =
        if j<=nrows then
           if m.[j,i]<>0. then swaprow i j
           else swapnz i (j+1)
    for i = 0 to nrows do
        if m.[i,i]=0. then swapnz i (i+1)
        if m.[i,i]<>0. then
              norm i
              for j = i+1 to nrows do
                  let c = m.[j,i]
                  for k=i to ncols do m.[j,k] <- m.[j,k]-m.[i,k]*c
    m
//Преобразованная матрица  
let m2 = diagonalize (m)