var sum_x = 0;
var sum_y = 0;
var sum_xy = 0;
var sum_xx = 0;
var count = 0;
/*
* We'll use those variables for faster read/write access.
*/
var x = 0;
var y = 0;
/*****************************WHAT MARKO ADDED***************************************/
//index of array where y array will progress into a sequence of non-zero elements
var index_nonZero;
//first if statement checks if first element is zero
//if y[0]!=0 then we have nothing to worry about
//if y[0] = 0 then we see where the elements begin to be non zero
//once we find that spot, we break out of loop and remove beginning elements that are zero.
if (values_y[0] === 0) {
for (i = 0; i < values_y.length; i++) {
if (values_y[i] !== 0) {
index_nonZero = i;
break;
}
}
}
values_y = values_y.splice(index_nonZero, values_y.length);
tempValuesX = values_x.splice(0, index_nonZero);
values_x = values_x.splice(index_nonZero, values_x.length);
console.log(values_y);
//console.log(values_X);
/******************************END OF WHAT MARKO ADDED***************************/
var values_length = values_x.length;
if (values_length != values_y.length) {
throw new Error('The parameters values_x and values_y need to have same size!');
}
/*
* Nothing to do.
*/
if (values_length === 0) {
return [
[],
[]
];
}
// values_y is shorter than x and so it fails trying to do calculations below. Need to
// look into for a fix
/*
* Calculate the sum for each of the parts necessary.
*/
for (var v = 0; v < values_length; v++) {
x = values_x[v];
y = values_y[v];
sum_x += x;
sum_y += y;
sum_xx += x * x;
sum_xy += x * y;
count++;
}
/*
* Calculate m and b for the formular:
* y = x * m + b
*/
var m = (count * sum_xy - sum_x * sum_y) / (count * sum_xx - sum_x * sum_x);
var b = (sum_y / count) - (m * sum_x) / count;
/*
* We will make the x and y result line now
*/
var result_values_x = [];
var result_values_y = [];
result_values_x.push(tempValuesX);
for(i = 0; i < index_nonZero; i++) {
result_values_y.push(0);
}
for (var v = 0; v < values_length; v++) {
x = values_x[v];
y = x * m + b;
result_values_x.push(x);
result_values_y.push(y);
}
return [result_values_x, result_values_y];
}