Polynomial regression: Difference between revisions

Content added Content deleted
(→‎{{header|Sidef}}: simplified the code, as the Matrix class is now built-in)
Line 1,647: Line 1,647:
=={{header|Sidef}}==
=={{header|Sidef}}==
{{trans|Ruby}}
{{trans|Ruby}}
<lang ruby>var Matrix = require('Math::Matrix')
<lang ruby>func regress(x, y, degree) {
var A = Matrix.build(x.len, degree+1, {|i,j|
x[i]**j
})


var B = Matrix.column_vector(y...)
func regress(x, y, degree) {
((A.transpose * A)**(-1) * A.transpose * B).transpose[0]
var x_data = x.map {|xi| (0..degree).map {|pow| xi**pow } }
}

var mx = Matrix.new(x_data...)
var my = Matrix.new(y.map{[_]}...)


func poly(x) {
mx.transpose.multiply(mx).invert.multiply(mx.transpose).multiply(my).transpose
3*x**2 + 2*x + 1
}
}


var betas = regress(
var coeff = regress(
10.of { _ },
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
10.of { poly(_) },
[1, 6, 17, 34, 57, 86, 121, 162, 209, 262, 321],
2
2
)
)


betas.print</lang>
say coeff</lang>
{{out}}
{{out}}
<pre>
<pre>
[1, 2, 3]
1.00000 2.00000 3.00000
</pre>
</pre>