我一直在阅读一些方法来使圆圈适合数据(像这样).我想看看这些方法如何处理真实数据以及为此使用R的想法.我试着在rseek上搜索可以帮助解决这个问题的软件包,但是却找不到任何有用的东西.
那么,是否有包可以帮助轻松计算给定数据集的最佳拟合圆(类似于lm()线性模型如何适应数据集)?否则,如何在R中执行这样的任务?
这是一个相当天真的函数实现,它最小化了该论文中的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)

请注意,它不使用渐变,也不检查收敛的错误代码.您可以为其提供初始值,也可以猜测.
| 归档时间: |
|
| 查看次数: |
2667 次 |
| 最近记录: |