ผลต่างระหว่างรุ่นของ "01204472/การทดลองเกี่ยวกับเมตริกซ์"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 75: | แถว 75: | ||
ในปัญหา polynomial interpoation เราทราบจุด <math>(x_0,f(x_0)), (x_1,f(x_1)),\ldots, (x_d,f(x_d))</math> ของ polynomial <math>f</math> ที่มี degree <math>d</math> เราต้องการหา <math>f</math> | ในปัญหา polynomial interpoation เราทราบจุด <math>(x_0,f(x_0)), (x_1,f(x_1)),\ldots, (x_d,f(x_d))</math> ของ polynomial <math>f</math> ที่มี degree <math>d</math> เราต้องการหา <math>f</math> | ||
− | เขียนฟังก์ชัน <tt>geneq(d,plist)</tt> ที่รับรายการของคู่ลำดับ d+1 คู่ จากนั้นคืนค่าเป็น tuple <tt>( | + | สมมติให้ <math>f(x) = a_d x^d + a_{d-1}x^{d-1}+\ldots+a_1 x + a_0</math> เราสามารถเขียนระบบสมการเชิงเส้นได้ดังด้านล่าง |
+ | |||
+ | เขียนฟังก์ชัน <tt>geneq(d,plist)</tt> ที่รับรายการของคู่ลำดับ d+1 คู่ จากนั้นคืนค่าเป็น tuple <tt>(M,b)</tt> ที่ <math>Ma=b</math> เป็น linear equations ของสัมประสิทธิ์ของ <math>f</math> | ||
=== ทดลองเขียน gaussian elimination === | === ทดลองเขียน gaussian elimination === |
รุ่นแก้ไขเมื่อ 07:05, 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
การแก้ Linear equations
ทดลองการแก้สมการ
ในปัญหา polynomial interpoation เราทราบจุด ของ polynomial ที่มี degree เราต้องการหา
สมมติให้ เราสามารถเขียนระบบสมการเชิงเส้นได้ดังด้านล่าง
เขียนฟังก์ชัน geneq(d,plist) ที่รับรายการของคู่ลำดับ d+1 คู่ จากนั้นคืนค่าเป็น tuple (M,b) ที่ เป็น linear equations ของสัมประสิทธิ์ของ