Bir Uncircularness Skoru Programlayın


15

Göreviniz , 2B düzlemde sboş olmayan bir sonlu Anokta kümesi alan ve s(A)aşağıdaki özellikleri sağlayan dairesel olmayan bir puan veren bir matematiksel fonksiyon programlamaktır :

  1. Olumlu Kesinlik : Tüm noktalarını içeren bir daire veya düz çizgi varsa A, o zaman s(A) = 0. Aksi takdirdes(A) > 0
  2. Duyarlılık: Negatif olmayan gerçek sayılara yöneliktir , yani her negatif olmayan gerçek sayı için düzlemin rsonlu bir altkümesi olduğu anlamına gelir .As(A) = r

  3. Çeviri Değişmezliği: her vektör ve herkes için sçeviri değişmezidir .s(A) = s(A + v)vA

  4. Ölçek Değişmezliği: s eğer s(A) = s(A * t)herkes için t≠0ve her biri için ölçek değişmezdir A.

  5. Süreklilik. fonksiyonun (bir noktayı gerçek bir sayıya eşleme ) gerçek sayılardaki standart mutlak değeri ve düzlemin noktalarındaki standart öklid normu skullanılarak sürekli olması halinde sürekli olduğu söylenir .f(p) := s(A ∪ {p})p

Sezgisel olarak konuşmak gerekirse, bu dairesel olmayanlık puanı doğrusal regresyondaki korelasyon katsayısına benzer bir şey olarak düşünülebilir.

ayrıntılar

Teoride fonksiyonunuz gerçeklerde çalışmak zorundadır, ancak bu meydan okuma için kayan nokta sayılarını yerine kullanabilirsiniz. Lütfen gönderiminizin bir açıklamasını ve bu beş mülkün neden bulunduğunu iddia edin. İki koordinat listesi veya girişlerle ilgili bir tuples listesi veya benzer biçimler alabilirsiniz. Girişteki hiçbir noktanın tekrarlanmadığını varsayabilirsiniz, yani tüm noktalar benzersizdir.


1
Birkaç test örneği ekleyebilir misiniz?
Shaggy

Bir dairenin A'nın tüm noktalarını içermesi ne anlama gelir ?
H.PWiz

@ H.PWiz 2d düzleminin bir alt kümesi olarak bir daire düşünün, bu alt kümenin bir öğesi ise daire içinde bir nokta bulunur.
Kusur

@Shaggy Hayır, çünkü bu sbenzersiz değil. Örnek verebileceğiniz tek şey s(A) = 0, ilk mülkü kullanmak için önemsizdir.
Kusur

Programımız teorik olarak sıfır olasılıkta hata yapabilir mi? (gerçek olasılık sıfır değildir çünkü kayan nokta sayısı ayrıktır) / Kayan nokta belirsizliğinin göz ardı edilmesine izin veriyor musunuz? İlgili meta .
user202729

Yanıtlar:


2

Numpy ile Python 2, 116 bayt

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 ve y'yi 2d sütun vektörleri olarak alır ve yanıtı içeren bir dizi döndürür. Bunun, mükemmel düz bir çizgi için veya 3 veya daha az noktalı boş bir dizi vereceğini unutmayın. Bence mükemmel bir uyum varsa lstsq hiçbir kalıntı vermez.

açıklama

Esasen, bu en uygun çemberi bulur ve kare kalıntılarını alır.

En aza indirmek istiyoruz (x - x_center)^2 + (y - y_center)^2 - R^2. Bu pis ve doğrusal olmayan görünüyor, ama biz bu yeniden yazabilirsiniz x_center(-2x) + y_center(-2y) + stuff = x^2 + y^2nerede, stuffhala pis ve bakımından doğrusal değildir x_center, y_centerve Rfakat bu konuda bakım gerekmez. Böylece çözebiliriz [-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2].

Biz gerçekten R istedik, ancak bu bize çok yardımcı olmaz. Neyse ki, lstsq fonksiyonu bize koşulların çoğunu karşılayan kalıntıları verebilir. Merkezin çıkarılması ve ölçeklendirilmesi (R^2)^2 = R^4 ~ x^4bize çeviri ve ölçek değişmezliği verir.

  1. Bu pozitiftir, çünkü kare kalıntılar negatif değildir ve bir kareye bölünüyoruz. Daireler ve çizgiler için 0'a eğilimlidir, çünkü bir daire takıyoruz.
  2. Kesinlikle emin değilim ama iyi bir bağ kuramıyorum. Bir üst sınır varsa, [0, bağlı) negatif olmayan gerçeklerle (örneğin, 1 / (bağlı - cevap) - 1 / bağlı ile) birkaç bayt için eşleştirebiliriz.
  3. Merkezi çıkarırız, bu yüzden çeviri açısından değişmezdir.
  4. Ölçek bağımlılığını ortadan kaldıran x ** 4'e böleriz.
  5. Sürekli işlevlerden oluşur, bu yüzden süreklidir.

Sunumunuzun gerçekte neyi hesapladığını ayrıntılı olarak açıklayabilir misiniz?
flawr

@flawr Bunu düzenledi.

Bunu t → 0 için {(1, 0), (2, 0), (3, 0), (4, t)} üzerinde test etmeye çalıştım, ancak tüm sıfır olmayanlar için f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))bana veriyorum . (Bunun t = 0 için kırıldığını söylediğini biliyorum, ancak sonuç en az t → 0 için 0'a yaklaşmalıdır.) Yanlış mı çağırıyorum? array([ 0.00925926])t
Anders Kaseorg

2

Python, 124 bayt

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

Alır A karmaşık sayılar (bir dizi olarak x + 1j*y) ve toplar Im ( R ) 2 /2 | r | A'daki dört noktanın tüm karmaşık çapraz oranları için r .

Özellikleri

  1. Olumlu Kesinlik. Tüm terimler negatif değildir ve tüm çapraz oranlar gerçek olduğunda hepsi sıfırdır, bu da noktalar eşdoğrusal veya konik döngü olduğunda gerçekleşir.

  2. Örtenlik. Toplam, birçok puan eklenerek keyfi olarak yapılabileceğinden, süreklilik süreklilikten sonra gelecektir.

  3. Çeviri Değişmezliği. Çapraz oran çeviri-değişmezdir.

  4. Ölçek Değişmezliği. Çapraz oran ölçek değişmezdir. (Aslında, tüm Möbius dönüşümleri altında değişmez.)

  5. Süreklilik. Çapraz oranı genişletilmiş kompleks düzlemine sürekli haritasıdır ve r ↦ Im ( R ) 2 /2 | r | (∞ ↦ 0 ile) genişletilmiş karmaşık düzlemden gerçeklere kadar sürekli bir haritadır.

(Not: Aynı özelliklere sahip teorik olarak daha güzel bir harita , çapraz oranın dört noktasını da içeren kontur çizgileri dairesel olan r ↦ (Im ( r ) / ( C + | r | 2 )) 2'dir . dairesel olmayan bir ölçü, muhtemelen bunu istiyorsunuz.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.