symbolic mathematics engine in OCaml with differentiation, integration, simplification, and numerical methods
1open Leibniz
2
3let () =
4 print_endline "gradient descent optimization\n";
5
6 let f = Parser.parse "x^2 + y^2" in
7 print_endline ("minimizing f(x,y) = " ^ Expr.to_string f);
8
9 match Numerical.gradient_descent f ["x"; "y"] [5.0; 5.0] 0.1 100 with
10 | Some [x; y] ->
11 Printf.printf "minimum found at (%.4f, %.4f)\n" x y;
12 let f_val = Eval.eval [("x", x); ("y", y)] f in
13 Printf.printf "f(%.4f, %.4f) = %.4f\n" x y f_val
14 | _ ->
15 print_endline "optimization failed";
16
17 print_endline "\ngradient computation\n";
18
19 let grad = Multivariate.gradient ["x"; "y"] f in
20 print_endline "∇f = [";
21 List.iter (fun g -> print_endline (" " ^ Expr.to_string g)) grad;
22 print_endline "]"