Files
MAClient/src/regessioncalculator.cpp
uvos a9f263b22d Change lighting length to be based on when cameras report finished
Fix viewer handling when cammeras are available
2021-07-19 11:12:23 +02:00

35 lines
1.2 KiB
C++

#include "regessioncalculator.h"
#include <stdexcept>
#include <math.h>
#include <QDebug>
RegessionCalculator::RegessionCalculator(const std::vector<double>& xValues, const std::vector<double>& yValues)
{
if(xValues.size() == yValues.size())
{
this->xValues = xValues;
this->yValues = yValues;
double sumY = 0;
double sumX = 0;
double sumXTimesY = 0;
double sumSquaredX = 0;
double sumSquaredY = 0;
for (unsigned i = 0; i < xValues.size(); i++)
{
sumY += yValues[i];
sumX += xValues[i];
sumSquaredX += xValues[i]*xValues[i];
sumSquaredY += yValues[i]*yValues[i];
sumXTimesY += xValues[i]*yValues[i];
}
slope = (sumXTimesY - (sumX*sumY)/xValues.size()) / (sumSquaredX - (sumX*sumX)/xValues.size());
offset = sumY/xValues.size() - slope*(sumX/xValues.size());
double error = (xValues.size()*sumSquaredY-sumY*sumY-slope*slope*(xValues.size()*sumSquaredX-sumX*sumX)) / (xValues.size()*(xValues.size()-2));
stdError = sqrt( (error*error*xValues.size() ) / ( xValues.size()*sumSquaredX-sumX*sumX));
}
else throw std::invalid_argument("xValues and yValues need to be the same size");
}