symbolic mathematics engine in OCaml with differentiation, integration, simplification, and numerical methods
1open Expr
2open Diff
3open Substitute
4open Simplify
5
6let rec factorial n =
7 if n <= 1 then 1.0
8 else float_of_int n *. factorial (n - 1)
9
10let taylor var expr center order =
11 let rec build_terms n acc =
12 if n > order then acc
13 else
14 let derivative = diff_n var n expr in
15 let deriv_at_center = substitute var center derivative in
16 let coeff = Div (deriv_at_center, Const (factorial n)) in
17 let h = Sub (Var var, center) in
18 let term = Mul (coeff, Pow (h, Const (float_of_int n))) in
19 build_terms (n + 1) (term :: acc)
20 in
21 let terms = List.rev (build_terms 0 []) in
22 let series = List.fold_left (fun acc t -> Add (acc, t)) (Const 0.0) terms in
23 simplify series
24
25let maclaurin var expr order =
26 taylor var expr (Const 0.0) order