Programmieren Sie einen Unrundheitswert

15

Ihre Aufgabe ist es, eine mathematische Funktion zu programmieren s, die eine nicht leere endliche Menge Avon Punkten in der 2D-Ebene verwendet und eine Unrundheitsbewertung ausgibt s(A), die die folgenden Eigenschaften erfüllt:

  1. Positive Bestimmtheit : Wenn es einen Kreis oder eine gerade Linie gibt, die alle Punkte von enthält A, dann s(A) = 0. Andernfallss(A) > 0
  2. Surjektivität: Es ist für die nichtnegativen reellen Zahlen surjektiv, dh für jede nichtnegative reelle Zahl rgibt es eine endliche Teilmenge Ader Ebene, so dass s(A) = r.

  3. Übersetzungsinvarianz: s Ist die Übersetzungsinvarianz s(A) = s(A + v)für jeden Vektor vund für alle A.

  4. Maßstabsinvarianz: s ist skaleninvarianten, wenn s(A) = s(A * t)für jeden t≠0und für alle A.

  5. Kontinuität. swird als stetig bezeichnet, wenn die Funktion f(p) := s(A ∪ {p})(Abbildung des a-Punkts pauf eine reelle Zahl) stetig ist, wobei der Standardabsolutwert für die reellen Zahlen und die euklidische Standardnorm für die Punkte der Ebene verwendet werden.

Intuitiv kann man sich diese Unrundheitsbewertung als etwas vorstellen, das dem Korrelationskoeffizienten in der linearen Regression ähnlich ist.

Einzelheiten

Ihre theoretische Funktion muss im Real funktionieren, aber für diese Aufgabe können Sie Gleitkommazahlen als Ersatz verwenden. Bitte erläutern Sie Ihre Übermittlung und begründen Sie, warum diese fünf Eigenschaften zutreffen. Sie können zwei Listen mit Koordinaten oder eine Liste mit Tupeln oder ähnlichen Formaten als Eingabe verwenden. Sie können davon ausgehen, dass kein Punkt in der Eingabe wiederholt wird, dh alle Punkte sind eindeutig.

fehlerhaft
quelle
1
Könnten Sie ein paar Testfälle hinzufügen?
Shaggy
Was bedeutet es für einen Kreis, alle Punkte von A zu enthalten ?
H.PWiz
@ H.PWiz Betrachtet man einen Kreis als Teilmenge der 2d-Ebene, so ist der a-Punkt im Kreis enthalten, wenn er ein Element dieser Teilmenge ist.
Fehler
@Shaggy Nein, das ist nicht möglich, da ses nicht eindeutig ist. Das einzige, wofür Sie Beispiele anführen könnten, ist s(A) = 0die Verwendung der ersten Eigenschaft.
Fehler
Kann unser Programm mit theoretisch null Wahrscheinlichkeit ausfallen? (Die tatsächliche Wahrscheinlichkeit ist ungleich Null, da die Gleitkommazahl diskret ist.) / Erlauben Sie, dass Gleitkommaungenauigkeiten ignoriert werden? Relevante Meta .
user202729

Antworten:

2

Python 2 mit Numpy, 116 Bytes

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)

Nimmt x und y als 2D-Spaltenvektoren und gibt ein Array mit der Antwort zurück. Beachten Sie, dass dies ein leeres Array für eine perfekt gerade Linie oder mit 3 oder weniger Punkten ergibt. Ich denke, LSTSQ gibt keine Residuen, wenn es eine perfekte Passform gibt.

Erläuterung

Im Wesentlichen findet dies den Kreis der besten Anpassung und erhält die quadratischen Residuen.

Wir wollen minimieren (x - x_center)^2 + (y - y_center)^2 - R^2. Es sieht böse und nicht - lineare, aber wir können umschreiben , dass wie x_center(-2x) + y_center(-2y) + stuff = x^2 + y^2, wo das stuffnoch böse und nicht - lineare in Bezug auf ist x_center, y_centerund R, aber wir haben nicht darüber brauchen zu kümmern. Also können wir einfach lösen [-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2].

Wir könnten dann R rausholen, wenn wir es wirklich wollten, aber das hilft uns hier nicht viel. Glücklicherweise kann uns die lstsq-Funktion die Residuen geben, was die meisten Bedingungen erfüllt. Das Subtrahieren des Zentrums und das Skalieren durch (R^2)^2 = R^4 ~ x^4ergibt eine Translations- und Skaleninvarianz.

  1. Dies ist definitiv positiv, da die quadratischen Residuen nicht negativ sind und wir durch ein Quadrat teilen. Bei Kreisen und Linien tendiert sie gegen 0, weil wir einen Kreis einpassen.
  2. Ich bin mir ziemlich sicher, dass es nicht surjektiv ist, aber ich kann keine gute Bindung bekommen. Wenn es eine obere Grenze gibt, können wir [0, gebunden) den nichtnegativen Realwerten (zum Beispiel mit 1 / (gebunden - Antwort) - 1 / gebunden) für einige weitere Bytes zuordnen.
  3. Wir subtrahieren das Zentrum, so dass es translatorisch invariant ist.
  4. Wir dividieren durch x ** 4, wodurch die Skalenabhängigkeit beseitigt wird.
  5. Es besteht aus kontinuierlichen Funktionen, also ist es kontinuierlich.

quelle
Können Sie erläutern, was Ihre Submission tatsächlich berechnet?
Fehler
@flawr Bearbeitet in.
Ich habe versucht, dies mit {(1, 0), (2, 0), (3, 0), (4, t)} für t → 0 zu testen, aber es f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))scheint, als ob ich dies array([ 0.00925926])für alle ungleich Null gebe t. (Ich weiß, dass Sie sagten, dies bricht für t = 0, aber das Ergebnis sollte sich mindestens 0 für t → 0 nähern.) Nenne ich es falsch?
Anders Kaseorg
2

Python, 124 Bytes

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

Nimmt A als eine Folge von komplexen Zahlen ( x + 1j*y) und summiert Im ( r ) 2 /2 | r | für alle komplexen Quer Verhältnisse r von vier Punkten in A .

Eigenschaften

  1. Positive Bestimmtheit. Alle Terme sind nichtnegativ und genau dann Null, wenn alle Kreuzverhältnisse real sind. Dies geschieht, wenn die Punkte kollinear oder konzyklisch sind.

  2. Surjektivität. Da die Summe durch Addition vieler Punkte beliebig groß gemacht werden kann, folgt die Surjektivität aus der Kontinuität.

  3. Übersetzungsinvarianz. Das Kreuzverhältnis ist translationsinvariant.

  4. Skaleninvarianz. Das Kreuzverhältnis ist skalierungsinvariant. (Tatsächlich ist es bei allen Möbius-Transformationen unveränderlich.)

  5. Kontinuität. Das Quer Verhältnis ist eine kontinuierliche Karte zur erweiterten komplexen Ebene, und r ↦ Im ( r ) 2 /2 | r | (mit ∞ ↦ 0) ist eine kontinuierliche Karte von der erweiterten komplexen Ebene zu den Realwerten.

(Hinweis: Eine theoretisch schönere Karte mit denselben Eigenschaften ist r r (Im ( r ) / ( C + | r | 2 )) 2 , deren Konturlinien in allen vier Punkten des Kreuzungsverhältnisses kreisförmig sind. Wenn Sie dies tatsächlich benötigen ein Unrundheitsmaß, das wollen Sie wahrscheinlich.)

Anders Kaseorg
quelle