2011-10-16 4 views
6

Vì vậy, chúng ta có một ma trận nhưPhương thức toán học nào hoạt động cho các hàm 2d đến 2d nội suy?

12,32 
24,12 
... 

với chiều dài 2xN và một

44,32 
44,19 
... 

với chiều dài 2xN và có một số hàm f (x, y) trả về z [1], z [ 2]. Đó là 2 ma trận mà chúng tôi đã đưa ra đại diện cho cặp giá trị đã biết cho x, y và z [1], z [2]. Các công thức nội suy sẽ giúp ích gì trong trường hợp này?

+0

Bạn đang tìm kiếm một cái gì đó giống như một phép nội suy đa thức cho một hàm với 2 biến? – amit

+0

có. Nhưng chức năng đó sẽ phải trả lại 2 biến số ... – Rella

+0

Bạn có thể thử làm điều đó với các số phức. – starblue

Trả lời

4

Nếu bạn giải quyết vấn đề cho một giá trị trả lại, bạn có thể tìm thấy hai hàm f_1(x,y)f_2(x,y) bằng cách nội suy và soạn hàm của bạn dưới dạng f(x, y) = [f_1(x,y), f_2(x,y)]. Chỉ cần chọn bất kỳ phương pháp nào để giải quyết hàm nội suy phù hợp với vấn đề của bạn.

Đối với vấn đề nội suy thực tế trong hai chiều, có rất nhiều cách để bạn có thể xử lý vấn đề này. Nếu đơn giản là những gì bạn yêu cầu, bạn có thể đi với nội suy tuyến tính. Nếu bạn đồng ý với các chức năng thay thế, bạn có thể sử dụng các đường cong bezier hoặc splines. Hoặc, nếu dữ liệu là thống nhất, bạn có thể lấy đi với một nội suy đa thức đơn giản (tốt, không khá tầm thường khi trong 2D, nhưng dễ dàng đủ).


EDIT: Thêm thông tin và một số liên kết.

Có thể thực hiện một giải pháp thay thế bằng cách sử dụng Bilinear interpolation (wikipedia).

Đối với đa thức nội suy, nếu dữ liệu của bạn nằm trên lưới, bạn có thể sử dụng thuật toán sau (Tôi không thể tìm thấy tham chiếu cho nó, nó là từ bộ nhớ).

Nếu các điểm dữ liệu đang ở trên một k bởi l lưới, viết lại đa thức của bạn như sau:

f(x,y) = cx_1(x)*y^(k-1) + cx_2(x)*y^(k-2) + ... + cx_k(x) 

Ở đây, mỗi hệ số cx_i(x) cũng là một đa thức bậc l. Bước đầu tiên là tìm các hàm đa thức của k bằng cách nội suy từng hàng hoặc cột của lưới. Khi điều này được thực hiện, bạn có l tập hệ số (hoặc nói cách khác là các đa thức là là cx_i(x0), cx_i(x1), ..., cx_i(xl) (cho bạn tổng số l * k). Bây giờ, bạn có thể xác định các đa thức này bằng cách sử dụng các hằng số trên làm các điểm nội suy, cung cấp cho bạn kết quả f(x,y).

Phương pháp tương tự được sử dụng cho đường cong bezier hoặc splines. Sự khác biệt duy nhất là bạn sử dụng các điểm điều khiển thay vì các hệ số đa thức. Đầu tiên bạn nhận được một tập hợp các splines sẽ tạo ra các điểm dữ liệu của bạn, và sau đó bạn nội suy các điểm điều khiển của các đường cong trung gian này để có được các điểm điều khiển của đường cong bề mặt.


Hãy để tôi thêm một ví dụ để làm rõ các thuật toán ở trên.Hãy có các điểm dữ liệu sau:

0,0 => 1 
0,1 => 2 
1,0 => 3 
1,1 => 4 

Chúng ta bắt đầu bằng hai đa thức: một cho điểm dữ liệu (0,0) và (0,1) và một cho (1, 0) và (1, 1)):

f_0(x) = x + 1 
f_1(x) = x + 3 

Bây giờ, chúng ta suy theo một hướng khác để xác định coefficients.When chúng ta đọc các hệ số đa thức theo chiều dọc, chúng ta cần hai đa thức. Một đánh giá là 1 ở cả 0 và 1; và khác mà đánh giá đến 1 ở mức 0, và 3 tỷ lệ 1:

cy_1(y) = 1 
cy_2(y) = 2*y + 1 

Nếu chúng ta kết hợp các thành f(x,y), chúng tôi nhận được:

f(x,y) = cy_1(y)*x + cy_2(y) 
     = 1*x + (2*y + 1)*1 
     = x + 2*y + 1 
+0

Bạn có thể giải thích [hoặc tham khảo giải thích] cách các phương pháp bạn đã đề cập đến làm việc cho thông tin 2 chiều không? – amit