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