How can I extract X and Y from gauss2 fit or any other fit (poly2, poly 3, ...)?

19 次查看(过去 30 天)
Hello,
I have a txt data and I want to fit this data in other to calculate de beam radius of this gaussian plot but I dont know how can i have the X and Y of the fit. My code is:
% scan the column until end1 and saves the Y and E
for h = end1(loop):-1:lastpoints1
for f = 1:numfiles
E2 = E(:,f);
Y2 = Y(:,f);
gaussfit = fit(Y2,E2,'gauss2');
%I need to have the new Y and X (or E) to use the condition "if" below:
% if NEW_E(h,:) >= m(f)
% x(h,f) = NEW_Y(h,f);
% y(h,f) = NEW_E(h,f);
% end
end
end
You can see that everything is inside a loop. This is because I have more than one file to do the same thing: extract the X and Y of each file, fit, extract the new X and Y and scan until the condition "if" is true and save the value X and Y when the condition "if" is true.
I would be very grateful if someone knew how to extract the X and Y from the fit.
I tested the fit and it is enough for what I need but I don't know how to get the curve in an array or matrix.
Many thanks.

采纳的回答

Adam Danz
Adam Danz 2020-8-17
编辑:Adam Danz 2020-8-20
The fit function merely fits your pre-existing (x,y) values and returns a fitobject that contains parameter values you can use to plot the function. There are no other x or y values other than the ones you provided to the fit function.
You can create any set of x values and compute the y values from the fitobject.
Or, you can plot the fitobject and let Matlab create and x and y values of the fitted line and then extract them.
Here's how to do both.
Option 1: Create any set of X values, then compute Y
Pros
  • Flexibility; you can choose any range of X values and at any interval.
  • No need to plot the the data if you don't need to.
  • You'll learn more using this method.
% Load built-in dataset
load census;
% Fit quadratic polynomial
f=fit(cdate,pop,'poly2');
% Plot the raw data (if you want to)
clf()
plot(cdate,pop, '.')
% Create x values using the min & max of the existing data
X = linspace(min(cdate),max(cdate),100);
% Compute the Y values. The function to use is defined by the fitobject output.
% f =
% Linear model Poly2:
% f(x) = p1*x^2 + p2*x + p3 % <----------------- HERE
% Coefficients (with 95% confidence bounds):
% p1 = 0.006541 (0.006124, 0.006958)
% p2 = -23.51 (-25.09, -21.93)
% p3 = 2.113e+04 (1.964e+04, 2.262e+04)
%
% Or you can look it up here
% https://www.mathworks.com/help/curvefit/list-of-library-models-for-curve-and-surface-fitting.html#btbcvnl
% Or you can get it from the formula(f) command.
coefs = coeffvalues(f);
Y = coefs(1)*X.^2 + coefs(2)*X + coefs(3);
% Plot Curve (if you want to)
hold on
plot(X,Y, 'r-')
Option 2: Plot the fit, then grab the (X,Y) values Matlab chose
Pros
  • Matlab does the heavy lifting.
  • Less room for user error.
% Load built-in dataset
load census;
% Fit quadratic polynomial
f=fit(cdate,pop,'poly2');
% Plot the raw data & fit
h = plot(f,cdate,pop);
% Get the handle to the fitted curve
curveHandle = findobj(h,'DisplayName', 'fitted curve');
% Get the X and Y values Matlab chose
X = curveHandle.XData;
Y = curveHandle.YData;
  7 个评论
Tay
Tay 2020-8-24
I'm sorry for the long text. I tried to explain it correctly. I hope you understand..
Thank you very much in advance !!
Adam Danz
Adam Danz 2020-8-24
编辑:Adam Danz 2020-8-24
Those variable names make it really confusing to follow.
It sounds like you're trying to find the two x-coordinates where the curve intersects with the line at y=ymax*0.37. Of course you could solve for y, knowing the function and the x-inputs.
Alternatively, you could very closely approximate the intersections using the intersections function from the file exchange.
[x0,y0] = intersections(x,y, [min(xlim),max(xlim)], ymax*0.37*[1,1]);
where x and y are the coordinates used to plot the curve and xlim is Matlab's xlim() function.
Then, plot the results for confirmation
hold on
plot(x0,y0, 'm*')
yline(ymax*0.37)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear and Nonlinear Regression 的更多信息

产品


版本

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by