public class exp_fit extends fit { public exp_fit(plot p, int id) { super(p, id); } void do_fit() { if (p.app.neg_ydata == 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 = p.x[i]; double y = Math.log(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 += (p.x[i] - mx) * (Math.log(p.y[i]) - my); sxx += (p.x[i] - mx) * (p.x[i] - mx); syy += (Math.log(p.y[i]) - my) * (Math.log(p.y[i]) - my); } r = sxy / Math.sqrt(sxx) / Math.sqrt(syy); // Pearson //r2 = r * r; a = Math.exp(a); } public double eval(double x) { return a * Math.exp(b * x); } public String eqn() { return new String("y = a * e^(b * x)"); } }