| 115 | } |
| 116 | |
| 117 | void FitTest::testLinearPontius() { |
| 118 | // NIST data for Pontius dataset |
| 119 | QVector<int> xData = {150000, 300000, 450000, 600000, 750000, 900000, 1050000, 1200000, 1350000, 1500000, 1650000, 1800000, 1950000, 2100000, |
| 120 | 2250000, 2400000, 2550000, 2700000, 2850000, 3000000, 150000, 300000, 450000, 600000, 750000, 900000, 1050000, 1200000, |
| 121 | 1350000, 1500000, 1650000, 1800000, 1950000, 2100000, 2250000, 2400000, 2550000, 2700000, 2850000, 3000000}; |
| 122 | QVector<double> yData = {.11019, .21956, .32949, .43899, .54803, .65694, .76562, .87487, .98292, 1.09146, 1.20001, 1.30822, 1.41599, 1.52399, |
| 123 | 1.63194, 1.73947, 1.84646, 1.95392, 2.06128, 2.16844, .11052, .22018, .32939, .43886, .54798, .65739, .76596, .87474, |
| 124 | .98300, 1.09150, 1.20004, 1.30818, 1.41613, 1.52408, 1.63159, 1.73965, 1.84696, 1.95445, 2.06177, 2.16829}; |
| 125 | |
| 126 | // data source columns |
| 127 | Column xDataColumn(QStringLiteral("x"), AbstractColumn::ColumnMode::Integer); |
| 128 | xDataColumn.replaceInteger(0, xData); |
| 129 | |
| 130 | Column yDataColumn(QStringLiteral("y"), AbstractColumn::ColumnMode::Double); |
| 131 | yDataColumn.replaceValues(0, yData); |
| 132 | |
| 133 | XYFitCurve fitCurve(QStringLiteral("fit")); |
| 134 | fitCurve.setXDataColumn(&xDataColumn); |
| 135 | fitCurve.setYDataColumn(&yDataColumn); |
| 136 | |
| 137 | // prepare the fit |
| 138 | XYFitCurve::FitData fitData = fitCurve.fitData(); |
| 139 | fitData.modelCategory = nsl_fit_model_basic; |
| 140 | fitData.modelType = nsl_fit_model_polynomial; |
| 141 | fitData.degree = 2; |
| 142 | XYFitCurve::initFitData(fitData); |
| 143 | fitCurve.setFitData(fitData); |
| 144 | |
| 145 | // perform the fit |
| 146 | fitCurve.recalculate(); |
| 147 | const XYFitCurve::FitResult& fitResult = fitCurve.fitResult(); |
| 148 | |
| 149 | // check the results |
| 150 | QCOMPARE(fitResult.available, true); |
| 151 | QCOMPARE(fitResult.valid, true); |
| 152 | |
| 153 | const int np = fitData.paramNames.size(); |
| 154 | QCOMPARE(np, 3); |
| 155 | |
| 156 | QCOMPARE(fitResult.paramValues.at(0), 0.673565789473684e-3); |
| 157 | QCOMPARE(fitResult.errorValues.at(0), 0.107938612033077e-3); |
| 158 | QCOMPARE(fitResult.paramValues.at(1), 0.732059160401003e-6); |
| 159 | QCOMPARE(fitResult.errorValues.at(1), 0.157817399981659e-9); |
| 160 | QCOMPARE(fitResult.paramValues.at(2), -0.316081871345029e-14); |
| 161 | QCOMPARE(fitResult.errorValues.at(2), 0.486652849992036e-16); |
| 162 | |
| 163 | QCOMPARE(fitResult.rsd, 0.205177424076185e-3); |
| 164 | QCOMPARE(fitResult.rsquare, 0.999999900178537); |
| 165 | QCOMPARE(fitResult.sse, 0.155761768796992e-5); |
| 166 | QCOMPARE(fitResult.rms, 0.420977753505385e-7); |
| 167 | DEBUG(std::setprecision(15) << fitResult.fdist_F); // result: 185330865.884471 |
| 168 | FuzzyCompare(fitResult.fdist_F, 185330865.995752, 1.e-9); |
| 169 | } |
| 170 | |
| 171 | void FitTest::testLinearNoInt1() { |
| 172 | // NIST data for NoInt1 dataset |
nothing calls this directly
no test coverage detected