แนวคิด
กำหนดลิสต์係数 (coefficients) ของพหุนาม และค่า x แล้วคำนวณค่าฟังก์ชัน P(x) = a₀xⁿ + a₁xⁿ⁻¹ + ... + aₙ โดยลิสต์เรียงจากชั้นสูงสุดไปต่ำสุด
ตัวอย่างโค้ด
my_list = [3, -6, 3, -1, 23, -11, 0, -8] # 3x⁷ -6x⁶ +3x⁵ -x⁴ +23x³ -11x² +0x -8
print("Coefficients:", my_list)
x = 3
my_list_length = len(my_list)
my_result = 0
for i in range(my_list_length):
my_sum = my_list[i]
for j in range(my_list_length - i - 1):
my_sum = my_sum * x
my_result = my_result + my_sum
print(f"P({x}) =", my_result)
ผลลัพธ์
Coefficients: [3, -6, 3, -1, 23, -11, 0, -8]
P(3) = 3349
วิธีที่ดีกว่า: Horner's Method
def horner(coeffs, x):
result = 0
for c in coeffs:
result = result * x + c
return result
# ทดสอบ
print(horner([3, -6, 3, -1, 23, -11, 0, -8], 3)) # 3349
ใช้ NumPy (แนะนำสำหรับงานจริง)
import numpy as np
coeffs = [3, -6, 3, -1, 23, -11, 0, -8]
print(np.polyval(coeffs, 3)) # 3349
คำอธิบาย
- โค้ดต้นฉบับใช้อัลกอริทึม naive O(n²) คูณซ้ำหลายครั้ง
- Horner's Method ลดความซับซ้อนเป็น O(n) คำนวณได้เร็วกว่ามาก
- NumPy
polyvalถูก optimize และจัดการ numerical stability ดี