| 591 | } |
| 592 | |
| 593 | void FitTest::testLinearWampler2() { |
| 594 | // NIST data for Wampler2 dataset |
| 595 | QVector<int> xData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; |
| 596 | QVector<double> yData = {1.00000, 1.11111, 1.24992, 1.42753, 1.65984, 1.96875, 2.38336, 2.94117, 3.68928, 4.68559, 6.00000, |
| 597 | 7.71561, 9.92992, 12.75603, 16.32384, 20.78125, 26.29536, 33.05367, 41.26528, 51.16209, 63.00000}; |
| 598 | |
| 599 | // data source columns |
| 600 | Column xDataColumn(QStringLiteral("x"), AbstractColumn::ColumnMode::Integer); |
| 601 | xDataColumn.replaceInteger(0, xData); |
| 602 | |
| 603 | Column yDataColumn(QStringLiteral("y"), AbstractColumn::ColumnMode::Double); |
| 604 | yDataColumn.replaceValues(0, yData); |
| 605 | |
| 606 | XYFitCurve fitCurve(QStringLiteral("fit")); |
| 607 | fitCurve.setXDataColumn(&xDataColumn); |
| 608 | fitCurve.setYDataColumn(&yDataColumn); |
| 609 | |
| 610 | // prepare the fit |
| 611 | XYFitCurve::FitData fitData = fitCurve.fitData(); |
| 612 | fitData.modelCategory = nsl_fit_model_basic; |
| 613 | fitData.modelType = nsl_fit_model_polynomial; |
| 614 | fitData.degree = 5; |
| 615 | XYFitCurve::initFitData(fitData); |
| 616 | fitCurve.setFitData(fitData); |
| 617 | |
| 618 | // perform the fit |
| 619 | fitCurve.recalculate(); |
| 620 | const XYFitCurve::FitResult& fitResult = fitCurve.fitResult(); |
| 621 | |
| 622 | // check the results |
| 623 | qDebug() << "STATUS " << fitResult.status; |
| 624 | QCOMPARE(fitResult.available, true); |
| 625 | QCOMPARE(fitResult.valid, true); |
| 626 | |
| 627 | const int np = fitData.paramNames.size(); |
| 628 | QCOMPARE(np, 6); |
| 629 | |
| 630 | for (int i = 0; i < np; i++) { |
| 631 | DEBUG(std::setprecision(15) << fitResult.paramValues.at(i)); |
| 632 | } |
| 633 | QCOMPARE(fitResult.paramValues.at(0), 1.0); |
| 634 | QCOMPARE(fitResult.paramValues.at(1), 0.1); |
| 635 | QCOMPARE(fitResult.paramValues.at(2), 0.01); |
| 636 | QCOMPARE(fitResult.paramValues.at(3), 0.001); |
| 637 | QCOMPARE(fitResult.paramValues.at(4), 0.0001); |
| 638 | QCOMPARE(fitResult.paramValues.at(5), 0.00001); |
| 639 | for (int i = 0; i < np; i++) |
| 640 | printAndCheck(fitResult.errorValues.at(i), 0., 1.e-14); |
| 641 | |
| 642 | printAndCheck(fitResult.rsd, 0., 1.e-14); |
| 643 | QCOMPARE(fitResult.rsquare, 1.); |
| 644 | printAndCheck(fitResult.sse, 0., 1.e-15); |
| 645 | printAndCheck(fitResult.rms, 0., 1.e-15); |
| 646 | DEBUG(std::setprecision(15) << fitResult.fdist_F); // result: 2.44385217688297e+32 |
| 647 | QVERIFY(fitResult.fdist_F > 1.e+32); |
| 648 | } |
| 649 | |
| 650 | void FitTest::testLinearWampler2_custom() { |
nothing calls this directly
no test coverage detected