Least Squares Fitting Method with a Circle
68 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi everyone,
Forgive me, I am no expert at MATLAB. I would appreciate it greatly if someone could explain to me the method of nonlinear least squares and how to fit it with a circle of random points. Here's what I have so far:
% radius information-------------------------------------------------------
r = 10; % constant radius
Rc = @(x,y,z) (x.^2 + y.^2 + z.^2).^(1/2); % radius as a function
n = rand(1000,3); % generate random points on nominal circle
xc = n(:,1);
yc = n(:,2); % separate into coordinates
zc = n(:,3);
%--------------------------------------------------------------------------
% angular information------------------------------------------------------
theta = linspace(0,2*pi,1000); % plot bounds
theta = theta';
%--------------------------------------------------------------------------
% generate random radii----------------------------------------------------
R = Rc(xc,yc,zc);
R(:,2) = R(:,1); % same radii in all directions
R(:,3) = R(:,1);
p = n + (r/100)*R; % generate plot points around the circle
figure(1)
polar(theta,Rc(xc,yc,zc))
%--------------------------------------------------------------------------
% Least Squares fitting----------------------------------------------------
e = dist(p,R');
perf = sse(e);
lsqrfit = lsqr(e,Rc(xc,yc,zc),[],1000);
%--------------------------------------------------------------------------
So from what I understand, the residuals (errors) need to be found and then the sum of squares of the residuals need to be found. After that I am not sure where to go. Thanks for all the help.
Ian
2 Commenti
Andrew Newell
il 1 Lug 2011
I'm having trouble figuring out what this code is supposed to be doing. First, the data: are they random points on a circle, or scattered near a circle? Can the center and the radius of the circle vary? What is your fitting criterion? (I would think sum of squares of the distance from the circle would be best).
Risposta accettata
bym
il 2 Lug 2011
Maybe this will help, it is adapted from "measuring the radius of a roll of tape" demo in the image processing toolbox:
r = 5+.5*rand(100,1); %100 random radii
ang = linspace(0,2*pi,100)'; % angles
x = r.*cos(ang)+2; y = r.*sin(ang)+3; % x,y coordinates centered [2,3]
plot(x,y,'+')
axis equal; hold on;
c = [x y ones(length(x),1)]\-(x.^2+y.^2); %least squares fit
xhat = -c(1)/2;
yhat = -c(2)/2;
rhat = sqrt(xhat^2+yhat^2-c(3));
plot(rhat*cos(ang)+xhat,rhat*sin(ang)+yhat,...
'g','linewidth',2) %best fit circle
4 Commenti
Image Analyst
il 11 Apr 2020
For a fixed radius, where would you want the center? At the mean of the point?
xCenter = mean(x);
yCenter = mean(y);
Rajdeep Chowdhury
il 11 Apr 2020
I want a least square type fitting to obtain the center (x,y) when the radius is predefined.
Più risposte (2)
Vedere anche
Categorie
Scopri di più su Surface and Mesh Plots in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!