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

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?

3 Comments

hello
have you started coding something ?
Yes, I already have a plot. I just need to fit the curve between the two points that I choose, instead of fitting the entire data set.
hello
maybe if you share the code and data I can work on it

Sign in to comment.

 Accepted Answer

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
% Plot your results
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 Comments

Thank you, may I ask why you have used 2 here (yData = myData(x(1):x(2),2)) instead of 1 ?
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));

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2017a

Tags

Asked:

C A
on 15 Jun 2021

Commented:

on 16 Jun 2021

Community Treasure Hunt

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

Start Hunting!