Function File: [`yhat`, `lambda`] = **regdatasmooth** (`x, y, `[`options`])

Smooths the

yvs.xvalues of 1D data by Tikhonov regularization. The smooth y-values are returned asyhat. The regularization parameterlambdathat was used for the smoothing may also be returned.Note: the options have changed! Currently supported input options are (multiple options are allowed):

`"d",`

value- the smoothing derivative to use (default = 2)
`"lambda",`

value- the regularization paramater to use
`"stdev",`

value- the standard deviation of the measurement of
y; an optimal value for lambda will be determined by matching the providedvaluewith the standard devation ofyhat-y; if the option "relative" is also used, then a relative standard deviation is inferred`"gcv"`

- use generalized cross-validation to determine the optimal value for lambda; if neither "lambda" nor "stdev" options are given, this option is implied
`"lguess",`

value- the initial value for lambda to use in the iterative minimization algorithm to find the optimal value (default = 1)
`"xhat",`

vector- A vector of x-values to use for the smooth curve; must be monotonically increasing and must at least span the data
`"weights",`

vector- A vector of weighting values for fitting each point in the data.
`"relative"`

- use relative differences for the goodnes of fit term. Conflicts with the "weights" option.
`"midpointrule"`

- use the midpoint rule for the integration terms rather than a direct sum; this option conflicts with the option "xhat"
Please run the demos for example usage.

References: Anal. Chem. (2003) 75, 3631; AIChE J. (2006) 52, 325

The following code

npts = 100; x = linspace(0,2*pi,npts)'; x = x + 2*pi/npts*(rand(npts,1)-0.5); y = sin(x); y = y + 1e-1*randn(npts,1); yp = ddmat(x,1)*y; y2p = ddmat(x,2)*y; [yh, lambda] = regdatasmooth (x, y, "d",4,"stdev",1e-1,"midpointrule"); lambda yhp = ddmat(x,1)*yh; yh2p = ddmat(x,2)*yh; clf subplot(221) plot(x,y,'o','markersize',5,x,yh,x,sin(x)) title("y(x)") legend("noisy","smoothed","sin(x)","location","northeast"); subplot(222) plot(x(1:end-1),[yp,yhp,cos(x(1:end-1))]) axis([min(x),max(x),min(yhp)-abs(min(yhp)),max(yhp)*2]) title("y'(x)") legend("noisy","smoothed","cos(x)","location","southeast"); subplot(223) plot(x(2:end-1),[y2p,yh2p,-sin(x(2:end-1))]) axis([min(x),max(x),min(yh2p)-abs(min(yh2p)),max(yh2p)*2]) title("y''(x)") legend("noisy","smoothed","-sin(x)","location","southeast"); %-------------------------------------------------------- % smoothing of monotonic data, using "stdev" to determine the optimal lambda

Produces the following output

lambda = 1

and the following figure

Figure 1 |
---|

The following code

npts = 20; x = rand(npts,1)*2*pi; y = sin(x); y = y + 1e-1*randn(npts,1); xh = linspace(0,2*pi,200)'; [yh, lambda] = regdatasmooth (x, y, "d", 3, "xhat", xh); lambda clf figure(1); plot(x,y,'o','markersize',10,xh,yh,xh,sin(xh)) title("y(x)") legend("noisy","smoothed","sin(x)","location","northeast"); %-------------------------------------------------------- % smoothing of scattered data, using "gcv" to determine the optimal lambda

Produces the following output

lambda = 0.0011140

and the following figure

Figure 1 |
---|

Package: data-smoothing