Minimum Origin Version Required: Origin 8.1 SR0
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 following command or just add this file to your workspace.
run.LoadOC(Originlab\nlsf_utils.c);
The following code shows how to use NLFitSesssion to fit with weighted data.
#include <..\originlab\NLFitSession.h> void Weighted_Fitting() { // get the active worksheet Worksheet wks = Project.ActiveLayer(); if(!wks) { out_str("Not a valid worksheet!"); return; // need to activate a worksheet with data } NLFitSession FitSession; // 1. set function if(!FitSession.SetFunction("Gauss")) { out_str("Set fitting function error!"); return; } // get parameter names and number vector<string> vsParamNames; int nNumParamsInFunction = FitSession.GetParamNamesInFunction(vsParamNames); // get data range DataRange drInputData; drInputData.Add(wks, 0, "X"); // x column drInputData.Add(wks, 1, "Y"); // y column drInputData.Add(wks, 2, "ED"); // weight column // 2. set the dataset vector vX, vY, vW; drInputData.GetData(&vX, 0); drInputData.GetData(&vY, 1); drInputData.GetData(&vW, 2); if(!FitSession.SetData(vY, vX, NULL, 0, 1, DATA_MODE_INDEP_CONSOLID, vW)) { out_str("Set data error!"); return; } // 3. set parameter init values if(!FitSession.ParamsInitValues()) { out_str("Init values error!"); return; } // 4. set weight method, WEIGHT_NONE = no weight, WEIGHT_INSTRUMENTAL = instrumental // WEIGHT_STATISTICAL = statistics if(!FitSession.SetWeightData(WEIGHT_INSTRUMENTAL, 0.0, 0.0, 0.0)) { out_str("Set weight method error!"); return; } // 5. start fitting int nFitOutcome; if(!FitSession.Fit(&nFitOutcome)) { string strOutcome = FitSession.GetFitOutCome(nFitOutcome); out_str("Fit error! "+strOutcome); return; } // 6. success, get results RegStats fitStats; NLSFFitInfo fitInfo; vector vParamValues, vErrors; FitSession.GetFitResultsStats(&fitStats, &fitInfo, false, 0); FitSession.GetFitResultsParams(vParamValues, vErrors); printf("# Iterations = %d, Reduced Chisqr = %g\n", fitInfo.Iterations, fitStats.ReducedChiSq); for(int nParam=0; nParam<vParamValues.GetSize(); nParam++) { printf("# %s = %f, %s_error = %f\n", vsParamNames[nParam], vParamValues[nParam], vsParamNames[nParam], vErrors[nParam]); } }