Advertisement
Guest User

Untitled

a guest
May 27th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.97 KB | None | 0 0
  1. let sous_list a b=
  2.   List.map (fun (a,b) -> a -. b) (List.combine a b )
  3. ;;
  4. let mult_list a b=
  5.   List.map (fun (a,b) -> a *. b) (List.combine a b )
  6. ;;
  7. let add_list l = List.fold_left (+.) 0. l
  8. ;;
  9. let add a l = List.rev (a::(List.rev l));;
  10.  
  11.  
  12. let rec solve = function
  13.   | [[a;k]] -> [-. k/. a]
  14.   | pivot::mat ->
  15.       match pivot with
  16.     | a::line ->
  17.         (* On détermine le coefficient multiplicatif pour chaque équation *)
  18.         let k = List.map (fun b -> a /. (List.hd b)) mat in
  19.         let kl = List.combine k mat in
  20.         (* Et on le multiplie a chaque élement de chaque équation *)
  21.         let nmat = List.map (fun (k, l) -> List.map (( *. ) k) l) kl in
  22.           (* On soustrait chaque équation par le pivot *)
  23.           (* On se retrouve donc avec un système à n-1 inconnues*)
  24.         let nnmat = List.map (fun l -> sous_list (List.tl l) line) nmat in
  25.  
  26.         let sols = solve nnmat in
  27.         let l = add 1. sols in
  28.         let r = -. add_list (mult_list l line) in
  29.           r::sols
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement