Lập trình một điểm số không tuần hoàn


15

Nhiệm vụ của bạn là lập trình một hàm toán học s, lấy một tập hợp hữu hạn Acác điểm hữu hạn trong mặt phẳng 2D và đưa ra một số điểm không tròn s(A)thỏa mãn các tính chất sau:

  1. Độ chính xác dương : Nếu có một đường tròn hoặc một đường thẳng chứa tất cả các điểm của Athì s(A) = 0. Nếu không thìs(A) > 0
  2. Tính siêu thực : Nó là tính từ so với các số thực không âm, có nghĩa là với mọi số thực không âm rcó một tập con hữu hạn Acủa mặt phẳng sao cho s(A) = r.

  3. Dịch bất biến: s là bất biến dịch nếu s(A) = s(A + v)cho mọi vectơ vvà cho tất cả A.

  4. Thang đo bất biến: s là bất biến tỷ lệ, nếu s(A) = s(A * t)cho mọi t≠0và cho tất cả A.

  5. Liên tục. sđược gọi là liên tục nếu hàm f(p) := s(A ∪ {p})(ánh xạ điểm ptới một số thực) liên tục sử dụng giá trị tuyệt đối tiêu chuẩn trên các số thực và định mức euclide chuẩn trên các điểm của mặt phẳng.

Nói một cách trực quan, điểm số không tuần hoàn này có thể được coi là một cái gì đó tương tự như hệ số tương quan trong hồi quy tuyến tính.

Chi tiết

Chức năng của bạn trong lý thuyết phải hoạt động trong thực tế, nhưng với mục đích của thách thức này, bạn có thể sử dụng số dấu phẩy động để thay thế. Vui lòng cung cấp một lời giải thích về trình của bạn và một lý lẽ tại sao năm thuộc tính đó giữ. Bạn có thể lấy hai danh sách tọa độ hoặc danh sách các bộ dữ liệu hoặc các định dạng tương tự làm đầu vào. Bạn có thể giả định rằng không có điểm nào trong đầu vào được lặp lại tức là tất cả các điểm là duy nhất.


1
Bạn có thể thêm một vài trường hợp thử nghiệm?
Xù xì

Ý nghĩa của một vòng tròn chứa tất cả các điểm của A là gì?
H.PWiz

@ H.PWiz Coi một vòng tròn là tập con của mặt phẳng 2d, một điểm được chứa trong vòng tròn nếu đó là một phần tử của tập hợp con này.
flawr

@Shaggy Không, điều đó là không thể vì snó không phải là duy nhất. Điều duy nhất bạn có thể làm ví dụ cho s(A) = 0việc sử dụng thuộc tính đầu tiên là không quan trọng.
flawr

Chương trình của chúng tôi có thể lỗi trong lý thuyết không xác suất? (xác suất thực tế là khác không vì số dấu phẩy động là rời rạc) / Bạn có cho phép bỏ qua dấu phẩy động không? Meta có liên quan .
dùng202729

Câu trả lời:


2

Python 2 với numpy, 116 byte

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)

Lấy x và y là các vectơ cột 2d và trả về một mảng chứa câu trả lời. Lưu ý rằng điều này sẽ cung cấp một mảng trống cho một đường thẳng hoàn hảo hoặc có 3 điểm trở xuống. Tôi nghĩ rằng lstsq không có dư nếu có một sự phù hợp hoàn hảo.

Giải trình

Về cơ bản, điều này tìm thấy vòng tròn phù hợp nhất và có phần dư bình phương.

Chúng tôi muốn giảm thiểu (x - x_center)^2 + (y - y_center)^2 - R^2. Có vẻ khó chịu và phi tuyến, nhưng chúng ta có thể viết lại rằng x_center(-2x) + y_center(-2y) + stuff = x^2 + y^2, nơi stuffvẫn là khó chịu và phi tuyến về x_center, y_centerR, nhưng chúng tôi không cần phải quan tâm đến nó. Vì vậy, chúng tôi chỉ có thể giải quyết [-2x -2y 1][x_center, y_center, stuff]^T = [x^2 + y^2].

Sau đó chúng tôi có thể sao lưu R nếu chúng tôi thực sự muốn, nhưng điều đó không giúp chúng tôi nhiều ở đây. Rất may, hàm lstsq có thể cung cấp cho chúng ta phần dư, đáp ứng hầu hết các điều kiện. Trừ trung tâm và nhân rộng bằng cách (R^2)^2 = R^4 ~ x^4cho chúng ta tính bất biến và tỷ lệ.

  1. Điều này là chắc chắn tích cực vì phần dư bình phương là không âm và chúng ta chia cho một hình vuông. Nó có xu hướng về 0 đối với các vòng tròn và đường vì chúng ta đang khớp một vòng tròn.
  2. Tôi khá chắc chắn rằng nó không phải là tính từ, nhưng tôi không thể có một ràng buộc tốt. Nếu có giới hạn trên, chúng ta có thể ánh xạ [0, bị ràng buộc) vào các thực thể không âm (ví dụ: với 1 / (ràng buộc - câu trả lời) - 1 / bị ràng buộc) cho một vài byte nữa.
  3. Chúng tôi trừ đi trung tâm, vì vậy nó bất biến về mặt dịch thuật.
  4. Chúng tôi chia cho x ** 4, loại bỏ sự phụ thuộc quy mô.
  5. Nó bao gồm các chức năng liên tục, vì vậy nó liên tục.

Bạn có thể giải thích những gì sự phục tùng của bạn thực sự là máy tính?
flawr

@flawr Đã chỉnh sửa trong.

Tôi đã thử kiểm tra điều này trên {(1, 0), (2, 0), (3, 0), (4, t)} cho t → 0, nhưng f(array([[1.0],[2.0],[3.0],[4.0]]),array([[0.0],[0.0],[0.0],[t]]))dường như cung cấp cho tôi array([ 0.00925926])cho tất cả các số khác t. (Tôi biết bạn đã nói điều này phá vỡ cho t = 0, nhưng kết quả ít nhất nên tiếp cận 0 cho t → 0.) Tôi có gọi sai không?
Anders Kaseorg

2

Python, 124 byte

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 Một là một chuỗi các số phức ( x + 1j*y), và tổng Im ( r ) 2 /2 | r | cho tất cả chéo tỷ lệ phức tạp r bốn điểm trong Một .

Tính chất

  1. Tích cực dứt khoát. Tất cả các điều khoản là không âm, và tất cả đều chính xác khi tất cả các tỷ lệ chéo là có thật, điều này xảy ra khi các điểm là cộng tuyến hoặc đồng quy.

  2. Tính siêu thực. Vì tổng có thể được thực hiện lớn tùy ý bằng cách thêm nhiều điểm, tính siêu thực sẽ xuất phát từ tính liên tục.

  3. Dịch bất biến. Tỷ lệ chéo là bất biến dịch.

  4. Quy mô bất biến. Tỷ lệ chéo là bất biến tỷ lệ. (Trên thực tế, nó bất biến dưới tất cả các phép biến đổi Möbius.)

  5. Liên tục. Chéo tỷ lệ là một bản đồ liên tục với mặt phẳng phức tạp kéo dài, và r ↦ Im ( r ) 2 /2 | r | (với 0) là một bản đồ liên tục từ mặt phẳng phức mở rộng đến thực tế.

(Lưu ý: Một bản đồ đẹp hơn về mặt lý thuyết có cùng thuộc tính là r ↦ (Im ( r ) / ( C + | r | 2 )) 2 , có các đường đồng mức ghi cả bốn điểm của tỷ lệ chéo là hình tròn. Nếu bạn thực sự cần một biện pháp không tuần hoàn, bạn có thể muốn điều đó.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.