Findin asymptotes of data curve
31 次查看(过去 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
0 个评论
采纳的回答
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
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;
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Curve Fitting Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!