2014-02-19 141 views
0

我想用曲線擬合在一定範圍內的一個圓的曲線波紋。 我想從x = 0,1到x = 0,5擬合這條曲線,並得到圓的半徑。如何用matlab的圓來擬合曲線?

你有什麼想法如何用matlab做到這一點? enter image description here

預先感謝

+0

你有什麼想法如何手動做到這一點?或者用其他語言? –

+0

我不知道如何手動做,我是新的matlab – user3177755

回答

1

我認爲這是最小平方最小化問題。您最小化矢量函數[f1,f2,...fn]相對於x0,y0r的範數,其中fi(x0,y0,r) = (xi-x0)^2 + (yi-y0)^2 - r^2。這裏,xiyi代表您的數據,而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是具有x0y0解向量,和r裏面。

1

除了使用the equation for a circle,人們可以手工通過計算所有點的在(x,y)平面的平均中心,然後計算平均距離該中心和所有之間做點。