ผลต่างระหว่างรุ่นของ "01204472/การทดลองเกี่ยวกับเมตริกซ์"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 69: | แถว 69: | ||
== Matrix norm == | == Matrix norm == | ||
− | ใน pylab มีฟังก์ชัน <tt>norm</tt> สำหรับหา norm ของเมตริกซ์ | + | ใน pylab มีฟังก์ชัน <tt>norm</tt> (จาก numpy) สำหรับหา norm ของเมตริกซ์ [http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html อ่าน reference] |
== การแก้ Linear equations == | == การแก้ Linear equations == |
รุ่นแก้ไขเมื่อ 07:23, 28 มิถุนายน 2555
- หน้านี้เป็นส่วนหนึ่งของวิชา 01204472
เราจะทดลองเกี่ยวกับเมตริกซ์ และการใช้งานโครงสร้างข้อมูล matrix ของ numpy
ตัวอย่างการใช้งาน
>>> a = matrix([[1,2,3],[4,5,6]]) >>> a matrix([[1, 2, 3], [4, 5, 6]]) >>> a.T matrix([[1, 4], [2, 5], [3, 6]]) >>> norm(a,2) # หา matrix norm 9.5080320006957209 >>> b = matrix([[7,8],[9,10],[11,12]]) >>> b matrix([[ 7, 8], [ 9, 10], [11, 12]]) >>> a*b matrix([[ 58, 64], [139, 154]])
เนื้อหา
Orthogonal matrices
เราจะทดลองสร้าง orthogonal matrices โดยการหาเวกเตอร์ที่ตั้งฉากกัน
สุ่มเวกเตอร์
ใน pylab เราสามารถสุ่มเวกเตอร์ได้โดยใช้คำสั่ง rand [1] ซึ่งจะสามารถสร้าง array ตามมิติที่เราระบุได้ เช่น
>>> rand(5) array([ 0.46074869, 0.45697852, 0.72675971, 0.87655621, 0.59247653])
เราสามารถสร้างเมตริกซ์จาก array ดังกล่าวได้โดยสั่ง matrix แต่เมตริกซ์ที่ได้จะเป็นเมตริกซ์ที่มี 1 แถว ไม่ใช่คอลัมน์เวกเตอร์ที่เราต้องการ แต่เราสามารถ transpose ได้โดยเรียก attribute T ของผลลัพธ์ดังกล่าว เช่น
>>> matrix(rand(5)).T matrix([[ 0.50004005], [ 0.41567827], [ 0.56018141], [ 0.37370744], [ 0.29102686]])
จงเขียนฟังก์ชัน runit(n) ที่สุ่มเวกเตอร์ที่มีขนาด 1 หน่วยที่มีขนาด n
เวกเตอร์ที่ตั้งฉากกัน
ในส่วนนี้ เราจะสนใจกรณีของเวกเตอร์ขนาด 5 เท่านั้น ใช้ฟังก์ชัน runit() สุ่มเวกเตอร์ v1 จากนั้นสุ่มเวกเตอร์ u2 ให้ทดสอบว่าเวกเตอร์ u2 นั้นขนานกับ v1 หรือไม่ (มีโอกาสน้อยมากที่จะเกิดขึ้น) จากนั้นให้คำนวณหา
- เวกเตอร์ u2a และ u2b ที่ u2 = u2a + u2b และ u2a นั้นตั้งฉากกับ v1
- ให้เวกเตอร์ v2 เท่ากับเวกเตอร์ที่มีทิศทางเดียวกับ u2a แต่มีขนาด 1 หน่วย
- ทดลองได้ว่า v2.T * v1 เท่ากับ 0 หรือไม่
จากขั้นตอนดังกล่าว เราจะสามารถสุ่มเวกเตอร์ v3 ที่ตั้งฉากกับทั้ง v1 และ v2 ได้
ให้เขียนฟังก์ชัน randorth(vlist,n) ที่รับรายการของเวกเตอร์ขนาด n และคือ unit vector ที่ตั้งฉากกับเวกเตอร์ทุกเวกเตอร์ในรายการ
ให้ใช้ฟังก์ชันดังกล่าว หาเวกเตอร์ v3, v4, และ v5 ที่เป็น unit vector ที่ตั้งฉากกันทั้งหมด
หมายเหตุ: ทดลองหา vector v6 ที่ตั้งฉากกับทุก ๆ เวกเตอร์
เมื่อเราได้เวกเตอร์ที่มีคุณสมบัติดังกล่าวแล้ว เราสามารถสร้างเมตริกซ์ Q ที่เป็น orthogonal matrix ได้ไม่ยาก ทดลองสร้างและตรวจสอบว่า Q เป็น orthogonal matrix จริงหรือไม่
Matrix norm
ใน pylab มีฟังก์ชัน norm (จาก numpy) สำหรับหา norm ของเมตริกซ์ อ่าน reference
การแก้ Linear equations
ทดลองการแก้สมการ
ในปัญหา polynomial interpoation เราทราบจุด ของ polynomial ที่มี degree เราต้องการหา
สมมติให้ เราสามารถเขียนระบบสมการเชิงเส้นได้ดังด้านล่าง
- TBA
เขียนฟังก์ชัน geneq(d,plist) ที่รับรายการของคู่ลำดับ d+1 คู่ จากนั้นคืนค่าเป็น tuple (M,b) ที่ เป็น linear equations ของสัมประสิทธิ์ของ
ตัวอย่างการทำงาน
>>> geneq(2,[(1,5),(2,2),(4,7)]) (matrix([[1, 1, 1], [4, 2, 1], [16, 4, 1]]), matrix([[5], [2], [7]))
ให้ทดลองใช้ฟังก์ชัน solve เพื่อแก้สมการที่เราสร้างขึ้น ในหาทดลองหา polynomial ที่ผ่านจุดต่อไปนี้
- ข้อ a. ดีกรี 2, ผ่านจุด (1,5),(2,2),(4,7)
- ข้อ b.
ทดลองเขียน gaussian elimination
เขียนฟังก์ชันที่ทำงานลักษณะเดียวกับ ฟังก์ชัน solve โดยใช้ gaussian elimination
- อย่าลืมนำฟังก์ชันดังกล่าวทดลองกับ การทดลองในแลบ 1 ก่อน
ทดลองใช้ฟังก์ชันที่เขียนขึ้นในการหา polynomial ในส่วนก่อนหน้า