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

Lấy khớp bình phương nhỏ nhất của đa thức với dữ liệu trong Python


Để lấy khớp bình phương nhỏ nhất của một đa thức với dữ liệu, hãy sử dụng polynomial.polyfit() trong Python Numpy. Phương thức này trả về các hệ số đa thức được sắp xếp từ thấp đến cao. Nếu y là 2-D, các hệ số trong cột k của coef đại diện cho đa thức khớp với dữ liệu trong cột thứ k của y. Tham số x là các tọa độ x của M điểm mẫu (x[i], y[i]).

Tham số y là các tọa độ y của các điểm mẫu. Nhiều bộ điểm mẫu chia sẻ cùng tọa độ x có thể được khớp độc lập với một lần gọi polyfit bằng cách truyền vào y một mảng 2-D chứa một bộ dữ liệu mỗi cột. Tham số deg là bậc của các đa thức khớp. Nếu deg là một số nguyên đơn lẻ, tất cả các hạng tử lên đến và bao gồm hạng tử bậc deg sẽ được bao gồm trong khớp.

Tham số rcond là số điều kiện tương đối của khớp. Các giá trị kỳ dị nhỏ hơn rcond, liên quan đến giá trị kỳ dị lớn nhất, sẽ bị bỏ qua. Giá trị mặc định là len(x)*eps, nơi eps là độ chính xác tương đối của kiểu float của nền tảng, khoảng 2e-16 trong hầu hết các trường hợp. Tham số full là công tắc xác định bản chất của giá trị trả về. Khi False (mặc định) chỉ các hệ số được trả về; khi True, thông tin chẩn đoán từ phân rã giá trị kỳ dị cũng được trả về.

Tham số w là các trọng số. Nếu không phải None, trọng số w[i] áp dụng cho phần dư không bình phương y[i] - y_hat[i] tại x[i]. Lý tưởng nhất là các trọng số được chọn sao cho các sai số của các tích w[i]*y[i] đều có cùng phương sai. Khi sử dụng trọng số ngược phương sai, sử dụng w[i] = 1/sigma(y[i]). Giá trị mặc định là None.

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

Trước tiên, nhập các thư viện cần thiết:

import numpy as np
from numpy.polynomial import polynomial as P

Tọa độ x:

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

Hiển thị tọa độ x:

print("Tọa độ X...\n", x)

Tọa độ y:

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

Để lấy khớp bình phương nhỏ nhất của đa thức với dữ liệu, sử dụng polynomial.polyfit():

c, stats = P.polyfit(x, y, 3, full=True)
print("\nKết quả...\n", c)
print("\nKết quả...\n", stats)

Ví dụ hoàn chỉnh

import numpy as np
from numpy.polynomial import polynomial as P

# Tọa độ x
x = np.linspace(-1,1,51)

# Hiển thị tọa độ x
print("Tọa độ X...\n", x)

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

# Lấy khớp bình phương nhỏ nhất của đa thức với dữ liệu
c, stats = P.polyfit(x, y, 3, full=True)
print("\nKết quả...\n", c)
print("\nKết quả...\n", stats)

Đầu ra

Tọa độ X...
 [-1. -0.96 -0.92 -0.88 -0.84 -0.8 -0.76 -0.72 -0.68 -0.64 -0.6 -0.56 -0.52 -0.48 -0.44 -0.4 -0.36 -0.32 -0.28 -0.24 -0.2 -0.16 -0.12 -0.08 -0.04 0. 0.04 0.08 0.12 0.16 0.2 0.24 0.28 0.32 0.36 0.4 0.44 0.48 0.52 0.56 0.6 0.64 0.68 0.72 0.76 0.8 0.84 0.88 0.92 0.96 1. ]
Tọa độ Y...
 [ 0.24282445 -0.48320773 -1.18068109 -0.48486683 0.80514762 0.48976259 0.31363813 -0.03382685 -0.92334611 0.86835062 0.24661201 0.9790978 0.03782101 0.12213365 -1.37248029 1.99891304 -0.09825977 1.74524931 0.70560858 0.15516069 0.69169705 0.76957712 -1.21919676 1.50064825 1.32101339 -2.51479992 -0.28998783 -1.24293076 0.45927699 -0.53484746 0.50455341 -0.06351788 -2.69585303 -0.46833578 1.4924168 -2.42374146 -1.91934499 -1.36311466 -1.23946547 -1.56822005 -0.79648036 1.58269324 -0.53682862 -0.90861958 -0.28174461 -0.10775622 0.58535687 1.06373501 -2.28991738 2.01597286 -0.75841069]
Kết quả...
 [-0.17198829 -1.84107674 0.09439374 2.39030912]
Kết quả...
 [array([60.43653521]), 4, array([1.38446749, 1.32119158, 0.50443316, 0.28853036]), 1.1324274851176597e-14]