p.67より。
実数上の関数 f に対して定積分 を近似計算する関数 integral f a b を定義しなさい。またこれを使って, を計算しなさい。
近似の方法は台形近似。積分区間を100個の台形に分けて面積を合計する。
# let integral f a b = let d = (b -. a) /. 100. in let trapezoid x y z = (x +. y) *. z /. 2. in let rec area i = if i = 0. then 0. else trapezoid (f (a +. d *. (i -. 1.))) (f (a +. d *. i)) d +. area (i -. 1.) in area 100. ;; val integral : (float -> float) -> float -> float -> float = <fun>
あんまりきれいじゃないけどいいか。 + と +. を間違えてて時間がかかった。整数と実数で演算子が違うってのはどうもなれないな。
# let pi = 3.141592;; val pi : float = 3.141592 # integra sin 0. pi;; - : float = 1.9998355039556754