22 lines
700 B
OCaml
22 lines
700 B
OCaml
open Leibniz
|
|
|
|
let () =
|
|
print_endline "gradient descent optimization\n";
|
|
|
|
let f = Parser.parse "x^2 + y^2" in
|
|
print_endline ("minimizing f(x,y) = " ^ Expr.to_string f);
|
|
|
|
match Numerical.gradient_descent f ["x"; "y"] [5.0; 5.0] 0.1 100 with
|
|
| Some [x; y] ->
|
|
Printf.printf "minimum found at (%.4f, %.4f)\n" x y;
|
|
let f_val = Eval.eval [("x", x); ("y", y)] f in
|
|
Printf.printf "f(%.4f, %.4f) = %.4f\n" x y f_val
|
|
| _ ->
|
|
print_endline "optimization failed";
|
|
|
|
print_endline "\ngradient computation\n";
|
|
|
|
let grad = Multivariate.gradient ["x"; "y"] f in
|
|
print_endline "∇f = [";
|
|
List.iter (fun g -> print_endline (" " ^ Expr.to_string g)) grad;
|
|
print_endline "]"
|