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

10 ビュー (過去 30 日間)
C A 2021 年 6 月 15 日
コメント済み: JJ Lamb 2021 年 6 月 16 日
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 件のコメント表示非表示 2 件の古いコメント
Mathieu NOE 2021 年 6 月 16 日
hello
maybe if you share the code and data I can work on it

サインインしてコメントする。

採用された回答

JJ Lamb 2021 年 6 月 16 日
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 件のコメント表示非表示 1 件の古いコメント
JJ Lamb 2021 年 6 月 16 日
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!

Translated by