จงเชื่อคำเตือนของ MATLAB

ผมเองรู้เรื่องตัวแปรที่ไม่ต้องกำหนดขนาดก่อนใช้งานมานานแล้ว ซึ่งเป็นที่รู้กันดีว่าการใช้ตัวแปรแบบนี้มันทำให้โปรแกรมทำงานช้าลง แต่ไม่เคยรู้มาก่อนเลยว่ามันจะช้าขนาดนี้
ผมจำเป็นต้องวาดกราฟของการลู่เข้าของค่าพารามิเตอร์ซึ่งมีประมาณ 2 หมื่นค่า อาจจะสร้างเล่น ๆ ได้ดังนี้
theta = [];
for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end
ลองรันชุดคำสั่งข้างบนดู จะพบว่าลุกไปกินกาแฟหรือเข้าห้องน้ำตัวโปรแกรมก็อาจจะยังทำงานไม่เสร็จ มาลองแก้ไขชุดคำสั่งข้างบน โดยเพิ่มบรรทัดขึ้นอีกหนึ่งบรรทัด (การเพิ่มคำสั่งเข้าไปน่าจะทำให้โปรแกรมทำงานช้าลง) ดังนี้
theta = [];
theta = zeros(20,20000);
for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end
ลองรันชุดคำสั่งที่สองดู ยังไม่ทันกระพริบตาก็เสร็จแล้ว ซึ่งชุดคำส่งแรกใช้เวลาประมาณ 170 วินาที เกือบ ๆ สามนาที ในขณะที่ชุดคำสั่งที่สองใช้เวลาเกือบ 0.1 วินาที ซึ่งต่างกันมากทีเดียว
ก็ไม่แปลก เพราะเวลาไม่ได้กำหนดขนาดของอะเรย์ เวลามีการขยายหรือทำอะไรกับมัน ย่อมน่าจะมีกระบวนการต่าง ๆ พอสมควร (ผมไม่รู้และไม่สนใจ) แต่ที่แปลกคือมันต่างกันขนาดนี้เลยเหรอ ดังนั้นแล้วเวลาใช้งาน MATLAB ก็ควรจะใส่ใจต่อคำเตือนของ IDE ของ MATLAB ด้วย

มาฆ่า eps ให้ตายกันดีกว่า

ความจำเป็นในการใช้ format eps นั้นคืออะไรหรือ ฆ่ามันให้ตายซะ มันเป็นตัวปัญหาซะมากกว่า ไร้สาระถ้าจะคงไว้เพื่อ pstricks ยกเลิกซะแล้วหันไปพัฒนา pgf กันเถอะ ทำไมเราจะต้องทำแบบ xfig ที่จะต้องสร้างรูปแบบ eps หรือ pdf จากนั้นก็สร้าง LaTeX ไฟล์คร่อมมัน ทำไมเราไม่ทำทุกอย่างเป็นคำสั่งแบบ pgf
เลิกใช้ xfig กันเถอะ

Very fat matrices (Matrix with more than 10 columns)

ใน amsmath นั้นกำหนดค่าสำหรับคอลัมน์สำหรับคำสั่งในการสร้างเมตริกซ์ไว้แค่ 10 คอลัมน์เท่านั้น
การจะเพิ่มจำนวนคอลัมน์นั้นทำได้โดยการกำหนดค่า MaxMatrixCols ให้เกินสิบ ดังนี้
\setcounter{MaxMatrixCols}{20}
เป็นอันเสร็จเรื่อง

Why shouldn’t use determinant to check the singularity of matrices

เป็นที่รู้กันมาตั้งแต่ชั้นมัธยมแล้วว่าเราจะหาส่วนกลับของเมตริกซ์ได้ก็ต่อเมื่อค่า determinant ไม่ เท่ากับเมตริกซ์ 0 พอเรียนสูงขึ้นเขาก็บอกว่าไม่ให้ทำแบบนี้นะ เพราะสภาวะทางตัวเลขที่คำนวณ ด้วย determinant นั้นไม่ดี ให้ตรวจสอบด้วย Rank และการหา Rank ของเมตริกซ์ที่ดีที่สุดก็ให้ใช้ Singular Value Decomposition ซึ่งเมตริกซ์ที่จะหาส่วนกลับได้นั้นจะต้อง full Rank
ส่วนตัวไม่เคยเชื่อคำแนะนำนี้เลยครับ เพราะไม่เคยเจอ ตัวอย่างที่ได้เห็นส่วนใหญ่ก็ตัวเลขที่มัน แปลก ๆ วันนี้เจอแล้วครับ
     3825       -1713       -1061        -497         710        -502       -3471      3136     -1713        3834       -1632         161        -527         722        -412      [...]