เขียน MATLAB ให้เร็วขึ้น


สำหรับ MATLAB นั้น มันเป็นกรอบการทำงานที่ครอบจักรวาลเกินไป ตัวใหญ่และ
อ้วน แม้แต่คนของ Mathworksเองก็รู้อะไรไม่เยอะ การเขียน m-files ให้เร็วขึ้น
จึงเป็นเรื่องพึงปรารถณา (Toolbox ควรจะเขียนเป็น m-files เพราะพัฒนาต่อยอด
ได้ง่าย การทำงานแบบวิเคราะห์หรือสังเคราะห์ ความเร็วไม่ใช่เรื่องจำเป็นนัก Prof.
S. Boyd เนี่ยแหละบอกว่ามันรันช้านัก ก็ไปเที่ยวปีหนึ่งแล้วค่อยกลับมาทำงานต่อ
มันก็เร็วแล้วหล่ะ) เพราะการทำงานในขั้นตอนพัฒนานั้นต้องการความเร็ว เพื่อให้
ผู้พัฒนาสามารถพัฒนาได้เร็วขึ้น ขืนรัน MATLAB เพื่อแสดงผลทีข้ามวันย่อมไม่
ใช่ผลดี วันนี้มีตัวอย่างการเขียน MATLAB ให้เร็วขึ้น ดูตัวอย่างนี้ครับ

D(t) =\displaystyle{\left\{\sum^{n_a}_{i=1}[a_i-\hat{a}_i(t)]^2+ \sum^{n_b}_{i=0}[b_i-\hat{b}_i(t)]^2\right\}^{1/2}}

ตัวอย่างนี้ดีมาก ๆ

D = sqrt((sum(a-ah(t)))^2 + (sum(b-bh(t)))^2);

ง่าย ๆ แบบนี้

ถ้าใช้ความรู้ทางพีชคณิตเชิงเส้นก็จะทำแบบนี้

D = sqrt((a-ah(t))’*(a-ah) + (b-bh(t))’*(b-bh(t)));

วิธีไหนที่เร็วกว่ากัน คิดกันง่าย ๆ ถ้า a, b เป็นเวกเตอร์ที่มีสมาชิก n ตัว แบบที่
หนึ่งจะมีการบวกกัน 2n +1 ครั้ง และมีการยกกำลังสองหรือคูณ 2 ครั้ง นั้นคือมีการกระทำ
ทางพีชคณิต 2n+3 ครั้งแล้วค่อยถอดรากที่สอง ในขณะที่แบบที่สอง มีการคูณกัน 2n ครั้ง มี
การบวกกัน 1 ครั้ง นั้นคือมีการกระทำทางพีชคณิต 2n+1 ครั้ง (ไม่นับการ transpose ซึ่ง
เสียเวลาเหมือนกัน) ไม่น่าเชื่อแบบที่สองช้ากว่าแบบแรกเกือบสองเท่าทีเดียว (เมื่อปริมาณ
ข้อมูลเพิ่มขึ้น)

Advertisements

2 comments on “เขียน MATLAB ให้เร็วขึ้น

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s