ความคิดเห็นที่ 5

คราวนี้ ตามคำเรียกร้องครับ จะขออนุญาตลองทำแบบ Lagrange ให้ดูนะครับ เป็นวิธีหนึ่งในการทำ polynomial interpolation ครับ
สมมติว่าเราต้องการจะหารูปทั่วไปของลำดับ 1,5,14,30,... (ผลบวกของ n2 นั่นเอง) ด้วย polynomial ยกกำลังสาม (degree 3) โดยใช้ 4 ค่าแรกในลำดับดังกล่าวนะครับ
ก่อนอื่นขออนุญาต เปลี่ยนรูปจากลำดับ ให้เป็นคู่ลำดับสำหรับ x = 1,2,3,4,... ก่อนนะครับ จะได้ว่า (xi,yi) = (1,1), (2,5), (3,14), (4,30)
แนวคิดของ Lagrange นั้น ตรงไปตรงมามากครับ คือเขาว่า ถ้า f(x) เป็น polynomial ที่ผ่านคู่ลำดับทั้ง 4 ดังกล่าวแล้ว f(x) = y1*f1(x) + y2*f2(x) + y3*f3(x) + y4*f4(x)
โดยที่ f1(x) จะมีคุณสมบัติคือ f1(x1) = 1 และจะมีค่า f1(x) = 0 เมื่อ x = x2, x3, หรือ x4 ดังนั้น f1(x) ก็ต้อง = (x - x2)(x - x3)(x - x4)/(x1-x2)(x1-x3)(x1-x4)
ด้วยความคิดเดียวกัน (f2(x2) = 1 และจะมีค่า f2(x) = 0 เมื่อ x = x1, x3, หรือ x4 ฯลฯ) เราจะหา f2(x), f3(x), และ f4(x) ได้ดังนี้
f2(x) = (x - x1)(x - x3)(x - x4)/(x2-x1)(x2-x3)(x2-x4) f3(x) = (x - x1)(x - x2)(x - x4)/(x3-x1)(x3-x2)(x3-x4) f4(x) = (x - x1)(x - x2)(x - x3)/(x4-x1)(x4-x2)(x4-x3)
เมื่อทราบ f ย่อยต่างๆ แล้ว ก็สามารถเอาค่า x,y,f ย่อยแต่ละตัวแทนค่าใน f(x) = y1*f1(x) + y2*f2(x) + y3*f3(x) + y4*f4(x) จะได้ผลดังนี้ครับ
f1(x) = (x-2)(x-3)(x-4)/(-1)(-2)(-3) = -(x-2)(x-3)(x-4)/6 = (1/6)(-x3+9x2-26x+24) f2(x) = (x-1)(x-3)(x-4)/(1)(-1)(-2) = (x-1)(x-3)(x-4)/2 = (1/6)(3x3-24x2+57x-36) f3(x) = (x-1)(x-2)(x-4)/(2)(1)(-1) = -(x-1)(x-2)(x-4)/2 = (1/6)(-3x3+21x2-42x+24) f4(x) = (x-1)(x-2)(x-3)/(3)(2)(1) = (x-1)(x-2)(x-3)/6 = (1/6)(x3-6x2+11x-6)
ดังนั้น
f(x) = 1/6 [ -(x-2)(x-3)(x-4) + 15(x-1)(x-3)(x-4) - 42(x-1)(x-2)(x-4) + 30(x-1)(x-2)(x-3) ] f(x) = 1/6 [ -x3+9x2-26x+24 + 15x3-120x2+285x-180 + -42x3+294x2-588x+336 + 30x3-180x2+330x-180 ] f(x) = 1/6 [ 2x3 + 3x2 + x ] f(x) = 1/6 [ x(2x+1)(x+1) ]
แนวคิดไม่ยากครับ จุดอ่อนมีนิดเดียว ตอนบวกลบ polynomial นี่แหละ ผมถึงคิดว่า Newton form น่าจะเร็วกว่ามาก เวลาทำด้วยมือ degree สูงๆ ครับ.
จากคุณ :
ลุงแว่นใจดี
- [
26 ธ.ค. 51 23:20:37
]
|
|
|