Site hosted by Angelfire.com: Build your free website today!


โปรแกรมวิเคราะห์สมการโพลีโนเมียล


คุณ S(2) ได้สอบถามถึงการใช้โปรแกรม EXCEL ในการหาสมการโพลีโนเมียล สำหรับ fitting ข้อมูลการทดลอง
ซึ่งเราใช้โปรแกรมที่ผมได้อธิบายไว้ที่นี่ ได้ครับ

ข้อมูลดิบของการทดลอง

กราฟ fitting ข้อมูลด้วยเส้นตรงที่ผ่านจุดกำเนิด (0,0)

กราฟเส้นตรงที่ไม่ผ่านจุดกำเนิด ; y = mx + c

กราฟ fitting ข้อมูล polynomial ดีกรี 3
y = 1.073E-04x^3 + -1.093E-02x^2 + 1.585E-01x + 1.435E-02

ผลสรุปผลการ fit ข้อมูล

ตัวอย่างวิธีการเขียนฟังก์ชั่นแทนค่าสมการโพลีโนเมียลใน EXCEL2000 ด้วย VBA6.0 และฟังก์ชั่น อินทิเกรตระหว่างช่วงที่กำหนด
วิธีการ access VBA6.0 ก็เพียงกด ALT-F11 ในสมุดงาน EXCEL ครับ

ตัวโปรแกรมแทนค่าโพลีโนเมียลโดยพิมพ์คำสั่ง
=PracSubs(เลขจำนวนจริง)
และโปรแกรมอินทิเกรตโดยพิมพ์คำสั่ง
=PracINT(เลขจำนวนจริงค่าเริ่มต้น, เลขจำนวนจริงค่าสิ้นสุด)

เราสามารถใส่ค่าสัมประสิทธิ์ของโพลีโนเมียลที่ fit ผลการทดลองดี ๆ ได้ครับ
และผลการอินทิเกรตระหว่างช่วงของค่า x ที่สนใจก็คือ พื้นที่ใต้กราฟของ การทดลองนั่นเอง
ดาวน์โหลดโปรแกรม

ตัวอย่างในการหาพื้นที่ใต้กราฟที่คุณ S(2) ยกตัวอย่างมา
แทนที่เราจะ fit สมการโพลีโนเมียลเข้าไปหมดทั้งชุดข้อมูล
เราสามารถแบ่งข้อมูลออกเป็นสามส่วนได้ครับ โดย
ส่วนที่หนึ่งเริ่มตั้งแต่ x = -64 ถึง x = 44
ส่วนที่สองเริ่มตั้งแต่ x = 44 ถึง x = 148 และ
ส่วนที่สามเริ่มตั้งแต่ x = 148 ถึง x = 280

ซึ่งเราจะได้สมการสำหรับส่วนที่หนึ่ง...
y = 2.600E-12x^6 + 6.518E-10x^5 + 3.687E-09x^4 +-3.479E-06x^3 + -1.344E-05x^2 + 1.088E-02x + 2.937E-01

สมการสำหรับส่วนที่สอง...
y = 1.626E-14x^6 + -4.455E-12x^5 + -3.919E-09x^4 +1.666E-06x^3 + -2.440E-04x^2 + 1.575E-02x + 2.386E-01

สมการสำหรับส่วนที่สาม...
y = -1.379E-08x^4 +1.252E-05x^3 + -4.155E-03x^2 + 5.920E-01x + -2.999E+01

เมื่อพลอตสมการทั้งสามรวมกันบนกราฟเดียว
จากกราฟจะเห็นว่าเราสามารถขยายส่วนที่สองไปให้ไกลกว่า x=148 เพราะส่วนต้น ๆ ของ ส่วนที่สามทำนายการทดลองได้ไม่ดีเท่าไรครับ

ผลการอินทิเกรตส่วนที่หนึ่งของกราฟ

ผลการอินทิเกรตส่วนที่สองของกราฟ

ผลการอินทิเกรตส่วนที่สามของกราฟ

ดังนั้นแล้วรวมพื้นที่ใต้กราฟทั้งสิ้น 126.3 ตารางหน่วย


คุณม้าหงอย

ผมสงสัยนิดนึงว่าทำไมเราต้องมาเขียนโปรแกรมหาสมการ trendline อีกล่ะครับ ในเมื่อ EXCEL ก็ให้ function นี้มาแล้ว แล้ว R^2 ก็น่าจะเพียงพอในการตัดสินใจว่าสมการนั้น fit กับ data แค่ไหน จำเป็นต้องหา RSS ด้วยเหรอครับ

นอกจากนี้ผมเห็นว่า trendline ชนิด polynomial นั้นไม่ค่อยได้ใช้เลย เพราะความสัมพันธ์ของตัวแปรต่างๆในการทดลองมันซับซ้อนกว่านั้นมาก ที่ได้ใช้มากๆก็คือ linear regression ซึ่งใช้กับ zero order kinetic ทั่วๆไป ดังนั้นการให้ EXCEL สร้างสมการมาเพื่อ fit กับ data เพื่อหาความสัมพันธ์หรือพื้นที่ใต้กราฟ ในทางปฏิบัติแล้ว เป็นไปได้ยากที่จะได้ goodness of fit สูงๆ

วิธีนึงที่ง่ายต่อการปฏิบัติคือการแบ่งกราฟออกเป็นส่วนย่อยๆแล้วหาพื้นที่ของสี่เหลี่ยมใต้กราฟ ซึ่งความถูกต้องจะขึ้นกับจำนวนช่วงกราฟที่แบ่ง ถ้าต้องการความถูกต้องสูงๆ ต้องแบ่งช่องละเอียด ซึ่งการเขียนโปรแกรมมา interpolate น่าจะ make sense กว่า แต่อย่างไรก็ตาม โปรแกรมทางสถิติก็มี function ในการหาพื้นที่ใต้กราฟอยู่แล้ว ไม่ต้องมานั่งแบ่งช่วงหรือเขียนโปรแกรมเอง


Practical x 2

ในกรณีที่มีข้อมูลชุดเดียวการสร้างโปรแกรมก็ไม่จำเป็นเท่าไรครับ แต่ถ้ามีข้อมูลหลายชุดและมีโอกาสที่สมการ โพลีโนเมียลตั้งแต่ดีกรี 2 - 6 fit กับข้อมูลได้ งานจะเริ่ม laborious และมีโอกาสผิดพลาดมากครับ ในบางกรณี ค่า R^2 ก็ไม่เพียงพอ ในการตัดสินว่าโพลีโนเมียลดีกรีใด fit ข้อมูลได้ดีกว่ากันครับ ค่า RSS จะช่วยในการตัดสิน ใจได้ อีกอย่างหนึ่งการเขียนโปรแกรมเองทำให้เราเลือกได้ว่าต้องการให้ความละเอียดของสมการเป็นเท่าใด ด้วยครับ มีหลายกรณีทีเดียวที่พอใช้ Trendline ของ EXCEL แล้วกราฟที่แสดงออกมากับข้อมูล fitting ตาม ความเป็นจริงไม่ตรงกัน เพราะ built-in Trendline ของ EXCEL ไม่ละเอียดพอครับ (มีตัวอย่างจากผู้ใช้งาน EXCEL ในการสร้าง Trendline หลายท่านแล้วครับ รวมทั้งตัวผมเองด้วย) การเขียนโปรแกรมยังทำให้เราสกัดข้อมูลสัมประสิทธิ์ (ซึ่งมี 7 ตัว ในสมการโพลีโนเมียลดีกรี 6) ได้โดยอัตโนมัติครับ ทำให้ลดความลำบากและความผิดพลาด ในการทำลงได้มาก

การใช้สมการโพลีโนเมียลมีประโยชน์หลายอย่างในงานทางด้านเทคโนโลยีชีวภาพที่ยังไม่ถึงขั้น model สมการ ด้วย non-linear regression technique ครับ (เพราะขั้นนั้นจะใช้เวลาในการหาสมการมากกว่า และบางทีก็ไม่จำเป็นด้วย) เช่น ใช้หาค่าความชันของการเจริญเติบโตของจุลินทรีย์ในช่วง log phase หรือในการทำ ELISA เป็นต้นครับ และหลายกรณีสมการโพลีโนเมียลทำให้ได้ goodness of fit สูงครับ R^2 > 0.9990, ตัวโปรแกรมที่ผมทำขึ้นนี้เป็น request จากอาจารย์ที่ปรึกษาครับ (ผมสร้างโปรแกรม non-linear regression ไว้แล้วครับ) และคนในกลุ่มวิจัยก็ได้ใช้จริง ๆ (เืมื่อก่อนเขาใช้ MATLAB ทำ แต่หลักการก็เหมือนกัน ซ้ำยังลำบากมากกว่า เพราะต้องคีย์ข้อมูลจาก EXCEL เข้าไปใน MATLAB อีกทีหนึ่ง)

การแบ่งช่วงย่อยแล้วอินทิเกรตพื้นที่ย่อยเหล่านั้น (Trapezoidal rule) ก็เป็นเทคนิคที่ผมทำแต่เก่าก่อนครับ แต่มีข้อเสียคือถ้าต้องการให้ละเอียดก็ต้องพิมพ์ข้อมูลออกมาทาง printer พร้อม minor gridline และต้องลากเส้น smooth line ซึ่งอาจใช้มือวาดเอา หรือให้ EXCEL ลากให้ ก็แล้วแต่... วิธีนี้ยังช้าและความผิดพลาดก็ยังมีมากครับ ถ้าเรา ทราบสมการ fitting ข้อมูล จะทำให้การคำนวณเร็วกว่าและถูกต้องกว่า (โดยเฉพาะอย่างยิ่งถ้าสมการโพลีโนเมียล fit กับข้อมูลได้ดีมาก ๆ ซึ่งงานทางเทคโนโลยีชีวภาพมักจะเป็นเช่นนั้น) ส่วนโปรแกรมทางสถิติแม้จะทำได้ แต่ก็ต้อง ติดตั้งโปรแกรมเพิ่มเติม ใช้โปรแกรมลิขสิทธิ์ ซึ่งยุ่งยากไม่ใ่ช่เล่นและที่สำคัญคือต้องจ่ายเงินเพิ่มครับ (โดยเฉพาะในระดับภาควิชา) การใช้โปรแกรมที่มีอยู่แล้วจึงสะดวกกว่า ในกลุ่มวิจัยของผมครับ ^ ^


คุณ S(2)

ขอบคุณมากครับ

เลยถามต่อนิดนึง คือกราฟอันสุดท้ายน่ะครับ cd against crank angle ผมหาพื้นที่ใต้กราฟแล้วมันออกมาแปลกๆชอบกล เพื่อนผมที่ใช้วิธีแบ่งช่วงแล้วฟิตกราฟด้วยโพลิโนเมียลก็บอกว่าค่าที่ได้มันแปลกๆ ผมก็ไม่รู้ว่าผิดตรงไหน บางทีถ้าคุณ Practical x 2 มีเวลาก็อยากให้ช่วยลองดูหน่อยนะครับ

วิธีทำ ก็คือ หาพื้นที่ช่วงตั้งแต่ลบถึงศูนย์ ศูนย์ถึง๑๘๐ แล้วก็๑๘๐ขึ้นไป แยกกัน ให้เอาพื้นที่ส่วนกลาง คือ ๐ ถึง ๑๘๐ ลบด้วยพื้นที่ตั้งแต่ลบถึงศูนย์ และ ๑๘๐ขึ้นไป ทั้งหมดหารด้วย ๑๘๐ ออกมาเป็น mean discharg coefficient ซึ่งควรจะน้อยกว่า 0.36 จะแยกฟิตกราฟกี่ช่วงก็ได้นะครับ ผมได้มา 0.469 อ่ะ ทำไมก็ไม่รู้ ผมใช้วิธี numerical method เอา แต่มีความรู้สึกว่าใช้ฟังชันแล้วอินทีเกรทเอาผลมันออกมาแปลกๆ

ถ้าว่างก็ช่วยหน่อยนะครับ ขอบคุณครับ


Practical x 2

ผลการตรวจสอบขั้นที่หนึ่ง

จากข้อมูลของคุณ S(2) ดาวน์โหลดเอ็กซ์เซลไฟล์
ในตารางที่ 2 (ค่า CD กับ angle) ผมลองใช้โปรแกรม fitting ดูแล้ว ได้มา 3 สมการครับซึ่ง fit ข้อมูลได้ดีทั้ง 3 ช่วง

ช่วง -64 ถึง 0; สมการคือ y = 8.670E-12x^6 + -1.003E-09x^5 + -3.572E-07x^4 +-2.494E-05x^3 + -4.942E-04x^2 + 7.642E-03x + 2.950E-01 เมื่ออินทิเกรตแล้วได้พื้นที่ 4.89224 ตารางหน่วย

ช่วง 0 ถึง 180; สมการคือ y = 9.262E-14x^6 + -5.576E-11x^5 + 9.547E-09x^4 +-9.939E-08x^3 + -1.223E-04x^2 + 1.157E-02x + 2.945E-01 เมื่ออินทิเกรตแล้วได้พื้นที่ 102.268 ตารางหน่วย

ช่วง 180 ถึง 280; สมการคือ y = -2.521E-08x^4 +2.283E-05x^3 + -7.617E-03x^2 + 1.103E+00x + -5.800E+01 เมื่ออินทิเ้กรตแล้วได้พื้นที่ 12.3945 ตารางหน่วย

ดังนั้น MDC = (102.268-4.89224-12.3945)/180 = 0.472 ครับ


Practical x 2

ข้อแนะนำการใช้วิธีอื่นในการหาพื้นที่ใต้กราฟ เพื่อเปรียบเทียบ

ถ้ามีเครื่องชั่งทศนิยม 4 ตำแหน่งอยู่ เราสามารถ print กราฟออกมาแล้วตัดบริเวณที่เราต้องการไปชั่งน้ำหนัก แล้วเปลี่ยนเป็นค่าพื้นที่โดยชั่งน้ำหนักกระดาษที่เราทราบพื้นที่แน่นอนเช่น พื้นที่กรอบสี่เหลี่ยมของกราฟ X-Y เราเอา maximum scale ของแกน y และแกน x มาคูณกันก็จะทราบว่าพื้นที่ x*y มีน้ำหนักเท่านี้กรัม ดังนั้น ใช้วิธีเทียบบัญญัิตไตรยางค์เราก็จะทราบว่าพื้นที่ที่เราต้องการเป็นเท่าไร โดยเทียบกับน้ำหนักกระดาษครับ

เพื่อทดสอบว่าวิธีชั่งน้ำหนักกับการหาพื้นที่ใต้กราฟได้ผลตรงกันหรือไม่ ผมจึงใช้ Laser Printer พิมพ์กราฟ ออกมา (x-scale จาก -120 ถึง 300 และ y-scale จาก 0 ถึง 0.7 คิดเป็นพื้นที่ 294 ตารางหน่วย) ตัดเฉพาะ รูปสี่เหลี่ยมผืนผ้าของบริเวณกราฟออกมาแล้วชั่งได้ 0.8266 กรัม ต่อมาก็ตัดบริเวณ x = 0 ถึง 180 แล้วชั่ง ได้ 0.2876 กรัม หรือคิดเป็นพื้นที่ใต้กราฟได้ 0.2876*(294/0.8266) = 102.292 ตารางหน่วยครับ ซึ่ง ใกล้กับค่า 102.268 ตารางหน่วยที่เราหาได้จากวิธีอินทิเกรชั่น หรือ numerical method ที่คุณ S(2) หาได้

วิธีนี้ใช้กันในการหาพื้นที่ใต้กราฟที่ได้จากผลวิเคราะห์ของ NMR (Nuclear Magnetic Resonance) ครับ ในกรณีที่ เครื่อง NMR นั้นไม่มีโปรแกรมหาพื้นที่ใต้กราฟ...


หากมีข้อแนะนำกรุณาติดต่อที่อีเมลล์ : Practical_x_2@hotmail.com