MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: How to get the maximums of a curve

  • To: mathgroup at
  • Subject: [mg66885] Re: [mg66855] Re: How to get the maximums of a curve
  • From: Clifford Martin <camartin at>
  • Date: Fri, 2 Jun 2006 04:09:32 -0400 (EDT)
  • Sender: owner-wri-mathgroup at

One of the nicest ways to smooth data (besides orthogonal polynomials)  is Lanczos' fourth differences method in his Applied Analysis (Dover),  page 316. A nice Mathematica program of this method is given in  Mathematica in the Laboratory by Dick, This function can be  nested for good smoothing of noisy data. I find it quite useful. Once  you've done this Bill is right, Solve should work.  Good luck.
  Sorry I didn't reply to the original post. I lost it.

Bill Rowe <readnewsciv at> wrote:  On 5/31/06 at 6:31 AM, yanshanguke at (simon yang) wrote:

>Dear everyone, I meet a trouble when try to get the maximums of an
>oscillating curve which is data get from physics experiment. There
>is a lot of noise in the curve, so cannot get the maximums by solve:
>derivative ==0, Then how should I do?

Most  likely, the first thing you need to do is reduce or eliminate the noise  component in the data. There are a number of possible ways to  reduce/eliminate noise depending on what you know. If you know the  underlying model then using FindFit to estimate parameters to the  underlying model is a possibility. Once this is done, it should be  possible to solve: derivative == 0 for the model with the parameters  found by FindFit.

However, you indicated the curve you are  expecting is oscillating. So, it may not be feasible to use FindFit,  particularly if the signal to noise ratio is poor.

Another  approach would be to use FFT based techniques. The assumption here is  the noise component will be located primarily in the high frequency  area of the signal plus noise. Essentially you do an FFT on the data,  filter the result with a low pass filter then do an inverse FFT. At  this point, you can construct an InterpolatingFunction and look for  local maximums. Using FFTs effectively in this manner assumes more than  a handful of data points and some knowledge of the maximum frequency  expected to occur in the signal. 

Another approach would be to  use wavelet based techniques to filter the noise. These approaches need  as much data as FFT based techniques to be effective. But they don't  require assumptions about the maximum frequency present in the signal.

For  fewer data points you might try one of the functions in the package  Statistics`DataSmoothing`. MovingMedian is particularly effective if  the source of the noise is random impulses.

There are other  non-parametric regression techniques that can be used with just a few  data points. But I am not aware of an existing Mathematica package that  implements these other than one I've created for myself.
To reply via email subtract one hundred and four

  • Prev by Date: Re: Defining N for a new entity
  • Next by Date: Re: Using Notebooks to write packages?
  • Previous by thread: Re: How to get the maximums of a curve
  • Next by thread: Problem with the Sum Function -- Using a Benford Distribution