public class lin_fit extends fit { public lin_fit(plot p, int id) { super(p, id); } void do_fit() { double s = p.x.length; double sx = 0; double sy = 0; double sxx = 0; double sxy = 0; for (int i = 0; i < p.x.length; i ++) { sx += p.x[i]; sy += p.y[i]; sxx += p.x[i] * p.x[i]; sxy += p.x[i] * p.y[i]; } double d = s * sxx - sx * sx; a = (sxx * sy - sx * sxy) / d; b = (s * sxy - sx * sy) / d; //double r = -sx / Math.sqrt(s * sxx); // rab //r2 = r * r; double mx = sx / s; double my = sy / s; sxy = 0; sxx = 0; double syy = 0; for (int i = 0; i < s; i ++) { sxy += (p.x[i] - mx) * (p.y[i] - my); sxx += (p.x[i] - mx) * (p.x[i] - mx); syy += (p.y[i] - my) * (p.y[i] - my); } r = sxy / Math.sqrt(sxx) / Math.sqrt(syy); // Pearson //r2 = r * r; } public double eval(double x) { return a + b * x; } public String eqn() { return new String("y = a + b * x"); } }