2014-02-19 4 views
0

Я хотел бы подогнать кривую ниже с кругом в определенном диапазоне с помощью Matlab. Я хочу подогнать эту кривую от x = 0,1 до x = 0,5 и получить радиус круга.Как подобрать кривую с кругом с матрицей?

Есть ли у вас идеи, как это сделать с помощью Matlab? enter image description here

Заранее спасибо

+0

У вас есть идеи, как это сделать вручную? Или на любом другом языке? –

+0

Я не знаю, как это сделать вручную, я новичок в matlab – user3177755

ответ

1

Я рассматриваю это как проблему минимизации наименьших квадратов. Вы минимизируете норму векторной функции, [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 внутри.

1

Помимо использования the equation for a circle, можно сделать это вручную, путем вычисления среднего центра всех точек в плоскости (х, у), а затем рассчитать среднее расстояние между этим центром и всеми точки.

Смежные вопросы