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

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

Để tìm khớp bình phương nhỏ nhất (least squares fit) của chuỗi Legendre với dữ liệu, sử dụng phương thức legendre.legfit() trong NumPy Python. Phương thức trả về các hệ số Legendre theo thứ tự từ thấp đến cao. Nếu y là 2-D, các hệ số cho dữ liệu ở cột k của y sẽ nằm ở cột k.

Tham số x là tọa độ x của M điểm mẫu (x[i], y[i]). Tham số y là tọa độ y của các điểm mẫu. Nhiều tập điểm mẫu chia sẻ cùng tọa độ x có thể khớp độc lập bằng một lần gọi polyfit bằng cách truyền y là mảng 2-D chứa một tập dữ liệu mỗi cột.

Tham số deg là bậc của đa thức khớp. Nếu deg là số nguyên đơn lẻ, tất cả các hạng tử đến bậc deg sẽ được bao gồm. Tham số rcond là số điều kiện tương đối. Giá trị kỳ dị nhỏ hơn rcond, tương đối với giá trị kỳ dị lớn nhất, sẽ bị bỏ qua. Giá trị mặc định là len(x)*eps, với eps là độ chính xác tương đối của kiểu float nền tảng, khoảng 2e-16 trong hầu hết trường hợp. Tham số full xác định bản chất giá trị trả về. Khi False (mặc định) chỉ trả về hệ số; 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à trọng số. Nếu không phải None, trọng số w[i] áp dụng cho dư lượng không bình phương y[i] - y_hat[i] tại x[i].

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

Nhập thư viện cần thiết:

import numpy as np
from numpy.polynomial import legendre as L

Tọa độ x:

x = np.linspace(-1, 1, 51)
print("X Co-ordinate...\n", x)

Tọa độ y:

y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n", y)

Tìm khớp bình phương nhỏ nhất bậc 3:

c, stats = L.legfit(x, y, 3, full=True)
print("\nResult...\n", c)
print("\nResult...\n", stats)

Ví dụ hoàn chỉnh

import numpy as np
from numpy.polynomial import legendre as L

x = np.linspace(-1, 1, 51)
print("X Co-ordinate...\n", x)

y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n", y)

c, stats = L.legfit(x, y, 3, full=True)
print("\nResult...\n", c)
print("\nResult...\n", stats)

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

X Co-ordinate... [-1. -0.96 -0.92 ... 1. ]
Y Co-ordinate... [-5.28795520e-02 -7.61252904e-03 ... -3.20225560e-01]
Result... [ 0.29249467 -0.10521942 -0.24847572 0.2010877 ]
Result... [array([39.35467561]), 4, array([1.0425003, 1.02126704, 0.97827074, 0.95561139]), 1.1324274851176597e-14]