Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การหาความเหมาะสมแบบคูณน้อยที่สุด (Least Squares Fit) ของอนุกรมเลจันดร์กับข้อมูลใน Python


เพื่อหาความเหมาะสมแบบคูณน้อยที่สุด (Least Squares Fit) ของอนุกรมเลจันดร์กับข้อมูล ให้ใช้เมธอด legendre.legfit() ใน NumPy เมธอดนี้คืนค่าสัมประสิทธิ์เลจันดร์เรียงจากต่ำไปสูง หาก y เป็น 2 มิติ สัมประสิทธิ์สำหรับข้อมูลในคอลัมน์ k ของ y จะอยู่ในคอลัมน์ k

พารามิเตอร์ x คือพิกัด x ของจุดตัวอย่าง M จุด (x[i], y[i]) พารามิเตอร์ y คือพิกัด y ของจุดตัวอย่าง ชุดข้อมูลหลายชุดที่มีพิกัด x เหมือนกันสามารถ fit ได้พร้อมกันโดยส่ง y เป็นอาร์เรย์ 2 มิติ พารามิเตอร์ deg คือองศาของพหุนามที่ fit หาก deg เป็นจำนวนเต็มเดี่ยว จะรวมทุกพจน์จนถึงพจน์ deg พารามิเตอร์ rcond คือเลขภาวะสัมพัทธ์ของการ fit ค่าสนิมที่เล็กกว่า rcond เทียบกับค่าสนิมสูงสุดจะถูกละเว้น ค่าเริ่มต้นคือ len(x)*eps พารามิเตอร์ full คือสวิตช์กำหนดลักษณะค่าที่คืน เมื่อ False (ค่าเริ่มต้น) คืนแค่สัมประสิทธิ์ เมื่อ True คืนข้อมูลวินิจฉัยจากการแยกค่าสนิมเพิ่มเติม พารามิเตอร์ w คือน้ำหนัก หากไม่เป็น None น้ำหนัก w[i] จะนำไปคูณกับ residual ที่ไม่ได้ยกกำลังสองที่ x[i] โดยอุดมคติน้ำหนักควรเลือกให้ w[i]*y[i] มีความแปรปรวนเท่ากัน

ขั้นตอน

นำเข้าไลบรารี:

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

สร้างพิกัด x:

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

แสดงพิกัด x:

print("X Co-ordinate...\n", x)

สร้างพิกัด y (พร้อม雜訊สุ่ม):

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

หา Least Squares Fit อนุกรมเลจันดร์องศา 3:

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

ตัวอย่างโค้ดเต็ม

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)

ผลลัพธ์ (ตัวอย่าง)

X Co-ordinate... [-1. -0.96 ... 1.]
Y Co-ordinate... [-5.28795520e-02 ... -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]