
Moments from an Empirical Distribution

jjweimer
This function calculates a moment from an empirical distribution function.
wdistr - the input distribution wave
n - the moment (-2 - rms, 0 - most probable, 1 - mean, 2 - second, 3 ...)
xmax - optional x limit for the calculations
wdistrX - optional x wave for distribution (for calculations with non-scaled waves)
Function calc_DistributionMoment(wave wdistr, variable n [variable xmax, wave wdistrX]) variable rtnv, scaled=1, limited=0, pmax if (!ParamIsDefault(wdistrX)) scaled = 0 endif if (!ParamIsDefault(xmax)) limited=1 if (scaled) pmax = x2pnt(wdistr,xmax) else pmax = x2pnt(wdistrX,xmax) endif else pmax = numpnts(wdistr) - 1 if (scaled) xmax = pnt2x(wdistr,pmax) endif endif switch(n) case -2: // rms duplicate/FREE wdistr, iwave, iMwave if (scaled) integrate/METH=1 iwave iMwave = wdistr*x^2 integrate/METH=1 iMwave else integrate/METH=1 iwave /X=wdistrX iMwave = wdistr*wdistrX^2 integrate/METH=1 iMwave /X=wdistrX endif rtnv = sqrt(iMwave[pmax]/iwave[pmax]) break case 0: // most probable if (scaled) if (limited) WaveStats/M=1/Q/R=(0,xmax) wdistr else WaveStats/M=2/Q wdistr endif rtnv = v_maxloc else if (limited) WaveStats/P/M=2/Q/R=[0,pmax] wdistr else WaveStats/P/M=2/Q wdistr endif rtnv = wdistrX[v_maxRowLoc] endif break default: // all others (1-mean, 2-second, 3...) duplicate/FREE wdistr, iwave, iMwave if (scaled) iwave = wdistr*x^(n-1) integrate/METH=1 iwave iMwave = wdistr*x^n integrate/METH=1 iMwave else iwave = wdistr*wdistrX^(n-1) integrate/METH=1 iwave /X=wdistrX iMwave = wdistr*wdistrX^n integrate/METH=1 iMwave /X=wdistrX endif rtnv = iMwave[pmax]/iwave[pmax] break endswitch return rtnv end
This would be used by example to obtain the requisite values from polymer molar mass distributions or particle size distributions.

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More