Posted on February 19, 2009 by tsvhh
ผมเองรู้เรื่องตัวแปรที่ไม่ต้องกำหนดขนาดก่อนใช้งานมานานแล้ว ซึ่งเป็นที่รู้กันดีว่าการใช้ตัวแปรแบบนี้มันทำให้โปรแกรมทำงานช้าลง แต่ไม่เคยรู้มาก่อนเลยว่ามันจะช้าขนาดนี้
ผมจำเป็นต้องวาดกราฟของการลู่เข้าของค่าพารามิเตอร์ซึ่งมีประมาณ 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 ด้วย
Filed under: MATLAB, MATLAB Tips and Tricks, บันทึกช่วยจำ | Leave a Comment »
Posted on February 16, 2009 by tsvhh
ความจำเป็นในการใช้ format eps นั้นคืออะไรหรือ ฆ่ามันให้ตายซะ มันเป็นตัวปัญหาซะมากกว่า ไร้สาระถ้าจะคงไว้เพื่อ pstricks ยกเลิกซะแล้วหันไปพัฒนา pgf กันเถอะ ทำไมเราจะต้องทำแบบ xfig ที่จะต้องสร้างรูปแบบ eps หรือ pdf จากนั้นก็สร้าง LaTeX ไฟล์คร่อมมัน ทำไมเราไม่ทำทุกอย่างเป็นคำสั่งแบบ pgf
เลิกใช้ xfig กันเถอะ
Filed under: Software | Leave a Comment »
Posted on February 5, 2009 by tsvhh
ใน amsmath นั้นกำหนดค่าสำหรับคอลัมน์สำหรับคำสั่งในการสร้างเมตริกซ์ไว้แค่ 10 คอลัมน์เท่านั้น
การจะเพิ่มจำนวนคอลัมน์นั้นทำได้โดยการกำหนดค่า MaxMatrixCols ให้เกินสิบ ดังนี้
\setcounter{MaxMatrixCols}{20}
เป็นอันเสร็จเรื่อง
Filed under: LaTeX, Math Mode, package | Tagged: amsmath, บันทึกช่วยจำ | Leave a Comment »
Posted on February 3, 2009 by tsvhh
เป็นที่รู้กันมาตั้งแต่ชั้นมัธยมแล้วว่าเราจะหาส่วนกลับของเมตริกซ์ได้ก็ต่อเมื่อค่า 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 [...]
Filed under: MATLAB, MATLAB Tips and Tricks, บันทึกช่วยจำ | Tagged: บันทึกช่วยจำ, determinant, matrix | Leave a Comment »