如何使用R找到最合适的圆/椭圆?

mau*_*una 3 r best-fit-curve

我一直在阅读一些方法来使圆圈适合数据(像这样).我想看看这些方法如何处理真实数据以及为此使用R的想法.我试着在rseek上搜索可以帮助解决这个问题的软件包,但是却找不到任何有用的东西.

那么,是否有包可以帮助轻松计算给定数据集的最佳拟合圆(类似于lm()线性模型如何适应数据集)?否则,如何在R中执行这样的任务?

Spa*_*man 6

这是一个相当天真的函数实现,它最小化了该论文中的SS(a,b,r):

fitSS <- function(xy,
                  a0=mean(xy[,1]),
                  b0=mean(xy[,2]),
                  r0 = mean(sqrt((xy[,1]-a0)^2 + (xy[,2]-b0)^2)),
                  ...){
    SS <- function(abr){
        sum((abr[3] - sqrt((xy[,1]-abr[1])^2 + (xy[,2]-abr[2])^2))^2)
    }
    optim(c(a0,b0,r0), SS, ...)
}
Run Code Online (Sandbox Code Playgroud)

我写了几个支持函数来生成圆圈上的随机数据并绘制圆圈.因此:

> xy = sim_circles(10)
> f = fitSS(xy)
> plot(xy,asp=1,xlim=c(-2,2),ylim=c(-2,2))
> lines(circlexy(f$par))
Run Code Online (Sandbox Code Playgroud)

点和拟合圆

请注意,它不使用渐变,也不检查收敛的错误代码.您可以为其提供初始值,也可以猜测.