非円形性スコアをプログラムする


15

あなたのタスクは数学関数をプログラムすることです。これは、2D平面内のs空ではない有限Aの点集合を取り、s(A)次の特性を満たす非円形性スコアを出力します。

  1. 正定性:のすべての点を含む円または直線があるA場合s(A) = 0。さもないとs(A) > 0
  2. 単射性:非負の実数の単射です。つまり、すべての非負の実数に対して、などの平面のr有限サブセットが存在As(A) = rます。

  3. Translation Invariance: すべてのベクトルおよびall sに対して、翻訳不変です。s(A) = s(A + v)vA

  4. スケール不変性: すべておよびすべてのs場合s(A) = s(A * t)、スケール不変です。t≠0A

  5. 連続。 関数(実数へのa点のマッピング)が実数の標準絶対値と平面の点の標準ユークリッドノルムを使用して連続している場合、連続sと言われます。f(p) := s(A ∪ {p})p

直感的に言えば、この非円形性スコアは、線形回帰の相関係数に似たものと考えることができます。

詳細

理論上の関数は実数で動作する必要がありますが、この課題の目的のために、浮動小数点数を代用として使用できます。提出の説明と、これら5つのプロパティが保持される理由を説明してください。入力として、座標の2つのリスト、またはタプルまたは同様の形式のリストを使用できます。入力内のポイントは繰り返されない、つまりすべてのポイントが一意であると想定できます。


1
いくつかのテストケースを追加してもらえますか?
シャギー

円がAのすべての点を含むとはどういう意味ですか?
H.PWiz

@ H.PWiz円を2d平面のサブセットと考えてください。このサブセットの要素である場合、点は円に含まれます。
flawr

@Shaggyいいえ、s一意ではないため不可能です。あなたが例を作ることができる唯一のものs(A) = 0は、最初のプロパティを使用して行うのは簡単です。
flawr

私たちのプログラムは理論的にゼロの確率でエラーアウトできますか?(浮動小数点数が離散的であるため、実際の確率はゼロではありません)/浮動小数点の不正確さを無視できますか?関連するメタ
user202729

回答:


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

編集@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に近づくはずです。)私はそれを間違って呼び出していますか?
アンデルスカセオルグ

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)])

かかるAを(複素数のシーケンスとしてx + 1j*y)、およびIM(合算R2 /2 | r | すべての複雑な相互比率のためにrの内の4つの点のA

プロパティ

  1. 正定性。すべての項は非負であり、すべての交差比率が実数である場合は正確にすべてゼロになります。これは、ポイントが共線または共環である場合に発生します。

  2. 単射性。多くのポイントを追加することで合計を任意に大きくすることができるため、連続性から全射が続きます。

  3. 翻訳不変性。クロスレシオは並進不変です。

  4. スケール不変性。クロスレシオはスケール不変です。(実際、すべてのメビウス変換の下で不変です。)

  5. 連続。クロス比が拡張複素平面に連続マップであり、そしてR ↦IM(R2 /2 | r | (∞↦0を使用)は、拡張複素平面から実数までの連続したマップです。

(注:Aと同じ特性を有する理論的にきれいマップであるR ↦(IM(R)/(C + | R | 2))2、その輪郭線のクロス比のすべての4つの点が円形であるWRTあなたが実際に必要な場合。非円形性の尺度、おそらくそれが必要です)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.