Moments from an Empirical Distribution

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 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More