编程非圆度分数


15

您的任务是编写一个数学函数s,该函数A在2D平面中采用一组非空的有限点,并输出s(A)满足以下属性的非圆度分数:

  1. 正定性:如果有一个包含所有点的圆或直线A,则s(A) = 0。除此以外s(A) > 0
  2. 排斥性:它对非负实数是排斥的,这意味着对于每个非负实数,平面r的有限子集A使得s(A) = r

  3. 平移不变性: s如果s(A) = s(A + v)对于每个向量v和所有,则平移不变A

  4. 标度不变性: s是尺度不变,如果s(A) = s(A * t)每一个t≠0和所有A

  5. 连续性。 s被说成是连续的,如果函数f(p) := s(A ∪ {p})(映射的点p到的实数)是连续使用的实数的标准绝对值,并且在该平面的各点的标准欧几里得范数。

直观地讲,这种非圆度得分可以认为与线性回归中的相关系数相似。

细节

理论上,您的函数必须在实际中起作用,但是出于此挑战的目的,您可以使用浮点数代替。请提供您提交的内容的解释,并说明这五个属性为何成立。您可以将两个坐标列表或一个元组或类似格式的列表作为输入。您可以假设输入中没有点重复,即所有点都是唯一的。


1
您可以添加一些测试用例吗?
毛茸茸的

圆包含A的所有点是什么意思?
H.PWiz

@ H.PWiz将圆视为2d平面的子集,如果一个点是该子集的元素,则该圆中包含一个点。
瑕疵

@Shaggy不行,因为s它不是唯一的,所以不可能。您唯一可以做示例的事情s(A) = 0就是使用first属性轻松做到这一点。
瑕疵

从理论上讲,我们的程序可以出错的概率为零吗?(由于浮点数是离散的,所以实际概率为非零)/是否允许忽略浮点不精确度?相关元
user202729 '17

Answers:


2

带有numpy的Python 2,116个字节

from numpy import*
def f(x,y):a=linalg.lstsq(hstack((x,y,ones_like(x))),(x*x+y*y)/2);return a[1]/sum((x-a[0][0])**4)

将x和y作为2d列向量,并返回包含答案的数组。请注意,这将为一个完美的直线或具有3个或更少点的空数组。我认为,如果合适,lstsq不会遗留任何残差。

说明

本质上,这将找到最合适的圆并获得平方残差。

我们要最小化(x - x_center)^2 + (y - y_center)^2 - R^2。它看起来肮脏和非线性的,但我们可以重写为x_center(-2x) + y_center(-2y) + stuff = x^2 + y^2,其中stuff仍是肮脏和来讲非线性x_centery_centerR,但我们不需要去关心它。这样我们就可以解决了[-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2]

然后,如果我们确实愿意,可以撤消R,但这对我们没有太大帮助。值得庆幸的是,lstsq函数可以为我们提供残差,它可以满足大多数条件。减去中心并按比例缩放(R^2)^2 = R^4 ~ x^4可得出平移不变和比例不变。

  1. 这是正定的,因为残差平方是非负的,并且我们用平方除。对于圆和直线,它趋向于0,因为我们正在拟合一个圆。
  2. 我相当确定这不是排斥性的,但我不能很好地把握住。如果有上限,我们可以将[0,bound]映射到非负实数(例如,使用1 /(bound-answer)-1 / bound)更多字节。
  3. 我们减去中心,所以它在翻译上是不变的。
  4. 我们除以x ** 4,这消除了比例依赖性。
  5. 它由连续的功能组成,因此是连续的。

您能否详细说明您的细分实际上是在计算什么?
瑕疵

@flawr编辑的英寸

我试图在{(1,0),(2,0),(3,0),(4,t)}上针对t→0进行测试,但是f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))似乎给了我array([ 0.00925926])所有非零值t。(我知道您说这会中断t = 0,但对于t→0,结果至少应接近0。)我是否称错?
Anders Kaseorg

2

Python,124个字节

lambda A:sum(r.imag**2/2**abs(r)for a in A for b in A for c in A for d in A if a!=d!=b!=c for r in[(a-c)*(b-d)/(a-d)/(b-c)])

注意到为复数(序列x + 1j*y),并总结IM([R 2 /2 | r | 对于所有复杂的交比[R的四点

物产

  1. 正定性。所有项都是非负的,并且当所有交叉比率均为实时,它们全都为零,这在点是共线或同线时发生。

  2. 排斥性。由于总和可以通过增加许多点而任意增大,因此连续性会产生排斥。

  3. 翻译不变性。交叉比率是平移不变的。

  4. 尺度不变性。交叉比率是比例不变的。(实际上,在所有Möbius变换下它都是不变的。)

  5. 连续性。横比是连续映射到扩展复平面,和- [R ↦IM([R 2 /2 | r | (∞↦0)是从扩展复平面到实数的连续映射。

(注意:理论上漂亮具有相同属性的地图是- [R ↦(IM([R)/(ç + | - [R | 2))2,它的轮廓线WRT交比的所有四个点是圆形如果实际需要。一种非圆形度的度量,您可能想要那个。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.