| 65 | } |
| 66 | |
| 67 | void FitTest::testLinearNorris() { |
| 68 | // NIST data for Norris dataset |
| 69 | QVector<double> xData = {0.2, 337.4, 118.2, 884.6, 10.1, 226.5, 666.3, 996.3, 448.6, 777.0, 558.2, 0.4, 0.6, 775.5, 666.9, 338.0, 447.5, 11.6, |
| 70 | 556.0, 228.1, 995.8, 887.6, 120.2, 0.3, 0.3, 556.8, 339.1, 887.2, 999.0, 779.0, 11.1, 118.3, 229.2, 669.1, 448.9, 0.5}; |
| 71 | QVector<double> yData = {0.1, 338.8, 118.1, 888.0, 9.2, 228.1, 668.5, 998.5, 449.1, 778.9, 559.2, 0.3, 0.1, 778.1, 668.8, 339.3, 448.9, 10.8, |
| 72 | 557.7, 228.3, 998.0, 888.8, 119.6, 0.3, 0.6, 557.6, 339.3, 888.0, 998.5, 778.9, 10.2, 117.6, 228.9, 668.4, 449.2, 0.2}; |
| 73 | |
| 74 | // data source columns |
| 75 | Column xDataColumn(QStringLiteral("x"), AbstractColumn::ColumnMode::Double); |
| 76 | xDataColumn.replaceValues(0, xData); |
| 77 | |
| 78 | Column yDataColumn(QStringLiteral("y"), AbstractColumn::ColumnMode::Double); |
| 79 | yDataColumn.replaceValues(0, yData); |
| 80 | |
| 81 | XYFitCurve fitCurve(QStringLiteral("fit")); |
| 82 | fitCurve.setXDataColumn(&xDataColumn); |
| 83 | fitCurve.setYDataColumn(&yDataColumn); |
| 84 | |
| 85 | // prepare the fit |
| 86 | XYFitCurve::FitData fitData = fitCurve.fitData(); |
| 87 | fitData.modelCategory = nsl_fit_model_basic; |
| 88 | fitData.modelType = nsl_fit_model_polynomial; |
| 89 | fitData.degree = 1; |
| 90 | XYFitCurve::initFitData(fitData); |
| 91 | fitCurve.setFitData(fitData); |
| 92 | |
| 93 | // perform the fit |
| 94 | fitCurve.recalculate(); |
| 95 | const XYFitCurve::FitResult& fitResult = fitCurve.fitResult(); |
| 96 | |
| 97 | // check the results |
| 98 | QCOMPARE(fitResult.available, true); |
| 99 | QCOMPARE(fitResult.valid, true); |
| 100 | |
| 101 | const int np = fitData.paramNames.size(); |
| 102 | QCOMPARE(np, 2); |
| 103 | |
| 104 | QCOMPARE(fitResult.paramValues.at(0), -0.262323073774029); |
| 105 | QCOMPARE(fitResult.errorValues.at(0), 0.232818234301152); |
| 106 | QCOMPARE(fitResult.paramValues.at(1), 1.00211681802045); |
| 107 | QCOMPARE(fitResult.errorValues.at(1), 0.429796848199937e-3); |
| 108 | |
| 109 | QCOMPARE(fitResult.rsd, 0.884796396144373); |
| 110 | QCOMPARE(fitResult.rsquare, 0.999993745883712); |
| 111 | QCOMPARE(fitResult.sse, 26.6173985294224); |
| 112 | QCOMPARE(fitResult.rms, 0.782864662630069); |
| 113 | DEBUG(std::setprecision(15) << fitResult.fdist_F); // result: 5436385.54083098 |
| 114 | FuzzyCompare(fitResult.fdist_F, 5436385.54079785, 1.e-9); |
| 115 | } |
| 116 | |
| 117 | void FitTest::testLinearPontius() { |
| 118 | // NIST data for Pontius dataset |
nothing calls this directly
no test coverage detected