Polynomial regression: Difference between revisions
Content added Content deleted
Line 1,384: | Line 1,384: | ||
9 262 262 |
9 262 262 |
||
10 321 321</pre> |
10 321 321</pre> |
||
=={{header|OCaml}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Base}} |
|||
<lang OCaml>open Base |
|||
open Stdio |
|||
let mean fa = |
|||
let open Float in |
|||
(Array.reduce_exn fa ~f:(+)) / (of_int (Array.length fa)) |
|||
let regression xs ys = |
|||
let open Float in |
|||
let xm = mean xs in |
|||
let ym = mean ys in |
|||
let x2m = Array.map xs ~f:(fun x -> x * x) |> mean in |
|||
let x3m = Array.map xs ~f:(fun x -> x * x * x) |> mean in |
|||
let x4m = Array.map xs ~f:(fun x -> let x2 = x * x in x2 * x2) |> mean in |
|||
let xzipy = Array.zip_exn xs ys in |
|||
let xym = Array.map xzipy ~f:(fun (x, y) -> x * y) |> mean in |
|||
let x2ym = Array.map xzipy ~f:(fun (x, y) -> x * x * y) |> mean in |
|||
let sxx = x2m - xm * xm in |
|||
let sxy = xym - xm * ym in |
|||
let sxx2 = x3m - xm * x2m in |
|||
let sx2x2 = x4m - x2m * x2m in |
|||
let sx2y = x2ym - x2m * ym in |
|||
let b = (sxy * sx2x2 - sx2y * sxx2) / (sxx * sx2x2 - sxx2 * sxx2) in |
|||
let c = (sx2y * sxx - sxy * sxx2) / (sxx * sx2x2 - sxx2 * sxx2) in |
|||
let a = ym - b * xm - c * x2m in |
|||
let abc xx = a + b * xx + c * xx * xx in |
|||
printf "y = %.1f + %.1fx + %.1fx^2\n\n" a b c; |
|||
printf " Input Approximation\n"; |
|||
printf " x y y1\n"; |
|||
Array.iter xzipy ~f:(fun (xi, yi) -> |
|||
printf "%2g %3g %5.1f\n" xi yi (abc xi) |
|||
) |
|||
let () = |
|||
let x = Array.init 11 ~f:Float.of_int in |
|||
let y = [| 1.; 6.; 17.; 34.; 57.; 86.; 121.; 162.; 209.; 262.; 321. |] in |
|||
regression x y</lang> |
|||
{{out}} |
|||
<pre> |
|||
y = 1.0 + 2.0x + 3.0x^2 |
|||
Input Approximation |
|||
x y y1 |
|||
0 1 1.0 |
|||
1 6 6.0 |
|||
2 17 17.0 |
|||
3 34 34.0 |
|||
4 57 57.0 |
|||
5 86 86.0 |
|||
6 121 121.0 |
|||
7 162 162.0 |
|||
8 209 209.0 |
|||
9 262 262.0 |
|||
10 321 321.0 |
|||
</pre> |
|||
=={{header|Octave}}== |
=={{header|Octave}}== |