Centre X-Y data so that the highest value of Ys is at the centre of X. And then average the curve to fit into gaussian.

1 view (last 30 days)
Hello, I have X-Y data of a curves (one coloumn for X and 4 columns for Y). I want to centre the Y data so that the highest value of Y gets to the centre of X. Right now the curves are haphazurd and I ant to make to symmetrical. I also want to fit the average of the curves into a gaussian profile.
Any help is greatly appreciated.
  1 Comment
Matt J
Matt J on 11 Nov 2022
Moved: Matt J on 11 Nov 2022
I think it would be better just to fit a gaussian (e.g. using fit) to each pair (X,Y(:,i)). Then the fitted mean in each column would tell you were the maximum should be.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 11 Nov 2022
Edited: Matt J on 11 Nov 2022
Using gaussfitn from this FEX download,
you can do a simultaneous fit of all the columns:
[X,Y{1:4}]=readvars('X-Y.xlsx'); Y=cell2mat(Y); Y=Y(:);
t0=fminsearch( @(t)objfunc(t,X,Y) ,zeros(1,4) );
[~,dX,p]=objfunc(t0,X,Y);
f=@(x) p{1} + p{2}*exp( -0.5 * (x-p{3}).^2/p{4} ); %fitted Gaussian
[dX,is]=sort(dX);
Y=Y(is);
plot(dX,Y,'x',dX,f(dX)); shg
function [fval,dX,params]=objfunc(t,X,Y)
dX=X-t(:).'; dX=dX(:);
[params,fval]=gaussfitn(dX,Y,[],[],[],'Display','off');
end

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!