help-octave
[Top][All Lists]

## Re: Smooth line approximating minima of a data series

 From: Matthias Brennwald Subject: Re: Smooth line approximating minima of a data series Date: Wed, 24 Feb 2010 20:04:09 +0100

```On Feb 24, 2010, at 5:29 PM, Carlo de Falco wrote:

>
> On 24 Feb 2010, at 13:12, Matthias Brennwald wrote:
>
>>
>> On Feb 24, 2010, at 10:38 AM, Carlo de Falco wrote:
>>
>>> 2010/2/24 Matthias Brennwald <address@hidden>:
>>>> Dear all
>>>>
>>>> Consider a series of data values that reflect a smooth function (e.g.
>>>> a low-degree polynomial), but there might be additional features in
>>>> the data (e.g. narrow peaks or noise). I'd like to fit a polynomial to
>>>> this data, whereby this polynomial reflects a smooth approximation of
>>>> the minima of the raw data (I call this the "base line"). The
>>>> following might help to illustrate what I'm trying to accomplish:
>>>>
>>>>   x = [-1:0.01:1]; % x-axis values
>>>>   p = [-3 2 1 0]; yp = polyval (p,x); % make up a polynomial
>>>> reflecting the "base line" for illustration
>>>>   y = yp + rand(size(x)); % this would be the raw data
>>>>   plot (x,y,x,yp); legend ('raw data','base line') % plot the raw
>>>> data and the polynomial for illustration
>>>>
>>>> Has anyone an idea of how to accomplish this? Are there standard
>>>> methods? I'd appreciate any hints.
>>>>
>>>> Thanks
>>>> Matthias
>>>>
>>>
>>> does this do what you want?
>>>
>>> x = [-1:0.01:1];
>>> p = [-3 2 1 0]; yp = polyval (p,x)
>>> y = yp + randn(size(x));
>>> plot (x,y,x,yp);
>>> yy = polyfit (x, y, 4)
>>> plot (x, polyval (yy, x), x, y, x, yp)
>>
>> No, this is not what I'm after. I am looking for a polynomial (or some other
>> smooth function) that tracks the (local) minima of the data series (as in
>> the plot of my original example). The polyfit function returns a polynomial
>> wich minimizes the sum of the squares of the residuals relative to each of
>> the the data points. In contrast to this, I would like to do the
>> minimization such that each residuals is positive, i.e. polynomial values
>> never exceed the the values in the data series.
>>
>> Matthias
>
> what about the following:
> x = [-1:0.01:1];
> p = [-3 2 1 0]; yp = polyval (p,x);
> y = yp + rand(size(x));
> plot (x, y)
>
> vref = 1e-4;
> v1   = @(t) interp1 (x, y, t, "nearest");
>
> fun = @(v2, v2dot, t) v2dot - max ((v1(t)-v2)/vref, -10);
> yf  = daspk (fun, y(1), 0, x);
>
> plot (x, y, x, yf, x, polyval (polyfit (x(:), yf(:), 4), x))
>
> this actually traces (approximately) the maxima rather than minima but the
> modifications are trivial
> c.

Neat! I do not (yet) understand completetly how it works, but the results sure
looks good.

Matthias

----
Matthias Brennwald, Käferholzstrasse 173, CH-8046 Zürich, +41 44 364 17 03

```

reply via email to