symbolic mathematics engine in OCaml with differentiation, integration, simplification, and numerical methods
1open Leibniz
2
3let () =
4 print_endline "basic differentiation and simplification\n";
5
6 let f = Parser.parse "x^3 + 2x^2 + x" in
7 print_endline ("f(x) = " ^ Expr.to_string f);
8
9 let df = Diff.diff "x" f in
10 print_endline ("f'(x) = " ^ Expr.to_string df);
11
12 let ddf = Diff.diff "x" df in
13 print_endline ("f''(x) = " ^ Expr.to_string ddf);
14
15 print_endline "\nsimplification\n";
16
17 let expr = Parser.parse "(x + 0) * 1 + x * 0" in
18 print_endline ("before: " ^ Expr.to_string expr);
19 let simplified = Simplify.simplify expr in
20 print_endline ("after: " ^ Expr.to_string simplified);
21
22 print_endline "\nimplicit multiplication\n";
23
24 let expr2 = Parser.parse "2x + 3sin(x)" in
25 print_endline ("parsed: " ^ Expr.to_string expr2);
26
27 print_endline "\ntrigonometric functions\n";
28
29 let trig = Parser.parse "sin(x)^2 + cos(x)^2" in
30 print_endline ("trig identity: " ^ Expr.to_string trig);
31 let dtrig = Diff.diff "x" trig in
32 print_endline ("derivative: " ^ Expr.to_string dtrig)