MCPcopy Create free account
hub / github.com/KDE/labplot / testNonLinearHahn1

Method testNonLinearHahn1

tests/analysis/fit/FitTest.cpp:2633–2704  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2631// more tests
2632
2633void FitTest::testNonLinearHahn1() {
2634 Spreadsheet spreadsheet(QStringLiteral("test"), false);
2635 AsciiFilter filter;
2636
2637 // NIST data for Hahn1 dataset
2638 const QString& fileName = QFINDTESTDATA(QLatin1String("data/NIST/non-linear/Hahn1_data.dat"));
2639
2640 auto properties = filter.properties();
2641 properties.headerEnabled = false;
2642 properties.simplifyWhitespaces = true;
2643 properties.skipEmptyParts = true;
2644 filter.setProperties(properties);
2645 filter.readDataFromFile(fileName, &spreadsheet, AbstractFileFilter::ImportMode::Replace);
2646
2647 QCOMPARE(spreadsheet.rowCount(), 236);
2648 QCOMPARE(spreadsheet.columnCount(), 2);
2649
2650 XYFitCurve fitCurve(QStringLiteral("fit"));
2651 fitCurve.setXDataColumn(spreadsheet.column(1));
2652 fitCurve.setYDataColumn(spreadsheet.column(0));
2653
2654 // prepare the fit
2655 XYFitCurve::FitData fitData = fitCurve.fitData();
2656 fitData.modelCategory = nsl_fit_model_custom;
2657 XYFitCurve::initFitData(fitData);
2658 fitData.model = QStringLiteral("(b1+b2*x+b3*x^2+b4*x^3) / (1+b5*x+b6*x^2+b7*x^3)");
2659 fitData.paramNames << QStringLiteral("b1") << QStringLiteral("b2") << QStringLiteral("b3") << QStringLiteral("b4") << QStringLiteral("b5")
2660 << QStringLiteral("b6") << QStringLiteral("b7");
2661 fitData.eps = 1.e-8;
2662 const int np = fitData.paramNames.size();
2663 // first set of start values
2664 fitData.paramStartValues << 10. << -1. << 0.05 << -0.00001 << -0.05 << 0.001 << -0.000001;
2665 for (int i = 0; i < np; i++) {
2666 fitData.paramLowerLimits << -std::numeric_limits<double>::max();
2667 fitData.paramUpperLimits << std::numeric_limits<double>::max();
2668 }
2669 fitCurve.setFitData(fitData);
2670
2671 // perform the fit
2672 fitCurve.recalculate();
2673 const XYFitCurve::FitResult& fitResult = fitCurve.fitResult();
2674
2675 // check the results
2676 QCOMPARE(fitResult.available, true);
2677 QCOMPARE(fitResult.valid, true);
2678
2679 QCOMPARE(np, 7);
2680
2681 printAndCheck(fitResult.paramValues.at(0), 1.0776351733E+00, 1.e-2);
2682 printAndCheck(fitResult.errorValues.at(0), 1.7070154742E-01, 2.e-2);
2683
2684 printAndCheck(fitResult.paramValues.at(1), -1.2269296921E-01, 1.e-2);
2685 printAndCheck(fitResult.errorValues.at(1), 1.2000289189E-02, 2.e-2);
2686
2687 printAndCheck(fitResult.paramValues.at(2), 4.0863750610E-03, 2.e-3);
2688 printAndCheck(fitResult.errorValues.at(2), 2.2508314937E-04, 1.e-3);
2689
2690 printAndCheck(fitResult.paramValues.at(3), -1.4262662514E-06, 1.e-3);

Callers

nothing calls this directly

Calls 11

setPropertiesMethod · 0.80
setXDataColumnMethod · 0.80
setYDataColumnMethod · 0.80
propertiesMethod · 0.45
readDataFromFileMethod · 0.45
rowCountMethod · 0.45
columnCountMethod · 0.45
columnMethod · 0.45
sizeMethod · 0.45
setFitDataMethod · 0.45
recalculateMethod · 0.45

Tested by

no test coverage detected