symbolic mathematics engine in OCaml with differentiation, integration, simplification, and numerical methods
1open Leibniz
2
3let () =
4 print_endline "special functions\n";
5
6 let p3 = Special.legendre_p 3 (Expr.Var "x") in
7 print_endline ("P_3(x) = " ^ Expr.to_string p3);
8
9 let h2 = Special.hermite_h 2 (Expr.Var "x") in
10 print_endline ("H_2(x) = " ^ Expr.to_string h2);
11
12 let t3 = Special.chebyshev_t 3 (Expr.Var "x") in
13 print_endline ("T_3(x) = " ^ Expr.to_string t3);
14
15 print_endline "\nlaplace transforms\n";
16
17 let exp_t = Parser.parse "e^(2*t)" in
18 (match Transforms.laplace_transform exp_t "t" with
19 | Some result -> print_endline ("L{e^(2t)} = " ^ Expr.to_string result)
20 | None -> print_endline "transform failed");
21
22 let sin_t = Parser.parse "sin(3*t)" in
23 (match Transforms.laplace_transform sin_t "t" with
24 | Some result -> print_endline ("L{sin(3t)} = " ^ Expr.to_string result)
25 | None -> print_endline "transform failed");
26
27 print_endline "\ninverse laplace transforms\n";
28
29 let f_s = Parser.parse "1/(s - 2)" in
30 (match Transforms.inverse_laplace_transform f_s "s" with
31 | Some result -> print_endline ("L^(-1){1/(s-2)} = " ^ Expr.to_string result)
32 | None -> print_endline "inverse transform failed");
33
34 print_endline "\nODE solving\n";
35
36 let y'' = Ode.solve_second_order (Expr.Const 1.0) (Expr.Const 0.0) (Expr.Const (-4.0)) (Expr.Const 0.0) "t" in
37 (match y'' with
38 | Some sol -> print_endline ("y'' + 4y = 0: y(t) = " ^ Expr.to_string sol)
39 | None -> print_endline "ODE solution failed");
40
41 print_endline "\nassumptions-based simplification\n";
42
43 let assumptions = Assumptions.assume "x" Assumptions.Positive [] in
44 let expr = Parser.parse "sqrt(x^2)" in
45 let simplified = Assumptions.simplify_with assumptions expr in
46 print_endline ("sqrt(x^2) with x > 0: " ^ Expr.to_string simplified);
47
48 print_endline "\npiecewise functions\n";
49
50 let abs_pw = Piecewise.abs_as_piecewise (Expr.Var "x") in
51 print_endline ("abs(x) as piecewise:");
52 print_endline (Piecewise.piecewise_to_string abs_pw)