วันอาทิตย์ที่ 5 กันยายน พ.ศ. 2553

VBA Excel ตอน ระเบียบวิธีการทำซ้ำ (Interation)

สวัสดีครับท่านผู้อ่าน How to excel ทุกท่านครับ บทความที่อยากจะนำเสนอในวันนี้ก็คือ ระเบียบวิธีการทำซ้ำแบบหนึ่งจุด (one-point interation method) ซึ่งหากท่านผู้อ่านได้ติดตามการนำเสนอบทความของผมในกลุ่มของการคำนวณทางวิศวกรรมด้วยระเบียบวิธีเชิงตัวเลข จะเห็นว่าผมได้นำเสนอการใช้ Goal Seek ซึ่งเป็น Excel function ที่ใช้ในการหาค่าเป้าหมาย โดยผมได้นำเสนอการประยุกต์ใช้ในการหารากของสมการ การแก้ปัญหาในด้านการออกแบบ เป็นต้น โดยพบว่าหลักของการคำนวณของฟังก์ชัน Goal Seek เป็นลักษณะของการทำซ้ำ โดยเริ่มจากการกำหนดค่าเริ่มต้น และ Excel จะทำการลองผิดลองถูก จนกระทั่งได้ค่าผลลัพธ์ตามเป้าหมายที่กำหนด ระเบียบวิธีการทำซ้ำก็เป็นอีกวิธีการหนึ่งที่ใช้ในการหารากของสมการ(ค่าเป้าหมาย) โดยเป็นวิธีการที่สามารถทำได้โดยง่าย โดยหลักการของระเบียบวิธีการทำซ้ำ คือการจัดฟังก์ชัน ที่กำหนดมาให้มีค่า x อยู่ตัวเดียวโดดๆทางด้านซ้ายของสมการ เช่น

f(x) = 3x^3 – 20x^2 + 1000x + 12000 = 0

ทำการจัดสมการใหม่ได้เป็น

x = (-3x^3 +20x^2 –12000)/1000

และให้เขียนสมการนี้ในรูปแบบของการทำซ้ำ ได้ดังนี้

x(i+1) = (-3xi^3 + 20xi^2 – 12000)/1000

หมายถึงว่าให้คำนวณค่า x(i+1) ซึ่งเป็นค่าใหม่ จากสมการด้านขวาซึ่งประกอบด้วยค่า xi เก่า

บางครั้งฟังก์ชันที่ต้องการหารากไม่มีเทอมที่ประกอบด้วยค่า x เดี่ยวๆที่สามารถแยกออกได้ง่ายเช่น

cos x - xe^x = 0

ให้ทำการบวกค่า x ใดๆลงในสมการทั้งสองข้างจะได้ว่า

x = cos x - xe^x + x

และจัดสมการให้อยู่ในรูปแบบของการทำซ้ำได้เป็น

x(i+1) = cos xi - xie^xi + xi

เงื่อนไขการยุติการทำซ้ำจะพิจารณาการเปลี่ยนแปลงของค่า x(i+1) และ x(i) โดยกำหนดเป็นค่าความผิดพลาดโดยประมาณ เท่ากับ (x(i+1) – x(i))/x(i+1)

จากรูปแบบการทำซ้ำเราสามารถนำไปเขียนเป็นฟังก์ชันย่อยใน VBA เพื่อค้นหาค่าเป้าหมาย (รากของสมการ) โดยการทำซ้ำ สามารถเขียนโค้ดใน VBA ได้ดังนี้

Function OnePointInter(init As Double) As Double

Dim error As double

Dim xold As double

Dim xnew As double

error = 1

xold = init

Do While error > 0.01

xnew = Cos(xold) – xold*Exp(xold) + xold

error = abs((xnew – xold)/xnew)*100

xold = xnew

Loop

OnePointInter = xnew

End Function

จาก VBA code ท่านผู้อ่านจะเห็นว่า มีการทำซ้ำใน Do While…Loop โดยการทำซ้ำจะยุติลงหากค่าความผิดพลาดโดยประมาณมีค่าน้อยกว่า 0.01% น่าสนใจอยุ่ไม่น้อยนะครับว่าหากเราเดาค่าเริ่มต้นได้ไม่เหมาะสม(ดูเทคนิดการเดาค่าเริ่มต้น) เราอาจจะหารากของสมการหรือค่าเป้าหมายไม่เจอเลยก็ได้ครับ ซึ่งก็จะทำให้เกิดการทำซ้ำอยู่ใน Do While…Loop ตลอดไป ซึ่งก็จะส่งผลให้ไฟล์ excel ของเราแฮงค์ได้ครับ ลองฝากท่านผู้อ่านเป็นการบ้านหน่อยครับว่าหากเราอยากให้การทำซ้ำยุติลงในกรณีที่เกิดการลู่ออกของผลลัพธ์ จะต้องกำหนดเงื่อนไขการทำซ้ำอย่างไรดี เดี๋ยวในโอกาสต่อไปจะมานำเสนอโอกาสของการลู่ออกของระเบียบวิธีการทำซ้ำว่าจะเป็นไปในรูปแบบใดบ้าง สวัสดีครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Yahoo bot last visit powered by  Ybotvisit.com