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

Method testNonLinearBennett5_2

tests/analysis/fit/FitTest.cpp:2914–2973  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2912}
2913
2914void FitTest::testNonLinearBennett5_2() {
2915 Spreadsheet spreadsheet(QStringLiteral("test"), false);
2916 AsciiFilter filter;
2917
2918 // NIST data for Hahn1 dataset
2919 const QString& fileName = QFINDTESTDATA(QLatin1String("data/NIST/non-linear/Bennett5_data.dat"));
2920
2921 auto properties = filter.properties();
2922 properties.headerEnabled = false;
2923 properties.simplifyWhitespaces = true;
2924 properties.skipEmptyParts = true;
2925 filter.setProperties(properties);
2926 filter.readDataFromFile(fileName, &spreadsheet, AbstractFileFilter::ImportMode::Replace);
2927
2928 QCOMPARE(spreadsheet.rowCount(), 154);
2929 QCOMPARE(spreadsheet.columnCount(), 2);
2930
2931 XYFitCurve fitCurve(QStringLiteral("fit"));
2932 fitCurve.setXDataColumn(spreadsheet.column(1));
2933 fitCurve.setYDataColumn(spreadsheet.column(0));
2934
2935 // prepare the fit
2936 XYFitCurve::FitData fitData = fitCurve.fitData();
2937 fitData.modelCategory = nsl_fit_model_custom;
2938 XYFitCurve::initFitData(fitData);
2939 fitData.model = QStringLiteral("b1 * (b2+x)^(-1./b3)");
2940 fitData.paramNames << QStringLiteral("b1") << QStringLiteral("b2") << QStringLiteral("b3");
2941 fitData.eps = 1.e-8;
2942 fitData.maxIterations = 1000;
2943 const int np = fitData.paramNames.size();
2944 // second set of start values
2945 fitData.paramStartValues << -1500. << 45. << 0.85;
2946 for (int i = 0; i < np; i++) {
2947 fitData.paramLowerLimits << -std::numeric_limits<double>::max();
2948 fitData.paramUpperLimits << std::numeric_limits<double>::max();
2949 }
2950 fitCurve.setFitData(fitData);
2951
2952 // perform the fit
2953 fitCurve.recalculate();
2954 const XYFitCurve::FitResult& fitResult = fitCurve.fitResult();
2955
2956 // check the results
2957 QCOMPARE(fitResult.available, true);
2958 QCOMPARE(fitResult.valid, true);
2959
2960 QCOMPARE(np, 3);
2961
2962 printAndCheck(fitResult.paramValues.at(0), -2.5235058043E+03, 2.e-2);
2963 printAndCheck(fitResult.errorValues.at(0), 2.9715175411E+02, 2.e-2);
2964
2965 printAndCheck(fitResult.paramValues.at(1), 4.6736564644E+01, 5.e-3);
2966 printAndCheck(fitResult.errorValues.at(1), 1.2448871856E+00, 2.e-2);
2967
2968 printAndCheck(fitResult.paramValues.at(2), 9.3218483193E-01, 3.e-3);
2969 printAndCheck(fitResult.errorValues.at(2), 2.0272299378E-02, 1.e-2);
2970
2971 printAndCheck(fitResult.rsd, 1.8629312528E-03, 1.e-4);

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