open Leibniz let () = print_endline "special functions\n"; let p3 = Special.legendre_p 3 (Expr.Var "x") in print_endline ("P_3(x) = " ^ Expr.to_string p3); let h2 = Special.hermite_h 2 (Expr.Var "x") in print_endline ("H_2(x) = " ^ Expr.to_string h2); let t3 = Special.chebyshev_t 3 (Expr.Var "x") in print_endline ("T_3(x) = " ^ Expr.to_string t3); print_endline "\nlaplace transforms\n"; let exp_t = Parser.parse "e^(2*t)" in (match Transforms.laplace_transform exp_t "t" with | Some result -> print_endline ("L{e^(2t)} = " ^ Expr.to_string result) | None -> print_endline "transform failed"); let sin_t = Parser.parse "sin(3*t)" in (match Transforms.laplace_transform sin_t "t" with | Some result -> print_endline ("L{sin(3t)} = " ^ Expr.to_string result) | None -> print_endline "transform failed"); print_endline "\ninverse laplace transforms\n"; let f_s = Parser.parse "1/(s - 2)" in (match Transforms.inverse_laplace_transform f_s "s" with | Some result -> print_endline ("L^(-1){1/(s-2)} = " ^ Expr.to_string result) | None -> print_endline "inverse transform failed"); print_endline "\nODE solving\n"; let y'' = Ode.solve_second_order (Expr.Const 1.0) (Expr.Const 0.0) (Expr.Const (-4.0)) (Expr.Const 0.0) "t" in (match y'' with | Some sol -> print_endline ("y'' + 4y = 0: y(t) = " ^ Expr.to_string sol) | None -> print_endline "ODE solution failed"); print_endline "\nassumptions-based simplification\n"; let assumptions = Assumptions.assume "x" Assumptions.Positive [] in let expr = Parser.parse "sqrt(x^2)" in let simplified = Assumptions.simplify_with assumptions expr in print_endline ("sqrt(x^2) with x > 0: " ^ Expr.to_string simplified); print_endline "\npiecewise functions\n"; let abs_pw = Piecewise.abs_as_piecewise (Expr.Var "x") in print_endline ("abs(x) as piecewise:"); print_endline (Piecewise.piecewise_to_string abs_pw)