12345678910111213141516171819202122232425262728 |
- #!/usr/bin/ruby
- # Find an approximating polynomial of known degree for a given dataset.
- # See also:
- # https://rosettacode.org/wiki/Polynomial_regression
- # https://en.wikipedia.org/wiki/Polynomial_regression
- func regress(x, y, degree) {
- var A = Matrix.build(x.len, degree+1, {|i,j|
- x[i]**j
- })
- var B = Matrix.column_vector(y...)
- ((A.transpose * A)**(-1) * A.transpose * B).transpose[0]
- }
- func poly(x) {
- 3*x**2 + 2*x + 1
- }
- var coeff = regress(
- 10.of { _ },
- 10.of { poly(_) },
- 2
- )
- say coeff
|