Twoim zadaniem jest zaprogramowanie funkcji matematycznej s
, która pobiera niepusty zbiór skończony A
punktów na płaszczyźnie 2D i generuje wynik nieokrągłości, s(A)
który spełnia następujące właściwości:
- Pozytywna definitywność : jeśli istnieje okrąg lub linia prosta, która zawiera wszystkie punkty
A
, tos(A) = 0
. Inaczejs(A) > 0
Surowotność: Jest przejmująca względem nieujemnych liczb rzeczywistych, co oznacza, że dla każdej nieujemnej liczby rzeczywistej
r
istnieje skończony podzbiórA
płaszczyzny, taki, żes(A) = r
.Niezmienność tłumaczenia:
s
jest niezmiennas(A) = s(A + v)
dla każdego wektorav
i dla wszystkichA
.Niezmienność
s
skali: niezmiennik skali, jeślis(A) = s(A * t)
dla wszystkicht≠0
i dla wszystkichA
.Ciągłość.
s
uważa się za ciągły, jeśli funkcjaf(p) := s(A ∪ {p})
(odwzorowanie punktup
na liczbę rzeczywistą) jest ciągła przy użyciu standardowej wartości bezwzględnej liczb rzeczywistych i standardowej normy euklidesowej w punktach płaszczyzny.
Intuicyjnie mówiąc, ten wynik nieokrągłości można uznać za coś podobnego do współczynnika korelacji w regresji liniowej.
Detale
Twoja funkcja teoretycznie musi działać w rzeczywistości, ale dla celów tego wyzwania możesz użyć liczb zmiennoprzecinkowych jako zamiennika. Podaj wyjaśnienie swojego zgłoszenia i argument, dlaczego te pięć nieruchomości ma zastosowanie. Jako dane wejściowe możesz wziąć dwie listy współrzędnych lub listę krotek lub podobnych formatów. Możesz założyć, że żaden punkt na wejściu nie jest powtarzany, tzn. Wszystkie punkty są unikalne.
s
nie jest unikalne. Jedyną rzeczą, dla której możesz podać przykłady,s(A) = 0
jest trywialne przy użyciu pierwszej właściwości.Odpowiedzi:
Python 2 z numpy, 116 bajtów
Pobiera xiy jako wektory kolumnowe 2d i zwraca tablicę zawierającą odpowiedź. Zauważ, że da to pustą tablicę dla idealnie prostej linii lub z 3 lub mniej punktami. Myślę, że lstsq nie pozostawia resztek, jeśli istnieje idealne dopasowanie.
Wyjaśnienie
Zasadniczo znajduje to koło najlepszego dopasowania i otrzymuje kwadratowe resztki.
Chcemy zminimalizować
(x - x_center)^2 + (y - y_center)^2 - R^2
. Wygląda to paskudne i nieliniowa, ale możemy przepisać że jakx_center(-2x) + y_center(-2y) + stuff = x^2 + y^2
, gdziestuff
nadal jest brzydki i nieliniowe w warunkachx_center
,y_center
iR
, ale nie musimy się martwić o to. Więc możemy po prostu rozwiązać[-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2]
.Moglibyśmy wtedy wycofać R, gdybyśmy naprawdę tego chcieli, ale to niewiele nam tu pomaga. Na szczęście funkcja lstsq może dać nam resztki, które spełniają większość warunków. Odejmowanie środka i skalowanie przez
(R^2)^2 = R^4 ~ x^4
daje nam niezmienność translacyjną i skalowaną.źródło
f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))
wydaje się, że daje mi toarray([ 0.00925926])
niezerowet
. (Wiem, że powiedziałeś, że to łamie się dla t = 0, ale wynik powinien przynajmniej zbliżyć się do 0 dla t → 0.) Czy nazywam to źle?Python, 124 bajty
Staje A w postaci sekwencji liczb złożonych (
x + 1j*y
) i sumuje Im ( R ) 2 /2 | r | wszystkich złożonych wzajemnych stosunkach r czterech punktach A .Nieruchomości
Pozytywna definitywność. Wszystkie warunki są nieujemne i wszystkie są zerowe dokładnie wtedy, gdy wszystkie stosunki krzyżowe są rzeczywiste, co dzieje się, gdy punkty są współliniowe lub zbieżne.
Surowość Ponieważ suma może być dowolnie duża przez dodanie wielu punktów, surowość będzie wynikać z ciągłości.
Niezmienność tłumaczenia. Współczynnik krzyżowy jest niezmienny dla tłumaczenia.
Skala niezmienniczości. Współczynnik krzyżowy jest niezmienny w skali. (W rzeczywistości jest niezmienny we wszystkich transformacjach Möbiusa.)
Ciągłość. Przekrój stosunek ciągła mapę do rozszerzonej płaszczyzny zespolonej, a R ↦ Im ( R ) 2 /2 | r | (z ∞ ↦ 0) jest ciągłą mapą od rozszerzonej złożonej płaszczyzny do rzeczywistych.
(Uwaga: Teoretycznie ładniejsza mapa o tych samych właściwościach to r ↦ (Im ( r ) / ( C + | r | 2 )) 2 , której linie konturowe wrt wszystkie cztery punkty stosunku poprzecznego są okrągłe. Jeśli naprawdę potrzebujesz środek nieokrągłości, prawdopodobnie tego chcesz.)
źródło