Я рассматриваю это как проблему минимизации наименьших квадратов. Вы минимизируете норму векторной функции, [f1,f2,...fn]
по отношению к x0
, y0
и r
, где fi(x0,y0,r) = (xi-x0)^2 + (yi-y0)^2 - r^2
. Здесь xi
и yi
представляют ваши данные, и i=1..n
.
Тогда сначала создать векторную функцию
function [ f ] = circle_fun(x0, y0, r, xdata, ydata, n)
f = zeros(n,1);
for i=1:n
f(i) = abs((x0-xdata(i))^2 + (y0-ydata(i))^2 - r^2);
end
end
И использовать наименьших квадратов функцию минимизации MATLAB
f = @(inputs) circle_fun(inputs(1),inputs(2),inputs(3), xdata, ydata, n);
v0 = [0.1, 0.1, 0.1];
[v_opt,resnorm] = lsqnonlin(f,v0);
v0
является начальное предположение и v_opt
вектор решение, которое имеет x0
, y0
, и r
внутри.
У вас есть идеи, как это сделать вручную? Или на любом другом языке? –
Я не знаю, как это сделать вручную, я новичок в matlab – user3177755