บทนำ
ในการหาการเหมาะสมแบบ Least-squares (least-squares fit) ของพหุนามต่อข้อมูล สามารถใช้ฟังก์ชัน polynomial.polyfit() ใน NumPy ของ Python ฟังก์ชันนี้จะคืนสัมประสิทธิ์พหุนามที่จัดเรียงจากดีกรีต่ำไปสูง
พารามิเตอร์สำคัญ
- x: พิกัด x ของจุดข้อมูล M จุด (x[i], y[i])
- y: พิกัด y ของจุดข้อมูล สามารถเป็นอาร์เรย์ 2 มิติเพื่อเหมาะกับหลายชุดข้อมูลพร้อมกัน
- deg: ดีกรีของพหุนามที่ต้องการเหมาะสม หากเป็นจำนวนเต็มเดียว จะรวมทุกพจน์จนถึงดีกรีนั้น
- rcond: เลขสภาพสัมพัทธ์ (relative condition number) ค่าสิงุลาร์ที่เล็กกว่านี้จะถูกละเลย
- full: หากเป็น True จะคืนข้อมูลวินิจฉัยจากการแยกค่าสิงุลาร์เพิ่มเติม
- w: น้ำหนักสำหรับแต่ละจุดข้อมูล (ค่าเริ่มต้น: None)
ขั้นตอนการทำงาน
1. นำเข้าไลบรารีที่จำเป็น
import numpy as np
from numpy.polynomial import polynomial as P
2. สร้างพิกัด x และ y
x = np.linspace(-1, 1, 51)
y = x**3 - x + np.random.randn(len(x))
3. หาการเหมาะสมแบบ Least-squares
c, stats = P.polyfit(x, y, 3, full=True)
print("\nResult (coefficients)...\n", c)
print("\nResult (stats)...\n", stats)
ตัวอย่างโค้ดสมบูรณ์
import numpy as np
from numpy.polynomial import polynomial as P
# พิกัด x
x = np.linspace(-1, 1, 51)
print("X Co-ordinate...\n", x)
# พิกัด y (พร้อม雜訊สุ่ม)
y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n", y)
# หาการเหมาะสมแบบ Least-squares ดีกรี 3
c, stats = P.polyfit(x, y, 3, full=True)
print("\nResult (coefficients)...\n", c)
print("\nResult (stats)...\n", stats)
ผลลัพธ์ตัวอย่าง
X Co-ordinate...
[-1. -0.96 -0.92 ... 0.96 1. ]
Y Co-ordinate...
[ 0.2428 -0.4832 -1.1807 ... -0.7584]
Result (coefficients)...
[-0.1720 -1.8411 0.0944 2.3903]
Result (stats)...
[array([60.4365]), 4, array([1.3845, 1.3212, 0.5044, 0.2885]), 1.1324e-14]
สรุป
ฟังก์ชัน polyfit() หาสัมประสิทธิ์พหุนามที่ทำให้ผลรวมกำลังสองของข้อผิดพลาดน้อยที่สุด ในตัวอย่าง พหุนามดีกรี 3 ถูกเหมาะกับข้อมูลที่มีการรบกวนสุ่ม สัมประสิทธิ์ที่ได้ประมาณ [c₀, c₁, c₂, c₃] สำหรับพหุนาม c₀ + c₁x + c₂x² + c₃x³