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

Method testNonLinearHahn1_3

tests/analysis/fit/FitTest.cpp:2779–2851  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2777}
2778
2779void FitTest::testNonLinearHahn1_3() {
2780 Spreadsheet spreadsheet(QStringLiteral("test"), false);
2781 AsciiFilter filter;
2782
2783 // NIST data for Hahn1 dataset
2784 const QString& fileName = QFINDTESTDATA(QLatin1String("data/NIST/non-linear/Hahn1_data.dat"));
2785
2786 auto properties = filter.properties();
2787 properties.headerEnabled = false;
2788 properties.simplifyWhitespaces = true;
2789 properties.skipEmptyParts = true;
2790 filter.setProperties(properties);
2791 filter.readDataFromFile(fileName, &spreadsheet, AbstractFileFilter::ImportMode::Replace);
2792
2793 QCOMPARE(spreadsheet.rowCount(), 236);
2794 QCOMPARE(spreadsheet.columnCount(), 2);
2795
2796 XYFitCurve fitCurve(QStringLiteral("fit"));
2797 fitCurve.setXDataColumn(spreadsheet.column(1));
2798 fitCurve.setYDataColumn(spreadsheet.column(0));
2799
2800 // prepare the fit
2801 XYFitCurve::FitData fitData = fitCurve.fitData();
2802 fitData.modelCategory = nsl_fit_model_custom;
2803 XYFitCurve::initFitData(fitData);
2804 fitData.model = QStringLiteral("(b1+b2*x+b3*x^2+b4*x^3) / (1+b5*x+b6*x^2+b7*x^3)");
2805 fitData.paramNames << QStringLiteral("b1") << QStringLiteral("b2") << QStringLiteral("b3") << QStringLiteral("b4") << QStringLiteral("b5")
2806 << QStringLiteral("b6") << QStringLiteral("b7");
2807 // fitData.eps = 1.e-12;
2808 const int np = fitData.paramNames.size();
2809 // exact start values
2810 fitData.paramStartValues << 1.0776351733E+00 << -1.2269296921E-01 << 4.0863750610E-03 << -1.4262662514E-06 << -5.7609940901E-03 << 2.4053735503E-04
2811 << -1.2314450199E-07;
2812 for (int i = 0; i < np; i++) {
2813 fitData.paramLowerLimits << -std::numeric_limits<double>::max();
2814 fitData.paramUpperLimits << std::numeric_limits<double>::max();
2815 }
2816 fitCurve.setFitData(fitData);
2817
2818 // perform the fit
2819 fitCurve.recalculate();
2820 const XYFitCurve::FitResult& fitResult = fitCurve.fitResult();
2821
2822 // check the results
2823 QCOMPARE(fitResult.available, true);
2824 QCOMPARE(fitResult.valid, true);
2825
2826 QCOMPARE(np, 7);
2827
2828 printAndCheck(fitResult.paramValues.at(0), 1.0776351733E+00, 1.e-2);
2829 printAndCheck(fitResult.errorValues.at(0), 1.7070154742E-01, 2.e-2);
2830
2831 printAndCheck(fitResult.paramValues.at(1), -1.2269296921E-01, 1.e-2);
2832 printAndCheck(fitResult.errorValues.at(1), 1.2000289189E-02, 2.e-2);
2833
2834 printAndCheck(fitResult.paramValues.at(2), 4.0863750610E-03, 2.e-3);
2835 printAndCheck(fitResult.errorValues.at(2), 2.2508314937E-04, 1.e-3);
2836

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