26 lines
769 B
OCaml
26 lines
769 B
OCaml
open Expr
|
|
open Diff
|
|
open Substitute
|
|
open Simplify
|
|
|
|
let rec factorial n =
|
|
if n <= 1 then 1.0
|
|
else float_of_int n *. factorial (n - 1)
|
|
|
|
let taylor var expr center order =
|
|
let rec build_terms n acc =
|
|
if n > order then acc
|
|
else
|
|
let derivative = diff_n var n expr in
|
|
let deriv_at_center = substitute var center derivative in
|
|
let coeff = Div (deriv_at_center, Const (factorial n)) in
|
|
let h = Sub (Var var, center) in
|
|
let term = Mul (coeff, Pow (h, Const (float_of_int n))) in
|
|
build_terms (n + 1) (term :: acc)
|
|
in
|
|
let terms = List.rev (build_terms 0 []) in
|
|
let series = List.fold_left (fun acc t -> Add (acc, t)) (Const 0.0) terms in
|
|
simplify series
|
|
|
|
let maclaurin var expr order =
|
|
taylor var expr (Const 0.0) order
|