【发布时间】:2012-06-05 07:09:55
【问题描述】:
给定y轴(s)缩放和x轴(t)平移的参数,当目的是最大化曲线叠加(而不是最小化距离)时,如何缩放和对齐两条不重合的曲线?
正如@DWin 所指出的,这可以重新命名为“如何用 R 完美玩俄罗斯方块”,尽管它的应用远远超出了赢得俄罗斯方块游戏的范围。
这个问题的变体可能涉及任意数量的刚体变换(旋转、平移和缩放)。
给定曲线 1
curve1<-data.frame(x=c(1,1,2,2,3),
y=c(9,6,6,3,3))
with(curve1, plot(x=x, y=y, type="l", xlim=c(0,10), ylim=c(0,10)))
和曲线 2
curve2<-data.frame(x=c(4,5,5,6,6,7),
y=c(2,2,1,1,2,3))
with(curve2, plot(x=x, y=y, type="l", xlim=c(0,10), ylim=c(0,10)))
我希望找到使两条曲线之间的叠加最大化的 s 和 t。
理想情况下,该方法将在 R 中使用 optim。
在这个组成的例子中,t=3 和 s=1/3,所以
t=3
s=1/3
with(curve2, plot(x=x, y=y, type="l", xlim=c(0,10), ylim=c(0,10)))
with(curve1, lines(x=x+t, y=y*s, col="red"))
请注意,要获得这样的拟合,可以有共识的区域必须比不能叠加的区域具有更高的参数化权重,并且共识区域越大,权重越高。
我一直在探索的足迹:
使用最大似然法的加分(假设误差为正态分布)。
【问题讨论】:
-
嗯。一个有趣的问题。需要考虑的一件事是,似乎需要做一些事情来避免病理结果。具体来说,局部最优可能是您大规模放大一个形状的情况,因此将所有内容都拟合到直线的一部分......
-
对如何执行此操作有想法,但有一个简短的问题。假设这两个形状是计算器风格的“5”(即五个相等的水平/垂直线段连接在一起形成“5”形状 - 你肯定明白我的意思)和垂直线段(又名计算器风格“1”)。在这里,我想检查您是否认为最好的解决方案是 100% 重叠的(即第二个形状与第一个形状的垂直部分完全重叠)。换句话说,第一个形状的大部分都未被覆盖,并且与第二个形状相距甚远,这并不重要,对吧?
-
所以我设法想出了一个有趣的方法来检测精确的叠加 - 但是指定问题的方式我认为你不可避免地会遇到局部最小值的问题,而你没有想远离。请问您是否认为(根据您要解决的任何问题)整个形状 1 可以叠加到形状 2 上?
-
@TimP,形状 1 和 2 之间的重叠量是任意的。有时,如您所指出的,第一个形状会完全适合第二个形状。
标签: r geometry curve-fitting curve