我想用matlab将曲线在一定范围内用圆圈拟合。 我想将这条曲线从x = 0,1拟合到x = 0.5,并得到圆的半径。
你有什么想法如何用matlab做到这一点?
提前致谢
答案 0 :(得分:1)
除了使用the equation for a circle之外,还可以通过计算(x,y)平面中所有点的平均中心,然后计算该中心与所有点之间的平均距离来手动完成。
答案 1 :(得分: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
的解决方案向量。