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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(minor updates)
(ย้อนการแก้ไขของ CarolAnderson (Talk) ไปยังรุ่นของ Jittat)
 
แถว 79: แถว 79:
 
</center>
 
</center>
  
ทำไปสักระยะ เวกเตอร์ <math>u</math> จะเริ่มไม่เปลี่ยนแปลง (จะลู่เข้าสู่ค่า eigenvector ที่สอดคล� ... \n
+
ทำไปสักระยะ เวกเตอร์ <math>u</math> จะเริ่มไม่เปลี่ยนแปลง (จะลู่เข้าสู่ค่า eigenvector ที่สอดคล้องกับ eigenvalue ที่มีค่ามากที่สุด)
  
== Reuse of Wastewater May Improve Drinking Water Supply ==
+
เราจะหาค่า eigenvalue ที่สอดคล้องกับ <math>u</math> ได้โดยการคำนวณค่า <math>\|Bu\|/\|u\|</math>  ดังนั้นค่า norm ที่คำนวณได้จะเท่ากับ <math>\sqrt{\|Bu\|/\|u\|}</math>
  
With recent advances in technology and design, treating municipal wastewater and reusing it for drinking water, irrigation, industry, and other applications could significantly increase the nations total available water resources, particularly in coastal areas facing water shortages, says a new report from the National Research Council.
+
ให้สุ่มเมตริกซ์ <math>A</math> ดังนี้
  
  [[http://goodvillenews.com/Reuse-of-Wastewater-May-Improve-Drinking-Water-Supply-SD47qe.html Reuse of Wastewater May Improve Drinking Water Supply]]
+
  >>> A = matrix(rand(3,3))
 +
>>> A
 +
matrix([[ 0.08684718,  0.51124141,  0.59892317],
 +
        [ 0.70633162,  0.01742227,  0.64947786],
 +
        [ 0.85831143,  0.67425728,  0.38012037]])
  
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
+
จากนั้นให้ <math>B=A^TA</math> และคำนวณหาค่า eigenvalue ที่มากที่สุดของ <math>B</math> โดยวิธีที่กล่าวมาแล้ว
  
== Nintendo Unveils Wii U Console ==
+
เปรียบเทียบค่าที่ได้กับค่า norm ของเมตริกซ์ A (คำนวณโดย <tt>norm(A,2)</tt>)
  
Nintendo Co. on Tuesday unveiled details of its Wii U videogame console to be launched late this year, featuring a tablet computer-like controller with touch-sensitive panel.
+
== Range และ Nullspace ของเมตริกซ์ ==
  
[[http://goodvillenews.com/Nintendo-Unveils-Wii-U-Console-mGg2T2.html Nintendo Unveils Wii U Console]]
+
พิจารณาเมตริกซ์ <math>A</math> ต่อไปนี้
  
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
+
<math>
 +
A = \left[
 +
\begin{array}{ccc}
 +
1 & 0 & 1\\
 +
1 & 2 & 3\\
 +
-1 & 2 & 1
 +
\end{array}
 +
\right]
 +
</math>
  
== 13 Things You Should Do To Live Life Without Regrets ==
+
'''Range ของ <math>A</math>.''' ให้สุ่มเวกเตอร์ <math>x\in {\mathbf R}^3</math> มาจำนวนมาก ๆ (เช่นสุ่มโดยใช้ <tt>matrix(rand(3)).T</tt>) จากนั้น plot ค่าของ <math>Ax</math> ที่ได้เป็นแบบ scatter ในสามมิติ เพื่อแสดง range ของ <math>A</math>
  
A study that was performed on elderly individuals a few years back, has shown that during old age, there are many people who regret the things they didnt have the courage to do as opposed to only a few who had regrets about the things theyve done.
+
'''Nullspace ของ <math>A</math>.''' เราจะประมาณ nullspace ของ <math>A</math> โดยขั้นตอนดังนี้
  
  [[http://goodvillenews.com/13-Things-You-Should-Do-To-Live-Life-Without-Regrets-DyXsux.html 13 Things You Should Do To Live Life Without Regrets]]
+
* สุ่มเวกเตอร์ <math>x\in {\mathbf R}^3</math> มาจำนวนมาก ๆ (เช่นสุ่มโดยใช้ <tt>matrix(rand(3)-[0.5,0.5,0.5]).T</tt>) เช่น ประมาณ 10000 เวกเตอร์
 +
* นำเวกเตอร์ <math>x</math> ที่ <math>\|Ax\| < \epsilon</math> (โดยที่ค่า <math>\epsilon</math> เป็นค่าน้อย ๆ เช่น 0.1) มา plot แบบ scatter ในสามมิติ เพื่อแสดง บริเวณเวกเตอร์ที่ใกล้กับ nullspace ของ <math>A</math>
  
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
+
== การแก้ Linear equations ==
  
== The Importance of Learned Optimism ==
+
=== ทดลองการแก้สมการ ===
  
What 25 years of research reveal about the cognitive skills of happiness and finding lifes greater purpose.The illiterate of the 21st century, Alvin Toffler famously said, will not be those who cannot read and write, but those who cannot learn, unlearn, and relearn. Our outlook on the world and our daily choices of disposition and behavior are in many ways learned patterns to which Tofflers insight applies with all the greater urgency
+
ในปัญหา polynomial interpolation เราทราบจุด <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>
  
[[http://goodvillenews.com/The-Importance-of-Learned-Optimism-jmZjsG.html The Importance of Learned Optimism]]
+
สมมติให้ <math>f(x) = a_d x^d + a_{d-1}x^{d-1}+\ldots+a_1 x + a_0</math> เราสามารถเขียนระบบสมการเชิงเส้นได้ดังด้านล่าง
  
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
+
: ''TBA''
  
== Use Your Talents Give More Receive More ==
+
เขียนฟังก์ชัน <tt>geneq(d,plist)</tt> ที่รับรายการของคู่ลำดับ d+1 คู่ จากนั้นคืนค่าเป็น tuple <tt>(M,b)</tt> ที่ <math>Ma=b</math> เป็น linear equations ของสัมประสิทธิ์ของ <math>f</math>
  
When I stand before God at the end of my life, I would hope that I would not have a single bit of talent left, and could say, I used everything you gave me.Erma Bombeck
+
ตัวอย่างการทำงาน
  
  [[http://goodvillenews.com/Use-Your-Talents-Give-More-Receive-More-n807aT.html Use Your Talents Give More Receive More]]
+
  >>> geneq(2,[(1,5),(2,2),(4,7)])
 +
(matrix([[1, 1, 1],
 +
        [4, 2, 1],
 +
        [16, 4, 1]]),
 +
  matrix([[5],
 +
        [2],
 +
        [7]))
  
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
+
ให้ทดลองใช้ฟังก์ชัน [http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#solving-linear-system solve] เพื่อแก้สมการที่เราสร้างขึ้น ในหาทดลองหา polynomial ที่ผ่านจุดต่อไปนี้
 +
 
 +
* '''ข้อ a.''' ดีกรี 2, ผ่านจุด (1,5),(2,2),(4,7)
 +
* '''ข้อ b.''' ดีกรี 4, ผ่านจุด (1,0), (3,5), (6,2), (9,7), (10,8)
 +
 
 +
=== ทดลองเขียน gaussian elimination ===
 +
 
 +
เขียนฟังก์ชันที่ทำงานลักษณะเดียวกับ ฟังก์ชัน <tt>solve</tt> โดยใช้ gaussian elimination
 +
 
 +
: อย่าลืมนำฟังก์ชันดังกล่าวทดลองกับ [[01204472/การทดลองการคำนวณจำนวนจริง#Gaussian_Elimination|การทดลองในแลบ 1]] ก่อน
 +
 
 +
ทดลองใช้ฟังก์ชันที่เขียนขึ้นในการหา polynomial ในส่วนก่อนหน้า

รุ่นแก้ไขปัจจุบันเมื่อ 06:03, 5 สิงหาคม 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 โดยการหาเวกเตอร์ที่ตั้งฉากกัน กระบวนการดังกล่าวเรียกว่า Gram-Schmidt process

สุ่มเวกเตอร์

ใน 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) ที่รับรายการของเวกเตอร์ vlist ที่ประกอบไปด้วยเวกเตอร์ขนาด n ที่ตั้งฉากกันทั้งหมด และคืน unit vector ที่ตั้งฉากกับเวกเตอร์ทุกเวกเตอร์ในรายการ

ให้ใช้ฟังก์ชันดังกล่าว หาเวกเตอร์ v3, v4, และ v5 ที่เป็น unit vector ที่ตั้งฉากกันทั้งหมด

หมายเหตุ: ทดลองหา vector v6 ที่ตั้งฉากกับทุก ๆ เวกเตอร์

เมื่อเราได้เวกเตอร์ที่มีคุณสมบัติดังกล่าวแล้ว เราสามารถสร้างเมตริกซ์ Q ที่เป็น orthogonal matrix ได้ไม่ยาก ทดลองสร้างและตรวจสอบว่า Q เป็น orthogonal matrix จริงหรือไม่

Matrix norm

ใน pylab มีฟังก์ชัน norm (จาก numpy) สำหรับหา norm ของเมตริกซ์ อ่าน reference โดยในการหา operator norm ของเมตริกซ์ M เราจะสั่ง norm(M,2) นอกจากนี้ยังมี norm ประเภทอื่น เช่น ถ้าเราสั่ง norm(M) จะเป็นการหา Frobenius norm

เราจะหา norm ของเมตริกซ์ โดยใช้อัลกอริทึมสำหรับคำนวณหา eigenvalue ที่เรียกว่า Power method ทั้งนี้เนื่องจาก Operator norm นั้น มีค่าเท่ากับรากที่สองของ eigenvalue ที่มากที่สุดของ (ทำไม?)

เราจะหาค่าดังกล่าว ให้เมตริกซ์ เราจะสุ่มเวกเตอร์ จากนั้นเราจะนำเมตริกซ์ ไปคูณกับเวกเตอร์ ซ้ำไปเรื่อย ๆ (พร้อมกับสเกลเวกเตอร์ให้มีขนาด 1) นั่นคือ ในแต่ละรอบเราจะปรับค่า

ทำไปสักระยะ เวกเตอร์ จะเริ่มไม่เปลี่ยนแปลง (จะลู่เข้าสู่ค่า eigenvector ที่สอดคล้องกับ eigenvalue ที่มีค่ามากที่สุด)

เราจะหาค่า eigenvalue ที่สอดคล้องกับ ได้โดยการคำนวณค่า ดังนั้นค่า norm ที่คำนวณได้จะเท่ากับ

ให้สุ่มเมตริกซ์ ดังนี้

>>> A = matrix(rand(3,3))
>>> A
matrix([[ 0.08684718,  0.51124141,  0.59892317],
        [ 0.70633162,  0.01742227,  0.64947786],
        [ 0.85831143,  0.67425728,  0.38012037]])

จากนั้นให้ และคำนวณหาค่า eigenvalue ที่มากที่สุดของ โดยวิธีที่กล่าวมาแล้ว

เปรียบเทียบค่าที่ได้กับค่า norm ของเมตริกซ์ A (คำนวณโดย norm(A,2))

Range และ Nullspace ของเมตริกซ์

พิจารณาเมตริกซ์ ต่อไปนี้

Range ของ . ให้สุ่มเวกเตอร์ มาจำนวนมาก ๆ (เช่นสุ่มโดยใช้ matrix(rand(3)).T) จากนั้น plot ค่าของ ที่ได้เป็นแบบ scatter ในสามมิติ เพื่อแสดง range ของ

Nullspace ของ . เราจะประมาณ nullspace ของ โดยขั้นตอนดังนี้

  • สุ่มเวกเตอร์ มาจำนวนมาก ๆ (เช่นสุ่มโดยใช้ matrix(rand(3)-[0.5,0.5,0.5]).T) เช่น ประมาณ 10000 เวกเตอร์
  • นำเวกเตอร์ ที่ (โดยที่ค่า เป็นค่าน้อย ๆ เช่น 0.1) มา plot แบบ scatter ในสามมิติ เพื่อแสดง บริเวณเวกเตอร์ที่ใกล้กับ nullspace ของ

การแก้ Linear equations

ทดลองการแก้สมการ

ในปัญหา polynomial interpolation เราทราบจุด ของ 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. ดีกรี 4, ผ่านจุด (1,0), (3,5), (6,2), (9,7), (10,8)

ทดลองเขียน gaussian elimination

เขียนฟังก์ชันที่ทำงานลักษณะเดียวกับ ฟังก์ชัน solve โดยใช้ gaussian elimination

อย่าลืมนำฟังก์ชันดังกล่าวทดลองกับ การทดลองในแลบ 1 ก่อน

ทดลองใช้ฟังก์ชันที่เขียนขึ้นในการหา polynomial ในส่วนก่อนหน้า