# Extract data using ginput and fit with a formula of your choice

2 views (last 30 days)
Chathuddasie Amarasinghe on 15 Jun 2021
Commented: JJ Lamb on 16 Jun 2021
I am choosing two end points using ginput [x,y] = ginput(2) and then I need to separate my data set which lies between the two end points. The separated data set must be fitted into the following formula.
y(1)*exp(-(x-x(1))/T)+y(2)
y(1),x(1),y(2) are the values taken from ginput. T is a parameter that I need to determine.
How can be done?
Mathieu NOE on 16 Jun 2021
hello
maybe if you share the code and data I can work on it

JJ Lamb on 16 Jun 2021
I'm going to say that the input data for the graph is in a 2 column vector called "myData"
[x,y] = ginput(2);
% assuming you need points based on where you clicked on the x axis
xData = myData(x(1):x(2),1);
yData = myData(x(1):x(2),2);
myFun = @(T,x) y(1)*exp(-(x-x(1))/T)+y(2); % copied your function
TT = lsqcurvefit(myFun,1,xData,yData); % TT is the result of the curvefit
% the second input 1 is just an initial guess.
% might need to adjust it to a more reasonable starting point for your data
figure
plot(xData,yData,'rx'); % original data
hold on
xx = min(xData):max(xData)-min(xData)/100:max(xData); % dummy variable for plotting
plot(xx,myFun(TT,xx),'b')
##### 2 CommentsShowHide 1 older comment
JJ Lamb on 16 Jun 2021
I assumed that the y data was in the second column. Column 1 is x data, column 2 is y data. You may have them in separate variables already, in that case you would just need:
xData = oldX(x(1):x(2));
yData = oldY(x(1):x(2));

R2017a

### Community Treasure Hunt

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

Start Hunting!