You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

double Statistic::LineFit(const double *const x, const double *const y, const size_t n, double *m, double *b)
{
    int error = 0;
    double sumx = 0, sumy = 0, sumx2 = 0, sumxy = 0;
    double dn = (double) n;
    size_t i;
    if (n <= 1)
    {
        *m = 0;
        *b = 0;
        error = 1;
    }
    else
    {
        double divisor;
        error = 0;
        for (i = 0; i < n; i++)
        {
            sumx += x[i];
            sumy += y[i];
            sumx2 += (x[i] * x[i]);
            sumxy += (x[i] * y[i]);
        }
        divisor = (sumx2 - ((sumx * sumx) / dn));
        if (divisor != 0)
        {
            *m = (sumxy - ((sumx * sumy) / dn)) / divisor;
            *b = (sumy - ((*m) * sumx)) / dn;
        }
        else
        {
            *m = 0;
            *b = 0;
            error = 2;
        }
    }
    return *m;
};

  • No labels
You must log in to comment.