open Impact let a = [| [| 4.; 8.; 4.|]; [| -3.; -1.; 7.|] |] let b = [| [| 2.; 1.; -1.; 8.|]; [| -3.; -1.; 2.; -11.|]; [| -2.; 1.; 2.; -3.|] |] let printMatrix(matrix : float[][]) = for rowNum in 0 .. matrix.Length-1 do let row = matrix.[rowNum] for colNum in 0 .. row.Length-1 do printf " %10f" row.[colNum] printfn "" printfn "" let scalarMult (vector : float [], multiplier : float) = [| for i in 0 .. vector.Length-1 -> vector.[i] * multiplier |] let vectorAdd(v1 : float [], v2 : float []) = [| for i in 0 .. v1.Length-1 -> v1.[i] + v2.[i]|] let scaleRow(matrix: float [][], r: int) = matrix.[r] <- scalarMult(matrix.[r], 1.0/matrix.[r].[r]) let eliminateColInRow(matrix: float [][], c: int, r: int) = matrix.[r] <- vectorAdd(matrix.[r], scalarMult(matrix.[c], -matrix.[r].[c])) let clearCol(matrix: float [][], c: int) = scaleRow(matrix, c) for r in 0 .. matrix.Length-1 do if not (r = c) then eliminateColInRow(matrix, c, r) let solve(matrix: float [][]) = for r in 0 .. matrix.Length-1 do clearCol(matrix, r)