Fitting data with two peaks
조회 수: 48 (최근 30일)
이전 댓글 표시
Hi
I have some data, which is not too different from the top graph in this picture: <http://www.aanda.org/index.php?option=com_image&format=raw&url=/articles/aa/full/2004/12/aa0526/img14.gif>
In other words, there are two peaks that each represent a Lorentzian. I am not sure how to fit this in MatLAB. Is there a way to fit the data to one function consisting of two Lorentzians, or do I have to split the data set in two, one peak in each?
Ultimately I need to find the x-position of each peak.
Best, Niles.
댓글 수: 1
Enrique
2014년 7월 30일
Niles,
Did you ever figure out how to do this and/or implement any of the solutions suggested below? I am trying to fit two Lorentzians to similar Raman data as yours (is yours a graphene Raman spectrum as well?). In the past I have done this using a single Lorentzian fitting function I found ( Lorentzian Function Fit lorentzfit), but have not tried to implement two Lorentzians. Any suggestion would help a lot.
Thanks,
Enrique
답변 (5개)
Geoff
2012년 6월 4일
Define a function that accepts the parameters of the two lorenzian curves and computes the full curve.
I don't know how many parameters you need cos I'm no mathematician =) Let's say 2?
dualLorentz = @(x, a1, b1, a2, b2) = lorenz(x, a1, b1) + lorenz(x, a2, b2);
Then, define a function to generate that curve, subtract your actual dataset, square the result and sum it.... While you're at it, parameterise the whole thing (ie a vector p of [a1, b1, a2, b2])
objFn = @(p, x, y) sum( (y - dualLorentz(x, p(1), p(2), p(3), p(4))) .^ 2 );
Then chuck it at fsolve or fminsearch - assuming your dataset is in X and Y:
p0 = % some initial guess at a1, a2, b1, b2 : you can probably be very basic
p = fsolve( @(p) objFn(p, X, Y), p0 );
댓글 수: 0
Ryan
2012년 6월 4일
편집: John Kelly
2015년 3월 2일
You could get a close approximation of peak position with a cubic spline fit and local maxima. You could also try just smoothing the data first as well and then finding the maxima.
Cubic Spline:
댓글 수: 0
Frederic Moisy
2012년 6월 7일
Hi, you can try the Ezyfit toolbox:
In particular, there is an example with two peaks (here fitted with the sum of 2 gaussian curves):
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Interpolation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!