How do I fit a curve ?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
SATISH SONWANE
am 8 Dez. 2022
Kommentiert: SATISH SONWANE
am 17 Dez. 2022
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.
Akzeptierte Antwort
Mathieu NOE
am 8 Dez. 2022
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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Interpolation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!