How do I fit a curve ?
2 次查看(过去 30 天)
显示 更早的评论
Hi, I have been trying t fit a curve to the attached data. I tried fitPolynomialRANSAC but didn't get intended result. The data and the output are attached. Here is the code I used.
load data.mat
figure
plot(idx(:,1),idx(:,2),'*');
set(gca,'XAxisLocation','top','YAxisLocation','left','ydir','reverse');
x = idx(:,1);
y = idx(:,2);
N = 2; % second-degree polynomial
maxDistance = 5; % maximum allowed distance for a point to be inlier
[P, inlierIdx] = fitPolynomialRANSAC([x y],N,maxDistance);
yRecoveredCurve = polyval(P,x);
figure
plot(x(inlierIdx),y(inlierIdx),'.',x(~inlierIdx),y(~inlierIdx),'r+')
set(gca,'XAxisLocation','top','YAxisLocation','left','ydir','reverse');
hold on
plot(x,yRecoveredCurve,'-g','LineWidth',1)
hold off
Any help is greatly appreciated.
Edit: Requirement is that the curve should closely follow the point.
采纳的回答
Mathieu NOE
2022-12-8
hello
a cardioid equation may be the solution but I have serious doubts you can fit a polynomial for this shape
as I am lazy and it's already late here , I didn't included any fitting optimisation (if that may work)
load data.mat
y = idx(:,1);
m = max(y);
y = (y-m/2)./(m/2);
x = idx(:,2);
n = max(x);
x = x./n;
% cardioid function
t = linspace(-pi,pi,100);
yc = 0.5*t .* sin( pi * .9*sin(t)./t);
xc = 0.45*abs(t) .* cos(pi * sin(t)./t);
xc = 0.05 +xc - min(xc); % shift x so that min value is zero
figure(1),plot(x,y,'r*',xc,yc,'k','linewidth',2)
4 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interpolation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!