ผลต่างระหว่างรุ่นของ "01204472/การทดลองเกี่ยวกับเมตริกซ์"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 93: แถว 93:
 
ให้ทดลองใช้ฟังก์ชัน [http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#solving-linear-system solve] เพื่อแก้สมการที่เราสร้างขึ้น ในหาทดลองหา polynomial ที่ผ่านจุดต่อไปนี้
 
ให้ทดลองใช้ฟังก์ชัน [http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#solving-linear-system solve] เพื่อแก้สมการที่เราสร้างขึ้น ในหาทดลองหา polynomial ที่ผ่านจุดต่อไปนี้
  
* ข้อ a.
+
* '''ข้อ a.''' ดีกรี 2, ผ่านจุด (1,5),(2,2),(4,7)
* ข้อ b.
+
* '''ข้อ b.'''
  
 
=== ทดลองเขียน gaussian elimination ===
 
=== ทดลองเขียน gaussian elimination ===

รุ่นแก้ไขเมื่อ 07:14, 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 เราต้องการหา

สมมติให้ เราสามารถเขียนระบบสมการเชิงเส้นได้ดังด้านล่าง

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 ในส่วนก่อนหน้า