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

Method testNonLinearBennett5

tests/analysis/fit/FitTest.cpp:2853–2912  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2851}
2852
2853void FitTest::testNonLinearBennett5() {
2854 Spreadsheet spreadsheet(QStringLiteral("test"), false);
2855 AsciiFilter filter;
2856
2857 // NIST data for Hahn1 dataset
2858 const QString& fileName = QFINDTESTDATA(QLatin1String("data/NIST/non-linear/Bennett5_data.dat"));
2859
2860 auto properties = filter.properties();
2861 properties.headerEnabled = false;
2862 properties.simplifyWhitespaces = true;
2863 properties.skipEmptyParts = true;
2864 filter.setProperties(properties);
2865 filter.readDataFromFile(fileName, &spreadsheet, AbstractFileFilter::ImportMode::Replace);
2866
2867 QCOMPARE(spreadsheet.rowCount(), 154);
2868 QCOMPARE(spreadsheet.columnCount(), 2);
2869
2870 XYFitCurve fitCurve(QStringLiteral("fit"));
2871 fitCurve.setXDataColumn(spreadsheet.column(1));
2872 fitCurve.setYDataColumn(spreadsheet.column(0));
2873
2874 // prepare the fit
2875 XYFitCurve::FitData fitData = fitCurve.fitData();
2876 fitData.modelCategory = nsl_fit_model_custom;
2877 XYFitCurve::initFitData(fitData);
2878 fitData.model = QStringLiteral("b1 * (b2+x)^(-1./b3)");
2879 fitData.paramNames << QStringLiteral("b1") << QStringLiteral("b2") << QStringLiteral("b3");
2880 fitData.eps = 1.e-8;
2881 fitData.maxIterations = 1000;
2882 const int np = fitData.paramNames.size();
2883 // first set of start values
2884 fitData.paramStartValues << -2000. << 50. << 0.8;
2885 for (int i = 0; i < np; i++) {
2886 fitData.paramLowerLimits << -std::numeric_limits<double>::max();
2887 fitData.paramUpperLimits << std::numeric_limits<double>::max();
2888 }
2889 fitCurve.setFitData(fitData);
2890
2891 // perform the fit
2892 fitCurve.recalculate();
2893 const XYFitCurve::FitResult& fitResult = fitCurve.fitResult();
2894
2895 // check the results
2896 QCOMPARE(fitResult.available, true);
2897 QCOMPARE(fitResult.valid, true);
2898
2899 QCOMPARE(np, 3);
2900
2901 printAndCheck(fitResult.paramValues.at(0), -2.5235058043E+03, 1.e-2);
2902 printAndCheck(fitResult.errorValues.at(0), 2.9715175411E+02, 2.e-2);
2903
2904 printAndCheck(fitResult.paramValues.at(1), 4.6736564644E+01, 5.e-3);
2905 printAndCheck(fitResult.errorValues.at(1), 1.2448871856E+00, 2.e-2);
2906
2907 printAndCheck(fitResult.paramValues.at(2), 9.3218483193E-01, 3.e-3);
2908 printAndCheck(fitResult.errorValues.at(2), 2.0272299378E-02, 1.e-2);
2909
2910 printAndCheck(fitResult.rsd, 1.8629312528E-03, 5.e-5);

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