Sunday, January 19, 2014

เขียนโปรแกรมภาษา c++ : ตัวอย่างการบวกและคูณ เมตริกซ์

เขียนโปรแกรมภาษา c++ ในบทความนี้จะขอยกตัวอย่างการประยุกต์ใช้ Dynamics Array และการเรียกใช้ฟังก์ชันมาช่วยในการดำเนินการบวกและคูณเมตริกซ์ ซึ่งเป็นตัวอย่างแสดงการเรียกใช้ฟังก์ชั่นต่างๆ ก่อนที่บทความต่อไปจะนำเสนอ การเขียนโปรแกรมภาษา c++ สำหรับดำเนินการทางเมตริกซ์แบบสมบูรณ์ สามารถนำไปใช้งานได้โดยง่ายครับ
ในลำดับแรกของการเขียนโปรแกรมนี้ เราจะสร้างตัวแปรโครงสร้างขึ้นมาชนิดหนึ่งประกาศไว้ตอนต้นของโปรแกรม นั่นคือตัวแปรโครงสร้าง Matrix ซึ่งภายในประกอบด้วยตัวแปรที่เก็บค่าจำนวนแถว จำนวนหลักและตัวแปรพอยเตอร์สำหรับเก็บสมาชิกในเมตริกซ์ ดังนี้ครับ
struct Matrix
{
int r ; // rows
int c; // columns
float **m;  // data
};

ลำดับถัดมาเป็นการสร้างฟังก์ชันสำหรับใช้ในการดำเนินการระหว่างเมตริกซ์ โดยในตัวอย่างนี้จะมีทั้งหมด 5 ฟังก์ชั่นดังนี้
1. ฟังก์ชั่น creatematrix ทำหน้าที่สร้าง matrix ขึ้นมา โดยจะคืนค่าเป็นตัวแปรโครงสร้างชนิด Matrix ซึ่งจะรับค่าจำนวนแถว(iRow) และ จำนวนหลัก(iCol) ของ Matrix ที่ต้องการสร้างรูปแบบดังนี้
Matrix creatematrix(int iRow,int iCol)


2. ฟังก์ชั่น plusmatrix ทำหน้าที่ดำเนินการบวก matrix สองเมตริกซ์ โดยจะคืนค่าเป็นตัวแปรโครงสร้างชนิด Matrix ซึ่งจะรับค่าเป็น matrix 2 matrix ที่ต้องการนำมาดำเนินการบวกกัน มีรูปแบบดังนี้
Matrix plusmatrix(Matrix a , Matrix b)


3. ฟังก์ชั่น mulMatrix ทำหน้าที่คูณเมตริกซ์ด้วยค่าคงที่ โดยจะคืนค่าเป็นตัวแปรโครงสร้างชนิด Matrix ซึ่งจะรับค่า 2 ค่าคือ ค่าคงที่ที่นำมาคูณ และ matrix ที่ต้องการมาดำเนินการคูณด้วยค่าคงที่ มีรูปแบบดังนี้
Matrix mulMatrix(float fm ,Matrix a)


4. ฟังก์ชั่น Product ทำหน้าที่ดำเนินการคูณระหว่างเมตริกซ์ โดยจะคืนค่าเป็นตัวแปรโครงสร้างชนิด Matrix ซึ่งจะรับค่าเมตริก 2 เมตริกซ์ ที่ต้องการมาดำเนินการคูณระหว่างเมตริกซ์ มีรูปแบบดังนี้
Matrix Product(Matrix a , Matrix b)


5. ฟังก์ชั่น freedynamicarray ทำหน้าที่คืนหน่วยความจำให้ระบบหลังการใช้งาน Dynamic Array ทั้งหมดของโปรแกรม

เรามาดู Main Program ของการเขียนโปรแกรม แสดงการบวกและคูณเมตริกซ์กันครับ


มาดูผลลัพธ์จากการคอมไพล์ครับ

ผลการคอมไฟล์โปรแกรม การคูณกันระหว่างเมตริกซ์

จากตัวอย่างการเขียนโปรแกรมที่ได้นำเสนอมา จะพบว่าการที่จะเขียนโปรแกรมให้สมบูรณ์จะต้องเพิ่มโค้ดในการตรวจจับความผิดพลาดของการคำนวณทางตัวเลขเพื่อป้องกันความผิดพลาดที่จะเกิดขึ้น จากตัวอย่างนี้เราจะพัฒนาโปรแกรมให้มีความสมบูรณ์มากขึ้นโดยจะเพิ่มการลบเมตริกซ์ การสร้างเมตริกซ์มาตรฐานต่างๆ ตัวดำเนินการแยกองค์ประกอบเมตริกซ์ และสุดท้ายการกำหนดสมาชิกในเมตริกจากการอ่านข้อมูลรูปแบบ text file ที่ผมได้นำเสนอไปแล้วในบทความก่อนหน้านี้ ซึ่งจะทำให้การใช้งานโปรแกรมนี้สามารถใช้งานได้ง่ายที่สุด นอกจากนี้จะทำการพัฒนา Class CMatrix เพื่อให้ผู้ที่สนใจนำไปประยุกต์ใช้งานกับการสร้าง Application ต่างๆ ต่อไป โดยจะเพิ่มความสามารถในการแก้ระบบสมการเพื่อนำไปใช้ในการแก้ปัญหาทางวิศวกรรมและระเบียบวิธีไฟไนต์เอลิเมนต์ต่อไปครับ

หัวข้อที่น่าสนใจ







No comments :

Post a Comment