public class ln_fit extends fit { public ln_fit(plot p, int id) { super(p, id); } void do_fit() { if (p.app.neg_xdata == 1) { active = false; return; } 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 ++) { double x = Math.log(p.x[i]); double y = p.y[i]; sx += x; sy += y; sxx += x * x; sxy += x * y; } 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 += (Math.log(p.x[i]) - mx) * (p.y[i] - my); sxx += (Math.log(p.x[i]) - mx) * (Math.log(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 * Math.log(x); } public String eqn() { return new String("y = a + b ln x"); } }