Trong số các mô-đun phân tích số khác, scipy bao gồm một số thuật toán nội suy cũng như các cách tiếp cận khác nhau để sử dụng chúng để tính toán phép nội suy, đánh giá đa thức bằng cách biểu diễn phép nội suy, tính đạo hàm, tích phân hoặc nghiệm bằng các giao diện dựa trên chức năng và lớp
Hãy xem một số ví dụ nội suy cho dữ liệu một và hai chiều
Trước hết, các mô-đun cần thiết
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
nội suy đơn biến
Trong các ví dụ tiếp theo,
yn = np.interp[xn, x, y]
0 và yn = np.interp[xn, x, y]
1 đại diện cho các điểm đã biết. Chúng ta sẽ cần lấy các giá trị nội suy yn = np.interp[xn, x, y]
2 cho yn = np.interp[xn, x, y]
3. Là một đại diện, yn = np.interp[xn, x, y]
4 sẽ là các giá trị thực, được tạo từ hàm ban đầu để hiển thị hành vi của bộ nội suyNếu không có gì về các ô được nói, chúng sẽ được tạo dưới dạng
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
Phép nội suy tuyến tính
Nội suy tuyến tính dễ tính toán nhưng không chính xác do có sự gián đoạn tại các điểm
Chúng tôi sẽ làm một số ví dụ với các giá trị này
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
Chúng ta có thể tính toán phép nội suy tuyến tính với numpy
yn = np.interp[xn, x, y]
Đã đến lúc giới thiệu lớp nội suy một chiều của scipy. [
yn = np.interp[xn, x, y]
5][http. // tài liệu. scipy. org/doc/scipy/tham chiếu/đã tạo/scipy. nội suy. interp1d. html#scipy. nội suy. interp1d] đối tượng sẽ được tạo từ các điểm đã biết và chúng ta có thể thu được yn = np.interp[xn, x, y]
2 đánh giá chính nó bằng yn = np.interp[xn, x, y]
3 tương ứng. yn = np.interp[xn, x, y]
5 cung cấp các phương pháp nội suy khác nhau bằng đối số yn = np.interp[xn, x, y]
9 và mặc định là yn = np.interp[xn, x, y]
40yn = np.interp[xn, x, y]
4Nội suy láng giềng gần nhất
Phép nội suy lân cận gần nhất đơn biến có cùng giá trị của điểm gần nhất đã biết
yn = np.interp[xn, x, y]
6nội suy đa thức
Các thuật toán nội suy đa thức rất tốn kém về mặt tính toán và có thể tạo ra các thành phần tạo dao động ở các điểm cực trị do hiện tượng Runge. Do đó, tốt hơn hết là sử dụng đa thức Ch Quashev hoặc nội suy bằng cách sử dụng các đường spline [sẽ nói thêm ở phần sau]
Lagrange hoặc Newton là những ví dụ về phép nội suy đa thức. Chỉ đề cập và giới thiệu các cách tiếp cận vấn đề nội suy khác nhau trong scipy, chúng ta hãy xem phép nội suy Lagrange
yn = np.interp[xn, x, y]
7Công dụng của đa thức Lagrange. Chúng ta có thể tính trực tiếp các giá trị nội suy bằng các hàm nội suy
yn = np.interp[xn, x, y]
8Ngoài ra, chúng ta có thể sử dụng các bộ nội suy dựa trên lớp để tạo đa thức từ các điểm đã biết và sau đó, gọi đa thức này bằng dữ liệu _________ 13 của chúng ta
yn = np.interp[xn, x, y]
0Nên sử dụng cách tiếp cận dựa trên lớp nếu chúng ta cần đánh giá dữ liệu
yn = np.interp[xn, x, y]
3 nhiều lần, vì chúng ta đã tính toán đa thức của mìnhsplines
Một spline bao gồm các hàm đa thức được nối với nhau bằng các nút thắt và, không giống như phép nội suy đa thức, không có hiện tượng Runge, làm cho phép nội suy spline trở thành một phương pháp nội suy ổn định và mở rộng
Hãy thay đổi dữ liệu của chúng tôi
yn = np.interp[xn, x, y]
2Cách dễ nhất để sử dụng splines trong scipy, một lần nữa, với
yn = np.interp[xn, x, y]
5. Đặt yn = np.interp[xn, x, y]
9 là yn = np.interp[xn, x, y]
45 hoặc yn = np.interp[xn, x, y]
46, chúng tôi sẽ tính toán spline bậc hai và bậc baplt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
0Chỉ định một số nguyên là một loại, chúng ta sẽ đặt thứ tự của các đa thức, có tính đến thứ tự phải thấp hơn số điểm đã biết
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
1Đa thức Hermite có liên quan đến đa thức Newton, nó là phép tính đạo hàm chia hết. So khớp giá trị của n điểm và m đạo hàm đầu tiên của nó, vì vậy đa thức thu được sẽ có bậc nhiều nhất là n[m+1]-1
Phép nội suy Hermite bậc ba bao gồm một spline gồm các đa thức Hermite bậc ba và các đường cong Hermite có thể được chỉ định là các đường cong Bézier, được sử dụng rộng rãi trong thiết kế đồ họa véc tơ
Trong scipy, phép nội suy Hermite bậc ba có hai cách tiếp cận khác nhau được trình bày trong phần trước, phép nội suy hàm
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
2và bộ nội suy dựa trên lớp
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
3Như chúng ta có thể thấy, các giá trị được nội suy khá khác so với các giá trị thực. Giống như trong thiết kế đồ họa vector, các điểm cần thiết cho đường cong Bézier phải có ý nghĩa hơn, vì vậy trong trường hợp này, chúng ta cần xác định vị trí các điểm ở mức cực đại hoặc cực tiểu cục bộ. Đối với hàm chân Asinc[Bx+C] chúng ta sẽ tìm thấy các đỉnh gần với 1/2B, do tham số C, và sau đó, gần với mọi 1/2B, trong trường hợp này là {0. 25, 0. 75, 1. 25, 1. 75}. Vì vậy, sử dụng các điểm tiếp theo, chúng ta sẽ nhận được kết quả tốt hơn bằng cách sử dụng phép nội suy Hermite bậc ba
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
4Splines cũng có thể được tính bằng cách sử dụng bộ nội suy dựa trên lớp, Trong trường hợp này với giao diện FITPACK
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
5Và thông qua giao diện chức năng FITPACK
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
6Trong cả hai trường hợp, chúng ta sẽ có nhiều phương pháp đánh giá, ví dụ, lấy nguyên hàm của hàm
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
7plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
8Với giao diện chức năng FITPACK
plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
9plt.plot[xn, y0, '--k', label='True values']
plt.plot[x, y, 'ok', label='Known points']
plt.plot[xn, yn, label='Interpolated values']
plt.legend[]
plt.show[]
8Theo định nghĩa của hàm chân Asinc[Bx+C], các nghiệm sẽ được tìm thấy tại mỗi 1/B và tại 0, do tham số C, trong khoảng [0,2] sẽ là {0, 0. 5, 1, 1. 5}
nội suy đa biến
Nội suy đa biến đề cập đến phép nội suy không gian, cho các hàm có nhiều biến. Nó chủ yếu được sử dụng trong xử lý ảnh [nội suy song tuyến tính] và các mô hình độ cao địa chất [nội suy Kriging, không được đề cập ở đây]
Đầu tiên, chúng ta hãy xác định một số dữ liệu.
yn = np.interp[xn, x, y]
3 và yn = np.interp[xn, x, y]
2 là tọa độ nơi chúng tôi sẽ nội suy dữ liệu của mình, tọa độ này được xác định cũng như lưới lưới [yn = np.interp[xn, x, y]
49]; x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
1Trong các ví dụ tiếp theo, nếu không có gì được nói, kết quả nội suy sẽ được hiển thị dưới dạng bản đồ giả màu như
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
2Đối với ví dụ tiếp theo, chúng ta cần tạo một số dữ liệu phi cấu trúc, một mảng các điểm và các giá trị tương ứng
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
3Nội suy lân cận gần nhất hai chiều
Hàng xóm gần nhất đa biến không tốn kém về mặt tính toán, vì vậy nó được sử dụng trong kết xuất ba chiều thời gian thực. Khái niệm này tương đương với sơ đồ Voronoi
Bộ nội suy dựa trên lớp
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
4nội suy song tuyến tính
Phép nội suy song tuyến tính dựa trên hai phép nội suy tuyến tính trong lưới 2D. Nó được sử dụng trong lấy mẫu lại hình ảnh
Bộ nội suy dựa trên lớp
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
5Bicubic spline nội suy
Nó dựa trên hai spline bậc ba trong một lưới hai chiều. Được sử dụng trong xử lý hình ảnh và dữ liệu độ cao GIS. Nó mượt mà hơn phép nội suy song tuyến tính và lân cận gần nhất nhưng đắt hơn về mặt tính toán
Trong trường hợp này, chúng ta sẽ sử dụng hàm tạo trực tiếp một lưới với các giá trị được nội suy theo cách tương tự như
yn = np.interp[xn, x, y]
5. Hàm này cũng hỗ trợ nội suy tuyến tính và lân cận gần nhất theo hai chiều với đối số yn = np.interp[xn, x, y]
64x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
6Tìm hiểu thêm về splines đa biến
Đối với các ví dụ tiếp theo, chúng ta sẽ cần một số dữ liệu có cấu trúc, các giá trị trong lưới tương ứng với tọa độ x và y được xếp hạng
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
7Tương tự như giao diện FITPACK chức năng cho các đường trục một chiều, đây là biểu diễn và đánh giá của một đường trục hai khối bằng cách sử dụng các điểm và giá trị dưới dạng dữ liệu lưới
x = np.linspace[0, 4, 12]
y = np.cos[x**2/3+4]
xn = np.linspace[0, 4, 100]
y0 = np.cos[xn**2/3+4]
8Và tương tự với giao diện FITPACK dựa trên lớp. Trong trường hợp này, chúng ta sẽ cần tính toán spline với các điểm không phải dưới dạng lưới mà dưới dạng mảng được xếp hạng