Normalise a Vector using the Standard Library
Task
Mathematics / Vector & Matrix Operations / Normalise a Vector
No packages used
This recipe uses only the OCaml Standard Library.Code
sum
returns the sum of all float
type elements in the list lst
.
let sum lst = List.fold_left ( +. ) 0. lst
Returns the magnitude
for a sum of squares sqs
.
let magnitude sqs = Float.sqrt (sum sqs)
normalize
accepts a list v
of float
values and returns the corresponding unit vector as a list.
let normalize v =
let sqs = List.map (fun x -> x *. x) v in
let m = magnitude sqs in
List.map (fun x -> x /. m) v
Example use.
Using the format string "%.2f"
, the float
values are rounded to the
2nd decimal place for readability.
let () =
let vector = [4.;6.;-1.]
let vhat = normalize vector;;
List.iter (Printf.printf "%.2f ") vhat