UNPKG

theorem.js

Version:

A Math library for computation in JavaScript

88 lines (78 loc) 1.87 kB
regression(data, deg) { if (deg == 1) { return this.linreg(data) } else { return this.polyreg(data, deg) } } linreg(array) { const x = Object.keys(array) const y = Object.values(array) const n = y.length; let sum_x = 0; let sum_y = 0; let sum_xy = 0; let sum_xx = 0; let sum_yy = 0; for (let i = 0; i < y.length; i++) { sum_x += parseFloat(x[i]); sum_y += parseFloat(y[i]); sum_xy += parseFloat(x[i] * y[i]); sum_xx += parseFloat(x[i] * x[i]); sum_yy += parseFloat(y[i] * y[i]); } const slope = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x); const intercept = (sum_y - slope * sum_x) / n; return this.polynomial(slope, intercept) } polyreg(data, deg) { const x = Object.keys(data) for (let i in x) { x[i] = parseFloat(x[i]) } const y = Object.values(data) for (let i in y) { y[i] = parseFloat(y[i]) } const lhs = []; const rhs = []; let a = 0; let b = 0; let c; let k; var i; let j; let l; const len = x.length; let results; let equation; let string; if (typeof deg === 'undefined') { k = 3; } else { k = deg + 1; } for (i = 0; i < k; i++) { for (l = 0; l < len; l++) { if (y[l] !== null) { a += x[l] ** i * y[l]; } } lhs.push(a); a = 0; c = []; for (j = 0; j < k; j++) { for (l = 0; l < len; l++) { if (y[l] !== null) { b += x[l] ** (i + j); } } c.push(b); b = 0; } rhs.push(c); } rhs.push(lhs); equation = this.gaussElimination(rhs, k); return this.polynomial(...equation.reverse()) }