Trăn nội suy lập phương ẩn sĩ

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 suy

Nế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]
40

yn = np.interp[xn, x, y]
4

Nộ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]
6

nộ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]
7

Cô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]
8

Ngoà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]
0

Nê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ình

splines

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

Cá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 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[]
0

Chỉ đị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[]
2

và 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[]
3

Như 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[]
4

Splines 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[]
5

Và 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[]
6

Trong 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[]
7
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[]
8

Vớ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[]
9
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[]
8

Theo đị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]
1

Trong 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]
3

Nộ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]
4

nộ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]
5

Bicubic 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]
64

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

Tì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]
7

Tươ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]
8

Và 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

Chủ Đề