Findin asymptotes of data curve

21 次查看(过去 30 天)
Hello everyone !
I'm trying to make a code finding the 2 asymptotes (zero and + infinity) of curve made of data points (so I don't know the theoretical function, and even if I can guess it, this is not the point). Basically, there is a linear asymptote in zero and a constant one in the other side (see pictures).
As you can see, the shape isn't exactly the same, and I would like to find the slope of the first linear part, and the constant at the infinity. Basically, if I can find the point where these two asymptotes are crossing, it's fine. I could use a derivative method but since the slope is very small, the noise in the raw datas is too strong (see next picture).
Any ideas ? I have a lot of these curves so I can't find these 2 asymptotes myself for all.
Thank you !
GADAL Cyril

采纳的回答

Image Analyst
Image Analyst 2016-6-7
How about if you find out when the data first exceeds the last point, and then fit from then on (basically the flat, right portion of the data) to a line?
firstIndex = find(y > y(end), 1, 'first');
coefficients = polyfit(x(firstIndex:end), y(firstIndex:end), 1);
  3 个评论
Image Analyst
Image Analyst 2016-6-7
One or two data points won't significantly change the slope of the fitted line. However if you want, you can take only indexes within +/- std dev of the line
firstIndex = find(y > y(end), 1, 'first');
theMean = mean(y(firstIndex:end));
theSD = std(y(firstIndex:end));
someFactor = 1.5; % Whatever you want.
indexesToUse = abs(y-theMean) > someFactor * theSD;
coefficients = polyfit(x(indexesToUse), y(indexesToUse), 1);
% Fit the line
fittedY = polyval(coefficients, x);
hold on
plot(x, fittedY, 'r-', 'LineWidth', 3);
grid on;
Cyril GADAL
Cyril GADAL 2016-6-8
编辑:Cyril GADAL 2016-6-8
You're right, it doesn't change a lot, but using the standard deviation allow me indeed ton control a bit more the process.
Can you explain me a bit more this syntax I've never seen in matlab :
indexesToUse = abs(y-theMean) > someFactor * theSD;
Where there is by the way a small mistake and should be :
indexesToUse = abs(y-theMean) < someFactor * theSD;
Thanks a lot !

请先登录,再进行评论。

更多回答(0 个)

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by