let make_matrix ?(commutative=true) f_dist init_value elements =
    let len = Array.length elements in
    let mat = Array.make_matrix len len init_value in
    for i = 0 to len - 1 do
      for j = i + 1 to len - 1 do
        let d = f_dist elements.(i) elements.(j) in
        mat.(i).(j) <- d;
        if commutative then
          mat.(j).(i) <- d
        else
          mat.(j).(i) <- f_dist elements.(j) elements.(i)
      done
    done;
    {
      dist_elements = elements ;
      dist_matrix = mat ;
      dist_samples = Array.make len 1 ;
    }