【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.2.1.2.1 NLFitSession::Fit
Contents
Description
Perform the fit. Iterations will be carried out until the tolerance is reached, or the number of iterations has reached the maximum specified by SetMaxNumIter.
Syntax
bool Fit(int* pnOutcome = NULL, bool bCheckLastOutcome = false, bool bAllowCancel = false)
Parameters
- pnOutcome
- [output] the int pointer, if not NULL, receive the error code.
- bCheckLastOutcome
- [input] if ture, will not iteration again if already converged.
- bAllowCancel
- [input] if true to allow type Esc to interrupt iteration.
Return
return ture if fit converged, else return false.
Examples
EX1
- Prior to running the following example, the nlsf_utils.c file need to be loaded and compiled. This can be done from script with the command run.LoadOC(Originlab\nlsf_utils.c) or just add this file to your workspace.
- New a worksheet and import \Samples\Curve Fitting\Gaussian.dat.
- Copy and compile the following codes, and run "NLFitSession_Fit_ex1" in Command window.
#include <..\originlab\NLFitSession.h> void NLFitSession_Fit_ex1() { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; wks.SetSize(-1, 2); // remove other columns wks.SetSize(-1, 4); // add two new columns wks.SetColDesignations("XYXY"); XYRange dr; // add input data range dr.Add(wks, 0, "X"); dr.Add(wks, 1, "Y"); dr.Add(); // add output fit data range dr.Add(wks, 2, "X"); dr.Add(wks, 3, "Y"); int nRangeIndex = 0; vector vX, vY; dr.GetData(vY, vX, NULL, nRangeIndex); NLFitSession FitSession; // 1. set function if( !FitSession.SetFunction("Gauss")) // set function as Gauss, category name can be ignore { out_str("invalid fit function"); return; } // 2. set data if( !FitSession.SetData(vY, vX)) { out_str("fail to set data"); return; } // 3. init parameter if( !FitSession.ParamsInitValues()) { out_str("fail to init parameter"); return; } out_str("The parameter values before fitting"); FitSession.GetChiSqr(); // call GetChiSqr order to set parameter settings on internal fit object show_params(FitSession); // 4. fit int nOutcome; if( !FitSession.Fit(&nOutcome) ) { out_str("Fail to do fitting"); return; } out_str("The parameter values after fitting"); show_params(FitSession); // 5. get fitting xy data and put to source worksheet double xmin, xmax, xinc; vX.GetMinMax(xmin, xmax); int count = 100; RoundLimits(&xmin, &xmax, &xinc, count); vector vFitX, vFitY; vFitX.Data(xmin, xmax, xinc); vFitY.SetSize(vFitX.GetSize()); if( 0 == FitSession.GetYFromX(vFitX, vFitY, vFitX.GetSize()) ) { out_str("Fail to get Y values"); } nRangeIndex = 1; dr.SetData(&vFitY, &vFitX, nRangeIndex); // plot source data and fitting data GraphPage gp; gp.Create(); GraphLayer gl = gp.Layers(); if( gl.AddPlot(wks) >= 0 ) legend_update(gl); } void show_params(NLFitSession& FitSession) { // get parameter values after initialization vector vParamValues; vector<int> vnParamsOffsets; // the begin index of one group of parameters, normally one group for one dataset FitSession.GetParamValuesAndOffsets(vParamValues, vnParamsOffsets); // output parameter values with names vector<string> vsParamNames; FitSession.GetParamNamesInFunction(vsParamNames); int nDataset = 0; for( int nParam = vnParamsOffsets[nDataset], ii = 0; nParam < vnParamsOffsets[nDataset+1]; nParam++, ii++ ) { printf("%s = %f\n", vsParamNames[ii], vParamValues[nParam]); } }
Remark
See Also
Header to Include
Originlab\NLFitSession.h