Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Khớp bình phương nhỏ nhất của chuỗi Chebyshev với dữ liệu trong Python

Để tìm chuỗi Chebyshev khớp tốt nhất (theo nghĩa bình phương nhỏ nhất) với tập dữ liệu, sử dụng numpy.polynomial.chebyshev.chebfit().

Tham số chính của chebyshev.chebfit()

  • x: Tọa độ x của M điểm mẫu.
  • y: Tọa độ y của điểm mẫu. Có thể là 2-D để khớp nhiều tập dữ liệu cùng lúc.
  • deg: Bậc của đa thức khớp. Nếu là số nguyên đơn, bao gồm tất cả các bậc đến deg.
  • rcond: Số điều kiện tương đối. Giá trị riêng nhỏ hơn rcond * max(singular_values) sẽ bị bỏ qua. Mặc định: len(x)*eps.
  • full: Nếu False (mặc định), chỉ trả về hệ số. Nếu True, trả về thêm thông tin chẩn đoán từ SVD.
  • w: Trọng số. Mặc định None.

Các bước thực hiện

1. Nhập thư viện

import numpy as np
from numpy.polynomial import chebyshev as C

2. Tạo tọa độ x

x = np.linspace(-1, 1, 51)

3. Tạo tọa độ y (có nhiễu ngẫu nhiên)

y = x**3 - x + np.random.randn(len(x))

4. Khớp Chebyshev bậc 3, trả về thống kê đầy đủ

c, stats = C.chebfit(x, y, 3, full=True)
print("Hệ số Chebyshev:\n", c)
print("\nThống kê khớp:\n", stats)

Ví dụ hoàn chỉnh

import numpy as np
from numpy.polynomial import chebyshev as C

x = np.linspace(-1, 1, 51)
print("Tọa độ X...\n", x)

y = x**3 - x + np.random.randn(len(x))
print("\nTọa độ Y...\n", y)

c, stats = C.chebfit(x, y, 3, full=True)
print("\nHệ số Chebyshev (bậc 0 đến 3):\n", c)
print("\nThống kê (giá trị riêng, rank, v.v.):\n", stats)

Kết quả đầu ra (ví dụ)

Tọa độ X...
 [-1.  -0.96 -0.92 ... 0.96 1.]
Tọa độ Y...
 [ 0.0458 -0.4101 -0.5984 ... -0.2823 0.4643]
Hệ số Chebyshev (bậc 0 đến 3):
 [-0.1273 -0.0870 -0.4212  0.3296]
Thống kê...
 [array([43.3449]), 4, array([1.2014, 1.1923, 0.7606, 0.7460]), 1.1324e-14]

Giải thích: Hệ số Chebyshev khớp với x³ - x (hàm mục tiêu) có nhiễu. Hệ số bậc 3 (~0.33) tương ứng với thành phần x³, hệ số bậc 1 (~-0.09) tương ứng với -x. Các hệ số bậc 0, 2 nhỏ do nhiễu ngẫu nhiên.