(********************************************************************) (* OCaml code from the book ``Learn Programming with OCaml'' *) (* See https://usr.lmf.cnrs.fr/lpo/ *) (* *) (* Sylvain Conchon and Jean-Christophe Filliâtre *) (* Copyright 2025 Université Paris-Saclay and CNRS *) (* *) (* Openly licensed via CC BY SA 4.0 *) (* See https://creativecommons.org/licenses/by-sa/4.0/deed.en *) (********************************************************************) (* Program 83 on page 351 Matrix Calculus *) type matrix = int array array let init_matrix n m f = Array.init n (fun i -> Array.init m (fun j -> f i j)) let id n = init_matrix n n (fun i j -> if i = j then 1 else 0) let size a = (Array.length a, Array.length a.(0)) let add a b = let (n, m) as s = size a in if size b <> s then invalid_arg "add"; init_matrix n m (fun i j -> a.(i).(j) + b.(i).(j)) let mul a b = let n, p = size a in let q, m = size b in if q <> p then invalid_arg "mul"; let product i j = let s = ref 0 in for k = 0 to p - 1 do s := !s + a.(i).(k) * b.(k).(j) done; !s in init_matrix n m product
This document was generated using caml2html