<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-15190589</id><updated>2011-12-30T06:56:14.180+07:00</updated><title type='text'>Tunoblog - NooB</title><subtitle type='html'>คณิตศาสตร์ ดนตรี คำศัพท์ คอมพิวเตอร์ และ อื่น ๆ อีก (มั่วมาก) มาก</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default?start-index=101&amp;max-results=100'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>155</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15190589.post-7437349396141154096</id><published>2007-11-25T15:07:00.000+07:00</published><updated>2008-12-13T08:18:11.310+07:00</updated><title type='text'>ร้านกาแฟหกรด</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ofWyhpN-VqU/R0ktpXz1pWI/AAAAAAAAAOI/Xx1MB6SVfPw/s1600-h/DSCN0377.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_ofWyhpN-VqU/R0ktpXz1pWI/AAAAAAAAAOI/Xx1MB6SVfPw/s320/DSCN0377.JPG" alt="" id="BLOGGER_PHOTO_ID_5136687038782088546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ไปเจอร้านกาแฟนี้ใน San Francisco ชื่อร้านมันตลกมากจนต้องเอามาให้ดู!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-7437349396141154096?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/7437349396141154096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=7437349396141154096' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/7437349396141154096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/7437349396141154096'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2007/11/blog-post.html' title='ร้านกาแฟหกรด'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ofWyhpN-VqU/R0ktpXz1pWI/AAAAAAAAAOI/Xx1MB6SVfPw/s72-c/DSCN0377.JPG' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-9133914286735506472</id><published>2007-06-11T10:21:00.000+07:00</published><updated>2007-06-15T06:41:36.611+07:00</updated><title type='text'>หัดออกเสียงแบบชาว California: เดาเสียง s z จากตัวสะกด</title><content type='html'>ไม่ได้เขียนอะไรใน blog นี้ประมาณเวลาตั้งครรภ์ได้ ตอนนี้ใกล้จะกลับไทยแล้ว ก็ขอเขียนซักหน่อยละกัน :P&lt;br /&gt;&lt;br /&gt;เนื่องด้วยภาษาอังกฤษที่เราเรียนในเมืองไทย เน้นให้อ่านออก เขียนได้ แต่ไม่ได้ให้ออกเสียงถูก พอมีโอกาสมาอยู่เมืองนอกแล้ว มันก็น่าจะฝึกส่วนที่ขาดหายไปใช่มะ แล้วก็สำเนียงภาษาอังกฤษของคนแถวนี้ (California) เค้าถือว่ามาตรฐานของ American English ด้วย ไหน ๆ มาอยู่ Stanford แล้ว ก็ลงเรียนวิชา Pronunciation ซะเลย :D ตอนแรกก็ไม่นึกหรอกว่ามันจะน่าสนใจขนาดนี้ เรียน ๆ ไป รู้สึกว่ามีสิ่งที่ไม่รู้เยอะแฮะ (แต่เรียนจบคอร์สแล้ว สำเนียงก็เหมือน ๆ เดิมอะนะ)&lt;br /&gt;&lt;br /&gt;คิดว่าหลาย ๆ คนที่เรียนอังกฤษในเมืองไทยคงยังไม่เคยรู้เรื่องพวกนี้ ก็เลยจะเอามาฝากกันนี่แหละ (American English อย่างเดียวนะ)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;เสียง s กับ z&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;คิดว่าทุกคนคงรู้อยู่แล้วว่า s มีเสียงเหมือน "ซ" หรือ "ส" ในภาษาไทย ส่วนตัว z เนี่ย ถึงเราจะไม่มีตัวอักษรที่ออกเสียงเหมือนกัน แต่คิดว่าตัวนี้ไม่น่าจะเป็นปัญหากับคนไทย ถ้าใครไม่รู้ว่า z ออกเสียงยังไง ก็ทำเสียง s (ไม่ได้ออกจากกล่องเสียง) แล้วพยายามเติมเสียงจากกล่องเสียง มันก็จะเป็น z เอง (อันนี้ง่าย)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;แล้วเมื่อไหร่ใช้ s เมื่อไหร่ใช้ z หละ?&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะว่าไปมันก็เป็นเรื่องแปลก (คนที่รู้ก็คงไม่แปลกหรอก) ที่คำที่สะกดด้วยตัว s อ่านออกมาเป็น z เยอะมาก กฎสำหรับออกเสียง z เวลาเห็นตัว s ก็มีหลัก ๆ คือ&lt;br /&gt;&lt;ol&gt;&lt;li&gt;s ใน -s ที่ใช้เป็นตัวสุดท้ายของคำ ตามหลังเสียง voiced consonant (ไว้จะพูดถึงอีกที) เช่น pens&lt;br /&gt;&lt;/li&gt;&lt;li&gt;s ใน -es ท้ายคำที่เป็นพหูพจน์ (ให้ออกเสียงว่า อิซซ ด้วย z)&lt;/li&gt;&lt;li&gt;คำว่า is his Ms.&lt;/li&gt;&lt;li&gt;-sn't -sm เช่น anarchism&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;ส่วนกฎสำหรับออกเสียง s เวลาเห็นตัว s ก็มีคร่าว ๆ คือ&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ss&lt;/li&gt;&lt;li&gt;s ที่ขึ้นต้นคำ และไม่ได้ตามด้วย h, ch&lt;/li&gt;&lt;li&gt;s ที่ลงท้าย prefix เช่น misapprehend disavow&lt;br /&gt;&lt;/li&gt;&lt;li&gt;s หลังสระเสียงสั้น (ยกเว้น is his Ms.) เช่น this promise pus&lt;/li&gt;&lt;li&gt;s ใน -s ที่ใช้เป็นตัวสุดท้ายของคำ ตามหลังเสียง voiceless consonant&lt;br /&gt;&lt;/li&gt;&lt;li&gt;s หลังพยัญชนะ หน้าสระ เช่น insensitive absinthe lapse alongside forsake&lt;br /&gt;&lt;/li&gt;&lt;li&gt;-s? เมื่อ ? เป็นพยัญชนะ voiceless เช่น anarchist&lt;/li&gt;&lt;li&gt;คำ 1 พยางค์ที่ลงท้ายด้วย -ase กับ -oose&lt;/li&gt;&lt;/ol&gt;นอกจากกฎพวกนี้ ก็คงต้องจำกันแล้วหละ ตัวอย่างที่ต้องจำเช่น:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;s หลังสระเสียงยาวใน verb มักจะเป็น z เช่น realise refuse lose ease appease please แต่ loose grease lease cease crease increase decrease decease ใช้เสียง s&lt;/li&gt;&lt;li&gt;s หลังสระเสียงยาวในคำที่ไม่มีรูป verb มักจะเป็น s เช่น dose verbose close(adj) แต่ cheese disease ใช้เสียง z&lt;br /&gt;&lt;/li&gt;&lt;li&gt;คำบางคำอ่านต่างกันเมื่อเป็น noun กับ verb เช่น use กับ house ใช้ s เมื่อเป็น noun ใช้ z เมื่อเป็น verb&lt;br /&gt;&lt;/li&gt;&lt;li&gt;close ที่แปลว่าใกล้ (adjective กับ adverb) ใช้เสียง s ส่วน close ที่แปลว่าปิด (noun กับ verb) ใช้เสียง z&lt;/li&gt;&lt;li&gt;douse louse mouse ใช้เสียง s แต่ rouse spouse ใช้เสียง z&lt;/li&gt;&lt;li&gt;precise กับ concise ใช้เสียง s ส่วน incise exercise ฯลฯ ใช้เสียง z (ข้อสังเกตุ: precise กับ concise ไม่มีรูป verb)&lt;/li&gt;&lt;li&gt;garrison ใช้เสียง s แต่ visage ใช้เสียง z&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; เสียง "ซ" หรือ "ส" ที่มาจาก c หรือ sc ให้ออกเสียงเป็น s ทั้งหมด ส่วนที่มาจากตัว z ให้ออกเป็น z ทั้งหมด ยกเว้นคำ Italian (pizza, mezzo, ...) ให้ออกเป็นเสียง s&lt;br /&gt;&lt;br /&gt;ตัวอย่าง: เสียงสระเหมือนกัน ทางซ้ายเสียง s ทางขวาเสียง z&lt;br /&gt;&lt;div style="text-align: center;"&gt;place - plays&lt;br /&gt;ice - eyes&lt;br /&gt;miss - Ms.&lt;br /&gt;price - prize&lt;br /&gt;hence - hens&lt;br /&gt;dense - dens&lt;br /&gt;rice - rise&lt;br /&gt;race - raise&lt;br /&gt;race - rays&lt;br /&gt;race - raze&lt;br /&gt;loose - lose&lt;br /&gt;goose - goos&lt;br /&gt;hiss - his&lt;br /&gt;use(noun) - use(verb)&lt;br /&gt;face - phase&lt;br /&gt;bus - buzz&lt;br /&gt;ass - as&lt;br /&gt;lense - lens&lt;br /&gt;(lense กับ lens ความหมายเหมือนกันนะ)&lt;br /&gt;decease - disease&lt;br /&gt;(s ใน decease ใช้เสียง s ส่วน s ทั้งสองที่ใน disease ใช้เสียง z)&lt;br /&gt;close(adj) - close(v)&lt;br /&gt;close(adj) - clothes(n)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ตัวอย่างเปรียบเทียบตัวสะกด ทางซ้ายเสียง s ทางขวาเสียง z (เสียงอื่น ๆ ก็ต่างกัน):&lt;br /&gt;&lt;div style="text-align: center;"&gt;raci&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;t - raci&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;m&lt;br /&gt;purpo&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e - propo&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e&lt;br /&gt;(purp&lt;span style="font-weight: bold;"&gt;o&lt;/span&gt;se สระเสียงสั้น prop&lt;span style="font-weight: bold;"&gt;o&lt;/span&gt;se สระเสียงยาว)&lt;br /&gt;promi&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e - compromi&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e&lt;br /&gt;(prom&lt;span style="font-weight: bold;"&gt;i&lt;/span&gt;se สระเสียงสั้น comprom&lt;span style="font-weight: bold;"&gt;i&lt;/span&gt;se สระเสียงยาว)&lt;br /&gt;analysi&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - analyse&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;(analyses เป็นรูปพหูพจน์ ... s ตัวแรกเป็นเสียง s ในทั้งสองคำนะ)&lt;br /&gt;crea&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e - ea&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e&lt;br /&gt;it&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - i&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;thi&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - hi&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;inten&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;e - intend&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;lap&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - lab&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;mote&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - mode&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;dock&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - dog&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;strife&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt; - strive&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-9133914286735506472?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/9133914286735506472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=9133914286735506472' title='326 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/9133914286735506472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/9133914286735506472'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2007/06/california-s-z.html' title='หัดออกเสียงแบบชาว California: เดาเสียง s z จากตัวสะกด'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>326</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115933611693764762</id><published>2006-09-27T12:45:00.000+07:00</published><updated>2006-09-27T12:48:36.996+07:00</updated><title type='text'>เรื่อง Stanford</title><content type='html'>จะบอกว่า ถ้าจะดูเรื่องเกี่ยวกะชีวิตนู้บสแตนฟอร์ดเนี่ย ให้ไปดูที่ &lt;a href="http://tunoblog.blogspot.com/"&gt;Another Tunoblog&lt;/a&gt; แทน ขี้เกียจ update สองที่หนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115933611693764762?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115933611693764762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115933611693764762' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115933611693764762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115933611693764762'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/09/stanford.html' title='เรื่อง Stanford'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115882504504597030</id><published>2006-09-21T14:38:00.000+07:00</published><updated>2006-09-21T14:50:45.086+07:00</updated><title type='text'>เด็กบ้านนอก - นู้บ</title><content type='html'>เผื่อคนที่ไม่รู้ ตอนนี้อยู่ที่ 119 Quillen Court, #500, Stanford CA 94305 นะ วันจันทร์จะเปิดเทอมแล้ว&lt;br /&gt;&lt;br /&gt;ไปอยู่ในที่ใหม่ มันก็มีอะไรต้องศึกษาใหม่เยอะนะ ... สถานที่ก็ใหญ่ เดินทางก็ลำบาก ถึงจะฟรีก็เหอะ รู้สึกมันบ้านนอกบ้านนอกไงก็ไม่รู้&lt;br /&gt;&lt;br /&gt;ไม่ค่อยมีเวลาเขียนเท่าไหร่เลย ช่วงนี้มีงานมีเหตุการณ์มากมาย ... ไว้มีเวลาแล้วจะมาเขียนอีกเยอะ ๆ ละกัน&lt;br /&gt;&lt;br /&gt;ป.ล. เพิ่งรู้ว่า IE มันไม่ยอมให้เขียนสระอาติดกันหลาย ๆ ตัวใน Edit Box อะ แย่จัง&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115882504504597030?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115882504504597030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115882504504597030' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115882504504597030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115882504504597030'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/09/blog-post.html' title='เด็กบ้านนอก - นู้บ'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115522838582843719</id><published>2006-08-10T23:40:00.000+07:00</published><updated>2006-08-10T23:46:25.870+07:00</updated><title type='text'>Siam Paragon</title><content type='html'>คำอ่าน "Siam Paragon" เป็นภาษาไทยเนี่ย ...&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;สยามภาระก้น&lt;/li&gt;   &lt;li&gt;สยามปลาร้าก้อน (เพี้ยนนิดหน่อย)&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; มีมากกว่านี้อีกปะ บอกหน่อย&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115522838582843719?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115522838582843719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115522838582843719' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115522838582843719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115522838582843719'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/08/siam-paragon.html' title='Siam Paragon'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115186517115311689</id><published>2006-07-02T20:41:00.000+07:00</published><updated>2006-07-05T13:30:41.423+07:00</updated><title type='text'>Programming: Space-Time Relation</title><content type='html'>ขอเริ่มต้น post ของวันนี้ด้วยการขอโทษก่อนละกัน วันนี้ (จริง ๆ เมื่อวานด้วย) ไม่ได้ไปเยี่ยมบัณฑิตจุฬา ฯ ที่ไปซ้อมรับปริญญา เพราะมีเหตุการณ์สำคัญเกิดขึ้นที่บ้าน ที่คนทั่ว ๆ ไปคงเรียกว่าปัญหาครอบครัวหนะ&lt;br /&gt;&lt;br /&gt;แล้วก็ ... เตือนกันอีกครั้งนะ ... ถ้าจะดู post เก่า ๆ ให้มันเป็นลำดับดี ๆ ไปดูที่นี่&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.geocities.com/tunaococ/"&gt;Tunoblog Summarized&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;มันจะมี link มาที่หน้าของแต่ละ post ใน Tunoblog อันนี้&lt;br /&gt;&lt;br /&gt;โปรโมตเสร็จ ก็ขอเข้าเรื่องละกัน คราวนี้จะพูดถึงความสัมพันธ์ระหว่าง ความเร็วของ algorithm กับเนื้อที่ memory ที่จะต้องใช้&lt;br /&gt;&lt;br /&gt;สำหรับปัญหาปัญหานึง เราอาจจะมีวิธีแก้หลาย ๆ แบบ ซึ่งสำหรับนักเขียนโปรแกรมเนี่ย เค้ามักถามกันว่า "บิ๊กโอ (Big-O = O ใหญ่น่ะแหละ) เท่าไหร่?"&lt;br /&gt;&lt;br /&gt;ใครที่ยังไม่รู้จัก O ตัวนี้ ก็ขอพูดคร่าว ๆ ละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;O(g) = { f | f(x) เพิ่มไม่เร็วกว่า g(x) เมื่อ x มีค่ามาก ๆ }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ นิยามแบบชัด ๆ มันก็มีอยู่อะนะ แต่ขี้เกียจยกมา ไปดูเอาเองจาก &lt;a href="http://en.wikipedia.org/wiki/Big-O_notation"&gt;Wikipedia&lt;/a&gt; ละกัน :P&lt;br /&gt;&lt;br /&gt;มาต่อกันเรื่องหลัก คราวนี้มาสนใจเรื่อง Space-Time ดีกว่า ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;ทฤษฎีสัมพัทธภาพ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ม่ายช่ายและ :P ... จะพูดถึง Big-O ของเวลา กับ เนื้อที่ memory ที่ algorithm ใช้ตะหาก&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Sorting Algorithm&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ปัญหาการเรียงข้อมูลเนี่ย เป็นปัญหาสุดคลาสสิก ที่น่าเอามาพูดถึงที่สุด วิธีการเรียงที่นิยมสอนกัน มักจะมีอยู่เท่านี้ (ขาดเกินบ้างนิดหน่อย)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Selection Sort - ใช้เวลา O(n&lt;sup&gt;2&lt;/sup&gt;) เมื่อมีข้อมูล n ตัว&lt;/li&gt;   &lt;li&gt;Bubble Sort - ใช้เวลา O(n&lt;sup&gt;2&lt;/sup&gt;)&lt;/li&gt;   &lt;li&gt;Insertion Sort - ใช้เวลา O(n&lt;sup&gt;2&lt;/sup&gt;)&lt;/li&gt;   &lt;li&gt;Shell Sort - ใช้เวลา O(n&lt;sup&gt;1.5&lt;/sup&gt;) (จริง ๆ มี O(n log&lt;sup&gt;2&lt;/sup&gt;n) นะ ดูที่&lt;a href="http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/shell/shellen.htm"&gt;นี่&lt;/a&gt;)&lt;/li&gt;   &lt;li&gt;Merge Sort - ใช้เวลา O(n log n)&lt;/li&gt;   &lt;li&gt;Quick Sort - ใช้เวลา O(n log n) (เฉลี่ย)&lt;/li&gt;   &lt;li&gt;Heap Sort - ใช้เวลา O(n log n)&lt;/li&gt;   &lt;li&gt;Bucket Sort - ใช้เวลา O(m + n)&lt;/li&gt;   &lt;li&gt;Radix Sort - ใช้เวลา O(n log m)&lt;/li&gt; &lt;/ul&gt;เมื่อ n คือจำนวนข้อมูล และ m คือขนาดของ domain ของข้อมูล จะเห็นว่า 7 วิธีแรก ทำงานเร็วกว่า 2 วิธีสุดท้ายในกรณีที่ m มากกว่า n มาก ๆ&lt;br /&gt;&lt;br /&gt;หนังสือทั่ว ๆ ไป มักจะไม่พูดถึงขนาดของ memory ที่ต้องใช้ เพราะว่า ไม่มีิอันไหนใช้เกิน O(n) ซึ่งเป็นขนาดของ input แต่เราจะลองมองดูซักนิดนะ ว่ามันเป็นยังไง&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Selection Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt;&lt;li&gt;Bubble Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt;&lt;li&gt;Insertion Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt;&lt;li&gt;Shell Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt;&lt;li&gt;Merge Sort - ใช้เนื้อที่เพิ่ม O(n)&lt;/li&gt;&lt;li&gt;Quick Sort - ใช้เนื้อที่เพิ่ม O(log n) (เฉลี่ย)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Heap Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt;&lt;li&gt;Bucket Sort - ใช้เนื้อที่เพิ่ม O(m)&lt;/li&gt;&lt;li&gt;Radix Sort - ใช้เนื้อที่เพิ่ม O(1)&lt;/li&gt; &lt;/ul&gt; ดู ๆ ไปเหมือน Heap Sort น่าจะดีที่สุด แต่จริง ๆ แล้ว มันมีอะไรมากกว่านี้นิดนึง มาลองดูละเอียดดีกว่า ว่าแต่ละวิธี ต้องการสิ่งอะไรที่ต่าง ๆ กัน (แบบคร่าว ๆ)&lt;br /&gt;&lt;ul&gt; &lt;li&gt;Selection Sort - ลูป 2 ชั้น และตัวแปรพักข้อมูลสำหรับการสลับ&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bubble Sort - ลูป 2 ชั้น และตัวแปรพักข้อมูลสำหรับการสลับ&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Insertion Sort - ลูป 2 ชั้น และตัวแปรพักข้อมูลสำหรับการแทรก&lt;/li&gt;&lt;li&gt;Shell Sort (กรณีเวลา O(n log&lt;sup&gt;2&lt;/sup&gt;n)) - ลูป 3 ชั้น ตัวแปรสำหรับสร้างลำดับ 2 ตัว และตัวแปรพักข้อมูลสำหรับการสลับ หรือ แทรก&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Merge Sort - Recursive 2 ครั้ง ลูป 1 ชั้นที่มีตัวนับ 2 ตัว กับ array พักข้อมูลความยาว n และลูปคัดลอกค่าจาก array พักข้อมูล&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Quick Sort - ลูป 1 ชั้นที่มีตัวนับ 2 ตัว ตัวแปรพักข้อมูลสำหรับการสลับ และ Recursive 2 ครั้ง&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Heap Sort - ลูป 2 ชั้น 2 ลูป และตัวแปรพักข้อมูลสำหรับการแทรก&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bucket Sort - ลูปกำหนดค่าเริ่มต้น (ใช้เวลา O(m)) ลูปรับ input และลูปแสดง output (ใช้เวลา O(n))&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Radix Sort (ฐาน 2) - ลูป 2 ชั้น ชั้นนอกทำซ้ำ log&lt;sub&gt;2&lt;/sub&gt;m ครั้ง ชั้นในมีตัวนับ 2 ตัว&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;ถ้าคิดความซับซ้อนของโปรแกรม เป็นเนื้อที่อีกประเภท เราก็พอจะคิดได้ว่า ถ้าใช้เนื้อที่มาก มันก็ทำงานเร็วนะ&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;u&gt;Dynamic Programming - Fibonacci Function&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;อันนี้ คิดว่า หลาย ๆ คนคงคุ้นเคยและรู้อยู่แล้ว หน้าตามันก็ประมาณนี้ (ภาษา C ละกัน)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt; &lt;div style="text-align: center;"&gt;&lt;code&gt;int fib(int n) { return n &lt;= 1 ? 1 : fib(n - 1) + fib(n - 2); }&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะเห็นว่า code สั้นมาก ดังนั้น จากหลักของเรา พอจะเดาได้ว่า น่าจะมีวิธีทำให้มันทำงานเร็วกว่านี้ แต่ code ยาวกว่านี้ หรือมีตัวแปรเพิ่ม&lt;br /&gt;&lt;br /&gt;ลองดูก่อน ว่า เขียนโปรแกรมแบบนี้ ใช้เวลาทำงานเท่าไหร่ ... คำตอบค่อนข้างง่ายนะ เวลาก็คือ O(fib(n)) น่ะแหละ (ว่าไปก็คือ O(α&lt;sup&gt;n&lt;/sup&gt;) เมื่อ α = golden ratio น่ะแหละ)&lt;br /&gt;&lt;br /&gt;มันกินเวลาน่าดูเลยนะเนี่ย ลองพยายามทำให้มันเร็วขึ้นสิ ... วิธีง่าย ๆ ก็คือ กำหนดตัวแปรเพิ่มเป็น array ความยาว n แล้วก็คิดค่าไล่ตั้งแต่ f(0) ถึง f(n) ไง หยั่งงี้ f(...) ตัวที่เคยคิดแล้ว ก็ไม่ต้องคิดซ้ำ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;code&gt;int fib(int n) { return a[n] &gt; 0 ? a[n] : a[n] = fib(n - 1) + fib(n - 2); }&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วกำหนดค่าเริ่มต้นให้ a[0] = 1, a[1] = 1 และ a[อื่น ๆ] = -1&lt;br /&gt;&lt;br /&gt;จริง ๆ มันประหยัดเนื้อที่ได้อีกนะ แต่คราวนี้โปรแกรมจะซับซ้อนละ ...&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;int fib(int n)&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;{&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;int f, last1, last2;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;if (n &lt;= 1) return 1;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;last1 = 1;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;last2 = 1;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;for (--n; n &gt; 0; --n)&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;{&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;f = last1 + last2;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;last2 = last1;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;last1 = f;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;}&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;return f;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;จะเห็นว่า เหลือตัวแปรแค่ 3 ตัว (คือ memory O(1)) แลกกับ code ที่ยาวขึ้นอีกนิดนึง&lt;br /&gt;&lt;br /&gt;จริง ๆ ยังทำให้มันเร็วกว่านี้ได้อีกแหละ แต่คราวนี้ code จะยาวขึ้นเยอะเลย แล้วจะเร็วขึ้นเฉพาะเมื่อ n เยอะมาก ๆ ๆ ๆ ๆ เท่านั้น&lt;br /&gt;&lt;br /&gt;เอาเป็นว่า หยุดแค่นี้ก่อนดีกว่า&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115186517115311689?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115186517115311689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115186517115311689' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115186517115311689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115186517115311689'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/07/programming-space-time-relation.html' title='Programming: Space-Time Relation'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115168877321234620</id><published>2006-06-30T23:31:00.000+07:00</published><updated>2006-07-01T00:32:53.300+07:00</updated><title type='text'>Programming: Stack and Recursion</title><content type='html'>ไม่ยอมเขียนมาซะนาน ขอกลับมาทำบ้างซักครั้งละกัน ... คิดถึงจัง ความรู้สึกนี้ :D&lt;br /&gt;&lt;br /&gt;คราวนี้จะพูดถึงเรื่องการเขียนโปรแกรมซักหน่อยนะ คาดว่าจะเป็นประโยชน์กับ programmer รุ่นเด็ก ๆ บ้างนะ&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;u&gt;Stack and Recursion&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;หลาย ๆ คนคงรู้อยู่แล้วว่าทั้งสองอย่างนี้มันคืออะไร และมันเกี่ยวกันยังไง ... ใครไม่รู้อ่านต่อละกัน :P&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Stack&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;กลุ่มข้อมูลคล้าย ๆ หลอด CD ที่ใช้เสียบแผ่นหลาย ๆ แผ่นเข้าด้วยกัน&lt;/li&gt;   &lt;li&gt;คุณสมบัติก็คือ จะใส่เพิ่มหรือจะหยิบออก จะต้องทำจากข้างบน&lt;/li&gt; &lt;/ul&gt;&lt;span style="font-weight: bold;"&gt; Recursion&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำซ้ำ ๆ ที่เกิดจากการฟังก์ชันที่เรียกกันเป็นวง เช่น f เรียก g แล้ว g เรียก h แล้ว h เรียก f ไปเรื่อย ๆ&lt;/li&gt;   &lt;li&gt;สิ่งที่จำเป็นในการเขียนโปรแกรมแบบ Recursive ก็คือ จะต้องมีเงื่อนไขการหยุด&lt;/li&gt; &lt;/ul&gt;แล้วสองอย่างนี้ มันเกี่ยวข้องกันยังไงหละ?&lt;br /&gt;&lt;br /&gt;จริง ๆ อยากให้ไปอ่านเรื่องที่ทำ Virtual Machine จัง แต่มันคงจะยาวไปเนอะ ... สรุปเลยละกัน :P ง่าย ๆ ก็คือ ... ทุกครั้งที่เรียกฟังก์ชัน เราต้องเพิ่มข้อมูลบางอย่างใน Stack ของ CPU แล้วพอฟังก์ชันทำงานเสร็จ เราก็จะเอาของพวกนั้นออก&lt;br /&gt;&lt;br /&gt;แปลว่า ... ที่เราสามารถเขียนโปรแกรมแบบ recursive ได้เนี่ย ก็เพราะว่า CPU มันมี Stack อยู่&lt;br /&gt;&lt;br /&gt;และก็แปลว่า ... เราสามารถสร้าง Stack ขึ้นเอง แล้วก็ไม่ต้องไปรบกวน Stack ของ CPU ได้เหมือนกัน&lt;br /&gt;&lt;br /&gt;ลองดูตัวอย่างเลยละกัน สมมติว่าเรามีฟังก์ชันที่เขียนแบบ recursive ตัวนึง&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; function f(x)&lt;br /&gt; &lt;/code&gt;&lt;code&gt;begin&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  if x &lt;= 0 then return 0;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;else return 2x - 1 + f(x - 1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;ถ้าเรามี Stack เราจะเขียนแบบไม่ recursive ได้เป็น&lt;br /&gt;&lt;br /&gt;&lt;code&gt; function f(x)&lt;br /&gt; &lt;/code&gt;&lt;code&gt;begin&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  push x onto Stack;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  push "not done" onto Stack;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  while Stack is not empty&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  do&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; assign op ← Top of Stack;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;Remove Top of Stack;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; assign x ← Top of Stack;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; Remove Top of Stack;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;if op = "not done" then&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;begin&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;push x onto Stack;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; push "done" onto Stack;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; if x &lt;= 0 then do nothing;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; else&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; begin&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; push x - 1 onto Stack;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; push "not done" onto Stack;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; end&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;end&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; else if op = "done" then&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; begin&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; if x &lt;= 0 then assign ReturnValue ← 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;else assign ReturnValue ← 2x - 1 + ReturnValue;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; end&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  end while&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  return ReturnValue;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;จะเห็นว่า มันยาวขึ้นมาก -_-'' จริง ๆ จะทำให้สั้นกว่านี้ก็ได้อีกเยอะหนะนะ แต่นี่เป็นตัวอย่างการแปลงแบบตรงไปตรงมา ฟังก์ชันอะไรเราก็แปลงแบบนี้ได้&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115168877321234620?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115168877321234620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115168877321234620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115168877321234620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115168877321234620'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/06/programming-stack-and-recursion.html' title='Programming: Stack and Recursion'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115166221552591094</id><published>2006-06-30T17:07:00.000+07:00</published><updated>2006-06-30T17:10:15.543+07:00</updated><title type='text'>แอบอัพเดท</title><content type='html'>โทษทีที่ยังไม่ได้เอารูปตอนไปยุโรปมาลงให้ จะเอามาให้ดูจริง ๆ แหละ แต่รอก่อนนะ ตอนนี้ขอแอบกลับไปเขียนเรื่องบ้า ๆ ต่อก่อน&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115166221552591094?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115166221552591094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115166221552591094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115166221552591094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115166221552591094'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/06/blog-post_30.html' title='แอบอัพเดท'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-115142293726534766</id><published>2006-06-27T22:18:00.000+07:00</published><updated>2006-06-27T22:42:17.410+07:00</updated><title type='text'>ฟันคุด</title><content type='html'>ไปผ่าฟันคุดมาเมื่อวันศุกร์ที่แล้วหนะ . . . ผ่าข้างล่างสอง ถอนข้างบนสอง&lt;br /&gt;&lt;br /&gt;ก่อนหน้านี้ มีคนขู่ไว้เพียบเลย - -'' พอทำเอง มันก็ไม่ได้น่ากลัวขนาดนั้นซะหน่อย&lt;br /&gt;&lt;br /&gt;พอเจอหมอ หมอเค้าก็คุยก่อนนะ เค้าบอกว่า ฟันมันเอียงมาก (ประมาณ 70 องศา จากที่เห็นในฟิล์ม) เอียงเหมือนจะไปดันซี่ข้าง ๆ ด้วย ถ้าจะเอาออก จะต้องทำให้มันเป็นชิ้นเล็กชิ้นน้อยก่อน วิธีทำก็คือ ค่อย ๆ กรอเนื้อฟันออก จนมันบางลง ก็ออกแรกบีบให้มันแตก ... ฟังดูน่ากลัวมะ&lt;br /&gt;&lt;br /&gt;พอถึงเวลาจริง ที่เจ็บที่สุดก็เห็นจะเป็นเข็มฉีดยาชานี่แหละ (มันก็ไม่ได้เจ็บมากหรอก บริจาคเลือดยังเจ็บกว่าอีก)&lt;br /&gt;&lt;br /&gt;เริ่มแรก เค้าฉีดยาชาเสร็จแล้วก็รอแป๊บนึง แล้วก็เอาคีมมางัดแงะดึงฟันข้างบนออก เดี๋ยวเดียวเสร็จเลย รู้สึกว่าอะไร ๆ มันก็เร็วกว่าที่คิดนะ&lt;br /&gt;&lt;br /&gt;แต่อีกสองซี่ที่ต้องทำให้เป็นชิ้น ๆ เนี่ย ใช้เวลานานกว่าที่คิดแฮะ&lt;br /&gt;&lt;br /&gt;ช่วงที่รู้สึกเสียว ๆ ก็มีนะ ช่วงแรกคือ ตอนที่หมอกำลังขัดเนื้อฟันข้างขวาออกเนี่ย เค้าออกแรงเยอะมาก จนรู้สึกว่ามันตึงที่ข้างนอกเลย&lt;br /&gt;&lt;br /&gt;อีกช่วงนึงก็ ... จริง ๆ ไม่ได้รู้สึกเจ็บหรือเสียวฟันอะนะ เป็นความเสียวทางความคิดหนะ คือประมาณว่า ผู้ช่วยหมอเค้าไม่ใส่แว่นแล้วมองเห็นไหมไม่ชัด (สีมันคล้าย ๆ น้ำลาย) หมอก็ต่อว่า ว่าถ้ามองไม่ชัด คราวหน้าต้องใส่แว่นมานะ ไม่งั้นไม่ต้องมาช่วย - -'' เสียวมั้ยหละ&lt;br /&gt;&lt;br /&gt;แล้วหลังจากนั้นแป๊บเดียว หมอก็บอกอีกว่า ไหมเนี่ย ผู้ช่วยดึงไม่แน่น ... แล้วหมอก็ทำอะไรอีกก็ดูไม่รู้เรื่อง อาจจะเอาออก เย็บใหม่ก็ได้ (ยังไงตอนนี้ก็ดูไม่ออกแล้ว)&lt;br /&gt;&lt;br /&gt;พอทำเสร็จ ก็ไม่รู้สึกเจ็บเลยนะ แต่มันเมื่อยนิด ๆ เพราะต้องกัดสำลีไว้ตั้งหลายชั่วโมง แล้วก็ต้องคอยเอาน้ำแข็งประคบด้วย&lt;br /&gt;&lt;br /&gt;วันแรกหลังจากทำ ก็ไม่เจ็บนะ แค่รำคาญว่าเวลากินอะไร เศษมันจะติด ๆ แล้วเอาออกไม่ได้ แล้วก็เจ็บนิดหน่อยเวลากลืน เพราะว่ามีแผลที่ลิ้นนิดนึง&lt;br /&gt;&lt;br /&gt;วันที่สองก็ รู้สึกเหมือนวันแรก ... ไม่ค่อยรู้สึกว่ามันจะดีขึ้นแฮะ - -''&lt;br /&gt;&lt;br /&gt;วันที่สามเนี่ย เริ่มรู้สึกดีขึ้นละ แต่ก็ยังกินอะไรที่ต้องเคี้ยวไม่ได้หนะ ยังกินแต่ไข่ตุ๋น มันฝรั่งบด แล้วก็โจ๊ก&lt;br /&gt;&lt;br /&gt;วันนี้วันที่สี่แล้ว ... ทำไมมันรู้สึกเจ็บ ๆ อะ T_T ... ความเจ็บมันมีการหน่วงเวลาด้วยแฮะ ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-115142293726534766?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/115142293726534766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=115142293726534766' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115142293726534766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/115142293726534766'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/06/blog-post.html' title='ฟันคุด'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-114819041390751076</id><published>2006-05-21T11:26:00.000+07:00</published><updated>2006-05-21T12:46:54.020+07:00</updated><title type='text'>กลับมาละ</title><content type='html'>หลังจากวันจันทร์ที่แปดแล้ว ก็หาเน็ตไม่ได้เลยอ่า เอาเป็นว่า สรุปการไปเยือนเมืองนอกเอาทีเดียวเลยละกัน ... อ้อ ยังไม่ได้เอาภาพจากกล้องมาลงหนะ อ่านแห้ง ๆ ไปก่อนละกัน :P&lt;br /&gt;&lt;br /&gt;ก็ ... ต่อจากตอนที่แล้ว ก็ไปโรงงานกะโรงแรม สลับกันไปเรื่อย ๆ หละ จนวันที่สิบสอง ก็ขึ้นเครื่องบินไป Venezia จากสนามบิน Marco Polo ก็มีคนมารับไปโรงแรมแถว ๆ Padova ชื่อว่า Ibis&lt;br /&gt;&lt;br /&gt;ที่โรงแรมนี้ ลิฟท์ก็แปลกไปอีกแบบ คือมันไม่มีปุ่มเปิดประตู (โรงแรมที่แล้วไม่มีปุ่มปิด)&lt;br /&gt;&lt;br /&gt;สภาพส่วนใหญ่ในโรงแรมนี้ ดีกว่าโรงแรมที่แล้วนะ แต่ว่า ... มันไม่มีเน็ต T_T&lt;br /&gt;&lt;br /&gt;เย็นวันศุกร์ ได้ไปแวะซุปเปอร์มาร์เก็ตใกล้ ๆ โรงแรมด้วยหละ รู้สึกว่าของมันแพงจัง ... เดินอยู่ในนั้นพอประมาณ ก็ซื้อน้ำเปล่ามา กับขนมนิด ๆ หน่อย ๆ&lt;br /&gt;&lt;br /&gt;พอวันเสาร์ ก็ไปเดินเล่นในเมือง Padova มีร้านเสื้อผ้า เครื่องแต่งกาย เยอะมาก แล้วก็มีตลาดนัดด้วย ดูคล้าย ๆ เมืองไทยเลยแต่ว่าบรรยากาศมันดีจัง ติดอยู่ตรงที่น้ำดื่มมันแพง ... เดิน ๆ แล้วหิวน้ำ ก็ไม่ค่อยอยากซื้อ&lt;br /&gt;&lt;br /&gt;ตอนกลางวันกินข้าวที่ Pizzeria อะไรก็ไม่รู้ จำชื่อไม่ได้ สั่งพิซซ่ากินกับพ่อคนละถาด (ราคาถาดละแปดยูโร) ถาดมันใหญ่กว่าที่คิดแฮะ แต่ก็กินจนหมดได้หละน่า!&lt;br /&gt;&lt;br /&gt;หลังจากนั้นก็เดิน ๆ ไปเรื่อย ๆ ไม่ได้ซื้ออะไรเลย :( ก็มันไม่มีอะไรน่าซื้อหนิ ): ขึ้นรถเมล์กลับโรงแรม แล้วก็กินข้าวเย็นที่โรงแรม ... จบวัน&lt;br /&gt;&lt;br /&gt;วันอาทิตย์ ทุกอย่างปิดหมด รถเมล์ไม่วิ่ง ถ้าจะไปไหน ต้องเรียกแท็กซี่ราคาสุดโหด ก็เลยดิ้น ๆ อยู่แค่ในโรงแรม T_T นอนแต่หัวค่ำ เตรียมไปทำงานเช้าวันจันทร์&lt;br /&gt;&lt;br /&gt;ประมาณแปดโมงครึ่ง (เช้า) วันจันทร์ ก็ไปที่โรงงานอีกแห่งนึง คุย ๆ กะเค้าถึงซักสิบโมงสิบห้านาทีโดยประมาณ ก็ต้องไปโรงงานอีกที่นึง ที่นี้อยู่ใน Belluno ซึ่งก็ไกลพอควรเลย นั่งรถไปประมาณสี่สิบห้านาที ยังอยู่ระหว่างทางไปโรงงาน ก็เห็นภูเขาอยู่สองข้างถนน มองไปไกล ๆ หน่อยจะเห็นยอดเขาสีขาว ๆ ปกคลุมด้วยหมอกและหิมะ ... ดูดีจัง&lt;br /&gt;&lt;br /&gt;นั่งต่อไปอีกประมาณครึ่งชั่วโมง คราวนี้ทางขวามือไม่มีภูเขาแล้ว แต่เป็นเมืองแทน มองเมืองจากตรงนี้ก็สวยดีแฮะ&lt;br /&gt;&lt;br /&gt;แล้วอีกประมาณสิบห้านาที ก็ถึงที่หมาย ... โรงงานอีกแห่ง&lt;br /&gt;&lt;br /&gt;คุย ๆ กะเค้า ถึงประมาณบ่ายสาม ก็ต้องกลับ Venezia แล้ว เพราะว่าจะต้องขึ้นเครื่องบินกลับไป Roma เพื่อจะไปต่อเที่ยวบินไปยัง Frankfurt&lt;br /&gt;&lt;br /&gt;กลับไปถึง Roma ก็ไม่มีโรงแรมพักในเมืองอีก ต้องออกจากเมือง ไปพักโรงแรมใน Pomezia (คนละโรงแรมกับครั้งแรกนะ) ปุ่มในลิฟท์ของโรงแรมนี้เนี่ย ... คราวนี้ มันมีเลข 0 ถึง 9 เรียงเหมือนเครื่องคิดเลขเลย แต่ตึกมันมีไม่ถึง 9 ชั้นอะ ...&lt;br /&gt;&lt;br /&gt;นอน ตื่น วันอังคารละ คราวนี้ บินจากสนามบิน Fiumicino ไปสนามบิน Frankfurt&lt;br /&gt;&lt;br /&gt;เห็นภาษาเยอรมันแล้ว รู้สึกว่าอ่านยากกว่าอิตาลีเยอะเลย (คือ เดาความหมายไม่ค่อยได้เลย) คำที่รู้ก็เลยมีน้อยกว่า ... คือ ได้ประมาณเนี้ย&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;eingang = ทางเข้า&lt;br /&gt;ausgang = ทางออก&lt;br /&gt;toiletten = ส้วม&lt;br /&gt;fahrkarten = ตั๋ว&lt;br /&gt;bahnhof = สถานีรถราง/รถไฟ&lt;br /&gt;haupt = หลัก (head, main)&lt;br /&gt;platz = place&lt;br /&gt;markt = market&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;โรงแรมที่พัก ชื่อว่า &lt;a href="http://www.winters.de/boarding/"&gt;Winter's Eurotel Boardinghouse&lt;/a&gt; อยู่ในเมือง Offenbach ที่ไม่ได้พักใน Frankfurt ก็เพราะว่าจองโรงแรมใน Frankfurt ไม่ทัน มันเต็มหมดเลย (หรือไม่ก็แพงสุด ๆ) ที่นี่ มีอินเทอร์เน็ตแบบไร้สายนะ แต่ว่า ราคายี่สิบสี่ยูโรครึ่ง ต่อ ยี่สิบสี่ชั่วโมง เลยไม่เอา&lt;br /&gt;&lt;br /&gt;วันพุธ ตื่นเช้าหน่อย ไปดูงาน &lt;a href="http://www.achema.de/ACHEMA-lang-en.html"&gt;Achema 2006&lt;/a&gt; ละ ... ในนี้ ถ่ายรูปไม่ค่อยได้หนะ เลยไม่มีรูปมาโชว์เยอะเท่าไหร่&lt;br /&gt;&lt;br /&gt;งานนี้ใหญ่มากเลย สถานที่จัดงานเรียกว่า &lt;a href="http://www.messefrankfurt.com"&gt;Messe Frankfurt&lt;/a&gt; มี Hall ทั้งหมดสิบ Hall แต่ละ Hall มีขนาดเท่าศูนย์ ฯ สิริกิติ์เลยมั้ง แล้วยังให้เดินได้ Hall ละหลาย ๆ ชั้นด้วย ... เดินยังไงจะครบเนี่ย&lt;br /&gt;&lt;br /&gt;ค่าบัตรเข้างาน เค้าคิดคนละยี่สิบสามยูโร งานเปิดวันละเก้าชั่วโมง คือตั้งแต่เก้าโมงเช้า ถึงหกโมงเย็น ดังนั้น ค่าเข้าชมงาน ถ้าอยู่ตลอดเก้าชั่วโมง ก็ตกเฉลี่ยชั่วโมงละ 2.56 ยูโร (ประมาณนาทีละสองบาท)&lt;br /&gt;&lt;br /&gt;ของกินในงานเนี่ย แย่จัง ... มีแค่ขนมปังกะไส้กรอก แล้วก็ไอติมเนสท์เล่ ราคาแต่ละอย่าง ไม่สมกับปริมาณเลย ไส้กรอกหนึ่งเส้นกับขนมปังห่วย ๆ หนึ่งก้อน ราคาสองยูโรครึ่ง ไอตินเนสท์เล่สองลูกเล็ก ๆ (เน้นว่าเล็ก ๆ) บนโคนหนึ่งอัน ก็ราคาสองยูโรครึ่ง ส่วนน้ำเปล่ากับน้ำอัดลม ราคาเท่ากันคือแก้วละสองยูโร ตอนแรกต้องมัดจำค่าแก้วใบละครึ่งยูโรด้วย (เอาแก้วไปคืน จะได้เงินคืนมา)&lt;br /&gt;&lt;br /&gt;จริง ๆ วัฒนธรรมการมัดจำภาชนะเนี่ย มันก็มีหลายประเทศแล้วแหละ ... น่าแปลกเหมือนกัน ที่อิตาลีเค้าไม่มีแบบนี้&lt;br /&gt;&lt;br /&gt;ตอนเย็น พองานปิด ก็เดินไปที่ Frankfurt Hauptbahnhof แล้วขึ้นรถไฟสาย S9 ไปที่ Offenbach Marktplatz กะจะหาของกิน ที่ไหนได้ เค้าปิดกันเกือบหมดแล้ว ... เหลือ KFC เปิดอยู่ ไปกินก็ได้ - -''&lt;br /&gt;&lt;br /&gt;วันพฤหัสก็ ไปดูงานอีกวัน ไม่มีไรมากหรอก ก็อยู่ในงานทั้งวัน ตอนเย็นก็ไปหาของกิน แต่คราวนี้ ไม่ได้ไป KFC ละ เพราะว่าออกจากงานก่อนเวลาปิดนิดนึง ร้านอาหารอื่นเค้ายังไม่ปิด วันนี้ไปกินขาหมูเยอรมันที่ร้าน ... ลืมชื่อไปแล้ว :P&lt;br /&gt;&lt;br /&gt;วันศุกร์ ไปเที่ยวละ คราวนี้ เริ่มเดินจาก Frankfurt Hauptbahnhof ไปยัง Hauptwache แถวนี้ร้านขายของเยอะมากเลย มี Department Store แปดชั้นด้วย ... ของที่ขายก็เหมือน ๆ ร้านในกรุงเทพ ฯ นี่แหละ ... ที่ต่างจากห้างของเมืองเราก็มีบันไดเลื่อนนี่แหละ ... ชั้นนึงมันต่อกับบันไดเลื่อนแปดอันหนะ สะดวกดี ... (ถ้าไม่เข้าใจ รอดูภาพละกัน)&lt;br /&gt;&lt;br /&gt;อยากจะซื้อของกลับไปฝากหลาย ๆ อย่างนะ แต่มันมีแต่ช็อกโกแล็ตอะ - -''&lt;br /&gt;&lt;br /&gt;วันเสาร์แล้ว วันนี้จะกลับละ แต่ขอไปซื้อของฝากอีกนิดนึงก่อน ... เครื่องบินเค้าเรียกเข้าตอนบ่ายสองสิบห้านาที บังเอิญว่าไปถึงสนามบินแต่เช้า ก็เลยมีเวลาเดินหาของนานหน่อย ... แย่จัง มีเวลาเยอะ แต่ของมันดันมีน้อย ... ไป ๆ มา ๆ ก็มีแต่ช็อกโกแล็ตอะ&lt;br /&gt;&lt;br /&gt;บ่ายสามนิด ๆ เครื่องบินก็เริ่มปลดเปลื้อง ... บนเครื่องบินคราวนี้ ฉายหนังสองเรื่อง เรื่องแรกคือ Prime อีกเรื่องคือ King Kong&lt;br /&gt;&lt;br /&gt;... หมดละ ถึงกรุงเทพ ฯ ซะที!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-114819041390751076?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/114819041390751076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=114819041390751076' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114819041390751076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114819041390751076'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/05/blog-post_21.html' title='กลับมาละ'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-114712649046121267</id><published>2006-05-08T23:50:00.000+07:00</published><updated>2006-05-09T05:14:50.563+07:00</updated><title type='text'>วันนี้ก็ยาวอีกแล้ว</title><content type='html'>ตื่นตอนเช้า กินอาหารเช้า แต่งตัว ... พอถึงเก้าโมงก็มีคนมารับไปโรงงาน&lt;br /&gt;&lt;br /&gt;ถ่ายรูปโรงงานเค้าได้ซักสิบกว่า ๆ รูป กล้องดันแบตหมด - -'' ... ช่างมัน พรุ่งนี้ค่อยไปถ่ายใหม่ละกัน (จริง ๆ แบตมันก็อยู่ใกล้ ๆ แหละ แต่ไม่มีโอกาสไปหยิบ)&lt;br /&gt;&lt;br /&gt;ในโรงงานเค้ามีตู้ขายกาแฟร้อนด้วย หยอดได้แต่เหรียญนะ ... ใกล้ ๆ ตู้ก็มีป้ายห้ามสูบบุหรี่ (ถ้าสูบ จะถูกปรับตั้งแต่ 28.5 ถึง 285 ยูโร) แต่คนงานเค้ามาสูบตรงนี้เพียบเลย ... ก็มันสูบกันทุกคนหนิเนอะ&lt;br /&gt;&lt;br /&gt;พอบ่ายโมง เค้าก็พาไปกินข้าวกลางวัน เป็นโรงอาหารของโรงงานแหละ แต่อาหารก็พอใช้ได้นะ ... (ดีกว่าข้าวกลางวันของสาธิตจุฬาฯ ฝ่ายประถม แน่ ๆ)&lt;br /&gt;&lt;br /&gt;ประมาณบ่ายสอง ก็กลับไปฟังเค้าบรรยายเรื่องเครื่องมือ เอา drawing มาให้ดูเพียบเลย ... เริ่มรู้สึกว่าตัวเองกะเหรี่ยงแฮะ ไม่รู้จักเครื่องหมายเค้าเลย (แต่พอฟัง ๆ แล้วก็เริ่มจะเข้าใจบ้างหละ)&lt;br /&gt;&lt;br /&gt;ก่อนจะไปกินข้าวเย็น เรื่องสุดท้ายที่เค้าบรรยายก็คือ Plasma Sterilizer ซึ่งผู้ผลิตรายที่ดังที่สุดคือ Johnson &amp; Johnson ทำอยู่เจ้าเดียวมาสิบปีแล้ว เพิ่งจะมีคนอื่นเริ่มทำก็ปีที่แล้วเนี่ยแหละ การทำงานของมันก็เข้าใจไม่ยากนะ แต่ทำยากจัง เค้าบอกว่า ต้องใช้ High Vacuum Pump เพื่อทำความดันภายใน chamber ให้ได้ต่ำถึง 0.01 millibar สัมบูรณ์ จากนั้นก็พยายามทำให้อิเล็กตรอน หลุดออกจากโมเลกุลของอากาศที่ยังเหลืออยู่ โมเลกุลมันก็จะไวต่อสนามไฟฟ้าเพราะมันมีประจุ ส่วนอิเล็กตรอนที่หลุดออกไป มันก็ไวเหมือนกัน พอของพวกนี้วิ่งไปชนกับสารอินทรีย์ พันธะมันก็จะแตกออกง่าย ๆ เค้าก็เลยใช้วิธีนี้ฆ่าเชื้อ ... เพื่อจะทำให้อิเล็กตรอนมันหลุดง่าย ๆ เค้าก็ใส่ก๊าซที่มีความเสถียรต่ำ เพิ่มลงไปด้วย (อันนี้เค้าใช้ H&lt;sub&gt;2&lt;/sub&gt;O&lt;sub&gt;2&lt;/sub&gt;)&lt;br /&gt;&lt;br /&gt;ข้อดีของวิธีนี้ก็คือ ใช้อุณหภูมิต่ำ คือ ประมาณ 40 - 55 °C เท่านั้น เลยใช้กับพลาสติกหรือวัสดุไม่ทนความร้อนได้ แต่ข้อเสียก็คือ ของที่ใส่เข้าไปต้องแห้งจัด ๆ&lt;br /&gt;&lt;br /&gt;ความรู้ที่ได้เพิ่มตรงนี้มีสองเรื่อง คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;เหตุผลที่ต้องให้ของของเรา แห้งจัด ๆ ก็เพราะว่า ที่ความดัน 0.01 mbar สัมบูรณ์เนี่ย จุดเดือดของน้ำจะต่ำมาก (เกือบ 0°C) น้ำทั้งหมดจะกลายเป็นไอ ทำให้ปริมาณก๊าซใน chamber เพิ่มขึ้น ซึ่งก็แปลว่า ความดันจะเพิ่มด้วย มันก็จะไม่ใช่ 0.01 mbar แล้ว ตัว vacuum pump ต้องดูดเอาพวกนี้ออกให้หมดด้วย กระบวนการแบบนี้จะกินแรง pump มาก ๆ บางครั้งเครื่องอาจจะหยุดทำงานไปเลย แล้วแจ้งเตือนว่าความชื้นสูงเกินไป&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;สถานะของก๊าซที่มีประจุเนี่ย เรียกว่า plasma (กะเหรี่ยงมั้ยเนี่ย ไม่รู้มาก่อน :P)&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;ถึงตอนเย็นเค้าก็พาไปกินข้าวเย็น จะบอกว่า สองทุ่มแล้วแหละ แต่ฟ้ายังไม่มืดเลยนะ&lt;br /&gt;&lt;br /&gt;ที่ร้านอาหาร เค้าก็สอนภาษาอิตาลีให้นิด ๆ หน่อย ๆ เอาสนุก ส่วนใหญ่คือ จะแปลเมนูภาษาอิตาลีให้ฟัง (ร้านนี้ไม่มีเมนูภาษาอังกฤษ) จำได้นิดเดียวเอง ประมาณเนี้ย ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;acqua = water&lt;br /&gt;antipasto = appetizer&lt;br /&gt;zucchero = sugar&lt;br /&gt;&lt;br /&gt;salmone = salmon&lt;br /&gt;melone = melon&lt;br /&gt;limone = lemon&lt;br /&gt;&lt;br /&gt;fritto = fried&lt;br /&gt;misto = mixed&lt;br /&gt;&lt;br /&gt;mare = sea&lt;br /&gt;pesce = fish&lt;br /&gt;pescatore = fisherman&lt;br /&gt;calamari = squid(s)&lt;br /&gt;patata = potato&lt;br /&gt;funghi = mushroom(s)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อ้อ ... แล้วก็ calcium เนี่ย เค้าอ่านว่า "คัลชุ่ม" แหละ&lt;br /&gt;&lt;br /&gt;กินเสร็จก็กลับโรงแรมเลย ... ตอนนี้ก็ เลยเที่ยงคืนแล้วอ่า ... ไปนอนละ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-114712649046121267?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/114712649046121267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=114712649046121267' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114712649046121267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114712649046121267'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/05/blog-post_08.html' title='วันนี้ก็ยาวอีกแล้ว'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-114701266422253493</id><published>2006-05-07T16:38:00.000+07:00</published><updated>2006-05-07T21:37:44.323+07:00</updated><title type='text'>วันนี้ยาวจัง</title><content type='html'>กะจะเอารูปมาให้ดูด้วย แต่ว่าลืมเอาสายต่อกล้องมา เลยเอาลงเครื่องคอมพ์ไม่ได้ T_T เล่าให้ฟังเป็นตัวอักษรอย่างเดียวก่อนละกัน&lt;br /&gt;&lt;br /&gt;ประมาณเที่ยงคืนครึ่ง วันนี้ ขึ้นเครื่องบิน สายการบินไทย ประตูยี่สิบสี่ ปลายทาง กรุงโรมนะครับ นั่งรอจนเที่ยงคืนห้าสิบห้า เครื่องบินก็เริ่มเปลื้องผ้า (Take Off)&lt;br /&gt;&lt;br /&gt;ตอนแรก บนจอทีวี เปิดซีรีส์ซิทคอมเรื่อง ... จำชื่อเรื่องไม่ได้อะ ... ก็ฮาใช้ได้ รายการต่อจากนั้นก็เป็น ดนตรีคลาสสิก ไม่สิ ดนตรีบาโรค มาพร้อมกับอาหารมื้อตีหนึ่งกว่า ๆ พอกินกันเสร็จ ผู้คนก็เริ่มหลับกัน (สงสัยเพราะเพลงน่ะแหละ) ... เรายังไม่อยากนอน ก็เลยนั่งวาดรูปเล่น (รูปเรขาคณิตหนะ กำลังคิดเรื่องที่ทำวิจัยอยู่ ... คิดไปคิดมา ได้ความว่า มันยากกว่าที่เคยคิดแฮะ) ผ่านไปประมาณชั่วโมงนึง เริ่มง่วง ๆ เลยนอนมั่ง&lt;br /&gt;&lt;br /&gt;ตื่นมา เค้าเปิด Narnia ให้ดูด้วย ... ดูแล้วก็เลยรู้ ว่าทำไมคนถึงด่ากันจัง ... ดูจบ กินข้าว รออีกแป๊บนึงก็หกโมงเช้าสามสิบห้านาที ถึงเวลาเครื่องบินแตะพื้นกรุงโรมละ&lt;br /&gt;&lt;br /&gt;ตรงที่ตรวจหนังสือเดินทางเนี่ย คนแน่นมากกกก ... กว่าจะออกจากสนามบินได้ ประมาณชั่วโมงนึงแหนะ ... จะบอกว่า ห้องน้ำในสนามบิน Fiumicino เนี่ย แย่กว่าดอนเมืองพอควรเลย&lt;br /&gt;&lt;br /&gt;ออกมา ก็มีคนขับรถมารับ ... รู้สึกไม่ค่อยคุ้นเคยกับรถชิดขวาเลยแฮะ ... นั่งรถประมาณครึ่งชั่วโมงก็ถึงโรงแรม Hotel Centrale ใน Pomezia&lt;br /&gt;&lt;br /&gt;เนื่องจาก Pomezia เป็นย่านอุตสาหกรรม ก็เลยไม่มีที่ท่องเที่ยวให้ดูเลย ... แต่ที่แย่กว่านั้น วันนี้วันอาทิตย์ครับ ... เมืองหยั่งกะเมืองร้างแหนะ มีแต่ตึก ไม่มีคน ไม่มีร้านขายของ ... จริง ๆ มีอยู่ร้านนึงใกล้ ๆ โรงแรม แต่ว่ามันปิดวันอาทิตย์หนะ&lt;br /&gt;&lt;br /&gt;ส่วน ตัวโรงแรม Hotel Centrale เนี่ย ก็ไม่ใช่โรงแรมหรูหราอะไรเลย ไว้หาสายต่อกับกล้องได้แล้วจะเอารูปให้ดู ลิฟท์ยังมีแบบที่กดปุ่มแล้วไฟไม่ขึ้น ข้างในก็ไม่มีจอบอกว่าอยู่ชั้นไหนแล้ว ...&lt;br /&gt;&lt;br /&gt;แต่สิ่งแปลก ๆ เท่ ๆ ก็มีอยู่บ้างนะ คือ ลิฟท์เค้า มีชั้น 0 กับ -1 ด้วยอะ ... เขียนหยั่งงี้บนปุ่มให้กดเลยนะ&lt;br /&gt;&lt;br /&gt;แล้วก็ ในห้องพักสำหรับสองคนเนี่ย ... ประตูห้องน้ำไม่มีล็อก&lt;br /&gt;&lt;br /&gt;และที่ขาดไม่ได้ ... มันมี Internet ให้ใช้ด้วย !!! มีได้ไงไม่รู้&lt;br /&gt;&lt;br /&gt;ตอนนี้ก็ ... สี่โมงยี่สิบสามละ (เหลือบไปเห็นนาฬิกาของเครื่องคอมพ์ ... 9:38 PM แล้วนี่หว่า) พอดีกว่า ไปคุย msn ละ ไว้มีอะไรจะมาบอกเรื่อย ๆ นะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-114701266422253493?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/114701266422253493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=114701266422253493' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114701266422253493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114701266422253493'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/05/blog-post_07.html' title='วันนี้ยาวจัง'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-114656650786698744</id><published>2006-05-02T17:39:00.000+07:00</published><updated>2006-05-02T17:41:47.893+07:00</updated><title type='text'>กำลังจะไปยุโรป</title><content type='html'>วันที่ 6 - 20 เดือนนี้ จะไป Rome กับ Frankfurt หละ ไว้จะถ่ายรูปมาให้ดูกันบ้าง ... (กลับมา จะ update ละ)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-114656650786698744?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/114656650786698744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=114656650786698744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114656650786698744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114656650786698744'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/05/blog-post.html' title='กำลังจะไปยุโรป'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-114545072694300415</id><published>2006-04-13T19:43:00.000+07:00</published><updated>2006-04-19T19:45:26.970+07:00</updated><title type='text'>สวัสดีปีใหม่ไทย</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;สุขสันต์วันสงกรานต์จ้าาาา!!!&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อยู่เชียงใหม่หละ เล่นน้ำที่คูเมือง หนุกดี&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-114545072694300415?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/114545072694300415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=114545072694300415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114545072694300415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/114545072694300415'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/04/blog-post.html' title='สวัสดีปีใหม่ไทย'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113912285389574469</id><published>2006-02-05T11:57:00.000+07:00</published><updated>2006-02-06T13:39:21.996+07:00</updated><title type='text'>คนชอบ คนไม่ชอบ ...</title><content type='html'>&lt;div style="text-align: center;"&gt;คนที่ชอบเรา = คนที่พอใจในสิ่งที่เราทำ&lt;br /&gt;คนที่ไม่ชอบเรา = คนที่ไม่พอใจในสิ่งที่เราทำ&lt;br /&gt;คนที่รู้สึกเฉย ๆ กับเรา = คนที่ไม่คิดว่าต้องสนใจการกระทำของเรา&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ระดับความพอใจที่ X รู้สึกต่อ Y&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;b&gt;ความพอใจจากประสบการณ์ตรง&lt;/b&gt;: Y ช่วย X&lt;/li&gt;   &lt;li&gt;&lt;b&gt;ความพอใจจากการวิเคราะห์&lt;/b&gt;: X รู้สึกว่า Y ทำสิ่งที่ X เห็นว่าดี&lt;/li&gt; &lt;/ul&gt; คำว่า "ช่วย" เอง ก็มีหลายลักษณะ เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;เป็นที่พี่งทางใจ&lt;/li&gt;   &lt;li&gt;ช่วยแก้ปัญหา&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ให้เงิน&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ซ่อมถนนแถวบ้าน&lt;/li&gt;   &lt;li&gt;พัฒนาชุมชนแถบใกล้เคียง&lt;/li&gt;   &lt;li&gt;ฯลฯ&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; ส่วน "ข้อมูลที่ทำให้พอใจ" จากการวิเคราะห์ ก็มีหลายแบบ เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ทำให้คนทั้งโลกมีความสุขมากขึ้น&lt;/li&gt;   &lt;li&gt;ทำให้คนหลาย ๆ คน รวยขึ้น&lt;/li&gt;   &lt;li&gt;ทำให้คนที่เราไม่ชอบ เสียหาย&lt;/li&gt;   &lt;li&gt;ปราบยาเสพติดได้&lt;/li&gt;   &lt;li&gt;สร้างงานให้ชนชั้นล่าง&lt;/li&gt;   &lt;li&gt;ทำให้เศรษฐกิจดีขึ้น&lt;/li&gt;   &lt;li&gt;ฯลฯ&lt;/li&gt; &lt;/ul&gt; อย่างไรก็ตาม ข้อมูลที่ทำให้พอใจ มีความเป็นไปได้ว่าจะเป็นข้อมูลเท็จ สูงกว่าประสบการณ์ตรง นอกจากนั้น ข้อมูลเดียวกัน อาจให้ผลการวิเคราะห์ที่แตกต่างกัน สำหรับแต่ละบุคคล กล่าวคือ บางคนอาจจะพอใจ แต่บางคนอาจจะไม่พอใจ เมื่อได้รับข้อมูลเดียวกัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ความพอใจของคนหมู่มาก&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;มันเป็นเรื่องปกติที่ เราไม่สามารถสร้างประสบการณ์ตรงกับคนหมู่มาก (เช่น ทั้งประเทศ) ได้ วิธีที่จะทำให้คนส่วนใหญ่พอใจเรา ก็คือ การให้ข้อมูล&lt;br /&gt;&lt;br /&gt;เพื่อที่จะให้ข้อมูลด้านดีของเรา ไปถึงคนส่วนใหญ่ได้ เราก็ควรจะควบคุมสื่อของข้อมูล ที่เข้าถึงคนส่วนใหญ่ได้ (เช่น โทรทัศน์ วิทยุ หนังสือพิมพ์ ฯลฯ)&lt;br /&gt;&lt;br /&gt;วิธีควบคุมสื่อที่เข้าถึงคนส่วนใหญ่ได้ ก็มีมากมายหลายอย่าง เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;เป็นเจ้าของสื่อเอง&lt;/li&gt;   &lt;li&gt;ควบคุมสื่ออื่นทางตรง (ซื้อ)&lt;/li&gt;   &lt;li&gt;ควบคุมผู้ที่ทำงานให้สื่ออื่น&lt;/li&gt; &lt;/ul&gt; วิธีการ "ควบคุมคน" สามารถทำได้ง่ายกว่าการทำให้คนกลุ่มใหญ่พอใจ ดังนั้น แนวทางหนึ่งในการทำให้คนพอใจ ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;ใช้คนที่เราควบคุมได้ ไปเผยแพร่ข้อมูล (ที่อาจจะไม่จริง) เพื่อให้คนกลุ่มใหญ่พอใจ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ข้อมูลดึงอารมณ์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;วิธีการสร้างข้อมูลสนับสนุนหรือบ่อนทำลาย มักจะเน้นที่การดึงอารมณ์ ตัวอย่างการสร้างภาพขอความเห็นใจ เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;กลุ่มคนที่บ้าคลั่ง กำลังด่าทอ สาปแช่งเรา&lt;/li&gt;   &lt;li&gt;เด็ก คนแก่ คนป่วย คนพิการ คนจน มาให้กำลังใจเรา&lt;/li&gt; &lt;/ul&gt; หน้าที่ของผู้วิเคราะห์ที่ดีก็คือ ควรจะควบคุมไม่ให้อารมณ์มาเหนือเหตุผล และคิดเผื่อความเป็นไปได้ในหลาย ๆ ทาง เช่น กลุ่มคนดังกล่าว (ในตัวอย่างภาพที่สร้าง) มีความเป็นไปได้ที่จะถูกว่าจ้าง สูงกว่าคนปกติ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ประชาธิปไตย&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ประเด็นสำคัญของประชาธิปไตยก็คือ &lt;b&gt;จำนวน&lt;/b&gt;คนที่ชอบเรา ดังนั้น วิธีที่กล่าวไว้ จึงเป็นวิธีที่นักการเมือง ในประเทศประชาธิปไตย นิยมมากที่สุด&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;แล้ว สิ่งที่ประชาชนควรกระทำหละ?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;โดยอุดมคติแล้ว หน้าที่ของประชาชนก็คือ วิเคราะห์ประสบการณ์และข้อมูลต่าง ๆ แล้วตัดสินใจ เพื่อผลประโยชน์สูงสุดของประเทศชาติ&lt;br /&gt;&lt;br /&gt;แต่ ถ้าทุกคนคิด "&lt;b&gt;ถูกต้องที่สุด&lt;/b&gt;" เหมือนกัน (และสิ่งที่ถูกต้องที่สุดมีเพียงหนึ่งเดียว) การเลือกตั้งทุกครั้งก็คงจบลงที่ มีผู้สมัครรับเลือกตั้งเพียงผู้เดียวเท่านั้นที่ได้คะแนนไม่เป็นศูนย์&lt;br /&gt;&lt;br /&gt;แน่นอนว่า สิ่งนี้ไม่สามารถเกิดขึ้นจริงได้ เพราะสิ่งที่ "&lt;b&gt;ถูกต้องที่สุด&lt;/b&gt;" มันไม่มีนิยามที่ชัดเจน แต่ละคนก็จะมองแตกต่างกัน สิ่งที่ประชาชนพอจะทำได้ก็คือ พยายามเลือกสิ่งที่ "&lt;b&gt;น่าจะถูกต้องที่สุด&lt;/b&gt;" ซึ่งตัวเลือกของแต่ละคน ก็มีสิทธิ์ที่จะแตกต่างกัน&lt;br /&gt;&lt;br /&gt;สรุปก็คือ เราควรจะถามตัวเองเสมอ ๆ ด้วยเหตุผล เพื่อเตือนตัวเองให้ตัดสินใจใกล้เคียง "อุดมคติ" มากที่สุด ตัวอย่างคำถามก็เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ถ้าเราพอใจ X จากประสบการณ์จริง แสดงว่า X ทำเช่นเดียวกันกับผู้อื่นหรือไม่?&lt;/li&gt;   &lt;li&gt;ถ้าเราพอใจ X จากประสบการณ์จริง ผู้อื่นจะพอใจกับประสบการณ์แบบเดียวกันหรือไม่?&lt;/li&gt;   &lt;li&gt;ข้อมูลเกี่ยวกับ X ที่เราได้รับ มีโอกาสเป็นจริงหรือเท็จมากแค่ไหน?&lt;/li&gt;   &lt;li&gt;เรามีอคติหรือไม่ ในการวิเคราะห์ข้อมูลเกี่ยวกับ X?&lt;/li&gt;   &lt;li&gt;ถ้าเราพอใจข้อมูลที่ได้รับเกี่ยวกับ X ผู้อื่นจะพอใจข้อมูลเดียวกันนี้หรือไม่?&lt;/li&gt;   &lt;li&gt;ฯลฯ&lt;/li&gt; &lt;/ul&gt; ประเด็นที่สำคัญอีกเรื่อง ก็คือ เมื่อเราตัดสินใจไปแล้ว เราก็ไม่จำเป็นต้องยึดติดกับความคิดเก่านั้น เมื่อเราได้รับประสบการณ์หรือข้อมูลเพิ่ม เราก็ควรจะวิเคราะห์ใหม่ เพื่อให้แนวทางประชาธิปไตย สมบูรณ์แบบยิ่งขึ้น&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ผู้สนับสนุนส่วนเกิน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;คนที่เชี่ยวชาญเรื่องเกี่ยวกับ Y มักจะไม่ยอมรับ X เมื่อ X เป็นอะไรซักอย่างใน Y&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(ที่ใช้คำว่า "มักจะ" ก็เพราะว่า มันไม่ใช่ทุกครั้ง)&lt;br /&gt;&lt;br /&gt;ตัวอย่างเช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;คนที่ดูหนังมามาก ๆ มักจะวิจารณ์หนังเรื่องใหม่ ๆ ในทางลบ&lt;/li&gt;   &lt;li&gt;คนที่เห็นเสื้อบอลมามาก ๆ จะไม่ชอบเสื้อบอลรุ่นใหม่&lt;/li&gt;   &lt;li&gt;ฯลฯ&lt;/li&gt; &lt;/ul&gt; สาเหตุที่เป็นอย่างนี้ ก็อาจจะเป็นเพราะ ผู้ที่เชี่ยวชาญเรื่องเกี่ยวกับ Y มักจะเคยรู้จักสิ่งที่ดีกว่า X หรือถ้าผู้นั้นเคยทำสิ่งที่เกี่ยวกับ Y เองโดยตรง ก็อาจจะไม่อยากยอมรับคนที่เก่งกว่า&lt;br /&gt;&lt;br /&gt;(อย่างไรก็ตาม การไม่ยอมรับ ไม่ใช่สิ่งที่ผิด)&lt;br /&gt;&lt;br /&gt;เรื่องที่น่าแปลกก็คือ ข้อความตรงข้ามของประโยคข้างบน ก็เป็นจริงค่อนข้างบ่อย&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;คนที่ไม่เชี่ยวชาญเรื่องเกี่ยวกับ Y มักจะยอมรับ X เมื่อ X เป็นอะไรซักอย่างใน Y&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เหตุผลที่เป็นเช่นนี้ ก็อาจจะเป็นเพราะว่า โดยธรรมชาติของมนุษย์ ไม่ชอบความขัดแย้ง ดังนั้น เมื่อมีใครเสนออะไรขึ้นมา เราก็มักจะไม่อยากไปโต้แย้งเขา นอกจากเราจะรู้จริง ๆ ว่ามันไม่ดีอย่างไร (คือ เราเชี่ยวชาญเรื่อง Y หรืออย่างน้อย เราคิดว่าเราเชี่ยวชาญเรื่อง Y)&lt;br /&gt;&lt;br /&gt;(การยอมรับ ก็ไม่ใช่สิ่งที่ผิด)&lt;br /&gt;&lt;br /&gt;ผลลัพธ์อย่างนึงของประโยคนี้ก็คือ คนที่ไม่ได้ใส่ใจการเมือง มีแนวโน้มจะยอมรับรัฐบาล&lt;br /&gt;&lt;br /&gt;เมื่อผนวกกับ &lt;b&gt;ความกลัวความเปลี่ยนแปลง&lt;/b&gt; ซึ่งเป็นธรรมชาติของมนุษย์อีกอย่าง เราจึงรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;คนที่ไม่ได้ใส่ใจในการเมือง มีแนวโน้มที่จะยอมรับรัฐบาล และไม่คิดล้มล้างรัฐบาล&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คนเหล่านี้ เป็น "&lt;b&gt;ผู้สนับสนุนส่วนเกิน&lt;/b&gt;" ของรัฐบาล&lt;br /&gt;&lt;br /&gt;รัฐบาลที่ฉลาด จะเห็นช่องว่างตรงนี้ แล้วพยายามดึงคนกลุ่มนี้เป็นพวกให้มากที่สุด เพราะว่า มีปริมาณมาก และคล้อยตามง่าย&lt;br /&gt;&lt;br /&gt;อย่างไรก็ตาม ผู้สนับสนุนส่วนเกิน ไม่ใช่ผู้ที่ขัดขวางแนวทางของประชาธิปไตย แต่เป็นส่วนประกอบที่เกิดขึ้นจาก ธรรมชาติของประชาธิปไตย&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;คนเดินขบวน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คนส่วนใหญ่ มักจะมีหน้าที่ประจำของตัวเองอยู่แล้ว การที่จะต้องละทิ้งหน้าที่ตัวเองเพื่อไปทำอะไรซักอย่าง ที่มัน "&lt;b&gt;ไม่ปกติ&lt;/b&gt;" แสดงว่าสิ่งที่ไปทำนั้น จะต้องสำคัญมาก ๆ รัฐบาลควรมองพวกที่เดินขบวนเป็นข้อมูลที่ต้องสนใจ&lt;br /&gt;&lt;br /&gt;การตั้งตัวเป็นศัตรูกับพวกที่เดินขบวน แล้วไม่รับฟังสิ่งใด ๆ จากคนเหล่านี้ ถือว่าเป็นสิ่งที่ไม่สมควรกระทำ รัฐบาลใด ๆ ควรจะเข้าใจว่า ปกติแล้ว คนจะไม่พยายามมาเหนื่อยในเรื่องแบบนี้ ถ้ามีขบวนเกิดขึ้น รัฐบาลควรจะถามว่า เขามาเดินขบวนกันทำไม จะได้ไปแก้ปัญหาให้ได้&lt;br /&gt;&lt;br /&gt;การสลายกลุ่มผู้ประท้วง โดยการจ้างกลุ่มคนก่อความไม่สงบ (เช่น จ้างหญิงโสเภณีมาตีคนแก่ จ้างชาวบ้านมาแสดงการเผารูปผู้นำกลุ่มเดินขบวน ฯลฯ) เป็นสิ่งที่เลวร้ายยิ่งกว่าการไม่ฟังยิ่งนัก&lt;br /&gt;&lt;br /&gt;อย่างไรก็ตาม กลุ่มผู้ประท้วง หรือกลุ่มคนก่อความไม่สงบ อาจจะถูกว่าจ้างมาจากฝั่งใดก็ได้ เช่น กลุ่มผู้ประท้วง อาจจะถูกว่าจ้างโดยฝ่ายค้าน หรือกลุ่มคนก่อความไม่สงบ อาจจะถูกว่าจ้างโดยกลุ่มผู้ประท้วงเอง เพื่อสร้างภาพที่ไม่ดีต่อรัฐบาล ดังนั้น เป็นหน้าที่ของคนทุกคนที่ได้รับข้อมูลเหล่านี้ ที่จะต้องวิเคราะห์ด้วยเหตุผล &lt;b&gt;อย่าคล้อยตามไปกับปริมาณข้อมูล&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถึงแม้ประชาธิปไตยจะเน้นสิทธิความเท่าเทียมกันของบุคคล แต่&lt;b&gt;ตัวตนของผู้เดินขบวน&lt;/b&gt;ก็เป็นข้อมูลที่ไม่ควรละเลย โดยเฉพาะ ในกรณีที่ผู้เดินขบวน เป็นคนมีอายุ มีฐานะการงาน มีครอบครัว สิ่งนี้แสดงว่า ถึงแม้จะมีภาระรับผิดชอบมากมาย ยังยอม "&lt;b&gt;เสี่ยงชีวิต&lt;/b&gt;" มาเดินขบวน&lt;br /&gt;&lt;br /&gt;ตัวอย่างเช่น ผู้เคยที่ประท้วงรัฐบาลในอดีต (เมื่อยังเป็นนักศึกษา) มีแนวโน้มที่จะเป็นผู้เชี่ยวชาญการเมือง สูงกว่าคนทั่วไป และมีแนวโน้มที่จะ "รักชาติ" มากกว่าด้วย การเรียกผู้มีอายุเหล่านี้ว่าเป็น "นักธุรกิจที่ถูกขัดผลประโยชน์" จึงฟังดูไม่สมเหตุสมผล (ในทางอุดมคติ ไม่ควรจะมี "นักธุรกิจที่ถูกขัดผลประโยชน์" ด้วยซ้ำ)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113912285389574469?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113912285389574469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113912285389574469' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113912285389574469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113912285389574469'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/02/blog-post.html' title='คนชอบ คนไม่ชอบ ...'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113847579082173935</id><published>2006-01-29T02:15:00.000+07:00</published><updated>2006-01-29T02:16:30.873+07:00</updated><title type='text'>ฮา...</title><content type='html'>อ่านอันข้างล่างแล้วหมั่นไส้ตัวเองแฮะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113847579082173935?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113847579082173935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113847579082173935' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113847579082173935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113847579082173935'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/blog-post_29.html' title='ฮา...'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113838856246680181</id><published>2006-01-28T00:59:00.000+07:00</published><updated>2006-01-28T02:02:42.556+07:00</updated><title type='text'>เกือบโกหก ... ?</title><content type='html'>ประเด็นมันอยู่ที่ว่า หลาย ๆ คน คิดว่า คนที่จะเข้าวิศวะจุฬา ฯ ได้เนี่ย จะต้องขยันเรียนสุด ๆ (อย่างน้อยก็ ตอน ม. ปลาย) และคนที่จะได้เกียรตินิยมอันดับ 1 เนี่ย มันต้องขยันโคตร ๆ ๆ ๆ&lt;br /&gt;&lt;br /&gt;เรื่อง 2 เรื่องต่อไปนี้ เป็นเหตุการณ์ตัวอย่าง (จริง ๆ มีมากกว่า 2 ครั้ง) ซึ่งอาจจะไม่ได้ตรงกับเหตุการณ์จริง 100% นะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;เรื่องที่ 1&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เพื่อนผมคนนึง เคยเป็นอันดับต้น ๆ ของโรงเรียนตอนมัธยม เค้าอยู่วิศวะจุฬา ฯ เหมือนกัน (ตอนนั้นยังเรียนอยู่) แต่เกรดเค้าไม่ค่อยดี (คือ ใกล้ ๆ 3 ... บางคนก็บอกว่าดีแล้ว) พอไปคุยกะแม่เค้า แม่เค้าถามเกรดผม ... พอบอกไปปุ๊บ (ตอนนั้น 3.85) ก็ได้คำพูดตอบกลับมาทันทีว่า&lt;br /&gt;&lt;br /&gt; &lt;div style="text-align: center;"&gt;&lt;b&gt;อ่านหนังสือทบทวนทุกวันเลยสิ ดูอย่างเพื่อนไว้บ้างนะ&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ฮ่วย ... พูดไม่ออก ... เพื่อนผมก็พูดไม่ออกด้วยอะ ก็เค้ารู้แหละ ว่าผมเป็นไง ให้เอาอย่างผมก็ยิ่งซวยสิ ... สุดท้ายก็ได้แค่ ผงกหัวแล้วพูด "ครับ ๆ" อย่างเดียว&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;เรื่องที่ 2&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;มีแม่ของเด็กม.ปลายคนนึง (คือ เค้ารู้จักกับญาติผมหละ) ถามว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;อยู่วิศวะจุฬา ฯ ได้เนี่ย ต้องขยันมาก ๆ เลยสิ&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะให้ปฏิเสธหรอ? ... คือ ในใจก็รู้ตัวว่า ไม่เคยขยันเรียนอย่างที่คนอื่น ๆ เค้าพูดกัน แต่ไงดีหละ ... ก็เอาเป็นว่า สิ่งที่เราทำ ๆ ไป คนอื่นคงเรียกได้ว่า "ขยันมาก ๆ" หละมั้ง&lt;br /&gt;&lt;br /&gt;เลยตอบแบบคลุมเครือไป ประมาณว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;ครับ ตอนเอ็นทรานซ์เนี่ย ก็ต้องดูหนังสือเยอะ&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ในใจก็แอบคิดว่า ไอ้คำว่า "เยอะ" เนี่ย ... มันไม่มีนิยามที่เฉพาะเจาะจง คงไม่เรียกว่าโกหกนะ ... แต่แล้ว เค้าก็ถามต่อมาว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;ดูหนังสือก่อนสอบกี่เดือนหละ?&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เวรกรรม ... จะตอบว่าสัปดาห์เดียวได้มั้ยหละเนี่ย ... ขอเลี่ยง ๆ อีกหน่อยละกันนะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;ก็ ... เตรียมตัวสอบเกือบทั้งปีหละครับ&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;"เตรียมตัวสอบ" เนี่ย คิดในใจว่า รวมเรื่องสมัครสอบไปด้วยละกัน คิดว่า ตั้งแต่เตรียมตัวสอบครั้งแรก ถึงการสอบครั้งที่สอง มันคงเรียกว่า "เกือบทั้งปี" ได้มั้ง ...&lt;br /&gt;&lt;br /&gt;ยัง ยัง ... ยังไม่รอด ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;แล้วดูหนังสือวิชาเลขยังไงหรอ?&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แป่วววว ... เล่นบอกวิชามางี้ ... ไม่ได้ดูอะ ... อ้อ ๆ แต่ ที่โรงเรียนมีโจทย์ (การบ้านงี่เง่า ๆ หนะ) ให้ทำเรื่อย ๆ หนิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;ก็ทำโจทย์เยอะ ๆ หละครับ&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ตอนนี้ ในใจก็คิดว่า แค่มากกว่า 0 คงเรียกว่า "เยอะ ๆ" ได้มั้ง ... แต่มันเริ่มขัดกับอุดมการณ์ตัวเองแล้วอะ ไม่เคยคิดเลย ว่าจะบอกให้คนอื่นท่องรูปแบบโจทย์ แต่เค้าต้องคิดงั้นแน่เลย และแล้ว เค้าก็บอกว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;เห็นมั้ยลูก ทำโจทย์เยอะ ๆ นะ เอาให้ครบทุกแบบเลย&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;- -'' ... ซะงั้น ... นี่มันเรียนผิดวิธีเลยนะ ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113838856246680181?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113838856246680181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113838856246680181' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113838856246680181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113838856246680181'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/blog-post_28.html' title='เกือบโกหก ... ?'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113740169926136089</id><published>2006-01-16T15:53:00.000+07:00</published><updated>2006-01-16T15:54:59.336+07:00</updated><title type='text'>งาน TAM 2006</title><content type='html'>ไปมาเมื่อวันเสาร์ จะบอกว่า&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;TAM 2006 ห่วยแตก!!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt; ไม่มีอะไรน่าสนใจเลยอะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113740169926136089?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113740169926136089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113740169926136089' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113740169926136089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113740169926136089'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/tam-2006.html' title='งาน TAM 2006'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113673273905661457</id><published>2006-01-08T21:59:00.000+07:00</published><updated>2006-01-08T22:05:39.056+07:00</updated><title type='text'>อาวละ ... สรุป blog</title><content type='html'>blog ที่เกิดใหม่ตอนปีใหม่ มีดังนี้...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://tunoblog.blogspot.com/"&gt;Another Tunoblog&lt;/a&gt; - blog เรื่องไร้สาระ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tunology.blogspot.com/"&gt;Tunology&lt;/a&gt; - blog วิชาการ&lt;br /&gt;(ใครที่อ่านสิ่งที่เคยเขียนไว้ที่นี่ (Tunoblog) ไม่ค่อยรู้เรื่อง ลองไปดูใหม่ที่ Tunology นะ อาจจะรู้เรื่องมากขึ้น)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tunosong.blogspot.com/"&gt;Tunosong&lt;/a&gt; - blog เกี่ยวกะดนตรี&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่ยังไม่เลิกเขียนอันนี้นะ แค่จะ update น้อยลง (เยอะเลย)&lt;br /&gt;&lt;br /&gt;อัตราการ update ของทุก blog รวมกัน ก็คงจะน้อยกว่า blog นี้ในอดีตอยู่ดี :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113673273905661457?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113673273905661457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113673273905661457' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113673273905661457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113673273905661457'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/blog.html' title='อาวละ ... สรุป blog'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113637814292709886</id><published>2006-01-04T19:26:00.000+07:00</published><updated>2006-01-04T19:35:42.990+07:00</updated><title type='text'>ไปเล่นมาเพียบเลย ...</title><content type='html'>&lt;div style="text-align: center;"&gt;จะย้ายเรื่องวิชาการไปที่ &lt;a href="http://tunology.blogspot.com/"&gt;Tunology&lt;/a&gt; แล้วนะ ส่วน Tunoblog อันนี้ ก็คงจะซีเรียสน้อยลงละ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tunoblog.blogspot.com/"&gt;Another Tunoblog&lt;/a&gt; เขียนเป็นภาษาอังกฤษนะ&lt;br /&gt;&lt;br /&gt;แล้วก็ เรื่องดนตรี กับเพลงที่เอาให้ฟัง จะย้ายไปอยู่ที่ &lt;a href="http://tunosong.blogspot.com/"&gt;Tunosong&lt;/a&gt; หละ&lt;br /&gt;&lt;br /&gt;ของ blogsource ไม่เอาแล้ว ห่วยกว่า blogger อะ ...&lt;br /&gt;&lt;br /&gt;แล้วอยู่ดี ๆ ใจ๋ก็มาบอกว่า ให้ไปทำที่ &lt;a href="http://multiply.com/"&gt;multiply.com&lt;/a&gt; ... มันมีเนื้อที่ไม่จำกัดอะ ...&lt;br /&gt;&lt;br /&gt;ย้ายอีกทีดีมั้ยเนี่ย&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113637814292709886?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113637814292709886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113637814292709886' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113637814292709886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113637814292709886'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/blog-post_04.html' title='ไปเล่นมาเพียบเลย ...'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113605664879063119</id><published>2006-01-01T02:15:00.000+07:00</published><updated>2006-01-01T02:17:28.816+07:00</updated><title type='text'>สวัสดีปีใหม่ครับ</title><content type='html'>&lt;div style="text-align: center;"&gt;สวัสดี .. ปี .. ใหม่แล้ว .... ผองไทย .. จงแคล้ว .. ปวงภัย .... นะ&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113605664879063119?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113605664879063119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113605664879063119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113605664879063119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113605664879063119'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2006/01/blog-post.html' title='สวัสดีปีใหม่ครับ'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113577204209518188</id><published>2005-12-28T19:12:00.000+07:00</published><updated>2005-12-28T19:14:02.146+07:00</updated><title type='text'>ไปเล่นมา ...</title><content type='html'>&lt;div align="center"&gt;&lt;a href="http://tunococ.blogsource.com/"&gt;http://tunococ.blogsource.com/&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;ตามกระแสเก่านิด ๆ ... เขียนภาษาอังกฤษมั่ง&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113577204209518188?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113577204209518188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113577204209518188' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113577204209518188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113577204209518188'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/12/blog-post_28.html' title='ไปเล่นมา ...'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113566635941510530</id><published>2005-12-27T13:51:00.000+07:00</published><updated>2005-12-27T13:52:45.796+07:00</updated><title type='text'>ม่ายหวายแล้ววววววว!!!</title><content type='html'>เขียนบ่อย ๆ ไม่ไหวแล้วอะ ... งานมหาศาล ... หยั่งงี้ยังเรียกว่าว่างงานได้มั้ยเนี่ย&lt;br /&gt;&lt;br /&gt;แต่ยังไม่เลิกเขียนนะ!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113566635941510530?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113566635941510530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113566635941510530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113566635941510530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113566635941510530'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/12/blog-post.html' title='ม่ายหวายแล้ววววววว!!!'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113456250698037418</id><published>2005-11-21T18:49:00.000+07:00</published><updated>2005-12-18T01:17:35.150+07:00</updated><title type='text'>ถึงคราวต้องสร้าง Virtual Machine แล้ว (พื้นฐาน)</title><content type='html'>เพื่อให้เห็นภาพ ว่าที่ผ่าน ๆ มา มันเป็นอะไร คราวนี้ มาลองสร้าง Virtual Machine กันเถอะ ... มาสรุปสิ่งที่ Virtual Machine ควรจะมีก่อน ... ครั้งนี้คิดสำหรับ process เดียวก่อนนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Memory Units&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เพื่อให้สามารถสร้าง memory module ได้ เราต้องกำหนดไว้ก่อนว่า แต่ละ word มีขนาดเท่าไหร่ ... สมมติเลยละกันนะ ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ตำแหน่งของ memory 1 ตำแหน่ง จะเก็บข้อมูลได้ 1 byte&lt;br /&gt;ขนาดของ instruction = 4 byte&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Process Space&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;PC - Program Counter&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Memory - แบ่งเป็น&lt;br /&gt;&lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;Stack&lt;/li&gt;     &lt;ul&gt;       &lt;li&gt;SP - Stack Pointer&lt;/li&gt;       &lt;li&gt;BP - Base Pointer&lt;br /&gt;&lt;/li&gt;     &lt;/ul&gt;     &lt;li&gt;Heap&lt;br /&gt;&lt;/li&gt;   &lt;/ul&gt;   &lt;li&gt;MA - Memory Address&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;AC - Accumulator&lt;/li&gt;&lt;li&gt;FP - Frame Pointer&lt;/li&gt; &lt;/ul&gt; และ operation ที่เกี่ยวกับ memory พื้นฐาน ก็คือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;load: AC ← mem[MA]&lt;/li&gt;   &lt;li&gt;store: mem[MA] ← AC&lt;/li&gt;   &lt;li&gt;push X: SP ← SP - 4; mem[SP] ← X&lt;/li&gt;   &lt;li&gt;pop X: X ← mem[SP]; SP ← SP + 4&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;&lt;u&gt;Instruction Set&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ก่อนอื่น ตกลงกันก่อนว่า ส่วนของ OPCODE เราจะยังไม่ใส่ตัวเลขลงไป แต่สมมติว่ามันกินเนื้อที่ 4 byte (เพื่อให้ง่ายเวลา implement จริงเป็นวงจรด้วย) instruction set ที่เราต้องทำ มีสามกลุ่ม คือ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fundamental Instructions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;PUSH X&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;คำสั่งนี้ พิเศษกว่าคำสั่งอื่นตรงที่มันมี operand ด้วย ... ดังนั้น ขนาดของคำสั่งนี้จะต้องรวม X ลงไปด้วย ... เราจะกำหนดให้ 4 byte แรกเป็น opcode และ 4 byte หลังคือ X รวมกันเป็น 8 byte ต่อการ PUSH 1 ครั้ง&lt;/li&gt;   &lt;li&gt;การทำงาน: push X&lt;/li&gt; &lt;/ul&gt; PBASE&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: push BP&lt;/li&gt; &lt;/ul&gt; LOAD&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; load; push AC&lt;/li&gt; &lt;/ul&gt; STORE&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; pop MA; store&lt;/li&gt; &lt;/ul&gt; JMP&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop PC&lt;/li&gt; &lt;/ul&gt; JPOS&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; if AC &amp;gt; 0, pop PC, else pop AC&lt;/li&gt; &lt;/ul&gt; JNEG&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; if AC &amp;lt; 0, pop PC, else pop AC&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; JZ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; if AC = 0, pop PC, else pop AC&lt;/li&gt; &lt;/ul&gt; JNZ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; if AC ≠ 0, pop PC, else pop AC&lt;/li&gt; &lt;/ul&gt; CALL&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; push PC + 4; push BP; BP ← SP; PC ← AC&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; RETURN&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; SP ← BP; pop BP; pop PC; push AC&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;Dynamic Allocation Instructions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คำสั่งในกลุ่มนี้มีสองคำสั่งคือ ALLOC กับ FREE การทำงานของมันจะพิเศษหน่อย เพราะมันเป็น OS-Level Instruction ดังนั้น จะไม่สามารถ implement เป็น hardware ได้ตรง ๆ&lt;br /&gt;&lt;br /&gt;ALLOC&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; AC ← &lt;b&gt;malloc&lt;/b&gt;(AC); push AC&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; FREE&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; &lt;b&gt;free&lt;/b&gt;(AC)&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;Arithmetic and Logical Instructions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;พวกนี้ จะมีเยอะเท่าไหร่ก็ได้ ... หลัก ๆ จะมีสองกลุ่มคือ unary กับ binary แต่ถ้าจะทำเพิ่ม ก็ทำได้เรื่อย ๆ นะ&lt;br /&gt;&lt;br /&gt;NEG&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; push -AC&lt;/li&gt; &lt;/ul&gt; ADD&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC + MA&lt;/li&gt; &lt;/ul&gt; SUB&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC - MA&lt;/li&gt; &lt;/ul&gt; MUL&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC * MA&lt;/li&gt; &lt;/ul&gt; DIV&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC / MA&lt;/li&gt; &lt;/ul&gt; MOD&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC mod MA&lt;/li&gt; &lt;/ul&gt; ส่วนคำสั่งที่เป็นด้าน logic เราจะถือว่า 0 = false และ ค่าอื่น ๆ = true นะ (แต่ค่า true ที่เป็น output ของ operation จะกำหนดให้เป็น 1 เลย)&lt;br /&gt;&lt;br /&gt;NOT&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop AC; push ¬AC&lt;/li&gt; &lt;/ul&gt; AND&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC ∧ MA&lt;/li&gt; &lt;/ul&gt; OR&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC ∨ MA&lt;/li&gt; &lt;/ul&gt; IFF&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push AC ↔ MA&lt;/li&gt; &lt;/ul&gt; XOR&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push ¬(AC ↔ MA)&lt;/li&gt; &lt;/ul&gt; NAND&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push ¬(AC ∧ MA)&lt;/li&gt; &lt;/ul&gt; NOR&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;การทำงาน: pop MA; pop AC; push ¬(AC ∨ MA)&lt;/li&gt; &lt;/ul&gt; แล้วจะมาต่อเรื่อง Floating Point อีกทีนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113456250698037418?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113456250698037418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113456250698037418' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113456250698037418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113456250698037418'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/virtual-machine.html' title='ถึงคราวต้องสร้าง Virtual Machine แล้ว (พื้นฐาน)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113447793411830648</id><published>2005-11-20T19:40:00.000+07:00</published><updated>2005-12-14T18:48:55.540+07:00</updated><title type='text'>มาลองทำ Assembler กัน (Process Space)</title><content type='html'>ลองสมมติว่า เราเขียนโปรแกรมมา คอมไพล์เสร็จ มันเป็นก้อน object code หน้าตาคงที่ ...&lt;br /&gt;&lt;br /&gt;คำสั่ง JMP กับ CALL หละ? ตำแหน่งของการกระโดดมันคงที่หนิ ... แสดงว่า ถ้าเราเอา code เราไปวางไว้ที่อื่น (คือ address เริ่มต้นเปลี่ยนไป) มันก็จะทำงานไม่ถูกน่ะสิ!!!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Frame Pointer&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ทางแก้ก็คือ แก้ที่ CPU ของเรา ให้ทุกครั้งที่ทำคำสั่งที่เกี่ยวกับ memory ให้เอาเลขที่ได้ ไปบวกกับ FP ก่อน แค่นี้ก็เรียบร้อย ... ว่าแต่ FP นี่มันจะเก็บไว้ที่ไหนหละ? ... ก็กำหนด Register ขึ้นมาอีกตัวสิ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Process Space&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ดังนั้น เพื่อให้การทำงานในแต่ละ process ถูกต้อง เราจะเก็บค่า FP ปะติดกับ object code ไว้สำหรับแต่ละ process ... ค่า FP นั้น จะรู้ในเวลาที่ load โปรแกรมลงใน memory&lt;br /&gt;&lt;br /&gt;พอถึงเวลาที่ process นั้นจะทำงาน เราก็เพียงแค่ load ค่า FP ของ process นั้นกลับคืนมา การทำงานก็จะถูกต้องแล้ว&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Cross-Process Communication&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;แล้ว เราจะทำให้ process ต่าง ๆ ติดต่อกันได้ยังไงหละ?&lt;br /&gt;&lt;br /&gt;วิธีที่เค้านิยมทำกัน จะมีอยู่ 2 แบบคือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Messaging - ติดต่อผ่าน OS&lt;br /&gt; &lt;/li&gt;   &lt;li&gt;Shared Memory - ขอ OS ให้เปิดช่องการติดต่อโดยตรง&lt;br /&gt; &lt;/li&gt; &lt;/ol&gt; จริง ๆ ทั้งสองวิธีก็ต้องพึ่ง OS ทั้งคู่ แต่วิธีแรกจะต้องพึ่ง "OS Instruction" มากกว่า&lt;br /&gt;&lt;br /&gt;รายละเอียดจริง ๆ ของสองอย่างนี้ จะยังไม่พูดถึงตอนนี้ละกัน ... ไว้หลังจากทำ Virtual Machine กับ Assembler ได้ก่อน&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113447793411830648?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113447793411830648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113447793411830648' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447793411830648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447793411830648'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/assembler-process-space.html' title='มาลองทำ Assembler กัน (Process Space)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113447711437281138</id><published>2005-11-19T18:44:00.000+07:00</published><updated>2005-12-13T19:31:54.580+07:00</updated><title type='text'>มาลองทำ Assembler กัน (Return Value)</title><content type='html'>&lt;b&gt;&lt;u&gt;Return Value Problem&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า มี code ภาษา C แบบนี้&lt;br /&gt;&lt;code&gt;&lt;br /&gt; int Succ(int a)&lt;br /&gt; {&lt;br /&gt;  return a + 1;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;พอแปลงเป็นภาษา Assembly จะได้&lt;br /&gt;&lt;br /&gt;&lt;code&gt; Succ:&lt;br /&gt;  REF a -2&lt;br /&gt;  PUSH a&lt;br /&gt;  LOAD&lt;br /&gt;  PUSH 1&lt;br /&gt;  ADD&lt;br /&gt;  RETURN&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;ไม่มีปัญหา แต่ถ้าในฟังก์ชัน มีตัวแปรภายในอยู่หละ?&lt;br /&gt;&lt;br /&gt;&lt;code&gt; int Double(int a)&lt;br /&gt; {&lt;br /&gt;  int x = a;&lt;br /&gt;  return a + x;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;ลองแปลงเป็น Assembly ดู&lt;br /&gt;&lt;br /&gt;&lt;code&gt; Double:&lt;br /&gt;  REF a -2&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; VAR 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; REF x 1&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; STORE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ADD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ???&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ???&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  RETURN&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;ที่ใส่ ??? ไว้ก็คือ เราจะ RETURN เลยไม่ได้ เพราะเรายังไม่ได้เรียก FVAR แต่ถ้าเราเรียก FVAR เนี่ย ค่าที่เราต้องการจะ RETURN มันก็จะหายไป เราจะทำยังไงหละ?&lt;br /&gt;&lt;br /&gt;เรารู้ว่า ค่าที่จะถูก RETURN ออกไป จะต้องอยู่ในตำแหน่ง BP - 1 แน่ ๆ ดังนั้น เราก็สามารถแก้ปัญหานี้ได้โดย กำหนดตัวแปรที่ตำแหน่ง BP - 1 ให้มันเกินไว้ตัวนึง จะได้เป็น&lt;br /&gt;&lt;br /&gt;&lt;code&gt; Double:&lt;br /&gt;  REF a -2&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PUSH 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; REF rv 1&lt;/code&gt;&lt;br /&gt;  &lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; VAR 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; REF x 2&lt;span style="font-family: georgia,serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt; &lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; STORE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR rv&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ADD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; STORE&lt;/code&gt;&lt;br /&gt; &lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;b&gt;FVAR&lt;/b&gt;&lt;/code&gt;&lt;br /&gt; &lt;code&gt;  RETURN&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;แต่ ... แบบนี้มันยุ่งยากจัง ... เรากำหนดคำสั่งใหม่มันจะง่ายกว่านะ ... ก็สมมติซะว่าคำสั่ง RETURN มันจะรวม FVAR ไปด้วยเลย แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RETURN&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;POP ค่า Return Code ออกมาเก็บไว้ก่อน&lt;/li&gt;   &lt;li&gt;ถ้า SP &amp;ne; BP ก็ POP ค่าอื่น ๆ ทิ้งไปเรื่อย ๆ จนกว่า SP = BP&lt;/li&gt;   &lt;li&gt;POP ค่ามาใส่ไว้ใน BP&lt;/li&gt;   &lt;li&gt;POP อีกค่ามาใส่ไว้ใน PC&lt;/li&gt;   &lt;li&gt;PUSH ค่า Return Code ที่เก็บไว้ คืนลงไปใน Stack&lt;/li&gt; &lt;/ol&gt; ข้อดีของการทำแบบนี้ ไม่ใช่แค่เราลดคำสั่ง FVAR ได้แล้ว แต่เรายังประหยัดที่สำหรับ return value ไป 1 ที่ พร้อมกับป้องกันการ POP ไม่หมดได้ด้วย ... code ใหม่ของเราจะเหลือแค่นี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt; Double:&lt;br /&gt;  REF a -2&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; VAR 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; REF x 1&lt;span style="font-family: georgia,serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;  &lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; STORE&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR a&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ADD&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  RETURN&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113447711437281138?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113447711437281138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113447711437281138' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447711437281138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447711437281138'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/assembler-return-value.html' title='มาลองทำ Assembler กัน (Return Value)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113447409929155811</id><published>2005-11-18T16:47:00.000+07:00</published><updated>2005-12-13T19:34:08.030+07:00</updated><title type='text'>มาลองทำ Assembler กัน (Literal)</title><content type='html'>&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;Literal&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ลองดู code ภาษา C ข้างล่างนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt; int main()&lt;br /&gt; {&lt;br /&gt;  char *msg = &lt;b&gt;"ABC"&lt;/b&gt;;&lt;br /&gt;  printf(&lt;b&gt;"%s\n"&lt;/b&gt;, msg);&lt;br /&gt;  return 0;&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;เราจะแปลงมันเป็นภาษา assembly ได้แบบนี้&lt;br /&gt;&lt;code&gt;&lt;br /&gt; main:&lt;br /&gt;  VAR 1&lt;br /&gt;  REF msg 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR msg&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PUSH literal0&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; STORE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PUSH literal1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PVAR msg&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; LOAD&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PUSH printf&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; CALL&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; FVAR&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; PUSH 0&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; RETURN&lt;br /&gt;&lt;/code&gt;&lt;code&gt; literal0:&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;"ABC"&lt;br /&gt;&lt;/code&gt;&lt;code&gt; literal1: "%s\n"&lt;br /&gt;&lt;/code&gt;&lt;code&gt; printf:&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า string "ABC" และ "%s\n" ใช้เนื้อที่ตัวละ 1 word เราจะได้ object code สุดท้ายแบบนี้&lt;br /&gt;&lt;code&gt;&lt;br /&gt; 0000h: PUSH 0&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0002h: PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0004h: PUSH 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0006h: SUB&lt;/code&gt;&lt;br /&gt;&lt;code&gt; 0008h: PUSH 0024h&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 000Ah: STORE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 000Ch: PUSH 0025h&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 000Eh: PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0010h: PUSH 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0012h: SUB&lt;/code&gt;&lt;br /&gt;&lt;code&gt; 0014h: LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0016h: PUSH 0026h&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0018h: CALL&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 001Ah: PUSH 0&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 001Ch: MUL&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 001Eh: ADD&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0020h: PUSH 0&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0022h: RETURN&lt;/code&gt;&lt;br /&gt;&lt;code&gt; 0024h: "ABC"&lt;br /&gt;&lt;/code&gt;&lt;code&gt; 0025h: "%s\n"&lt;/code&gt;&lt;br /&gt;&lt;code&gt; 0026h: ...&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113447409929155811?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113447409929155811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113447409929155811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447409929155811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113447409929155811'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/assembler-literal.html' title='มาลองทำ Assembler กัน (Literal)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113424824524318297</id><published>2005-11-17T02:52:00.000+07:00</published><updated>2005-12-13T19:37:57.716+07:00</updated><title type='text'>มาลองทำ Assembler กัน (พื้นฐาน)</title><content type='html'>จริง ๆ แล้ว ภาษา assembly มันก็ภาษาเครื่องแหละ แต่มันเขียนสะดวกกว่านิดนึง ... อะไรที่เราควรจะกำหนดเพิ่มไว้ก่อนหละ? ก็เรื่อง label กับ ตัวแปรไง&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Local Variables (อีกแล้ว)&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า เราจะเขียนว่า&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;void f()&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;{&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  int x;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;int y;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;x = 0;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;y = x + 500;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;เดิมเราจะเขียนว่า&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;f:&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;VAR 2&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PBASE&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PUSH 1&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;SUB&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH 0&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PBASE&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PUSH 2&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;SUB&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PBASE&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PUSH 1&lt;/span&gt;&lt;br /&gt; &lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;SUB&lt;/span&gt;&lt;br /&gt; &lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;LOAD&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH 500&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;ADD&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;...&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;FVAR&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH ค่ามั่ว ๆ อะไรก็ได้&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;RETURN&lt;br /&gt;&lt;br /&gt;จะเห็นว่า การอ้างถึงตัว y จะต้องใช้ 3 คำสั่ง คือ&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PBASE&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH 2&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;SUB&lt;br /&gt;&lt;br /&gt;เพื่อลดเรื่องยุ่งพวกนี้ เราก็กำหนดภาษาใหม่ แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;f:&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;VAR 2&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;REF x 1 (บอกให้ x = BP - 1)&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;REF y 2 (บอกให้ y = BP - 2)&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PVAR x&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH 0&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PVAR y&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;span style="font-weight: bold;"&gt;PVAR x&lt;/span&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;LOAD&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH 500&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;ADD&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;...&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;FVAR&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;PUSH ค่ามั่ว ๆ อะไรก็ได้&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;RETURN&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Labels&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราใช้ Label ไปหลายทีแล้วโดยที่ไม่ได้พูดถึง ... จริง ๆ แล้ว การจะกระโดดไปที่ label ต่าง ๆ จำเป็นจะต้องรู้ address ของ label เหล่านั้น ...&lt;br /&gt;&lt;br /&gt;ดังนั้น Assembler ของเรา จะต้องมีความสามารถในการ แปลง label เหล่านั้น ให้เป็น address จริง ๆ&lt;br /&gt;&lt;br /&gt;สมมติว่ามี code แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  int f()&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  {&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  int x;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  int y;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  do {&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;  x = ReadFromSomewhere();&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;y = ReadFromSomewhere();&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  } while (x != y);&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  return 0;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;จะเขียนเป็น Assembly ได้แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  f:&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  VAR 2&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  REF x 1&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;REF y 2&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  loop:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  PUSH ReadFromSomewhere&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;CALL&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;PVAR y&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  PUSH ReadFromSomewhere&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;CALL&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;PVAR x&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  LOAD&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  PVAR y&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  SUB&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  PUSH loop&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  JNZ&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  FVAR&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  PUSH 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  &lt;/code&gt;&lt;code&gt;  RETURN&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;ซึ่ง ตอนที่แปลเป็นภาษาเครื่อง เราจะต้องรู้ 3 อย่างคือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ตำแหน่งเริ่มต้นของ f → สมมติว่าเป็น 1234h&lt;/li&gt;   &lt;li&gt;ตำแหน่งเริ่มต้นของ ReadFromSomewhere → สมมติว่าเป็น 5678h&lt;/li&gt;   &lt;li&gt;ขนาดของ instruction → สมมติว่าเป็น 2&lt;/li&gt; &lt;/ul&gt; จากตำแหน่งเริ่มต้นของ f และขนาดของ instruction เราจะสามารถหาตำแหน่งของ loop ได้ ทำให้สามารถแปล assembly ข้างบนเป็นภาษาเครื่องได้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  1234h: PUSH&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1236h: PUSH&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  1238h: &lt;/code&gt;&lt;code&gt;PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  123Ah: &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;PUSH 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  123Ch: &lt;/code&gt;&lt;code&gt;SUB&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  123Eh: &lt;/code&gt;&lt;code&gt;PUSH 5678h&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  1240h: &lt;/code&gt;&lt;code&gt;CALL&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1242h: &lt;/code&gt;&lt;code&gt;PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1244h: &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;PUSH 2&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1246h: &lt;/code&gt;&lt;code&gt;SUB&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1248h: &lt;/code&gt;&lt;code&gt;PUSH 5678h&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  124Ah: &lt;/code&gt;&lt;code&gt;CALL&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  124Ch: &lt;/code&gt;&lt;code&gt;PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  124Eh: &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;PUSH 1&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1250h: &lt;/code&gt;&lt;code&gt;SUB&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;  1252h: &lt;/code&gt;&lt;code&gt;LOAD&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1254h: &lt;/code&gt;&lt;code&gt;PBASE&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1256h: &lt;/code&gt;&lt;code&gt;PUSH 2&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1258h: &lt;/code&gt;&lt;code&gt;SUB&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  125Ah: &lt;/code&gt;&lt;code&gt;LOAD&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  125Ch: &lt;/code&gt;&lt;code&gt;SUB&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  125Eh: &lt;/code&gt;&lt;code&gt;PUSH 1238h&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  1260h: &lt;/code&gt;&lt;code&gt;JNZ&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  1262h: &lt;/code&gt;&lt;code&gt;PUSH 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;  1264h: &lt;/code&gt;&lt;code&gt;RETURN&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;คราวหน้า มาดูเรื่อง Literal กันนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113424824524318297?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113424824524318297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113424824524318297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113424824524318297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113424824524318297'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/assembler.html' title='มาลองทำ Assembler กัน (พื้นฐาน)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113424433838283271</id><published>2005-11-16T23:37:00.000+07:00</published><updated>2005-12-14T15:02:53.670+07:00</updated><title type='text'>มาลองออกแบบ Abstract Instruction Set กัน (ตอนต่อ)</title><content type='html'>ต่อจาก &lt;a href="http://tunococ.blogspot.com/2005/11/abstract-instruction-set.html"&gt;มาลองออกแบบ Abstract Instruction Set กัน (ตอนแรก)&lt;/a&gt; เลยนะ&lt;br /&gt;&lt;br /&gt;ครั้งนี้ จะพูดถึงการคำสั่งอย่างย่อ ... เรียกว่า เป็น Higher-Level Assembly ละกัน ... เราจะพัฒนาคำสั่งไปเรื่อย ๆ แบบนี้ จนมันเป็นภาษาชั้นสูงไปเลย&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Local Variables&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราสามารถจองตัวแปรบน stack ได้ด้วยคำสั่ง PUSH เช่น สมมติว่าเรามี code ภาษา C แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;void f()&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;{&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;int x;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;int y;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;x = 0;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;y = x + 500;&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;...&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;เมื่อเราเรียกคำสั่ง f เราจะจองเนื้อที่บน stack ให้กับตัวแปร x และ y ได้ด้วยคำสั่ง PUSH แล้วเมื่อเราจะใช้ตัวแปรพวกนี้ เราก็อ้างถึงจากตำแหน่ง BP (x คือ BP และ y คือ BP - 1) ...&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;f:&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;PUSH ค่าเริ่มต้นของ x&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH ค่าเริ่มต้นของ y&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PBASE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH 0&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PBASE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH 1&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;ADD&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PBASE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;LOAD&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH 500&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;ADD&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;...&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;POP&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;POP&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH ค่าอะไรก็ได้สำหรับ return&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;RETURN&lt;br /&gt;&lt;br /&gt;แต่เอ๊ะ ... คราวที่แล้วบอกว่า ไม่มีคำสั่ง "POP" หนิ ... แล้วเราจะทำให้มัน POP ได้ไงหละ? ... มันก็ต้องอ้อม ๆ หน่อยแหละ ใช้ความรู้ที่ว่า อะไรคูณ 0 ก็ได้ 0 แล้วก็ อะไรบวก 0 ก็ได้ตัวเดิม เราจะสร้างคำสั่ง POP ได้จาก&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;PUSH 0&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;MUL&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;ADD&lt;br /&gt;&lt;br /&gt;แล้วถ้ามี POP หลาย ๆ ตัวติดกัน เราก็แค่เพิ่ม MUL ตรงกลางเข้าไป เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;จาก&lt;/span&gt;&lt;br /&gt;POP&lt;br /&gt;POP&lt;br /&gt;POP&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;กลายเป็น&lt;/span&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;PUSH 0&lt;br /&gt;MUL&lt;br /&gt;MUL&lt;br /&gt;MUL&lt;br /&gt;ADD&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Abbreviated Form&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เพื่อให้เขียนง่าย แทนที่เราจะเขียน PUSH ซ้ำ ๆ สำหรับตัวแปรหลาย ๆ ตัว เราจะเขียนว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;VAR n&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพื่อหมายถึงการ PUSH เปล่า ๆ ไป n ครั้ง เป็นเนื้อที่ของตัวแปร n ตัว ส่วนการ POP เราก็จะเขียนว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;FVAR&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(ย่อมาจาก Free VAR) เพื่อหมายถึง PUSH 0, MUL, MUL, MUL, ..., ADD ที่มีจำนวน MUL เท่ากับ n ของคำสั่ง ALLOC ก่อนหน้านี้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Dynamic Allocation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก ... การจองเนื้อที่สำหรับตัวแปรบน heap เป็นสิ่งที่ทำกันบ่อยมาก ๆ เราก็เลย สมมติว่ามีคำสั่งสำหรับทำงานนี้เลยละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;ALLOC&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;การทำงานคือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;POP ค่าบนสุดของ Stack ออกมา ให้เป็นขนาด memory block ที่ต้องการ&lt;/li&gt;   &lt;li&gt;ไปค้นหาเนื้อที่ว่างจาก heap&lt;/li&gt;   &lt;li&gt;PUSH ค่า address คืนลงไปใน Stack&lt;/li&gt; &lt;/ul&gt; เพื่อให้การคืน memory ทำได้ง่ายขึ้น เราจะจองเนื้อที่ให้เกินที่ขอไปนิดนึง เพื่อใส่ขนาดของ block ไว้ข้างหน้า address ที่คืนออกมา ผลก็คือ คำสั่ง&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;FREE&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะต้องการ POP ค่าจาก stack เพียงค่าเดียว คือ address&lt;br /&gt;&lt;br /&gt;ตัวอย่างเช่น&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;void f()&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;{&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;int* x;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;x = new int;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;...&lt;br /&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;f:&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;VAR 1 (สมมติว่าขนาดของ pointer = 1)&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PBASE&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH 1 (สมมติว่าขนาดของ int = 1)&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;ALLOC&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;STORE&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;...&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;FVAR&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;PUSH ค่าอะไรก็ได้สำหรับ return&lt;br /&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt; &lt;/code&gt;&lt;code&gt;&lt;/code&gt;RETURN&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;สรุปคำสั่งตอนนี้&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จริง ๆ คำสั่ง ALLOC กับ FREE มันไม่ใช่คำสั่งพื้นฐานที่ CPU ควรจะมีหรอกนะ มันเป็น OS-level Instruction หนะ วิธีสร้าง ALLOC กับ FREE จริง ๆ ไว้จะบอกทีหลัง แต่ตอนนี้สมมติว่ามีให้ใช้เลยละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Minimal Instruction Set + ALLOC &amp; FREE&lt;/span&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;PUSH&lt;br /&gt;PBASE&lt;br /&gt;LOAD&lt;br /&gt;STORE&lt;br /&gt;JPOS&lt;br /&gt;CALL&lt;br /&gt;RETURN&lt;br /&gt;NAND&lt;br /&gt;NEG&lt;br /&gt;ADD&lt;br /&gt;MUL&lt;br /&gt;ALLOC&lt;br /&gt;FREE&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Abbreviations&lt;/span&gt;&lt;br /&gt;JMP&lt;br /&gt;JNEG&lt;br /&gt;JZ&lt;br /&gt;JNZ&lt;br /&gt;NOT&lt;br /&gt;AND&lt;br /&gt;OR&lt;br /&gt;XOR&lt;br /&gt;IFF&lt;br /&gt;SUB&lt;br /&gt;DIV&lt;br /&gt;MOD&lt;br /&gt;VAR&lt;br /&gt;FVAR&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วจะมาเพิ่ม abbreviation อีกเรื่อย ๆ นะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113424433838283271?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113424433838283271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113424433838283271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113424433838283271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113424433838283271'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/abstract-instruction-set_16.html' title='มาลองออกแบบ Abstract Instruction Set กัน (ตอนต่อ)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113407290862078490</id><published>2005-11-15T01:26:00.000+07:00</published><updated>2005-12-14T14:38:04.686+07:00</updated><title type='text'>มาลองออกแบบ Abstract Instruction Set กัน (ตอนแรก)</title><content type='html'>ขอโทษล่วงหน้า ถ้าทำให้ใครบางคนอ่านเรื่องนี้ไม่รู้เรื่องตั้งแต่ต้น ...&lt;br /&gt;&lt;br /&gt;บังเอิญว่า อยากจะเอาเรื่องเกี่ยวกับการออกแบบ Instruction Set ของ CPU มาให้ดู ๆ กันบ้างหนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Abstract Instruction Set&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จุดประสงค์การออกแบบชุดคำสั่ง (Instruction Set) นี้ ไม่ใช่เพื่อให้มันประสิทธิภาพสูงสุด หรือว่าทำเป็นวงจรง่ายหรอกนะ แต่ อยากจะทำให้มันทำงานได้ครบ โดยที่มีคำสั่งน้อย ๆ มากกว่า&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Chosen Design: Stack Machine&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Stack Machine เป็นแนวคิดที่ว่า Operation ทั้งหลาย ทำบน Stack ... คิดว่าแบบนี้น่าจะทำให้ลดจำนวนคำสั่งลงได้เยอะ&lt;br /&gt;&lt;br /&gt;ข้อเสียก็คือ การจะทำอะไรอย่างนึง มันต้องมีหลายคำสั่งน่ะสิ แล้วก็ การทำ Pipelining จะยากด้วย แต่ขอไม่สนเรื่องนี้ก่อน&lt;br /&gt;&lt;br /&gt;เหตุผลสนับสนุนอีกอย่างนึงที่ทำให้เลือก Operation on Stack ก็คือ เวลาทำ compiler ให้แปล source code เป็น machine code เนี่ย มันจะค่อนข้างง่ายและตรงมาก (แต่ประสิทธิภาพก็ไม่ได้ดีเท่าไหร่แหละ)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;First Two Opcodes: PUSH and POP&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เวลาจะทำ Stack ใคร ๆ ก็ต้องคิดถึง Push กับ Pop แน่ ๆ เราก็กำหนดเลยละกันว่า เราจะมีสองคำสั่งนี้&lt;br /&gt;&lt;br /&gt;ผลก็คือ เราสามารถสร้างให้คำสั่งอื่น ๆ ไม่รับ operand เองโดยตรงได้ เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;คำสั่ง A = B + C&lt;br /&gt;&lt;br /&gt;Instruction Set ทั่วไป&lt;br /&gt;ADD A, B, C&lt;br /&gt;&lt;br /&gt;Stack-based Operation ของเรา&lt;br /&gt;PUSH B&lt;br /&gt;PUSH C&lt;br /&gt;ADD&lt;br /&gt;POP A&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ว่าแต่ว่า ... เราจะระบุสิ่งที่จะ PUSH กับ POP ได้ยังไงหละ?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Types of Operands&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจากเราจะลดความซับซ้อนให้เหลือน้อยที่สุด เราจะยอมให้มี operand ได้แค่แบบเดียวแบบ คือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Immediate&lt;/li&gt; &lt;/ul&gt; ไว้จะมาอธิบาย ว่า addressing แบบอื่น สามารถทำได้จากสองแบบนี้ แต่เราต้องพึ่งคำสั่งอื่น ๆ เช่น LOAD กับ ADD&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Required Registers&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราจะให้มี register เพียง 3 ตัว ที่สามารถยุ่งเกี่ยวได้ด้วย machine instruction คือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Program Counter (PC) = Address ของคำสั่งปัจจุบัน&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Base Pointer (BP) = Address แรกของ Local Variable ปัจจุบัน&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Stack Pointer (SP) = Address ของ Top-of-stack&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; โดยทั้งสามตัวนี้ ควรจะใช้ Address Space เดียวกัน (Virtual ก็ได้)&lt;br /&gt;&lt;br /&gt;สมมติว่า SP จะลดค่าเมื่อ PUSH และเพิ่มค่าเมื่อ POP นะ (ทำตามแบบที่เค้านิยมกัน)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Indirect Indexing: PBASE&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก Base Pointer (BP) เป็น register ที่ควรจะสามารถนำค่าไปบวก-ลบได้ ดังนั้น เราจึงควรจะสร้างคำสั่งที่ใช้อ่านค่า BP ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;PBASE&lt;/b&gt; = Push ค่าของ BP ขึ้น Stack&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;LOAD and STORE&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราจะกำหนดให้ คำสั่ง LOAD จะใช้ operand เป็นตัวบนสุดของ stack ตัวเดียว มีการทำงานคือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;เอาค่าบนสุดของ stack ไปเป็น address อ้างอิง memory&lt;/li&gt;   &lt;li&gt;อ่านค่าจาก memory ในตำแหน่งนั้น&lt;/li&gt;   &lt;li&gt;เอาค่าที่อ่านได้ มาแทนที่ในตำแหน่งบนสุดของ stack (ที่เคยเป็น address)&lt;/li&gt; &lt;/ol&gt; ส่วนคำสั่ง STORE จะใช้ operand 2 ตัว มีการทำงานคือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;POP ตัวแรกออกจาก stack ใช้เป็น address อ้างอิง memory&lt;/li&gt;   &lt;li&gt;POP ตัวที่สองออกจาก stack ใช้เป็นค่าที่จะเขียนลง memory&lt;/li&gt;   &lt;li&gt;เขียนค่าที่ได้ (จากการ POP ครั้งที่สอง) ลงใน memory (address ได้จากการ POP ครั้งแรก)&lt;/li&gt; &lt;/ol&gt;จะว่าไป ... LOAD มันก็คือ PUSH แล้ว STORE มันก็คือ POP น่ะแหละ&lt;br /&gt;&lt;br /&gt;สังเกตดี ๆ หละ ว่า &lt;b&gt;จริง ๆ เราไม่ต้องมีคำสั่ง POP นะ&lt;/b&gt;!!!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Logical Functions: NOT, AND, OR, XOR, IFF&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถึงแม้ว่า จริง ๆ แล้วเราสามารถใช้แค่ NAND หรือ NOR เพียงอย่างเดียวได้ แต่ตรงนี้ ไม่ขอประหยัดจำนวน Opcode นะ เพราะว่ามันไม่ได้เป็นสาระสำคัญเท่าไหร่ (ถ้าอยากจะสร้างแบบประหยัด ให้มันมีแต่ NAND หรือมีแต่ NOR เวลาทำ compiler ก็จะเหนื่อยหน่อย เท่านั้นเอง)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Arithmetic Functions: NEG, ADD, SUB, MUL, DIV, MOD, EXP, LOG, ...&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;พวกนี้ก็เหมือนกัน ... จริง ๆ มีแค่ NEG ADD แล้วก็ MUL ก็น่าจะพอแล้ว แต่การประหยัดจำนวนคำสั่งตรงนี้ ก็ไม่ใช่สาระสำคัญเหมือนกัน ดังนั้นเราจะถือว่า คำสั่งพวกนี้ มีหมดเลย ก็แล้วกัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Classical Modes of Addressing&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก Operand เรา มีแต่แบบ Immediate การอ้างถึง Operand ในลักษณะอื่น ๆ แบบที่เครื่องทั่ว ๆ ไปเค้าทำได้ มันจะต้องใช้หลายคำสั่งหน่อยนะ เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Target: Value at memory address X&lt;br /&gt;Abbreviation: [X]&lt;br /&gt;How to PUSH that?&lt;br /&gt;PUSH X&lt;br /&gt;LOAD&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Target: Value at memory address BP + X&lt;br /&gt;Abbreviation: [BP + X]&lt;br /&gt;How to PUSH that?&lt;br /&gt;PBASE&lt;br /&gt;PUSH X&lt;br /&gt;ADD&lt;br /&gt;LOAD&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Target: Value at memory address (BP + value at X)&lt;br /&gt;Abbreviation: [BP + [X]]&lt;br /&gt;How to PUSH that?&lt;br /&gt;PBASE&lt;br /&gt;PUSH X&lt;br /&gt;LOAD&lt;br /&gt;ADD&lt;br /&gt;LOAD&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Target (in C): Array[Index]&lt;br /&gt;Abbreviation: [BP + array + [BP + index]]&lt;br /&gt;How to PUSH that?&lt;br /&gt;PBASE&lt;br /&gt;PUSH array&lt;br /&gt;ADD&lt;br /&gt;PBASE&lt;br /&gt;PUSH index&lt;br /&gt;ADD&lt;br /&gt;LOAD&lt;br /&gt;ADD&lt;br /&gt;LOAD&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Simple Branch Instructions: JMP, JPOS, JNEG, JZ, JNZ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;JMP&lt;/span&gt;: POP → PC&lt;/li&gt;&lt;li&gt;&lt;b&gt;JPOS&lt;/b&gt;: POP → เก็บไว้ แล้ว POP อีกที ถ้าได้ค่าเป็นเลขบวก (มากกว่า 0) ถึงจะกระโดดไปยัง address ที่เก็บไว้&lt;/li&gt;   &lt;li&gt;&lt;b&gt;JNEG&lt;/b&gt;: คล้าย ๆ กับ JPOS แต่จะกระโดดถ้าค่าที่ POP ออกมาครั้งที่ 2 เป็นเลขติดลบ&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;&lt;span style="font-weight: bold;"&gt;JZ&lt;/span&gt;: POP → เก็บไว้ แล้วก็ POP อีกที ถ้าได้ค่าเป็น 0 ถึงจะโดดไปยัง address ที่เก็บไว้&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;JNZ&lt;/span&gt;: คล้าย ๆ กับ JZ แต่เงื่อนไขการกระโดดตรงกันข้าม&lt;/li&gt; &lt;/ul&gt; จริง ๆ จะมีแต่ JPOS ก็ได้แหละ ที่ไม่ตัดตัวอื่นออก ก็เพราะว่ามันไม่ใช่สาระสำคัญ (อีกแล้ว)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Subroutine: CALL, RETURN&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คำสั่ง &lt;span style="font-weight: bold;"&gt;CALL&lt;/span&gt; จะวุ่น ๆ หน่อย เพราะมีการทำงานหลายขั้น คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;POP ค่า address ที่จะกระโดดไป เก็บไว้&lt;/li&gt;   &lt;li&gt;PUSH ค่า PC + 1 ไว้&lt;/li&gt;   &lt;li&gt;PUSH ค่า BP ไว้&lt;/li&gt;   &lt;li&gt;กำหนดค่าให้ BP = SP&lt;/li&gt;   &lt;li&gt;กำหนดค่าให้ PC = address ที่ POP ไว้ตอนแรก (ซึ่งก็คือ การกระโดดนั่นเอง)&lt;/li&gt; &lt;/ol&gt; ส่วนคำสั่ง &lt;span style="font-weight: bold;"&gt;RETURN&lt;/span&gt; จะทำงานกลับกันกับ CALL คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;POP ค่า Return Code ออกมาเก็บไว้ก่อน&lt;/li&gt;   &lt;li&gt;POP ค่ามาใส่ไว้ใน BP&lt;/li&gt;   &lt;li&gt;POP อีกค่ามาใส่ไว้ใน PC (ซึ่งก็คือ การกระโดดกลับ)&lt;/li&gt;   &lt;li&gt;PUSH ค่า Return Code คืนลงไปใน Stack&lt;/li&gt; &lt;/ol&gt; จริง ๆ แล้ว ตอนที่ RETURN จะไม่เผื่อที่สำหรับ Return Code ก็ได้ แต่อันนี้เผื่อไว้เพื่อความสะดวกหนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Local Variable and Parameters&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้าต้องการส่งผ่าน parameter ให้กับ function เราก็จะใช้วิธี PUSH ใส่ stack ไว้ก่อน เช่น&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;PUSH A&lt;/li&gt;   &lt;li&gt;PUSH B&lt;/li&gt;   &lt;li&gt;PUSH CustomAdd&lt;/li&gt;   &lt;li&gt;CALL&lt;/li&gt; &lt;/ol&gt; &lt;ul&gt;   &lt;li&gt;ถ้า BP หลัง CALL = x&lt;/li&gt;   &lt;li&gt;SP ก่อน CALL จะ = x + 1&lt;/li&gt;   &lt;li&gt;ตำแหน่งของ B ก็เลย = x + 2&lt;/li&gt;   &lt;li&gt;และ ตำแหน่งของ A ก็ = x + 3&lt;/li&gt; &lt;/ul&gt; สรุปก็คือ parameter ตัวที่ PUSH มาหลังสุด (ไม่นับ address ของฟังก์ชัน ซึ่งในตัวอย่างนี้คือ CustomAdd) จะมี address เป็น BP + 2&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CustomAdd&lt;/b&gt;:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;PBASE&lt;/li&gt;   &lt;li&gt;PUSH 2&lt;/li&gt;   &lt;li&gt;SUB&lt;/li&gt;   &lt;li&gt;LOAD&lt;/li&gt;   &lt;li&gt;PBASE&lt;/li&gt;   &lt;li&gt;PUSH 3&lt;/li&gt;   &lt;li&gt;SUB&lt;/li&gt;   &lt;li&gt;LOAD&lt;/li&gt;   &lt;li&gt;ADD&lt;/li&gt;   &lt;li&gt;RETURN&lt;/li&gt; &lt;/ol&gt;&lt;b&gt;&lt;u&gt;สรุปคำสั่ง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;ชุดคำสั่งเล็กสุด&lt;/span&gt;&lt;br /&gt;PUSH&lt;br /&gt;PBASE&lt;br /&gt;LOAD&lt;br /&gt;STORE&lt;br /&gt;JPOS&lt;br /&gt;CALL&lt;br /&gt;RETURN&lt;br /&gt;NAND&lt;br /&gt;NEG&lt;br /&gt;ADD&lt;br /&gt;MUL&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;คำสั่งลดความเหนื่อย&lt;/span&gt;&lt;br /&gt;JMP&lt;br /&gt;JNEG&lt;br /&gt;JZ&lt;br /&gt;JNZ&lt;br /&gt;NOT&lt;br /&gt;AND&lt;br /&gt;OR&lt;br /&gt;XOR&lt;br /&gt;IFF&lt;br /&gt;SUB&lt;br /&gt;DIV&lt;br /&gt;MOD&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ตอนนี้เราก็ได้ Instruction Set คร่าว ๆ แล้ว แต่เราไม่พูดถึงขนาดของข้อมูลในแต่ละช่องของ Stack เลยนะเนี่ย ... ก็เลยเรียกว่า Abstract Instruction Set ไงหละ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113407290862078490?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113407290862078490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113407290862078490' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113407290862078490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113407290862078490'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/abstract-instruction-set.html' title='มาลองออกแบบ Abstract Instruction Set กัน (ตอนแรก)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113406615229035818</id><published>2005-11-14T00:37:00.000+07:00</published><updated>2005-12-09T01:22:32.430+07:00</updated><title type='text'>การบวกลบเลขจำนวนเต็มไม่ติดลบ</title><content type='html'>เนื่องจาก การคิดเลขในฐานอะไรก็เหมือนกันหมด แต่เราอยากทำในกรณีที่มันเป็นฐาน 2 เพราะว่า คอมพิวเตอร์มันเป็นฐานสอง ... มาดูกันว่า การบวกเลขฐานสอง ทำกันยังไงนะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd1.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd1.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ แล้ว ก็เหมือนกับฐาน 10 น่ะแหละ แต่มันง่ายกว่าด้วยซ้ำ เพราะว่า ผลลัพธ์มีแค่ 0 กับ 1 ดังนั้น ความเป็นไปได้ทั้งหมดของการบวกกันในแต่ละหลัก คือ ... (ตัวทด ใช้สีแดงนะ)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;กรณีที่ไม่มีตัวทด (ตัวทด = 0)&lt;br /&gt;0 + 0 = &lt;span style="color:red;"&gt;0&lt;/span&gt;0&lt;br /&gt;0 + 1 = &lt;span style="color:red;"&gt;0&lt;/span&gt;1&lt;br /&gt;1 + 0 = &lt;span style="color:red;"&gt;0&lt;/span&gt;1&lt;br /&gt;1 + 1 = &lt;span style="color:red;"&gt;1&lt;/span&gt;0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;กรณีที่มีตัวทด (ตัวทด = 1)&lt;br /&gt;&lt;span style="color:red;"&gt;1 +&lt;/span&gt; 0 + 0 = &lt;span style="color:red;"&gt;0&lt;/span&gt;1&lt;br /&gt;&lt;span style="color:red;"&gt;1 +&lt;/span&gt; 0 + 1 = &lt;span style="color:red;"&gt;1&lt;/span&gt;0&lt;br /&gt;&lt;span style="color:red;"&gt;1 +&lt;/span&gt; 1 + 0 = &lt;span style="color:red;"&gt;1&lt;/span&gt;0&lt;br /&gt;&lt;span style="color:red;"&gt;1 +&lt;/span&gt; 1 + 1 = &lt;span style="color:red;"&gt;1&lt;/span&gt;1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอได้การบวกทุกแบบแล้ว เราก็ลองเอามาใช้ดู&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd2.1.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/320/UIAdd2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd3.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd3.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd4.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd4.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd5.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd5.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd6.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd6.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd7.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd7.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/UIAdd8.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/UIAdd8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ตอนนี้ก็บวกเป็นละ ... แล้วการลบหละ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113406615229035818?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113406615229035818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113406615229035818' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113406615229035818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113406615229035818'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_14.html' title='การบวกลบเลขจำนวนเต็มไม่ติดลบ'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113406346156851908</id><published>2005-11-13T23:59:00.000+07:00</published><updated>2005-12-09T00:37:41.650+07:00</updated><title type='text'>เลขจำนวนเต็มไม่ติดลบ</title><content type='html'>ที่ผ่าน ๆ มา เราก็รู้กันไปเรียบร้อยแล้วเรื่อง การแปลงฐานเลข คราวนี้ก็ ขอตั้งข้อกำหนดเบื้องต้นไว้นิดนึงนะ คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ข้อมูลในคอมพิวเตอร์ จะอยู่ในรูปลำดับของเลขฐานสอง ที่มีความยาวจำกัด&lt;br /&gt;ความยาวของลำดับ = จำนวน bit ของข้อมูล&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วก็ ขอกำหนดคำที่จะใช้เพื่อให้คุยกันง่ายขึ้น คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ข้อมูล n bit = เลขฐานสอง n หลัก&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;จำนวนเต็มไม่ติดลบ ที่สามารถแทนได้ด้วย n bit&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คิดด้วยหลักการง่าย ๆ ว่า ข้อมูล 1 bit สามารถเป็นได้ 2 แบบ คือ 0 กับ 1 ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ข้อมูล n bit สามารถเป็นได้ 2&lt;sup&gt;n&lt;/sup&gt; แบบที่แตกต่างกัน&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เนื่องจาก จำนวนเต็มที่ไม่ติดลบ 2&lt;sup&gt;n&lt;/sup&gt; ตัวแรก ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;0, 1, 2, ..., 2&lt;sup&gt;n&lt;/sup&gt; - 1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น ข้อมูล n bit จะสามารถแทนจำนวนเต็มไม่ติดลบที่มีค่าน้อยกว่า 2&lt;sup&gt;n&lt;/sup&gt; ได้ 1 ตัว&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Byte&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;1 byte = 8 bits&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น ข้อมูล 1 byte จะแทนจำนวนเต็มไม่ติดลบที่มีค่าน้อยกว่า 2&lt;sup&gt;8&lt;/sup&gt; ได้ 1 ตัว&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;หมายเหตุ&lt;/u&gt;: แทนที่จะมองว่า 1 byte = เลขฐานสอง 8 หลัก เราอาจจะมองว่า 1 byte = เลขโดดฐาน 256 ก็ได้&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;เลขฐาน 16&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ในโปรแกรมคอมพิวเตอร์พวกที่ให้เห็นค่าใน memory เรามักจะเห็นเลขฐาน 16 กันบ่อยพอควร แล้วมันก็จะอยู่เป็นคู่ ๆ ด้วย สาเหตุที่เค้านิยมเขียนเลขฐาน 16 อยู่เป็นคู่ ๆ ก็เพราะว่า มันสั้นกว่าการเขียนเป็นเลขฐานสอง แล้วที่มันใช้ได้ก็เพราะว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;2&lt;sup&gt;4&lt;/sup&gt; = 16 → เลขฐาน 16 ยาว 1 หลัก = ข้อมูล 4 bit&lt;br /&gt;16 × 16 = 256 → เลขฐาน 16 ยาว 2 หลัก = ข้อมูล 1 byte&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;เลขฐาน 16 ยาว 2 หลัก = 1 byte&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ตัวอย่าง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;1010&lt;sub&gt;2&lt;/sub&gt; = A&lt;sub&gt;16&lt;/sub&gt; = 10&lt;br /&gt;1101&lt;sub&gt;2&lt;/sub&gt; = D&lt;sub&gt;16&lt;/sub&gt; = 13&lt;br /&gt;1010 1101&lt;sub&gt;2&lt;/sub&gt; = AD&lt;sub&gt;16&lt;/sub&gt; = 173&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ความนิยมอีกเรื่อง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก การจะเขียนฐานเลขห้อย ๆ เนี่ย บางทีมันทำยาก (เช่น ในคอมพิวเตอร์สมัยก่อน หรือในหน้าจอของเครื่องอะไรก็ตามที่เป็น Text Mode) เค้าเลยนิยมเอา h ห้อยท้ายแทน (h มาจาก hexadecimal ← hexa + dec = 6 + 10) ส่วนเลขฐานสอง บางที่ก็เอา b ห้อยท้ายแทนการห้อยสอง เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ADh = 173&lt;br /&gt;11011010b = DAh = 218&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ เครื่องหมายอื่น ๆ ก็มีอีก ไว้จะค่อย ๆ เอามาให้ดูบ้างละกันนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113406346156851908?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113406346156851908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113406346156851908' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113406346156851908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113406346156851908'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_13.html' title='เลขจำนวนเต็มไม่ติดลบ'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113337380456354567</id><published>2005-11-12T23:47:00.000+07:00</published><updated>2005-12-01T01:39:11.273+07:00</updated><title type='text'>เลขฐานสอง - ทำไมต้อง 2</title><content type='html'>ทำไมคอมพิวเตอร์ถึงนิยมใช้เลขฐาน 2 ???&lt;br /&gt;&lt;br /&gt;เอามาให้ดูเล่น ๆ ขำ ๆ นะ อย่าซีเรียสมาก แต่บางอันมันก็มีเค้านะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ทางฟิสิกส์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ประจุมีสองขั้ว คือ บวกกับลบ เกิดจากอนุภาคสองชนิดคือ Electron และ Proton&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;แหล่งกำเนิดไฟฟ้ามีสองขั้ว วงจร Digital ก็เลยทำได้ง่ายที่สุดเมื่อสนใจศักย์ไฟฟ้าเพียง 2 ระดับ&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;&lt;u&gt;ทางคณิตศาสตร์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;เลขฐาน 1 ใช้ไม่ได้ (เพราะ d(i) = 1 สำหรับทุก i) เลขฐาน 2 ก็เลยเป็นฐานต่ำสุดที่ใช้ได้&lt;/li&gt;    &lt;li&gt;complement ทำง่ายดี&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;วิธีหารเลขฐาน 2 ไม่มีการคูณในขั้นตอน&lt;/li&gt;&lt;li&gt;2 เป็นจำนวนเฉพาะตัวแรก (อันนี้ไม่ค่อยเกี่ยวแล้ว :P)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;สมการพหุนามกำลังต่ำที่สุดที่สามารถมีคำตอบเป็นจำนวนเชิงซ้อน คือ 2&lt;/li&gt;   &lt;li&gt;สูตรเส้นรอบวงของวงกลมคือ &lt;b&gt;สอง&lt;/b&gt;πr และสูตรพื้นที่ก็คือ πr&lt;sup&gt;&lt;b&gt;สอง&lt;/b&gt;&lt;/sup&gt; (เริ่มนอกเรื่องมากขึ้น)&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;b&gt;&lt;u&gt;ด้านอื่น ๆ&lt;/u&gt;&lt;/b&gt; (หลุดเรื่องไปแล้ว)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;สิ่งมีชีวิตทุกสายพันธุ์ยกเว้นคน มีเพศไม่เกิน 2 เพศ (หรืออย่างน้อย เราก็รู้แค่นี้ ... สัตว์มันอาจจะรู้กันเองก็ได้เนอะ)&lt;/li&gt;   &lt;li&gt;อวัยวะของเรา มันจะมีเป็นคู่ ๆ&lt;/li&gt;&lt;li&gt;ประสาทการมองเห็นของเรา เป็นภาพ&lt;b&gt;สอง&lt;/b&gt;มิติ &lt;b&gt;สอง&lt;/b&gt;ภาพ&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;ภาค &lt;b&gt;สอง&lt;/b&gt; ของ The Lord of the Rings ชื่อว่า The &lt;b&gt;Two&lt;/b&gt; Towers&lt;/li&gt;   &lt;li&gt;"น้องพลับขอสอง" (... พี่พลับขอเท่าไหร่อะวาว?)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ปาท่องโก๋ แซนด์วิช แฮมเบอร์เกอร์&lt;/li&gt;&lt;li&gt;ยังไม่มีเพลงชื่อว่า สามรัก สี่รัก ... n รัก นอกจาก 2&lt;/li&gt;   &lt;li&gt;โจ้หญิงทำโทรศัพท์หายไปแล้วสองเครื่อง&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://tunococ.blogspot.com/"&gt;http://tunococ.blogspot.com/&lt;/a&gt; กับ &lt;a href="http://www.geocities.com/tunaococ/"&gt;http://www.geocities.com/tunaococ/&lt;/a&gt; อยู่กันเป็นคู่&lt;/li&gt;  &lt;/ul&gt;คราวนี้เพ้อเจ้อมากไปละ :D ไว้จะมาเจาะเรื่อง 1's complement กับ 2's complement กันอีกทีนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113337380456354567?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113337380456354567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113337380456354567' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113337380456354567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113337380456354567'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/2.html' title='เลขฐานสอง - ทำไมต้อง 2'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113336854521080270</id><published>2005-11-11T23:04:00.000+07:00</published><updated>2005-11-30T23:35:48.820+07:00</updated><title type='text'>การแปลงฐานเลข - ส่วนทศนิยม</title><content type='html'>ต่อเลยละกันนะ ... คราวนี้สมมติว่าค่า X ของเรา เป็นจำนวนจริง&lt;b&gt;บวก&lt;/b&gt; มีส่วนจำนวนเต็มและส่วนทศนิยมอยู่ เราจะแยกสองส่วนนี้ออกจากกัน โดยสมมติให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;X = W + F&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;เมื่อ W ∈ &lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; ∪ {0} และ F ∈ [0, 1)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ สมมติให้ &lt;b&gt;s&lt;/b&gt; เป็นการเขียนค่า X ในระบบเลขฐาน n เราจะรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;X = Σ&lt;sub&gt;i∈&lt;b&gt;Z&lt;/b&gt;&lt;/sub&gt; s(i) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้ากำหนดให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;W = Σ&lt;sub&gt;i∈&lt;b&gt;Z&lt;/b&gt;&lt;/sub&gt; s&lt;sub&gt;w&lt;/sub&gt;(i) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;F = Σ&lt;sub&gt;i∈&lt;b&gt;Z&lt;/b&gt;&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(i) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมการแรก จะเขียนได้เป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;W + F = Σ&lt;sub&gt;i∈&lt;b&gt;Z&lt;/b&gt;&lt;/sub&gt; [s&lt;sub&gt;w&lt;/sub&gt;(i) + s&lt;sub&gt;f&lt;/sub&gt;(i)] n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากตอนที่แล้ว (&lt;a href="http://tunococ.blogspot.com/2005/11/blog-post_10.html"&gt;การแปลงฐานเลข - จำนวนเต็ม&lt;/a&gt;) ที่เรารู้ว่า s&lt;sub&gt;w&lt;/sub&gt;(i) = 0 เมื่อ i &amp;lt; 0&lt;br /&gt;&lt;br /&gt;และเนื่องจาก 0 ≤ F &amp;lt; 1 ทำให้รู้ว่า s&lt;sub&gt;f&lt;/sub&gt;(i) = 0 เมื่อ i ≥ 0&lt;br /&gt;&lt;br /&gt;ดังนั้น เราจะแยกคิด s&lt;sub&gt;w&lt;/sub&gt;(i) กับ s&lt;sub&gt;f&lt;/sub&gt;(i) ได้ ...&lt;br /&gt;&lt;br /&gt;วิธีการหา s&lt;sub&gt;w&lt;/sub&gt;(i) ก็รู้แล้ว เราจะสนใจแต่ s&lt;sub&gt;f&lt;/sub&gt;(i) นะ ... เริ่มจากสมการนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;F = Σ&lt;sub&gt;i&amp;lt;0&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(i) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;F = Σ&lt;sub&gt;i&amp;gt;0&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คูณตลอดด้วย n จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;nF = Σ&lt;sub&gt;i&amp;gt;0&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพราะว่าเรารู้ว่า s&lt;sub&gt;f&lt;/sub&gt;(-i) ทุกตัว มีค่าไม่เกิน n - 1 ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Σ&lt;sub&gt;i&amp;gt;1&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i+1&lt;/sup&gt; ≤ Σ&lt;sub&gt;i≥2&lt;/sub&gt; (n - 1) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;Σ&lt;sub&gt;i≥1&lt;/sub&gt; (n - 1) n&lt;sup&gt;-i&lt;/sup&gt; = 1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจึงแยกส่วนจำนวนเต็มกับส่วนทศนิยมได้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;nF = s&lt;sub&gt;f&lt;/sub&gt;(-1) + Σ&lt;sub&gt;i&amp;gt;1&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ผลรวมใน Σ ทางขวา จะอยู่ในช่วง [0, 1) ดังนั้น s&lt;sub&gt;f&lt;/sub&gt;(-1) = nF mod 1&lt;br /&gt;&lt;br /&gt;ได้มาตัวนึงละ ... ทำต่อนะ ... เอา s&lt;sub&gt;f&lt;/sub&gt;(-1) ลบออกจากทั้งสองข้าง&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;nF - s&lt;sub&gt;f&lt;/sub&gt;(-1) = Σ&lt;sub&gt;i&amp;gt;1&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ค่าทั้งสองข้างของสมการ จะมีค่าอยู่ในช่วง [0, 1) เราก็เอา n คูณเข้าไปอีกที แล้วแยกส่วนเต็มกับเศษออกจากกันอีกที&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;n[nF - s&lt;sub&gt;f&lt;/sub&gt;(-1)] = Σ&lt;sub&gt;i&amp;gt;1&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i) n&lt;sup&gt;-i+2&lt;/sup&gt;&lt;br /&gt;n[nF - s&lt;sub&gt;f&lt;/sub&gt;(-1)] = Σ&lt;sub&gt;i&amp;gt;0&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i - 1) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;n[nF - s&lt;sub&gt;f&lt;/sub&gt;(-1)] = s&lt;sub&gt;f&lt;/sub&gt;(-2) + Σ&lt;sub&gt;i&amp;gt;1&lt;/sub&gt; s&lt;sub&gt;f&lt;/sub&gt;(-i - 1) n&lt;sup&gt;-i+1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พจน์ที่ติด Σ อยู่ด้านขวา ก็จะรวมกันได้ไม่ถึง 1 อีก ... ดังนั้น s&lt;sub&gt;f&lt;/sub&gt;(-2) = n[nF - s&lt;sub&gt;f&lt;/sub&gt;(-1)] mod 1&lt;br /&gt;&lt;br /&gt;ถ้าเราทำซ้ำ ๆ ไปเรื่อย ๆ เราก็จะหาค่า s&lt;sub&gt;f&lt;/sub&gt;(-i) ได้ทั้งหมด&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113336854521080270?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113336854521080270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113336854521080270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113336854521080270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113336854521080270'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_11.html' title='การแปลงฐานเลข - ส่วนทศนิยม'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113328270013824803</id><published>2005-11-10T23:12:00.000+07:00</published><updated>2005-11-29T23:47:47.996+07:00</updated><title type='text'>การแปลงฐานเลข - จำนวนเต็ม</title><content type='html'>คราวที่แล้ว พูดถึง &lt;b&gt;d&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; กับ &lt;b&gt;s&lt;/b&gt; ไปแล้ว เราก็รู้แล้วหละ ว่าค่าของเลขในระบบฐานต่าง ๆ กัน มันคิดยังไง คราวนี้เราจะมาดูการแปลงกลับมั่งนะ&lt;br /&gt;&lt;br /&gt;ในตอนนี้ จะพูดถึงกรณีที่ไม่มีทศนิยม (จำนวนเต็ม) อย่างเดียวก่อน ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;สมมติว่าเรามีค่า X อยู่&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราอยากรู้ว่า ในระบบเลขฐาน n เราจะหาค่า s(i) ต่าง ๆ ได้ยังไง ... ความสัมพันธ์ของ X กับ &lt;b&gt;s&lt;/b&gt; ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;X = Σ&lt;sub&gt;i≥0&lt;/sub&gt; s(i) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เริ่มต้นโดย หาค่า s(0) ก่อน โดยพิจารณาที่ mod n&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;X ≡ Σ&lt;sub&gt;i≥0&lt;/sub&gt; s(i) n&lt;sup&gt;i&lt;/sup&gt; (mod n)&lt;br /&gt;X ≡ s(0) (mod n)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเราให้ s(i) ทุกตัวอยู่ในช่วง 0 ถึง n - 1 เราจะรู้ทันทีว่า s(0) = X mod n&lt;br /&gt;&lt;br /&gt;พอรู้แล้ว เราก็เอา s(0) ลบออกจากสองข้างของสมการตั้งต้น ได้เป็นแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;X - s(0) = Σ&lt;sub&gt;i≥1&lt;/sub&gt; s(i) n&lt;sup&gt;i&lt;/sup&gt; = n Σ&lt;sub&gt;i≥0&lt;/sub&gt; s(i + 1) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แสดงว่า ทั้งสองข้างของสมการ หารด้วย n ลงตัว ... เราก็หารซะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(X - s(0)) / n = Σ&lt;sub&gt;i≥0&lt;/sub&gt; s(i + 1) n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พิจารณาที่ mod n อีกครั้ง เราจะเห็นว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(X - s(0)) / n ≡ Σ&lt;sub&gt;i≥0&lt;/sub&gt; s(i + 1) n&lt;sup&gt;i&lt;/sup&gt; (mod n)&lt;br /&gt;(X - s(0)) / n ≡ s(1) (mod n)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็จะสรุปได้ว่า s(1) = [(X - s(0)) / n] mod n&lt;br /&gt;&lt;br /&gt;สังเกตว่า ถ้าเราทำซ้ำไปเรื่อย ๆ เราก็จะหา s(i) ได้ทั้งหมด&lt;br /&gt;&lt;br /&gt;จะว่าไป ... มันก็มีส่วนคล้าย ๆ Taylor Series กับ Newton Polynomial นะเนี่ย (ลองดู &lt;a href="http://tunococ.blogspot.com/2005/11/discrete-vs-continuous-taylor-series.html"&gt;Discrete vs Continuous: Taylor Series และ Newton Polynomial&lt;/a&gt; สิ)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113328270013824803?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113328270013824803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113328270013824803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113328270013824803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113328270013824803'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_10.html' title='การแปลงฐานเลข - จำนวนเต็ม'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113327946572492936</id><published>2005-11-09T22:33:00.000+07:00</published><updated>2005-11-29T22:51:06.796+07:00</updated><title type='text'>เลขฐาน - มันเป็นไงในคณิตศาสตร์</title><content type='html'>คราวนี้ ขอเปิดตัวเรื่องใหม่ ที่สามารถเขียนตอนละสั้น ๆ ได้ :P&lt;br /&gt;&lt;br /&gt;ก็ ... ไหน ๆ ผมก็จะเรียน Computer Science อยู่แล้ว เริ่มสังเกตว่า ... ทำไมไม่ค่อยเขียนเรื่องคอมพิวเตอร์มั่งเลย!!!&lt;br /&gt;&lt;br /&gt;ตอนนี้เลยขอเริ่มล่ะนะ ... เกริ่นเรื่องเลขฐานก่อน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ระบบเลขฐาน n&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;เลขโดด&lt;/b&gt;ในระบบเลขฐาน n คือ 0, 1, 2, ..., n - 1 เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ในระบบเลขฐาน 2 เราจะมีเลขโดด 2 ตัว คือ 0 กับ 1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ในระบบเลขฐาน 16 เราจะมีเลขโดด 16 ตัว คือ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 และ 15&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ความนิยม ... ตัว A B C D E F&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ก็ไม่มีอะไรหรอก เพียงแต่ว่า เวลาเค้าเขียนเลขฐาน 16 กัน มันจะสะดวกกว่า ถ้าให้&lt;br /&gt;&lt;div style="text-align: center;"&gt;A = 10&lt;br /&gt;B = 11&lt;br /&gt;C = 12&lt;br /&gt;D = 13&lt;br /&gt;E = 14&lt;br /&gt;F = 15&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพราะเวลาเขียนจริง ๆ มันใช้เนื้อที่หลักเดียว ... เราไม่ต้องมาคอยเว้นวรรค เพื่อให้มันชัดเจน เช่น&lt;br /&gt;&lt;div style="text-align: center;"&gt;"10 15 2"&lt;br /&gt;&lt;/div&gt;  ก็จะกลายเป็น&lt;br /&gt;&lt;div style="text-align: center;"&gt;"AF2"&lt;br /&gt;&lt;/div&gt;  ทำให้เขียนได้สั้นลง&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ค่าประจำหลัก&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เพื่อให้ง่ายต่อการเขียน เราจะเขียน&lt;b&gt;ค่าประจำหลักที่ i&lt;/b&gt; ว่า d&lt;sub&gt;n&lt;/sub&gt;(i) โดยที่&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;d&lt;sub&gt;n&lt;/sub&gt;(i) = n&lt;sup&gt;i&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น ค่าประจำหลักที่ 0 ก็คือ 1 ไม่ว่า n จะเป็นเท่าไหร่&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ตัวเลข&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราจะมองตัวเลขที่เราเขียน ๆ กัน เป็นฟังก์ชันของเลขหลัก ชื่อว่า s(i) แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ถ้าเขียน s = "123" จะแปลว่า&lt;br /&gt;s(0) = 3&lt;br /&gt;s(1) = 2&lt;br /&gt;s(2) = 1&lt;br /&gt;s(อื่น ๆ) = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเขียน s = "2.345" จะแปลว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;s(0) = 2&lt;br /&gt;s(-1) = 3&lt;br /&gt;s(-2) = 4&lt;br /&gt;s(-3) = 5&lt;br /&gt;s(อื่น ๆ) = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ค่าจริง ๆ ของตัวเลข&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ค่าจริง ๆ ของตัวเลข s บนฐาน n ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Σ&lt;sub&gt;i∈&lt;b&gt;Z&lt;/b&gt;&lt;/sub&gt; s(i) d&lt;sub&gt;n&lt;/sub&gt;(i)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่ง ... ถ้ามอง &lt;b&gt;s&lt;/b&gt; กับ &lt;b&gt;d&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; เป็นเวกเตอร์ มันก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;s&lt;/b&gt; ⋅ &lt;b&gt;d&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;นั่นเอง&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113327946572492936?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113327946572492936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113327946572492936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113327946572492936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113327946572492936'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_09.html' title='เลขฐาน - มันเป็นไงในคณิตศาสตร์'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113319250320761857</id><published>2005-11-08T22:04:00.000+07:00</published><updated>2005-11-28T22:41:43.313+07:00</updated><title type='text'>โจทย์คลายเครียด</title><content type='html'>ขออภัยเป็นอย่างยิ่ง ที่ไม่สามารถ update ได้เป็นเวลานานมาาาาาาาก ... T_T&lt;br /&gt;&lt;br /&gt;เพื่อให้สามารถชดเชยส่วนที่หายไปได้ ... ขอเขียนเรื่องละสั้น ๆ แล้วก็ เนื้อหาน้อย ๆ หน่อยนะ&lt;br /&gt;&lt;br /&gt;คราวนี้ ได้โจทย์มาทาง E-mail ... โจทย์มีอยู่ว่า&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;blockquote&gt;กำหนดให้&lt;br /&gt;A&lt;sub&gt;1&lt;/sub&gt; = 1&lt;br /&gt;A&lt;sub&gt;2&lt;/sub&gt; = 2&lt;br /&gt;และ A&lt;sub&gt;n&lt;/sub&gt; = A&lt;sub&gt;n-1&lt;/sub&gt; + A&lt;sub&gt;n-2&lt;/sub&gt;&lt;br /&gt;จงพิสูจน์ว่า A&lt;sub&gt;n&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;n&lt;/sup&gt; เมื่อ n ≥ 1&lt;/blockquote&gt; &lt;/div&gt;&lt;b&gt;&lt;u&gt;พิสูจน์ด้วยการอุปนัยทางคณิตศาสตร์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ลองแทนค่ากรณีเริ่มต้น คือ n = 1 และ n = 2 จะเห็นว่า&lt;br /&gt;&lt;div style="text-align: center;"&gt;A&lt;sub&gt;1&lt;/sub&gt; = 1 &amp;lt; 7/4&lt;br /&gt;A&lt;sub&gt;2&lt;/sub&gt; = 2 &amp;lt; 49/16&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ สมมติว่า A&lt;sub&gt;n&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;n&lt;/sup&gt; สำหรับทุก n ที่ 1 ≤ n &amp;lt; k เราจะรู้ว่า&lt;br /&gt;&lt;div style="text-align: center;"&gt;A&lt;sub&gt;k&lt;/sub&gt; = A&lt;sub&gt;k-1&lt;/sub&gt; + A&lt;sub&gt;k-2&lt;/sub&gt;&lt;br /&gt;A&lt;sub&gt;k&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;k-1&lt;/sup&gt; + (7/4)&lt;sup&gt;k-2&lt;/sup&gt;&lt;br /&gt;A&lt;sub&gt;k&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;k-2&lt;/sup&gt;(7/4 + 1)&lt;br /&gt;A&lt;sub&gt;k&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;k-2&lt;/sup&gt;(11/4)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เนื่องจาก 11/4 = 44/16 &amp;lt; 49/16 = (7/4)&lt;sup&gt;2&lt;/sup&gt; ดังนั้น&lt;br /&gt;&lt;div style="text-align: center;"&gt;A&lt;sub&gt;k&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;k-2&lt;/sup&gt;(7/4)&lt;sup&gt;2&lt;/sup&gt; = (7/4)&lt;sup&gt;k&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แสดงว่า A&lt;sub&gt;n&lt;/sub&gt; &amp;lt; (7/4)&lt;sup&gt;n&lt;/sup&gt; เป็นจริงเมื่อ n = k ด้วย&lt;br /&gt;&lt;br /&gt;เราก็เลยสรุปได้ว่า มันเป็นจริงสำหรับทุก n ≥ 1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113319250320761857?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113319250320761857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113319250320761857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113319250320761857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113319250320761857'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_08.html' title='โจทย์คลายเครียด'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113208474940048822</id><published>2005-11-07T02:58:00.000+07:00</published><updated>2005-11-16T02:59:09.626+07:00</updated><title type='text'>Suffixes: -ascence, -iscence</title><content type='html'>คราวที่แล้ว พูดถึง -escence ไปแล้ว คราวนี้ เก็บตกอีกนิดนึงละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;-ascence&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะว่าไป suffix ตัวนี้ มีแค่คำเดียวเอง คือ nascence (อีกตัวนึง เกิดจากเอา re- ไปเติม) แต่ความหมายก็คล้าย ๆ กันกับ -escence นะ ... ดูเลยดีกว่า&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;nascence [n] = event of being born&lt;/li&gt;   &lt;li&gt;nascent [adj] = coming into existence&lt;/li&gt; &lt;/ul&gt; &lt;ul&gt;   &lt;li&gt;re'nascence [n] = revival of learning and culture&lt;/li&gt;   &lt;li&gt;re'nascent [adj] = surging or sweeping back again&lt;/li&gt; &lt;/ul&gt; แล้วก็ มาดู suffix อีกตัว&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;-iscence&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สำหรับ suffix ตัวนี้ มีคำอยู่ทั้งหมด 4 คำนะ คือ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;con'cupiscence&lt;/b&gt; ← 'concubine [n] = ภรรยาไม่จดทะเบียน | เมียน้อย&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;con'cupiscent [adj] = having sexual lust = libidinous, lustful, lecherous, salacious&lt;/li&gt;   &lt;li&gt;con'cupiscence [n] = sexual desire&lt;/li&gt;   &lt;li&gt;con'cupiscible [adj] = exciting desire&lt;/li&gt; &lt;/ul&gt;&lt;b&gt;de'hiscence&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;de'hisce [v] = burst or split open&lt;/li&gt;   &lt;li&gt;de'hiscent [adj] = (ผล/ฝัก/ฯลฯ) เปิดออกเพื่อปล่อยเมล็ด (หรือสปอร์) เมื่อถึงเวลา&lt;/li&gt;   &lt;li&gt;de'hiscence [n] = การเปิดออก เพื่อปล่อยเมล็ด (หรือสปอร์)&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;inde'hiscence&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;inde'hiscent [adj] = ไม่ dehiscent&lt;/li&gt;   &lt;li&gt;inde'hiscence [n] = ความ indehiscent&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;remi'niscence&lt;/b&gt; ← re'mind&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;remi'nisce [v] = นึกถึงอดีต&lt;/li&gt;   &lt;li&gt;remi'niscent (of) [adj] = ทำให้นึกถึง&lt;/li&gt;   &lt;li&gt;remi'niscence [n] = การระลึกถึงอดีต&lt;/li&gt;   &lt;li&gt;remi'niscential [adj] = เกี่ยวกับความทรงจำ&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113208474940048822?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113208474940048822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113208474940048822' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113208474940048822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113208474940048822'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/suffixes-ascence-iscence.html' title='Suffixes: -ascence, -iscence'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113208275132495770</id><published>2005-11-06T02:24:00.000+07:00</published><updated>2005-11-16T03:04:11.206+07:00</updated><title type='text'>Suffix: -escence</title><content type='html'>คำที่ลงท้ายด้วย -escence ทั้งหมด เป็นคำนาม มีความหมายประมาณว่า "การค่อย ๆ เป็น" หรือ "กำลังจะเป็น" โดยคำส่วนใหญ่ จะมีรูป adjective เป็น -escent&lt;br /&gt;&lt;br /&gt;ที่เอามาให้ดูนี่ จริง ๆ ไม่หมดนะ แต่ก็ส่วนใหญ่หละ ... ส่วนคำเกี่ยวข้องที่ใส่ให้เนี่ย จริง ๆ อาจจะไม่ได้เป็นที่มาที่ถูกต้อง แต่มันก็พอจะช่วยจำได้หละนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;acqui'escence&lt;/b&gt; ← acquit&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ac'quit [v] = exculpate, exonerate&lt;/li&gt;   &lt;li&gt;acqui'esce [v] = เห็นด้วย โดยไม่โต้แย้ง (และอาจจะสนับสนุน)&lt;/li&gt;   &lt;li&gt;acqui'escent [adj] = willing to acquiesce&lt;/li&gt;&lt;li&gt;acqui'escence [n] = การ acquiesce&lt;br /&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;b&gt;ado'lescence&lt;/b&gt; ← adult&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ado'lescent [adj] = กำลังจะเป็นผู้ใหญ่&lt;/li&gt;   &lt;li&gt;ado'lescent [n] = วัยรุ่น&lt;/li&gt;   &lt;li&gt;adolesce [v] = เข้าสู่ช่วงวัยรุ่น&lt;/li&gt;   &lt;li&gt;ado'lescence [n] = ช่วงวัยรุ่น&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;arbo'rescence&lt;/b&gt; ← arbor/arbour [n] = ต้นไม้ (ที่ไม่เป็นพุ่ม)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;arbo'rescent [adj] = มีกิ่งก้านสาขา เหมือนต้นไม้ = ar'boreal, ar'boreous, arboresque, arboriform&lt;/li&gt;   &lt;li&gt;arbo'rescence [n] = สภาวะ arborescent (มักใช้กับการตกผลึก)&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;coalescence&lt;/b&gt; ← coalition&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;coalition [n] = กลุ่มคน, องค์กร | การรวม (สิ่งที่ต่างกัน) เข้าด้วยกัน&lt;/li&gt;   &lt;li&gt;coalesce [v] = เติบโตด้วยกัน | อยู่ร่วมกัน&lt;/li&gt;   &lt;li&gt;coalescent [adj] = coalescing&lt;/li&gt;   &lt;li&gt;coalescence [n] = การรวม (สิ่งที่ต่างกัน) เข้าด้วยกัน&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;con'crescence&lt;/b&gt; ← concrete&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;concrete [v] = ฉาบซีเมนต์ | ทำให้แข็งขึ้น, ทำให้แน่นขึ้น, coalesce&lt;/li&gt;   &lt;li&gt;con'crescence [n] = การก่อตัวจากอนุภาคเล็ก ๆ หลาย ๆ อนุภาค มาเกาะเข้าด้วยกัน&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;conva'lescence&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;conva'lesce [v] = ฟื้นฟูจากความเจ็บป่วย&lt;/li&gt;   &lt;li&gt;conva'lescent [n] = ผู้ป่วยที่กำลังรักษาตัวอยู่&lt;/li&gt;   &lt;li&gt;conva'lescent [adj] = การ convalesce | เกี่ยวกับ convalescent [n]&lt;/li&gt;   &lt;li&gt;conva'lescence [n] = recovery, recuperation&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;deca'lescence&lt;/b&gt; ← -cal- = ความร้อน&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;deca'lescence [n] = ชื่อปรากฏการณ์ เมื่อโลหะได้รับความร้อนแล้วอุณหภูมิไม่เพิ่ม เพราะพลังงานที่ได้รับ สูญเสียไปในการเปลี่ยนแปลงโครงสร้างผลึก&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;defer'vescence&lt;/b&gt; ← de-, fever&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;defer'vesce [v] = ไข้ลด&lt;/li&gt;   &lt;li&gt;defer'vescence [n] = การลดลงของไข้&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;deli'quescence&lt;/b&gt; ← de-, liquid&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;deli'quesce [v] = สลายตัว | ละลายหายไป&lt;/li&gt;   &lt;li&gt;deli'quescent [adj] = (มักใช้กับเกลือ) ละลายเมื่อได้รับความชื้นในอากาศ&lt;/li&gt;   &lt;li&gt;deli'quescence [n] = การ deliquesce&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;detu'mescence&lt;/b&gt; ← de-, tumor&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;tumor [n] = เนื้องอก&lt;/li&gt;   &lt;li&gt;tumid [adj] = บวม | โตเกินความจำเป็น, ผิดปกติ → tumidity [n]&lt;/li&gt;   &lt;li&gt;detu'mescence [n] = การหดตัวของส่วน/สิ่งที่บวม&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;effer'vescence&lt;/b&gt; ← effuse [v] = เท | ไหล | emit, give out&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;effervesce [v] = ทำให้เกิดฟอง, ตีให้เป็นฟอง&lt;/li&gt;   &lt;li&gt;effer'vescent [adj] = มีฟอง, เป็นฟองได้ง่าย | (เครื่องดื่มหรือน้ำ) มี CO&lt;sub&gt;2&lt;/sub&gt; อยู่เยอะ, (น้ำหวาน) อัดลม | กระตือรือร้น, สดชื่น&lt;/li&gt;   &lt;li&gt;effer'vescence [n] = การ effervesce | คุณสมบัติการทำให้เกิดฟอง&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;efflo'rescence&lt;/b&gt; ← -flor- = ดอกไม้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;efflo'resce [v] = เบ่งบาน, ผลิดอกออกผล | ตกผลึก&lt;/li&gt;   &lt;li&gt;efflo'rescence [n] = ช่วงเวลาที่มีการผลิดอกออกผลมากที่สุด | ผื่นแดงบนผิวหนัง | สารผง ๆ บนผิวหน้า&lt;/li&gt;   &lt;li&gt;efflo'rescent [adj] = กำลังผลิดอก = abloom, flowering&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;eva'nescence&lt;/b&gt; ← evade, evite&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;eva'nesce [v] = ค่อย ๆ จางหายไป&lt;/li&gt;   &lt;li&gt;eva'nescent [adj] = กำลังจะหายไป&lt;/li&gt;   &lt;li&gt;eva'nescence [n] = การ evanesce&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;ex'crescence&lt;/b&gt; ← excursive [adj] = ท่าทางจะหลุดประเด็น, (เนื้อหา) ครอบคลุมหลายเรื่อง&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ex'crescent [adj] = กำลังโตผิดปกติ&lt;/li&gt;   &lt;li&gt;ex'crescence [n] = สิ่งที่ยื่น/บวมออกมา | ส่วนของร่างกายที่โตผิดปกติ&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;flo'rescence&lt;/b&gt; ← -flor- = ดอกไม้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;flo'rescent [adj] = blossoming = efflorescent&lt;/li&gt;   &lt;li&gt;flo'rescence [n] = ช่วงเวลากำลังผลิดอก = efflorescence&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;fluo'rescence&lt;/b&gt; ← fluor [n] = CaF&lt;sub&gt;2&lt;/sub&gt; (สามารถเปล่งแสงได้เมื่อโดน UV)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;fluo'rescent [adj] = เปล่งแสงได้&lt;/li&gt;   &lt;li&gt;fluo'rescence [n] = แสงที่มองเห็นได้ ซึ่งเกิดจากการดูดซับแสงที่ตามองไม่เห็น&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;inca'lescence&lt;/b&gt; ← -cal- = ความร้อน&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;inca'lescent [adj] = กำลังร้อนขึ้น, ความร้อนกำลังเพิ่มขึ้น&lt;/li&gt;   &lt;li&gt;inca'lescence [n] = คุณสมบัติการรับความร้อน&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;incan'descence&lt;/b&gt; ← candent [adj] = เปล่งแสงเมื่อได้รับความร้อน&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;incan'descent [adj] = candent | เร้าอารมณ์&lt;/li&gt;   &lt;li&gt;incan'descence [n] = การเปล่งแสงเมื่อได้รับความร้อน | แสงที่เกิดจาก incandescence&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;inflo'rescence&lt;/b&gt; ← -flor- = ดอกไม้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;inflo'rescence [n] = florescence | ส่วนที่เป็นดอก&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;infruc'tescence&lt;/b&gt; ← -fruct- = ผลไม้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;infruc'tescence [n] = ช่วงออกผล&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;intu'mescence&lt;/b&gt; ← tumor&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;intumesce [v] = ลอยขึ้นเป็นฟอง (จากการให้ความร้อน) | ขยาย/โตอย่างผิดปกติ = swell, tumefy&lt;/li&gt;   &lt;li&gt;intumescent [adj] = swelling up, expanding&lt;/li&gt;   &lt;li&gt;intumescence [n] = การบวมเนื่องจากการอุดตันของของเหลว | การบวมเมื่อโดนความร้อน&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;iri'descence&lt;/b&gt; ← irised [adj] = มีหลากสี เหมือนรุ้ง&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;iri'descent [adj] = มีสีต่างกัน เมื่อให้แสงต่างกัน หรือมองจากมุมต่างกัน | หลากสี&lt;/li&gt;   &lt;li&gt;iri'descence [n] = เปล่งแสงขาวนวลจาง ๆ&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;juve'nescence&lt;/b&gt; ← juvenile&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;juvenile [n] = เด็ก&lt;/li&gt;   &lt;li&gt;juvenile [adj] = เด็ก&lt;/li&gt;   &lt;li&gt;juve'nescent [adj] = กำลัง (โตขึ้น) เป็นเด็ก&lt;/li&gt;   &lt;li&gt;juve'nescence [n] = การย่างเข้าสู่วัยเด็ก&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;lumi'nescence&lt;/b&gt; ← luminous [adj] = เปล่งแสง&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;lumi'nescent [adj] = เปล่งแสงได้โดยไม่ต้องให้ความร้อน&lt;/li&gt;   &lt;li&gt;lumi'nescence [n] = การเปล่งแสงโดยไม่ต้องใช้ความร้อน | แสงจาก luminescence&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;obmu'tescence&lt;/b&gt; ← mute [adj] = เงียบ | พูดไม่ได้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;obmu'tescence [n] = การปิดปากเงียบ ไม่พูด&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;obso'lescence&lt;/b&gt; ← obso'lete&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;obso'lesce [v] = become obsolete&lt;/li&gt;   &lt;li&gt;obso'lescent [adj] = becoming obsolete&lt;/li&gt;   &lt;li&gt;obso'lescence [n] = การ obsolesce&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;opa'lescence&lt;/b&gt; ← opal&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;opa'lescent [adj] = iridescent&lt;/li&gt;   &lt;li&gt;opa'lescence [n] = iridescence&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;phospho'rescence&lt;/b&gt; ← phosphorus&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;phospho'resce [v] = exhibit phosphorescence&lt;/li&gt;   &lt;li&gt;phospho'rescence [n] = phosphorescence&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;pu'bescence&lt;/b&gt; ← puberty&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;pu'bescent [adj] = อยู่ในช่วงที่ต่อมสืบพันธุ์เริ่มทำงาน&lt;/li&gt;   &lt;li&gt;pu'bescence [n] = ช่วงที่ต่อมสืบพันธุ์เริ่มทำงาน&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;pu'trescence&lt;/b&gt; ← putrid, putrefaction&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;putrid [adj] = เน่า, ส่งกลิ่นเหม็น&lt;/li&gt;   &lt;li&gt;putre'fy [v] = become putrid&lt;/li&gt;   &lt;li&gt;pu'trescent [adj] = becoming putrid&lt;/li&gt;   &lt;li&gt;pu'trescence [n] = การ putrefy | ช่วงเวลาที่กำลัง putrefy&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;qui'escence&lt;/b&gt; ← quiet&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;qui'esce [v] = become quiet&lt;/li&gt;   &lt;li&gt;qui'escent [adj] = quiet, inactive&lt;/li&gt;   &lt;li&gt;qui'escence [n] = ความเงียบสงบ (อาจจะชั่วคราว)&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;recru'descence&lt;/b&gt; ← re'cur, re'cursion&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;recru'desce [v] = เกิดขึ้น (อีกครั้ง), (แผล) เปิด&lt;/li&gt;   &lt;li&gt;recru'descent [adj] = recrudescing&lt;/li&gt;   &lt;li&gt;recru'descence [n] = การกลับคืนมา หลังจากหายไปหรือลดลง&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;rejuve'nescence&lt;/b&gt; ← re'juvenate, juvenile&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;rejuve'nescent [adj] = becoming rejuvenated | causing to become rejuvenated&lt;/li&gt;   &lt;li&gt;rejuve'nescence [n] = การสร้างผนังเซลล์ใหม่ | การกลับไปเป็นเด็ก&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;se'nescence&lt;/b&gt; ← senior&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;se'nesce [v] = grow old&lt;/li&gt;   &lt;li&gt;se'nescent [adj] = growing old&lt;/li&gt;   &lt;li&gt;se'nescence [v] = การแก่ตัวลง&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;tu'mescence&lt;/b&gt; ← tumor, tumid&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;tumesce [v] = ขยาย/โต อย่างผิดปกติ = intumesce, swell, tumefy&lt;/li&gt;   &lt;li&gt;tu'mescent [adj] = บวม/โต อย่างผิดปกติ = tumid, turgid, swollen&lt;/li&gt;   &lt;li&gt;tu'mescence [n] = อาการบวมเนื่องจากการคั่งของของเหลว (เช่นเลือด) ในเนื้อเยื่อ = tumidity&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113208275132495770?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113208275132495770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113208275132495770' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113208275132495770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113208275132495770'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/suffix-escence.html' title='Suffix: -escence'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113180672961277698</id><published>2005-11-05T20:37:00.000+07:00</published><updated>2005-11-13T02:50:28.720+07:00</updated><title type='text'>Center of Mass &amp; Centroid - ทฤษฎีบทของ Pappus</title><content type='html'>ทฤษฎีบทของ Pappus ที่กำลังจะบอกเนี่ย (คือ จริง ๆ เค้าคิดไว้หลายอัน) เป็นทฤษฎีพื้นฐานที่สำคัญมาก ในการหาปริมาณ n มิติของรูปเรขาคณิต เช่น ความยาว พื้นที่ ปริมาตร ฯลฯ เค้าบอกไว้ว่า ...&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;blockquote&gt;สมมติว่า เรามีเซต X ซึ่งอยู่ใน &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; และมีปริมาณใน n มิติเท่ากับ A&lt;br /&gt;แล้วเราเอา X ไปไว้ใน &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;n+1&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;จับ X เคลื่อนที่ &lt;b&gt;ในแนวตั้งฉากกับตัว X เอง&lt;/b&gt; เพื่อกวาดปริมาณใน n + 1 มิติ&lt;br /&gt;บริเวณที่ X กวาดผ่าน จะมีปริมาณใน n + 1 มิติ เท่ากับ As&lt;br /&gt;เมื่อ s = ระยะทางที่ centroid ของ X เคลื่อนที่&lt;/blockquote&gt; &lt;/div&gt;&lt;br /&gt;หวังว่า ไม่งงนะ :D&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Direct Application&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ดูตัวอย่างประกอบเลยละกัน ... อันนี้ค่อนข้างชัดเจนนะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/Rectangle.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/Rectangle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดูทฤษฎีมันไม่ค่อยจะมีประโยชน์เลยเนอะ :P ... ลองดูอีกอันซิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/Circle.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/Circle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อันนี้ก็ ... ดูมีประโยชน์ขึ้นนิดนึงละ ... ไหนลองเอามาหาพื้นที่ผิวของรูป 3 มิติมั่งสิ&lt;br /&gt;&lt;br /&gt;พื้นที่ผิวของกรวย ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/ConeSurface.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/ConeSurface.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วก็ เอามาหาปริมาตรมั่ง ... คราวนี้ X ต้องเป็น 2 มิตินะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/ConeVolume.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/ConeVolume.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ตรงกับสูตร "&lt;b&gt;(1/3) × ปริมาตรทรงกระบอก&lt;/b&gt;" เลย เห็นมั้ยว่า สูตรเรขาคณิตหลาย ๆ สูตร สามารถคิดได้ง่าย ๆ ด้วยทฤษฎีบทของ Pappus อันนี้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Reverse Use&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เมื่อกี๊ ยกตัวอย่างไปแล้ว 4 ตัวอย่าง ทุกอันจะใช้ปริมาณใน n มิติ กับระยะการเคลื่อนที่ของ centroid เพื่อหาปริมาณใน n + 1 มิติ แต่จริง ๆ เราจะใช้กลับกันก็ได้ คือ &lt;b&gt;ใช้หาตำแหน่ง centroid&lt;/b&gt; แทน&lt;br /&gt;&lt;br /&gt;ตัวอย่างเช่น เรารู้อยู่แล้วว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ส่วนโค้งครึ่งวงกลม มีความยาว = πr&lt;br /&gt;พื้นที่ผิวของทรงกลม = 4πr&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะสามารถหา &lt;b&gt;centroid ของส่วนโค้งครึ่งวงกลม&lt;/b&gt; ได้แบบนี้ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/SphereSurface.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/SphereSurface.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอาตัวอย่างให้ดูอีกอันละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;พื้นที่ของครึ่งวงกลม = (1/2)πr&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;ปริมาตรของทรงกลม = (4/3)πr&lt;sup&gt;3&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะหา &lt;b&gt;centroid ของแผ่นครึ่งวงกลม&lt;/b&gt; ได้แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/SphereVolume.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/SphereVolume.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ ที่เอาเรื่องนี้มาให้ดูเนี่ย เน้นที่ แนวการใช้กลับทางหนะ ... คือ ... อยากให้สังเกตกันว่า เมื่อเราคิดสมการอะไรได้ มันก็อาจจะมีวิธีใช้ในทางย้อนกลับ ซึ่งช่วยให้เราแก้ปัญหาบางอย่าง ได้ง่ายกว่าการคิดตรง ๆ&lt;br /&gt;&lt;br /&gt;&lt;i&gt;แนวคิดย้อนกลับ ก่อนนี้ก็เคยเอามาให้ดูไปแล้วเต็ม ๆ คือ ในเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/08/determinant-reverse-use-height.html"&gt;ตามหาความหมายของ Determinant: Reverse Use - Height&lt;/a&gt; กับ &lt;a href="http://tunococ.blogspot.com/2005/08/determinant-kramers-rule_21.html"&gt;ตามหาความหมายของ Determinant: Kramer's Rule&lt;/a&gt; นะ&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113180672961277698?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113180672961277698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113180672961277698' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113180672961277698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113180672961277698'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/center-of-mass-centroid-pappus.html' title='Center of Mass &amp; Centroid - ทฤษฎีบทของ Pappus'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113155930072749648</id><published>2005-11-04T00:44:00.000+07:00</published><updated>2005-11-11T23:24:39.426+07:00</updated><title type='text'>Discrete vs Continuous: Taylor Series และ Newton Polynomial</title><content type='html'>&lt;b&gt;&lt;u&gt;Taylor Series&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า เรามีฟังก์ชัน f ซึ่งต่อเนื่อง และมีอนุพันธ์ทุกอันดับที่ x&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;เราก็จะรู้ค่า f(x&lt;sub&gt;0&lt;/sub&gt;) f'(x&lt;sub&gt;0&lt;/sub&gt;) f''(x&lt;sub&gt;0&lt;/sub&gt;) ... ไปเรื่อย ๆ&lt;br /&gt;&lt;br /&gt;คราวนี้ ถ้าเราอยากจะหาฟังก์ชัน f(x) ในรูปของพหุนาม เราจะใช้สมการนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; f&lt;sup&gt;(n)&lt;/sup&gt;(x&lt;sub&gt;0&lt;/sub&gt;)(x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n&lt;/sup&gt;/n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อนุกรมทางด้านขวาของสมการ เราเรียกว่า &lt;b&gt;อนุกรมเทย์เลอร์ (Taylor Series)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ทำไมอนุกรมเทย์เลอร์ เท่ากับ f(x)?&lt;br /&gt;&lt;br /&gt;เริ่มต้นเนี่ย เราก็สมมติว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วหาค่า a&lt;sub&gt;n&lt;/sub&gt; ทุกตัว&lt;br /&gt;&lt;br /&gt;พอเราแทนค่า x = x&lt;sub&gt;0&lt;/sub&gt; เข้าไป จะเห็นว่า f(x&lt;sub&gt;0&lt;/sub&gt;) = a&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;เมื่อเราหาอนุพันธ์ทั้งสองข้าง เราจะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f'(x) = Σ&lt;sub&gt;n≥1&lt;/sub&gt; na&lt;sub&gt;n&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n - 1&lt;/sup&gt;&lt;br /&gt;= Σ&lt;sub&gt;n≥0&lt;/sub&gt; (n + 1) a&lt;sub&gt;n+1&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งทำให้ f'(x&lt;sub&gt;0&lt;/sub&gt;) = a&lt;sub&gt;1&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;หาอนุพันธ์อีกที จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f''(x) = Σ&lt;sub&gt;n≥1&lt;/sub&gt; n(n + 1) a&lt;sub&gt;n&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n - 1&lt;/sup&gt;&lt;br /&gt;= Σ&lt;sub&gt;n≥0&lt;/sub&gt; (n + 1)(n + 2) a&lt;sub&gt;n+1&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งทำให้ f''(x&lt;sub&gt;0&lt;/sub&gt;) = 2a&lt;sub&gt;2&lt;/sub&gt;&lt;br /&gt;&lt;br /&gt;ทำไปเรื่อย ๆ เราจะสรุปได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f&lt;sup&gt;(n)&lt;/sup&gt;(x&lt;sub&gt;0&lt;/sub&gt;) = n! a&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;a&lt;sub&gt;n&lt;/sub&gt; = f&lt;sup&gt;(n)&lt;/sup&gt;(x&lt;sub&gt;0&lt;/sub&gt;) / n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; f&lt;sup&gt;(n)&lt;/sup&gt;(x&lt;sub&gt;0&lt;/sub&gt;)(x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;n&lt;/sup&gt;/n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Newton Polynomial&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้าเรารู้ค่า f(x&lt;sub&gt;0&lt;/sub&gt;) Δf(x&lt;sub&gt;0&lt;/sub&gt;) Δ&lt;sup&gt;2&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) ...&lt;br /&gt;&lt;br /&gt;เราจะสามารถหาฟังก์ชัน f(x) ในรูปของพหุนามได้โดยสมการนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; Δ&lt;sup&gt;n&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;&lt;/sup&gt;&lt;sub&gt;&lt;/sub&gt; (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;&lt;u&gt;n&lt;/u&gt;&lt;/sup&gt;/n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราเรียกสมการนี้ว่า &lt;b&gt;สูตรผลต่างล่วงหน้าของนิวตัน (Newton's Forward Difference Formula)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;วิธีพิสูจน์สูตรนี้ ก็ทำเหมือนเมื่อกี๊แหละ คือเราจะหาค่าของ Δ&lt;sup&gt;n&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) แต่ละตัวได้โดยการหาผลต่าง คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;สมมติให้ f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt;(x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;&lt;u&gt;n&lt;/u&gt;&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็จะหาค่า a&lt;sub&gt;n&lt;/sub&gt; ต่าง ๆ ได้ด้วยวิธีเหมือน ๆ กันกับกรณีของอนุกรมเทย์เลอร์ แบบนี้...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) = a&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;Δf(x&lt;sub&gt;0&lt;/sub&gt;) = a&lt;sub&gt;1&lt;/sub&gt;&lt;br /&gt;Δ&lt;sup&gt;2&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) = 2a&lt;sub&gt;2&lt;/sub&gt;&lt;br /&gt;...&lt;br /&gt;Δ&lt;sup&gt;n&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) = n! a&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;a&lt;sub&gt;n&lt;/sub&gt; = Δ&lt;sup&gt;n&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) / n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งเมื่อแทนค่าลงไปในสมการที่เราตั้งขึ้น ก็จะได้สูตรนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; Δ&lt;sup&gt;n&lt;/sup&gt;f(x&lt;sub&gt;0&lt;/sub&gt;) (x - x&lt;sub&gt;0&lt;/sub&gt;)&lt;sup&gt;&lt;u&gt;n&lt;/u&gt;&lt;/sup&gt;/n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Abstraction&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราจะเห็นว่า การพิสูจน์สูตรทั้งสอง มีขั้นตอนที่เหมือนกันทุกประการ แต่มีการกำหนดสูตรเริ่มต้นที่ต่างกัน ซึ่งทำให้ &lt;b&gt;การแปลง&lt;/b&gt; ที่ใช้ในการหาสัมประสิทธิ์ a&lt;sup&gt;n&lt;/sup&gt; ต้องเป็นคนละตัวกัน&lt;br /&gt;&lt;br /&gt;ถ้าจะมองขั้นตอนทั้งหมด ให้เป็นกรณีทั่วไปมากขึ้น เราก็จะทำได้ดังนี้ ...&lt;br /&gt;&lt;br /&gt;สมมติว่า มีการแปลงเชิงเส้น T และฟังก์ชัน s&lt;sub&gt;n&lt;/sub&gt;(x) ซึ่งมีคุณสมบัติดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;s&lt;sub&gt;0&lt;/sub&gt;(0) = k&lt;br /&gt;s&lt;sub&gt;n&lt;/sub&gt;(0) = 0 ; n &amp;gt; 0&lt;br /&gt;Ts&lt;sub&gt;0&lt;/sub&gt;(x) = 0&lt;br /&gt;Ts&lt;sub&gt;n&lt;/sub&gt;(x) = c&lt;sub&gt;n&lt;/sub&gt; s&lt;sub&gt;n-1&lt;/sub&gt;(x) ; n &amp;gt; 0&lt;br /&gt;โดยที่ c&lt;sub&gt;n&lt;/sub&gt; ไม่เป็นฟังก์ชันของ x&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะสามารถสมมติฟังก์ชัน f(x) ให้เป็นแบบนี้ได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt; s&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพราะ เมื่อเราแทนค่า x = 0 ลงไป เราจะหาค่า a&lt;sub&gt;0&lt;/sub&gt; ได้ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(0) = k a&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วนค่า a&lt;sub&gt;n&lt;/sub&gt; ตัวอื่น ๆ ก็สามารถหาได้โดยการใส่ T เข้าไปทั้งสองข้างของสมการที่เราสมมติขึ้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Tf(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt; Ts&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;Tf(x) = a&lt;sub&gt;0&lt;/sub&gt;Ts&lt;sub&gt;0&lt;/sub&gt;(x) + Σ&lt;sub&gt;n≥1&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt; Ts&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;Tf(x) = 0 + Σ&lt;sub&gt;n≥1&lt;/sub&gt; a&lt;sub&gt;n&lt;/sub&gt;  c&lt;sub&gt;n&lt;/sub&gt; s&lt;sub&gt;n-1&lt;/sub&gt;(x)&lt;br /&gt;Tf(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; s&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอเราแทนค่า x = 0 ก็จะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Tf(0) = a&lt;sub&gt;1&lt;/sub&gt;c&lt;sub&gt;1&lt;/sub&gt;k&lt;br /&gt;a&lt;sub&gt;1&lt;/sub&gt; = Tf(0) / c&lt;sub&gt;1&lt;/sub&gt;k&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วนค่า a&lt;sub&gt;2&lt;/sub&gt; ก็จะหาได้โดยการใส่ T เข้าไปอีกที ที่สมการ Tf(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; s&lt;sub&gt;n&lt;/sub&gt;(x) จะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;T&lt;sup&gt;2&lt;/sup&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; Ts&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;T&lt;sup&gt;2&lt;/sup&gt;f(x) = a&lt;sub&gt;1&lt;/sub&gt;c&lt;sub&gt;1&lt;/sub&gt;Ts&lt;sub&gt;0&lt;/sub&gt;(x) + Σ&lt;sub&gt;n≥1&lt;/sub&gt; a&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; Ts&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;T&lt;sup&gt;2&lt;/sup&gt;f(x) = 0 + Σ&lt;sub&gt;n≥1&lt;/sub&gt; a&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; c&lt;sub&gt;n&lt;/sub&gt; s&lt;sub&gt;n-1&lt;/sub&gt;(x)&lt;br /&gt;T&lt;sup&gt;2&lt;/sup&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; a&lt;sub&gt;n+2&lt;/sub&gt; c&lt;sub&gt;n+2&lt;/sub&gt; c&lt;sub&gt;n+1&lt;/sub&gt; s&lt;sub&gt;n&lt;/sub&gt;(x)&lt;br /&gt;&lt;br /&gt;T&lt;sup&gt;2&lt;/sup&gt;f(0) = a&lt;sub&gt;2&lt;/sub&gt;c&lt;sub&gt;2&lt;/sub&gt;c&lt;sub&gt;1&lt;/sub&gt;k&lt;br /&gt;a&lt;sub&gt;2&lt;/sub&gt; = T&lt;sup&gt;2&lt;/sup&gt;f(0) / c&lt;sub&gt;1&lt;/sub&gt;c&lt;sub&gt;2&lt;/sub&gt;k&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สังเกตดู จะเห็นว่า ถ้าทำไปเรื่อย ๆ เราก็จะหาค่า a&lt;sub&gt;n&lt;/sub&gt; ได้ทุกค่า ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;a&lt;sub&gt;n&lt;/sub&gt; = T&lt;sup&gt;n&lt;/sup&gt;f(0) / c&lt;sub&gt;1&lt;/sub&gt;c&lt;sub&gt;2&lt;/sub&gt;c&lt;sub&gt;3&lt;/sub&gt;...c&lt;sub&gt;n&lt;/sub&gt;k&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้ากำหนดให้ c&lt;sub&gt;0&lt;/sub&gt; = k และเขียนผลคูณของ c&lt;sub&gt;i&lt;/sub&gt; ต่าง ๆ ด้วยเครื่องหมาย Π ก็จะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;a&lt;sub&gt;n&lt;/sub&gt; = T&lt;sup&gt;n&lt;/sup&gt;f(0) / C(n)&lt;br /&gt;&lt;br /&gt;เมื่อ C(n) = Π&lt;sub&gt;0≤i≤n&lt;/sub&gt; c&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สรุปก็คือ&lt;br /&gt;&lt;br /&gt;f(x) = Σ&lt;sub&gt;n≥0&lt;/sub&gt; T&lt;sup&gt;n&lt;/sup&gt;f(0) s&lt;sub&gt;n&lt;/sub&gt;(x) / C(n)&lt;br /&gt;&lt;br /&gt;&lt;u&gt;กรณีของอนุกรมเทย์เลอร์&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;s&lt;sub&gt;n&lt;/sub&gt;(x) = x&lt;sup&gt;n&lt;/sup&gt;&lt;br /&gt;T = d/dx&lt;br /&gt;c&lt;sub&gt;0&lt;/sub&gt; = 1&lt;br /&gt;c&lt;sub&gt;n&lt;/sub&gt; = n ; n ≥ 1&lt;br /&gt;C(n) = n!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;กรณีของพหุนามนิวตัน&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;s&lt;sub&gt;n&lt;/sub&gt;(x) = x&lt;sup&gt;&lt;u&gt;n&lt;/u&gt;&lt;/sup&gt;&lt;br /&gt;T = Δ&lt;br /&gt;c&lt;sub&gt;0&lt;/sub&gt; = 1&lt;br /&gt;c&lt;sub&gt;n&lt;/sub&gt; = n ; n ≥ 1&lt;br /&gt;C(n) = n!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113155930072749648?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113155930072749648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113155930072749648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113155930072749648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113155930072749648'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/discrete-vs-continuous-taylor-series.html' title='Discrete vs Continuous: Taylor Series และ Newton Polynomial'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113153735963673964</id><published>2005-11-03T18:55:00.000+07:00</published><updated>2005-11-10T00:40:04.636+07:00</updated><title type='text'>Transformation: Linear Transformation</title><content type='html'>&lt;b&gt;&lt;u&gt;ปริภูมิเวกเตอร์ (Vector Space)&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ปริภูมิเวกเตอร์ จะถูกนิยามด้วย 6 สิ่ง คือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;เซตของเวกเตอร์ V&lt;/li&gt;   &lt;li&gt;การบวกของเวกเตอร์ +&lt;sub&gt;V&lt;/sub&gt;&lt;/li&gt;   &lt;li&gt;การคูณเวกเตอร์ด้วยสัมประสิทธ์ *&lt;sub&gt;V&lt;/sub&gt;&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;เซตของสัมประสิทธิ์ F&lt;/li&gt;   &lt;li&gt;การบวกของสัมประสิทธ์ +&lt;sub&gt;F&lt;/sub&gt;&lt;/li&gt;   &lt;li&gt;การคูณของสัมประสิทธ์ *&lt;sub&gt;F&lt;/sub&gt;&lt;/li&gt; &lt;/ul&gt; โดยที่ (F, +&lt;sub&gt;F&lt;/sub&gt;, *&lt;sub&gt;F&lt;/sub&gt;) มีคุณสมบัติเป็น &lt;b&gt;&lt;u&gt;ฟิลด์ (Field)&lt;/u&gt;&lt;/b&gt; คือ&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ถ้า x, y ∈ F แล้ว x +&lt;sub&gt;F&lt;/sub&gt; y ∈ F และ x *&lt;sub&gt;F&lt;/sub&gt; y ∈ F&lt;/li&gt;   &lt;li&gt;ถ้า x, y, z ∈ F แล้ว x +&lt;sub&gt;F&lt;/sub&gt; (y +&lt;sub&gt;F&lt;/sub&gt; z) = (x +&lt;sub&gt;F&lt;/sub&gt; y) +&lt;sub&gt;F&lt;/sub&gt; z และ x *&lt;sub&gt;F&lt;/sub&gt; (y *&lt;sub&gt;F&lt;/sub&gt; z) = (x *&lt;sub&gt;F&lt;/sub&gt; y) *&lt;sub&gt;F&lt;/sub&gt; z&lt;/li&gt;   &lt;li&gt;ถ้า x, y ∈ F แล้ว x +&lt;sub&gt;F&lt;/sub&gt; y = y +&lt;sub&gt;F&lt;/sub&gt; x และ x *&lt;sub&gt;F&lt;/sub&gt; y = y *&lt;sub&gt;F&lt;/sub&gt; x&lt;/li&gt;   &lt;li&gt;มีสมาชิก 0&lt;sub&gt;F&lt;/sub&gt; ∈ F เพียงตัวเดียว ที่ทำให้ x +&lt;sub&gt;F&lt;/sub&gt; 0&lt;sub&gt;F&lt;/sub&gt; = x&lt;/li&gt;   &lt;li&gt;มีสมาชิก 1&lt;sub&gt;F&lt;/sub&gt; ∈ F เพียงตัวเดียว ที่ทำให้ x *&lt;sub&gt;F&lt;/sub&gt; 1&lt;sub&gt;F&lt;/sub&gt; = x&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ F แล้ว จะมี (-x) ∈ F เพียงตัวเดียว ที่ทำให้ x +&lt;sub&gt;F&lt;/sub&gt; (-x) = 0&lt;sub&gt;F&lt;/sub&gt;&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ F - { 0&lt;sub&gt;F&lt;/sub&gt; } แล้ว จะมี (1/x) ∈ F เพียงตัวเดียว ที่ทำให้ x *&lt;sub&gt;F&lt;/sub&gt; (1/x) = 1&lt;sub&gt;F&lt;/sub&gt;&lt;/li&gt; &lt;/ul&gt; และเงื่อนไขต่อไปนี้ เป็นจริง&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ถ้า x, y ∈ V และ c ∈ F แล้ว x +&lt;sub&gt;V&lt;/sub&gt; y ∈ V และ c *&lt;sub&gt;V&lt;/sub&gt; x ∈ V&lt;/li&gt;   &lt;li&gt;ถ้า x, y, z ∈ V แล้ว x +&lt;sub&gt;V&lt;/sub&gt; (y +&lt;sub&gt;V&lt;/sub&gt; z) = (x +&lt;sub&gt;V&lt;/sub&gt; y) +&lt;sub&gt;V&lt;/sub&gt; z&lt;/li&gt;   &lt;li&gt;ถ้า x, y ∈ V แล้ว x +&lt;sub&gt;V&lt;/sub&gt; y = y +&lt;sub&gt;V&lt;/sub&gt; x&lt;/li&gt;   &lt;li&gt;มีสมาชิก 0&lt;sub&gt;V&lt;/sub&gt; ∈ V เพียงตัวเดียว ที่ทำให้ x +&lt;sub&gt;V&lt;/sub&gt; 0&lt;sub&gt;V&lt;/sub&gt; = x&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ V แล้ว จะมี (-x) ∈ V เพียงตัวเดียว ที่ทำให้ x +&lt;sub&gt;V&lt;/sub&gt; (-x) = 0&lt;sub&gt;V&lt;/sub&gt;&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ V และ a, b ∈ F แล้ว a *&lt;sub&gt;V&lt;/sub&gt; (b *&lt;sub&gt;V&lt;/sub&gt; x) = (a *&lt;sub&gt;F&lt;/sub&gt; b) *&lt;sub&gt;V&lt;/sub&gt; x&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ V แล้ว 1&lt;sub&gt;F&lt;/sub&gt; *&lt;sub&gt;V&lt;/sub&gt; x = x&lt;/li&gt;   &lt;li&gt;ถ้า x, y ∈ V และ c ∈ F แล้ว c *&lt;sub&gt;V&lt;/sub&gt; (x +&lt;sub&gt;V&lt;/sub&gt; y) = (c *&lt;sub&gt;V&lt;/sub&gt; x) +&lt;sub&gt;V&lt;/sub&gt; (c *&lt;sub&gt;V&lt;/sub&gt; y)&lt;/li&gt;   &lt;li&gt;ถ้า x ∈ V และ a, b ∈ F แล้ว (a +&lt;sub&gt;F&lt;/sub&gt; b) *&lt;sub&gt;V&lt;/sub&gt; x = (a *&lt;sub&gt;V&lt;/sub&gt; x) +&lt;sub&gt;V&lt;/sub&gt; (b *&lt;sub&gt;V&lt;/sub&gt; x)&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;&lt;u&gt;ความนิยม&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;เนื่องจาก การคูณและบวกที่ห้อย V กับ F จะทำได้เฉพาะกับสมาชิกที่มาจากเซตต่างกัน เราสามารถตัดตัวห้อยทิ้ง แล้วก็ยังเข้าใจถูกต้องอยู่&lt;/li&gt;   &lt;li&gt;เราสามารถตัดเครื่องหมายการคูณทิ้งได้ด้วย โดยใช้การเขียนติดกันแทน&lt;/li&gt;   &lt;li&gt;0&lt;sub&gt;V&lt;/sub&gt; เราจะใช้ตัวหนาเขียนแทน เป็น &lt;b&gt;0&lt;/b&gt; เพื่อให้ สามารถเขียน 0 และ 1 แทน 0&lt;sub&gt;F&lt;/sub&gt; และ 1&lt;sub&gt;F&lt;/sub&gt; ได้ ตามลำดับ&lt;/li&gt;   &lt;li&gt;เขียนแทน a + (-b) ด้วย a - b เพื่อให้สั้นลง&lt;/li&gt;   &lt;li&gt;เขียนแทน a(1/b) ด้วย a/b เพื่อให้สั้นลง&lt;/li&gt;&lt;li&gt;เมื่อไม่เขียนวงเล็บ ให้คิดการคูณก่อนการบวก และคิดจากซ้ายไปขวาเสมอ&lt;/li&gt;   &lt;li&gt;ตัวแปรที่เป็นสมาชิกของ V จะเขียนด้วยตัวหนา&lt;br /&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;b&gt;&lt;u&gt;การแปลงเชิงเส้น (Linear Transformation)&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้า f:V → W เป็นการแปลงเชิงเส้น (Linear Transformation) และ V กับ W เป็น &lt;b&gt;ปริภูมิเวกเตอร์&lt;/b&gt; ซึ่งมีฟิลด์ของสัมประสิทธิ์เดียวกันคือ F&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;สำหรับ &lt;b&gt;x&lt;/b&gt; ∈ A และ &lt;b&gt;y&lt;/b&gt; ∈ A ทุกตัว: f(&lt;b&gt;x&lt;/b&gt; + &lt;b&gt;y&lt;/b&gt;) = f(&lt;b&gt;x&lt;/b&gt;) + f(&lt;b&gt;y&lt;/b&gt;) ∈ B&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;สำหรับ &lt;b&gt;x&lt;/b&gt; ∈ A และ c ∈ F: f(c&lt;b&gt;x&lt;/b&gt;) = cf(&lt;b&gt;x&lt;/b&gt;) ∈ B&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;i&gt;&lt;u&gt;&lt;/u&gt;&lt;/i&gt;สิ่งที่รู้ทันที คือ&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(&lt;b&gt;0&lt;/b&gt;&lt;sub&gt;V&lt;/sub&gt;) = &lt;b&gt;0&lt;/b&gt;&lt;sub&gt;W&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt; เราก็เลย เขียนว่า &lt;b&gt;0&lt;/b&gt; เฉย ๆ ได้ &lt;i&gt;พิสูจน์ได้ ไม่ยากหรอก&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Kernel และ Image&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เมื่อไหร่ที่เราพูดถึง homomorphism (และ linear transformation) จะต้องมีคำศัพท์ที่เรายุ่งด้วย 2 คำ คือ &lt;b&gt;Kernel&lt;/b&gt; และ &lt;b&gt;Image&lt;/b&gt; เสมอ ๆ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;kernel ของ f = { &lt;b&gt;x&lt;/b&gt; ∈ V | f(&lt;b&gt;x&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt; }&lt;br /&gt;image ของ f = { f(&lt;b&gt;x&lt;/b&gt;) | &lt;b&gt;x&lt;/b&gt; ∈ V }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ความจริงที่สิ่งสำคัญมาก ๆ อย่างนึงก็คือ kernel ของ f เป็น &lt;b&gt;ปริภูมิเวกเตอร์ย่อย (Vector Subspace) ของ V&lt;/b&gt; ซึ่งก็คือ ถ้าเราเอา kernel ของ f ไปใส่แทน V ในเงื่อนไขต่าง ๆ ของปริภูมิเวกเตอร์ ที่เขียนไว้ข้างบน มันก็จะเป็นจริงทั้งหมดเช่นกัน&lt;br /&gt;&lt;br /&gt;&lt;u&gt;ตัวอย่าง&lt;/u&gt;: ให้ K = kernel ของ f&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;x&lt;/b&gt;, &lt;b&gt;y&lt;/b&gt; ∈ K ⇒ f(&lt;b&gt;x&lt;/b&gt;) = f(&lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;ดังนั้น f(&lt;b&gt;x&lt;/b&gt; + &lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt; + &lt;b&gt;0&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;แสดงว่า &lt;b&gt;x&lt;/b&gt; + &lt;b&gt;y&lt;/b&gt; ∈ K ด้วย&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เงื่อนไขอื่น ๆ ก็พิสูจน์ได้ด้วยวิธีคล้าย ๆ กัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Quotient Subspaces&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก &lt;b&gt;ปริภูมิเวกเตอร์ มีคุณสมบัติการสลับที่การบวก&lt;/b&gt; ดังนั้น เราอาจจะมองว่า (V, +) เป็น &lt;b&gt;กรุปอาบีเลียน (Abelian Group)&lt;/b&gt; ซึ่ง คุณสมบัตินี้ ทำให้ &lt;b&gt;กรุปย่อย (Subgroup)&lt;/b&gt; ทุกอันของ V เป็น &lt;b&gt;กรุปย่อยปกติ (Normal Subgroup)&lt;/b&gt; ด้วย (ใครอ่านอันนี้ไม่รู้เรื่อง ช่างมันไปก่อน)&lt;br /&gt;&lt;br /&gt;ผลก็คือ เราจะสามารถหา coset (ไม่ต้องไปสนชื่อมันก็ได้) ต่อไปนี้ได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;q(&lt;b&gt;x&lt;/b&gt;) = { &lt;b&gt;k&lt;/b&gt; + &lt;b&gt;x&lt;/b&gt; | &lt;b&gt;k&lt;/b&gt; ∈ K }&lt;br /&gt;เมื่อ &lt;b&gt;x&lt;/b&gt; ∈ V&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;เพื่อความสะดวก เราจะเขียนแทน q(&lt;b&gt;x&lt;/b&gt;) ด้วยสัญลักษณ์นี้&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;br /&gt;q(&lt;b&gt;x&lt;/b&gt;) = K + &lt;b&gt;x&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ ถ้าเรานิยามการบวกและคูณ สำหรับ q(&lt;b&gt;x&lt;/b&gt;) ต่าง ๆ ใหม่ แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(K + &lt;b&gt;x&lt;/b&gt;) + (K + &lt;b&gt;y&lt;/b&gt;) = K + (&lt;b&gt;x&lt;/b&gt; + &lt;b&gt;y&lt;/b&gt;)&lt;br /&gt;c(K + &lt;b&gt;x&lt;/b&gt;) = K + c&lt;b&gt;x&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;และให้เอกลักษณ์ของการบวก คือ&lt;br /&gt;&lt;div style="text-align: center;"&gt;K + &lt;b&gt;0&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;sub&gt;K&lt;/sub&gt; = K&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะพิสูจน์ได้ว่า เซตของ q(&lt;b&gt;x&lt;/b&gt;) และเครื่องหมายบวกกับคูณแบบใหม่นี้ ก็เป็นปริภูมิเวกเตอร์เช่นกัน เรามักจะเขียนเซตของ q(&lt;b&gt;x&lt;/b&gt;) ทั้งหมด ว่า V/K&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Isomorphisms&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Isomorphism ของ ปริภูมิเวกเตอร์&lt;/b&gt; ก็คือ การแปลงเชิงเส้นที่มีคุณสมบัติ 1-1 และทั่วถึงน่ะแหละ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ปริภูมิเวกเตอร์ A และ B จะ &lt;b&gt;Isomorphic&lt;/b&gt; กัน ก็ต่อเมื่อ มี isomorphism จาก A ไป B&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ที่อยากจะบอกก็คือ &lt;b&gt;V/K เนี่ย isomorphic กับ image ของ f นะ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;พิสูจน์ยังไงน่ะหรอ? เราก็สร้าง isomorphism φ ขึ้นมาอันนึง แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;φ(K + &lt;b&gt;x&lt;/b&gt;) = f(&lt;b&gt;x&lt;/b&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ เราจะบอกว่า φ มันมีคุณสมบัติ 1-1 ได้โดย&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;สมมติว่า φ(K + &lt;b&gt;x&lt;/b&gt;) = φ(K + &lt;b&gt;y&lt;/b&gt;)&lt;br /&gt;แสดงว่า f(&lt;b&gt;x&lt;/b&gt;) = f(&lt;b&gt;y&lt;/b&gt;)&lt;br /&gt;ซึ่งทำให้ f(&lt;b&gt;x&lt;/b&gt;) - f(&lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;f(&lt;b&gt;x&lt;/b&gt; - &lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt; = φ(K + (&lt;b&gt;x&lt;/b&gt; - &lt;b&gt;y&lt;/b&gt;))&lt;br /&gt;แต่จากนิยามของ K เมื่อ f(&lt;b&gt;x&lt;/b&gt; - &lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt; แสดงว่า &lt;b&gt;x&lt;/b&gt; - &lt;b&gt;y&lt;/b&gt; ∈ K = &lt;b&gt;0&lt;/b&gt;&lt;sub&gt;K&lt;/sub&gt;&lt;br /&gt;ทำให้ K + (&lt;b&gt;x&lt;/b&gt; - &lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt;&lt;sub&gt;K&lt;/sub&gt;&lt;br /&gt;(K + &lt;b&gt;x&lt;/b&gt;) - (K + &lt;b&gt;y&lt;/b&gt;) = &lt;b&gt;0&lt;/b&gt;&lt;sub&gt;K&lt;/sub&gt;&lt;br /&gt;K + &lt;b&gt;x&lt;/b&gt; = K + &lt;b&gt;y&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;การพิสูจน์ว่า φ มีคุณสมบัติทั่วถึง จะง่ายกว่า คือทำแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;สมมติว่า &lt;b&gt;y&lt;/b&gt; ∈ image ของ f&lt;br /&gt;เราจะรู้ว่า ต้องมี &lt;b&gt;x&lt;/b&gt; ∈ V ที่ทำให้ f(&lt;b&gt;x&lt;/b&gt;) = &lt;b&gt;y&lt;/b&gt;&lt;br /&gt;ดังนั้น K + &lt;b&gt;x&lt;/b&gt; ∈ V/K จะทำให้ φ(K + &lt;b&gt;x&lt;/b&gt;) = &lt;b&gt;y&lt;/b&gt; แน่นอน&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คุณสมบัติอื่น ๆ ไม่พูดถึงแล้วนะ ไปพิสูจน์กันเอาเอง&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Cardinal Numbers&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า W = image ของ f เราจะรู้สิ่งที่สำคัญมาก ๆ ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;|V| = |K| × |W| = |K| × |V/K|&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เมื่อ | ... | หมายถึง cardinal number&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Dimensions&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ใครที่เรียน linear algebra คงพอจะรู้ว่า dimension คืออะไรนะ&lt;br /&gt;&lt;br /&gt;ยกตัวอย่างคร่าว ๆ ละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;dim &lt;b&gt;R&lt;/b&gt; = 1&lt;br /&gt;dim &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt; = 2&lt;br /&gt;dim &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;3&lt;/sup&gt; = 3&lt;br /&gt;...&lt;br /&gt;dim &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; = n&lt;br /&gt;&lt;br /&gt;dim span( { (1, 1), (1, 0) } ) = 2&lt;br /&gt;dim span( { (1, 1, 1), (1, 1, 0), (1, 0, 0) } ) = 3&lt;br /&gt;dim span( { (1, 1, 1), (1, 1, 0), (0, 0, 1) } = 2&lt;br /&gt;dim span( { (1, 1, 1), (2, 2, 2), (3, 3, 3) } = 1&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะว่าไป dimension มันก็ คล้าย ๆ กับ เอาขนาดของเซต ใส่ log ฐาน &lt;i&gt;c&lt;/i&gt; = |&lt;b&gt;R&lt;/b&gt;| เลย ... เราก็เลยได้ความสัมพันธ์คล้าย ๆ กัน แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;จาก |V| = |K| × |W|&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ใส่ log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; เมื่อ &lt;i&gt;c&lt;/i&gt; = |&lt;b&gt;R&lt;/b&gt;| เข้าไปทั้งสองข้าง จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;|V| = log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;(|K| × |W|)&lt;br /&gt;log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;|V| = log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;|K| + log&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;|W|&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;dim V = dim K + dim W&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113153735963673964?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113153735963673964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113153735963673964' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113153735963673964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113153735963673964'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/transformation-linear-transformation.html' title='Transformation: Linear Transformation'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113151945756689456</id><published>2005-11-02T13:57:00.000+07:00</published><updated>2005-11-09T13:57:46.723+07:00</updated><title type='text'>พับกล่องลูกบาศก์</title><content type='html'>เวลาเราจะพับกล่องลูกบาศก์ด้วยกระดาษเนี่ย รู้สึกเหมือน ตอนเด็ก ๆ เค้าจะบอกให้ตัดกระดาษมาแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/ClassicCube.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/ClassicCube.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่จริง ๆ แล้วมันตัดแบบอื่นก็ได้นะ ... คือ ถ้าเราเอาเส้นตรง 4 ช่อง มาม้วน มันจะได้กล่องที่แหว่งไป 2 ด้าน ซึ่งทั้งสองด้านนั้น อยู่ตรงข้ามกัน เราสามารถเพิ่มด้านที่หายไปได้ โดยเอาไปติดกับขอบใดขอบนึง ...&lt;br /&gt;&lt;br /&gt;ดังนั้น รูปของกระดาษที่ทำเป็นกล่องได้ จะสามารถคิดได้แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/MiddleLine.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/MiddleLine.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;รูปทั้งหมดที่เป็นไปได้ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/AllMiddleLine.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/AllMiddleLine.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(ไปหมุน ๆ สลับ ๆ เอาเองนะ)&lt;br /&gt;&lt;br /&gt;รูปต่อไปนี้ คือรูปที่มีเส้นแนวกลางยาว 3 และพับเป็นกล่องได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/ShortMiddleLine.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/ShortMiddleLine.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่นอกจากรูปพวกนี้ ก็ยังมีอีก 2 แบบ ที่พับเป็นกล่องได้ คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/SpecialCubes.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/SpecialCubes.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;วิธีคิดอย่างหยาบ ๆ ว่า รูปไหนสามารถทำได้บ้าง เราคิดแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"หน้าแต่ละหน้า จะมีหน้าตรงข้ามได้เพียงหน้าเดียว"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมมติว่า เราต้องการหาหน้าที่อยู่ตรงข้ามกับหน้า X เราจะใช้หลักการแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ถ้ามีแผ่นที่อยู่ติดกับ X ด้านบน แผ่นที่อยู่เหนือ X 2 ช่องที่อยู่ใกล้กับ X มากที่สุด จะเป็นหน้าตรงข้ามของ X&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เช่น ในรูปข้างล่างนี้ แผ่นสีฟ้ากับเขียว จะเป็นหน้าตรงข้ามกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/OppositeFaces.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/OppositeFaces.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ในทิศอื่น ๆ เราก็คิดแบบนี้เหมือนกัน&lt;br /&gt;&lt;br /&gt;ลองเอารูปที่ทำได้ซักอันนึง มาวิเคราะห์ดูสิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/PositiveAnalysis.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/PositiveAnalysis.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เมื่อเราวิเคราะห์รูปที่ไม่สามารถพับเป็นกล่องได้ เราจะพบว่า หน้าบางหน้าไม่มีหน้าตรงข้าม หรือ หน้าบางหน้ามีหน้าตรงข้ามมากกว่า 1&lt;br /&gt;&lt;br /&gt;ในรูปข้างล่างนี่ หน้าสีแดง ไม่มีหน้าตรงข้าม&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/LackOpposite.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/LackOpposite.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วนในรูปข้างล่างนี้ หน้าสีฟ้า มีหน้าตรงข้ามมากกว่า 1&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4334/1398/1600/MultipleOpposite.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4334/1398/400/MultipleOpposite.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จบละ :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113151945756689456?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113151945756689456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113151945756689456' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113151945756689456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113151945756689456'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post_02.html' title='พับกล่องลูกบาศก์'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113151537632068090</id><published>2005-11-01T12:49:00.000+07:00</published><updated>2005-11-09T12:49:36.656+07:00</updated><title type='text'>การยกกำลังกับจำนวนเชิงซ้อน</title><content type='html'>&lt;b&gt;&lt;u&gt;ก่อนเริ่ม&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จำนวนเชิงซ้อนใด ๆ สามารถเขียนในรูป&lt;br /&gt;&lt;div style="text-align: center;"&gt;a + ib และ re&lt;sup&gt;iθ&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt; ได้ โดยที่ค่า a b r และ θ เป็นจำนวนจริง&lt;br /&gt;&lt;br /&gt;ค่า θ สามารถมีได้หลายค่า เพราะว่า&lt;br /&gt;&lt;div style="text-align: center;"&gt;e&lt;sup&gt;iθ&lt;/sup&gt; = cos θ + i sin θ&lt;br /&gt;&lt;/div&gt; ดังนั้น&lt;br /&gt;&lt;div style="text-align: center;"&gt;e&lt;sup&gt;iθ&lt;/sup&gt; = e&lt;sup&gt;i(θ + 2πn)&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;สำหรับจำนวนเต็ม n ใด ๆ&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ต่อไปนี้ จะให้ y กับ z เป็นจำนวนเชิงซ้อน ซึ่ง y = a + ib และ z = re&lt;sup&gt;iθ&lt;/sup&gt; และ x เป็นจำนวนจริงนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;การยกกำลังจำนวนจริงด้วยจำนวนเชิงซ้อน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;x&lt;sup&gt;y&lt;/sup&gt; = x&lt;sup&gt;a + ib&lt;/sup&gt; = x&lt;sup&gt;a&lt;/sup&gt; x&lt;sup&gt;ib&lt;/sup&gt; = x&lt;sup&gt;a&lt;/sup&gt; (e&lt;sup&gt;ln x&lt;/sup&gt;)&lt;sup&gt;ib&lt;/sup&gt; = x&lt;sup&gt;a&lt;/sup&gt; e&lt;sup&gt;ib ln x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าให้ x &amp;gt; 0 แล้ว f(a, b) = x&lt;sup&gt;a&lt;/sup&gt; e&lt;sup&gt;ib ln x&lt;/sup&gt; เป็นฟังก์ชัน 1 ต่อ 1 รึเปล่า?&lt;br /&gt;&lt;br /&gt;คำตอบก็คือ "ไม่" ...&lt;br /&gt;&lt;br /&gt;เหตุผลแรก ... ถ้า x = 1 เราจะเห็นว่า x&lt;sup&gt;a&lt;/sup&gt; = 1 เสมอ ไม่ว่า a จะเป็นอะไร ดังนั้น f(a, b) จะเท่ากันสำหรับทุกค่า a&lt;br /&gt;&lt;br /&gt;แล้วถ้าเพิ่มเงื่อนไขให้เป็น x ∈ &lt;b&gt;R&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; - { 1 } หละ?&lt;br /&gt;&lt;br /&gt;ก็ยังไม่ได้อยู่ดี เพราะว่า e&lt;sup&gt;ib ln x&lt;/sup&gt; = e&lt;sup&gt;i(b ln x + 2πn)&lt;/sup&gt; ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ถ้าให้ b' ln x = b ln x + 2πn&lt;br /&gt;b' = b + 2πn / ln x&lt;br /&gt;e&lt;sup&gt;ib ln x&lt;/sup&gt; = e&lt;sup&gt;ib' ln x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะเห็นว่า สามารถทำให้ f(a, b') = f(a, b) ได้โดยที่ b' ≠ b&lt;br /&gt;&lt;br /&gt;งั้น ... ถ้าเราเพิ่มอีกเงื่อนไขนึง คือ b ln x ∈ [0, 2π) หละ?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(a, b) ก็จะเป็นฟังก์ชัน 1 ต่อ 1 แล้ว!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;การยกกำลังจำนวนเชิงซ้อนด้วยจำนวนจริง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;z&lt;sup&gt;x&lt;/sup&gt; = (re&lt;sup&gt;iθ&lt;/sup&gt;)&lt;sup&gt;x&lt;/sup&gt; = r&lt;sup&gt;x&lt;/sup&gt;e&lt;sup&gt;iθx&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;f(x) = z&lt;sup&gt;x&lt;/sup&gt; อาจจะไม่เป็นฟังก์ชันนะ!&lt;br /&gt;&lt;br /&gt;ทำไมน่ะเหรอ? ... ก็ เพราะว่า e&lt;sup&gt;iθ&lt;/sup&gt; = e&lt;sup&gt;i(θ + 2πn)&lt;/sup&gt; หนิ ลองเอาไปแทนใหม่ดู&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;f(x) = z&lt;sup&gt;x&lt;/sup&gt; = (re&lt;sup&gt;i(θ + 2πn)&lt;/sup&gt;)&lt;sup&gt;x&lt;/sup&gt; = r&lt;sup&gt;x&lt;/sup&gt;e&lt;sup&gt;i(θx + 2πnx)&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอเป็นหยั่งงี้ มันก็เริ่มดูเพี้ยน ๆ แล้วหละ ... z&lt;sup&gt;x&lt;/sup&gt; มีได้หลายค่า ขึ้นอยู่กับ n ... f(x) ไม่ใช่ฟังก์ชันแล้ว!&lt;br /&gt;&lt;br /&gt;จริง ๆ มันก็ไม่แปลกเท่าไหร่นะ ... ก็ ตอนเราหาคำตอบของสมการ z&lt;sup&gt;2&lt;/sup&gt; = 1 เรายังได้คำตอบ 2 ค่าเลยหนิ&lt;br /&gt;&lt;br /&gt;แล้วเมื่อไหร่ f(x) จะเป็นฟังก์ชันหละ?&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ถ้า x เป็นจำนวนเต็ม → nx เป็นจำนวนเต็ม&lt;/li&gt;   &lt;li&gt;พอ nx เป็นจำนวนเต็มแล้ว → g(x) = e&lt;sup&gt;i(θx + 2πnx)&lt;/sup&gt; มีได้ค่าเดียว ก็เลยเป็นฟังก์ชัน&lt;/li&gt;   &lt;li&gt;เนื่องจาก f(x) = r&lt;sup&gt;x&lt;/sup&gt;g(x) และ g(x) เป็นฟังก์ชัน → f(x) เป็นฟังก์ชัน&lt;/li&gt; &lt;/ul&gt; นี่ก็แปลว่า &lt;b&gt;ถ้าให้ x เป็นจำนวนเต็ม z&lt;sup&gt;x&lt;/sup&gt; จะเป็นฟังก์ชัน&lt;/b&gt; นั่นเอง&lt;br /&gt;&lt;br /&gt;แต่ เพื่อให้เขียนสะดวก เรามักจะสมมติให้ z&lt;sup&gt;x&lt;/sup&gt; เป็นฟังก์ชัน โดยเพิ่มข้อกำหนดอีกแบบเข้าไปเลย คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;z = re&lt;sup&gt;iθ&lt;/sup&gt; เมื่อ 0 ≤ θ &amp;lt; 2π&lt;br /&gt;และ z&lt;sup&gt;x&lt;/sup&gt; = r&lt;sup&gt;x&lt;/sup&gt;e&lt;sup&gt;ixθ&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ค่าของ i&lt;sup&gt;i&lt;/sup&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก i = e&lt;sup&gt;iπ/2&lt;/sup&gt; ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;i&lt;sup&gt;i&lt;/sup&gt; = (e&lt;sup&gt;iπ/2&lt;/sup&gt;)&lt;sup&gt;i&lt;/sup&gt; = e&lt;sup&gt;-π/2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อ๊ะ ... i&lt;sup&gt;i&lt;/sup&gt; = e&lt;sup&gt;-π/2&lt;/sup&gt; = 0.207879576... !!!&lt;br /&gt;&lt;br /&gt;ไม่ใช่ิสิ :P ... อย่าลืมว่า จริง ๆ แล้ว i = e&lt;sup&gt;i(π/2 + 2πn)&lt;/sup&gt; เมื่อ n เป็นจำนวนเต็มบวกใด ๆ ... คิดใหม่แบบติด n ก็จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;i&lt;sup&gt;i&lt;/sup&gt; = (e&lt;sup&gt;i(π/2 + 2πn)&lt;/sup&gt;)&lt;sup&gt;i&lt;/sup&gt; = e&lt;sup&gt;-π/2 - 2πn&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;i&lt;sup&gt;i&lt;/sup&gt; ก็เลยมีได้หลายค่า ... แต่ทุกค่า เป็นจำนวนจริงนะ!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;การยกกำลังจำนวนเชิงซ้อนด้วยจำนวนเชิงซ้อน&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คราวนี้ มาลองหาค่า z&lt;sup&gt;y&lt;/sup&gt; กัน ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;z&lt;sup&gt;y&lt;/sup&gt; = (re&lt;sup&gt;iθ&lt;/sup&gt;)&lt;sup&gt;a + ib&lt;/sup&gt; = [r&lt;sup&gt;a&lt;/sup&gt; r&lt;sup&gt;ib&lt;/sup&gt;] (e&lt;sup&gt;iθ&lt;/sup&gt;)&lt;sup&gt;a + ib&lt;/sup&gt;&lt;br /&gt;z&lt;sup&gt;y&lt;/sup&gt; = [r&lt;sup&gt;a&lt;/sup&gt; e&lt;sup&gt;ib ln r&lt;/sup&gt;] (e&lt;sup&gt;i(θ + 2πm)&lt;/sup&gt;)&lt;sup&gt;a + ib&lt;/sup&gt;&lt;br /&gt;z&lt;sup&gt;y&lt;/sup&gt; = r&lt;sup&gt;a&lt;/sup&gt; e&lt;sup&gt;i(b ln r + 2πn)&lt;/sup&gt; e&lt;sup&gt;i(θa + 2πma)&lt;/sup&gt; e&lt;sup&gt;-θb - 2πmb&lt;/sup&gt;&lt;br /&gt;z&lt;sup&gt;y&lt;/sup&gt; = [r&lt;sup&gt;a&lt;/sup&gt;e&lt;sup&gt;-θb - 2πmb&lt;/sup&gt;] e&lt;sup&gt;i(b ln r + θa + 2πma + 2πn)&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะเห็นว่า ค่าของ z&lt;sup&gt;y&lt;/sup&gt; จะมีได้หลายค่า อยากที่คาดเอาไว้ แต่คราวนี้ มีตัวแปรอิสระถึง 2 ตัว คือ m กับ n&lt;br /&gt;&lt;br /&gt;ดังนั้น ถ้าเป็นไปได้ ก็ไม่ควรเอาจำนวนเชิงซ้อนมายกกำลังกันนะ :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113151537632068090?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113151537632068090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113151537632068090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113151537632068090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113151537632068090'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/11/blog-post.html' title='การยกกำลังกับจำนวนเชิงซ้อน'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113150755081456836</id><published>2005-10-31T10:05:00.000+07:00</published><updated>2005-11-09T10:39:11.053+07:00</updated><title type='text'>Halting Problem</title><content type='html'>ปัญหา Halting Problem เนี่ย เป็นปัญหาสุดคลาสสิกอันนึงสำหรับคนที่เรียนคอมพิวเตอร์ โจทย์มีอยู่ว่า&lt;br /&gt;&lt;blockquote&gt;เราจะสร้างโปรแกรม (หรือคำสั่ง) ชื่อว่า H ที่รับ input 2 ตัว คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;X = โปรแกรม (คือ source code หรือ object code หรือ อะไรก็ได้)&lt;/li&gt;   &lt;li&gt;Y = input (ทั้งหมด) ของโปรแกรม X&lt;/li&gt; &lt;/ol&gt; และมี output เป็น&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;"หยุด" ถ้า X(Y) หยุดการทำงานในเวลาจำกัด&lt;/li&gt;   &lt;li&gt;"ไม่หยุด" ถ้า X(Y) ไม่หยุดการทำงาน (ก็คือ ติด loop หนะ)&lt;/li&gt; &lt;/ol&gt; โดยที่ H(X, Y) ทำงานเสร็จในเวลาจำกัด  (นับเป็นจำนวนคำสั่งก็ได้) ได้รึเปล่า?&lt;br /&gt;&lt;/blockquote&gt;H(X, Y) ทำงานเสร็จในเวลาจำกัด แปลว่า H(H, (X, Y)) ให้คำตอบเป็น "หยุด" เสมอน่ะนะ&lt;br /&gt;&lt;br /&gt;คำตอบของปัญหานี้ ก็มีคนตอบได้มานานแล้วหละ แต่วิธีการหาคำตอบเนี่ย น่าสนใจ ... เค้าใช้วิธีพิสูจน์แบบขัดแย้ง แบบนี้...&lt;br /&gt;&lt;br /&gt;สมมติว่า H(X, Y) มีอยู่จริง เราจะสร้างโปรแกรม L(X) แบบนี้ได้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;L(X)&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;If H(X, X) = "หยุด", then loop forever.&lt;/li&gt;   &lt;li&gt;Else (if H(X, X) = "ไม่หยุด"), do nothing.&lt;/li&gt; &lt;/ul&gt; แปลว่า ถ้า H(X, X) ให้คำตอบเป็น "หยุด" H(L, X) จะเป็น "ไม่หยุด" แต่ถ้า H(X, X) ให้คำตอบเป็น "ไม่หยุด" H(L, X) จะเป็น "หยุด"&lt;br /&gt;&lt;br /&gt;คราวนี้ เราก็ลองคิดดูว่า H(L, L) มันจะเป็นอะไร ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ถ้า H(L, L) = "หยุด"&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;ตามนิยามของ H: L(L) ต้องหยุด&lt;/li&gt;   &lt;li&gt;ตามนิยามของ L: แปลว่ามันไปตกที่ "Else, ..." ดังนั้น H(L, L) = "ไม่หยุด"&lt;/li&gt; &lt;/ol&gt; &lt;b&gt;&lt;u&gt;ถ้า H(L, L) = "ไม่หยุด"&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;ตามนิยามของ H: L(L) ต้องไม่หยุด&lt;/li&gt;   &lt;li&gt;ตามนิยามของ L: แปลว่ามันไปตกที่ "If ..., then ..." ดังนั้น H(L, L) = "หยุด"&lt;/li&gt; &lt;/ol&gt; จะเห็นว่า ไม่ว่าจะสมมติให้ H(L, L) เป็นอะไร มันก็จะเกิดความขัดแย้งเสมอ แสดงว่า จริง ๆ แล้วเราไม่สามารถสร้าง H ได้นั่นเอง&lt;br /&gt;&lt;br /&gt;ความพยายามสร้าง H(X, Y) ที่ใกล้เคียงที่สุด ก็คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;H(X, Y) ตอบว่า "หยุด" ในเวลาจำกัด ถ้า X(Y) หยุดการทำงานในเวลาจำกัด&lt;/li&gt;   &lt;li&gt;H(X, Y) ไม่สามารถตอบอะไรได้ และไม่หยุดการทำงาน ถ้า X(Y) ไม่หยุดการทำงาน&lt;/li&gt; &lt;/ol&gt; ซึ่ง H(X, Y) แบบนี้ ก็ไม่ต่างจากการปล่อยให้ X(Y) ทำงานเฉย ๆ&lt;br /&gt;&lt;br /&gt;โยงกลับไปที่ภาษาอันดับหนึ่งนิดนึง เคยพูดไว้ในตอนท้ายเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/10/unification.html"&gt;ตรรกศาสตร์: Unification&lt;/a&gt; แล้วว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"จะว่าไป มันก็เทียบได้กับ halting problem น่ะแหละ (เทียบได้จริง ๆ นะ เหมือนกัันเด๊ะเลย)"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ก็เลยเอามาเทียบกันให้ดูอีกที ว่าทำไมมันเหมือนกัน ... อันนี้คือ ความเป็นจริงเกี่ยวกับการพิสูจน์ว่า ประพจน์เป็นจริงรึเปล่า เมื่อมีกฎต่าง ๆ ให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"ถ้าประพจน์ที่ต้องการพิสูจน์เป็นจริง เมื่อได้ประพจน์ว่าง (จาก resolution) เราก็จะรู้ แต่ถ้ามันไม่จริง เราก็อาจจะต้องทำไปเรื่อย ๆ เรื่อย ๆ ... เหมือนกับ ไม่มีทางรู้เลย ว่ามันเป็นจริงรึเปล่า"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วนในกรณีของ H(X, Y) ที่สามารถสร้างได้ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"ถ้า X(Y) หยุดการทำงาน เราก็จะได้คำตอบจาก H(X, Y) แต่ถ้า X(Y) ไม่หยุดการทำงาน H(X, Y) ก็จะทำงานไปเรื่อย ๆ ... ไม่มีทางรู้ว่ามันจะหยุดรึเปล่า"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จบละ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113150755081456836?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113150755081456836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113150755081456836' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113150755081456836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113150755081456836'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/halting-problem.html' title='Halting Problem'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113127427754096299</id><published>2005-10-30T16:33:00.000+07:00</published><updated>2005-11-06T17:52:10.916+07:00</updated><title type='text'>Transformation Matrix: ผลคูณภายใน</title><content type='html'>เรื่องนี้เป็นภาคต่อของ &lt;a href="http://tunococ.blogspot.com/2005/09/transformation-matrix.html"&gt;Transformation Matrix: พื้นฐาน&lt;/a&gt; นะ ไม่ยากเหมือนตอนที่แล้ว ๆ มา&lt;br /&gt;&lt;br /&gt;เราจะเริ่มที่เรื่องของ &lt;b&gt;ผลคูณภายใน&lt;/b&gt; ก่อน แต่คราวนี้ จะคิดกรณีของจำนวนเชิงซ้อนด้วย&lt;br /&gt;&lt;br /&gt;สมมติว่าเรามีเวกเตอร์ &lt;b&gt;u&lt;/b&gt; อยู่ เราคิดว่า ค่าในแต่ละมิติของ &lt;b&gt;u&lt;/b&gt; เป็นฟังก์ชันของเลขมิติ (เหมือนกับในตอน &lt;a href="http://tunococ.blogspot.com/2005/09/discrete_16.html"&gt;Discrete: ฟังก์ชัน เวกเตอร์ และเมตริกซ์&lt;/a&gt;) คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt; = (u(1), u(2), u(3), ..., u(n))&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่เดิม เราคิดว่าผลคูณภายในของ &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; ที่มีมิติเป็น n เท่ากัน คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; u(i)v(i)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น ขนาดของ &lt;b&gt;u&lt;/b&gt; สามารถหาได้จาก (คราวนี้ขอเขียนว่า |&lt;b&gt;u&lt;/b&gt;| นะ)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;|&lt;b&gt;u&lt;/b&gt;|&lt;sup&gt;2&lt;/sup&gt; = &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; u(i)&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หรือก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;|&lt;b&gt;u&lt;/b&gt;| = (&lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt;)&lt;sup&gt;1/2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่ ถ้าเกิด u(i) เป็นจำนวนเชิงซ้อนหละ ... &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt; อาจจะไม่ใช่จำนวนจริงก็ได้ แล้ว |&lt;b&gt;u&lt;/b&gt;| ก็อาจจะมีได้ 2 ค่าน่ะสิ (จากสมการ |&lt;b&gt;u&lt;/b&gt;|&lt;sup&gt;2&lt;/sup&gt; = &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;เราแก้ปัญหานี้ได้ โดยนิยามอะไรใหม่นิดนึง ... ถ้าเรากำหนดให้ &lt;b&gt;สังยุกต์ (Conjugate) ของเวกเตอร์&lt;/b&gt; เป็นแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; = (u(1)&lt;sup&gt;*&lt;/sup&gt;, u(2)&lt;sup&gt;*&lt;/sup&gt;, u(3)&lt;sup&gt;*&lt;/sup&gt;, ..., u(n)&lt;sup&gt;*&lt;/sup&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอเราหา &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ⋅ &lt;b&gt;u&lt;/b&gt; ผลก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ⋅ &lt;b&gt;u&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; u(i)&lt;sup&gt;*&lt;/sup&gt;u(i)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากความรู้เรื่องจำนวนเชิงซ้อน เรารู้ว่า ถ้า z เป็นจำนวนเชิงซ้อนใด ๆ แล้ว z&lt;sup&gt;*&lt;/sup&gt;z = |z|&lt;sup&gt;2&lt;/sup&gt; เป็นจำนวนจริง ดังนั้น &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ⋅ &lt;b&gt;u&lt;/b&gt; ของเรา ก็จะเป็นจำนวนจริงด้วย&lt;br /&gt;&lt;br /&gt;เราเลยนิยาม &lt;b&gt;ผลคูณภายใน&lt;/b&gt; ใหม่ แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt; แบบใหม่ = &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ⋅ &lt;b&gt;v&lt;/b&gt; แบบเก่า&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่ &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt; แบบใหม่ มีคุณสมบัติต่างกับแบบเก่าด้วย คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt; ≠ &lt;b&gt;v&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt; (หมายถึง ไม่จำเป็นต้องเท่ากันเสมอไป)&lt;br /&gt;แต่&lt;b&gt; u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt; = (&lt;b&gt;v&lt;/b&gt; ⋅ &lt;b&gt;u&lt;/b&gt;)&lt;sup&gt;*&lt;/sup&gt; เสมอ&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;&lt;u&gt;เมื่อคิดเวกเตอร์เป็นเมตริกซ์แนวตั้ง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้าเรามอง &lt;b&gt;u&lt;/b&gt; เป็นเมตริกซ์มิติ n × 1 เราก็ยังเขียนว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt; = (u(1), u(2), u(3), ..., u(n))&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ได้เหมือนเดิม ... แต่เดี๋ยวลองกำหนด &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ใหม่ ให้เป็นแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; = [u(1)&lt;sup&gt;*&lt;/sup&gt; u(2)&lt;sup&gt;*&lt;/sup&gt; u(3)&lt;sup&gt;*&lt;/sup&gt; ... u(n)&lt;sup&gt;*&lt;/sup&gt;]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หรือก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; แบบใหม่ = (&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;)&lt;sup&gt;T&lt;/sup&gt; แบบเก่า&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอเราหาผลคูณแบบเมตริกซ์ของ &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; กับ &lt;b&gt;v&lt;/b&gt; ก็จะได้ผลเป็น เมตริกซ์มิติ 1 × 1 แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;v&lt;/b&gt; = [&lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt;]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพื่อให้เขียนง่ายขึ้น เราจะถือซะว่า เมตริกซ์มิติ 1 × 1 เป็นจำนวนเชิงซ้อนตัวเดียวเลยละกัน ... มันจะเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;v&lt;/b&gt; = &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ผลคูณภายในของเมตริกซ์กับเมตริกซ์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เราลองใช้นิยามผลคูณภายในอย่างเดียวกันกับเมตริกซ์ดู เราจะหาขนาดของเมตริกซ์ได้รึเปล่านะ?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt; = ?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเรามองว่า &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์ที่มีมิติ m × n ซึ่งประกอบด้วยเวกเตอร์แนวตั้ง แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; = [&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; : ... : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; จะเป็นเมตริกซ์ที่มีมิติ n × m หน้าตาแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; = (&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;*&lt;/sup&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt;&lt;sup&gt;*&lt;/sup&gt; :  &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt;&lt;sup&gt;*&lt;/sup&gt; : ... : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;&lt;sup&gt;*&lt;/sup&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;เผื่อลืม&lt;/u&gt;: รูปการคูณเมตริกซ์&lt;br /&gt;&lt;/i&gt; &lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;img src="http://photos1.blogger.com/blogger/4334/1398/400/Square1.jpg" /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt; &lt;i&gt;เอามาจาก &lt;a href="http://tunococ.blogspot.com/2005/09/transformation-matrix.html"&gt;Transformation Matrix: พื้นฐาน&lt;/a&gt; นะ&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;ดังนั้นค่าของ &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt; จะเป็นเมตริกซ์มิติ n × n แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;B&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;br /&gt;B&lt;sub&gt;i,j&lt;/sub&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ⋅ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;j&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt; เมื่อ B&lt;sub&gt;i,j&lt;/sub&gt; คือ ค่าในแถวที่ i หลักที่ j ของ &lt;b&gt;B&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คราวนี้ คุณสมบัติสำคัญก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ⋅ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;j&lt;/sub&gt; = (&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;j&lt;/sub&gt; ⋅ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;)&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งทำให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;B&lt;sub&gt;i,j&lt;/sub&gt; = B&lt;sub&gt;j, i&lt;/sub&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งแปลว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;B&lt;/b&gt; = &lt;b&gt;B&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราเรียกเมตริกซ์ที่มีคุณสมบัตินี้ว่า &lt;b&gt;เมตริกซ์เฮอร์มิเชียน (Hermitian Matrix)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ไป ๆ มา ๆ เราก็ไม่ได้ขนาดของ &lt;b&gt;A&lt;/b&gt; แฮะ แต่ได้คุณสมบัติที่ว่า &lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์เฮอร์มิเชียนแทน&lt;br /&gt;&lt;br /&gt;แล้ว แต่ละค่า B&lt;sub&gt;i,j&lt;/sub&gt; มันมีความหมายว่ายังไงหละ?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ถ้าเวกเตอร์ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ตั้งฉากกันทุกคู่&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ดังนั้น &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ⋅ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;j&lt;/sub&gt; จะเป็น 0 เมื่อ i ≠ j&lt;br /&gt;&lt;br /&gt;มันก็แปลว่า B&lt;sub&gt;i,j&lt;/sub&gt; = 0 เมื่อ i ≠ j น่ะสิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt; ก็จะเป็น &lt;b&gt;เมตริกซ์ทแยงมุม (Diagonal Matrix)&lt;/b&gt;!!!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะเขียนได้ว่า ... (สัญลักษณ์แบบนี้ เอามาจาก &lt;a href="http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues.html"&gt;Transformation Matrix: Eigenvalues &amp; Eigenvectors "ตอนแรก"&lt;/a&gt; นะ)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt; = [ B&lt;sub&gt;1,1&lt;/sub&gt; \ B&lt;sub&gt;2,2&lt;/sub&gt; \ B&lt;sub&gt;3,3&lt;/sub&gt; \ ... \ B&lt;sub&gt;n,n&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เนื่องจาก B&lt;sub&gt;i,i&lt;/sub&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ⋅ &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; = |&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;|&lt;sup&gt;2&lt;/sup&gt; เป็นจำนวนจริง ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์จำนวนจริงด้วย&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;เรื่องของ Determinant&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้า &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์จัตุรัส เราจะหา det(&lt;b&gt;A&lt;/b&gt;) ได้&lt;br /&gt;&lt;br /&gt;เนื่องจาก det(&lt;b&gt;A&lt;/b&gt;) เกิดจากการเอาค่า &lt;b&gt;A&lt;/b&gt; มาคูณกับบวกกัน ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;det(&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;) = det(&lt;b&gt;A&lt;/b&gt;)&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น เราก็เลยรู้แน่ ๆ ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;det(&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt;) เป็นจำนวนจริง&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพราะว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;det(&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt;) = det(&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;) = det(&lt;b&gt;A&lt;/b&gt;)&lt;sup&gt;*&lt;/sup&gt;det(&lt;b&gt;A&lt;/b&gt;)&lt;br /&gt;&lt;/div&gt; เป็นจำนวนจริงแน่นอน&lt;br /&gt;&lt;br /&gt;ดังนั้น เราอาจจะนิยาม &lt;b&gt;ขนาดของ A&lt;/b&gt; อีกแบบนึง ซึ่งเป็นจำนวนจริงไม่ติดลบเสมอ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;|A| = det(&lt;b&gt;A&lt;/b&gt; ⋅ &lt;b&gt;A&lt;/b&gt;)&lt;sup&gt;1/2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งสิ่งที่เราได้เพิ่มมาอีกอย่างก็คือ ... &lt;b&gt;A ไม่จำเป็นต้องเป็นเมตริกซ์จัตุรัสก็ได้น่ะสิ !!!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113127427754096299?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113127427754096299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113127427754096299' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113127427754096299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113127427754096299'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-matrix.html' title='Transformation Matrix: ผลคูณภายใน'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113121098506747629</id><published>2005-10-29T22:50:00.000+07:00</published><updated>2005-11-06T02:44:53.433+07:00</updated><title type='text'>Transformation Matrix: Eigenvalues &amp; Eigenvectors "การคำนวณ"</title><content type='html'>พล่ามเรื่อง eigenvalue กับ eigenvector ไปเยอะละ แต่ยังไม่ได้บอกเลย ว่าเราจะหามันได้ยังไง :P คิดว่าถึงเวลาแล้วหละ มาลองดูกันดีกว่า&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Analytical Solution&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จำได้มั้ยว่า ใน &lt;a href="http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues_28.html"&gt;Transformation Matrix: Eigenvalues &amp; Eigenvectors "คุณสมบัติ"&lt;/a&gt; เรารู้มาอย่างนึงว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;λ จะเป็น eigenvalue ของ &lt;b&gt;A&lt;/b&gt; ก็ต่อเมื่อ det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น เราก็ตั้งต้นด้วยสมการ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมการนี้ มักจะเรียกกันว่า "&lt;b&gt;Characteristic Equation&lt;/b&gt;" ของปัญหาการหา eigenvalue และ eigenvector นี้ ส่วนพหุนาม P(λ) = det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) ก็จะเรียกว่า "&lt;b&gt;Characteristic Polynomial&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;ถ้า &lt;b&gt;A&lt;/b&gt; มีมิติเป็น n × n เราจะรู้ว่า det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) เป็นพหุนามดีกรี n อย่างแน่นอน ดังนั้น เราจะสามารถหา eigenvalue λ ได้ n ตัว (นับตัวซ้ำด้วย)&lt;br /&gt;&lt;br /&gt;คราวนี้ พอเราเอา λ แต่ละตัว ไปแทนใน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;)&lt;b&gt;e&lt;/b&gt; = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จะได้ระบบสมการที่มี n สมการ และมีตัวแปร n ตัว ซึ่งมีคุณสมบัติ linear dependency (เพราะว่า det เป็น 0) ดังนั้น เซตของคำตอบจะมีจำนวนนับไม่ถ้วน ซึ่งก็ถูกต้อง เพราะว่า eigenvector มีจำนวนเป็นอนันต์&lt;br /&gt;&lt;br /&gt;แต่ถ้าหาก λ ที่เลือกไปแทนในสมการ (&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;)&lt;b&gt;e&lt;/b&gt; = 0 นั้น ไม่ใช่รากซ้ำจากการแก้สมการ P(λ) = 0 เราจะรู้ว่า eigenvector ทั้งหมดที่ได้จะมีทิศขนานกัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Eigenvalue ของเมตริกซ์สมมาตรที่มีสมาชิกเป็นจำนวนจริง เป็นจำนวนจริง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;รู้สึกว่ากรณี &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt; นี่จะพูดบ่อยจังเนอะ :D&lt;br /&gt;&lt;br /&gt;วิธีพิสูจน์อันนี้ อาจจะดูแปลก ๆ หน่อย แต่ทุกขั้นตอนก็จำเป็นนะ เราจะเริ่มโดยสมมติว่า &lt;b&gt;e&lt;/b&gt; เป็น eigenvector ที่อาจจะมีค่าที่ไม่ใช่จำนวนจริงก็ได้ เราจะพิสูจน์ว่า λ ซึ่งเป็น eigenvalue ของมัน ต้องเป็นจำนวนจริง&lt;br /&gt;&lt;br /&gt;เราจะเขียน &lt;b&gt;e&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; เพื่อหมายถึง เมตริกซ์ conjugate transpose ของ &lt;b&gt;e&lt;/b&gt; ซึ่งก็คือ เอาค่าในแต่ละมิติของ &lt;b&gt;e&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt; ไปเปลี่ยนเป็น conjugate ของมัน&lt;br /&gt;&lt;br /&gt;คราวนี้ ผลคูณภายในของเวกเตอร์เชิงซ้อน &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; ใด ๆ เราก็จะเขียนเป็น &lt;b&gt;u&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;v&lt;/b&gt; แทน &lt;b&gt;u&lt;/b&gt; ⋅ &lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เริ่มพิสูจน์โดยการหา &lt;b&gt;e&lt;/b&gt; ⋅ &lt;b&gt;Ae&lt;/b&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;Ae&lt;/b&gt; = λ ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ ลองใส่ * เข้าไปทั้งสองข้าง&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;Ae&lt;/b&gt;)&lt;sup&gt;*&lt;/sup&gt; = (λ ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt;)&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ใช้คุณสมบัติที่ว่า (&lt;b&gt;XY&lt;/b&gt;)&lt;sup&gt;*&lt;/sup&gt; = &lt;b&gt;Y&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;X&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; กระจายเครื่องหมาย * ในฝั่งซ้าย ส่วนฝั่งขวา กระจายแค่ conjugate เข้าไปที่ λ เพราะว่า ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt; เป็นจำนวนจริงอยู่แล้ว จะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;e&lt;/b&gt; = λ&lt;sup&gt;*&lt;/sup&gt; ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่จากเงื่อนไขที่ว่า &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์จำนวนจริง และสมมาตร เราเลยรู้ว่า &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt; ซึ่งทำให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;b&gt;Ae&lt;/b&gt; = λ&lt;sup&gt;*&lt;/sup&gt; ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ฝั่งซ้ายของสมการนี้ เท่ากับฝั่งซ้ายของสมการข้างบน (กลับไปดูสิ) พอจับมันมาเท่ากัน เราจะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;λ ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt; = λ&lt;sup&gt;*&lt;/sup&gt; ||&lt;b&gt;e&lt;/b&gt;||&lt;sup&gt;2&lt;/sup&gt;&lt;br /&gt;λ = λ&lt;sup&gt;*&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สรุปได้แล้วว่า λ ต้องเป็นจำนวนจริง&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ข้อจำกัดของ Analytical Solution&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เนื่องจาก เราสามารถคำตอบเชิงวิเคราะห์ (Analytical Solution) ของสมการ P(λ) = 0 ได้ก็ต่อเมื่อ n ≤ 4 (ความจริงข้อนี้ พิสูจน์ยากมาก ๆ ... ขอยกมาเฉย ๆ ละกัน) ดังนั้น ในกรณีที่ n &amp;gt; 4 เราจะต้องหาวิธีทางตัวเลข (Numerical Method) เพื่อแก้สมการนี้&lt;br /&gt;&lt;br /&gt;การหารากของสมการพหุนามแบบ numerical เนี่ย มันก็มีอยู่หลายวิธีแหละ แต่ ... จริง ๆ ถ้าเราจะหา numerical method อยู่แล้ว เราลองหาจากปัญหาต้นแบบได้มั้ย? แบบที่ไม่ต้องยุ่งกับ P(λ) หนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Numerical Solution&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;วิธีที่จะบอกเนี่ย เป็นหลักการเบื้องต้นนะ ในการใช้งานจริง ต้องมีการปรับปรุง เปลี่ยนแปลง อีกเยอะเลย&lt;br /&gt;&lt;br /&gt;เริ่มละนะ ... สมมติว่าเรามีเวกเตอร์อะไรก็ไม่รู้ เส้นนึง ชื่อว่า &lt;b&gt;u&lt;/b&gt; แล้วก็ สมมติว่า eigenvector ของเรา มีอยู่ n ตัว คือ &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ... &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; และ eigenvalue ก็คือ λ&lt;sub&gt;1&lt;/sub&gt; λ&lt;sub&gt;2&lt;/sub&gt; λ&lt;sub&gt;3&lt;/sub&gt; ... λ&lt;sub&gt;n&lt;/sub&gt; ตามลำดับ&lt;br /&gt;&lt;br /&gt;เนื่องจาก ตัวเลขห้อย &lt;b&gt;e&lt;/b&gt; กับ λ มันจะเรียงกันยังไงก็ได้ เราก็สมมติซะว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;λ&lt;sub&gt;1&lt;/sub&gt; ≥ λ&lt;sub&gt;2&lt;/sub&gt; ≥ λ&lt;sub&gt;3&lt;/sub&gt; ≥ ... ≥ λ&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ละกัน ... จากนั้น ก็สมมติว่า a&lt;sub&gt;i&lt;/sub&gt; เป็นผลจากการลองหาค่า &lt;b&gt;Au&lt;/b&gt; แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; = a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมมติว่า a&lt;sub&gt;1&lt;/sub&gt; ≠ 0 ก่อนนะ คราวนี้ เราลองเอา &lt;b&gt;A&lt;/b&gt; ใส่เข้าไปอีกที ทั้งสองข้างของสมการ ผลจะเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;sub&gt;1&lt;/sub&gt;a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + λ&lt;sub&gt;2&lt;/sub&gt;a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + λ&lt;sub&gt;3&lt;/sub&gt;a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + λ&lt;sub&gt;n&lt;/sub&gt;a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเอา &lt;b&gt;A&lt;/b&gt; ใส่ซ้ำไปเรื่อย ๆ มันจะเป็น ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + λ&lt;sub&gt;2&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + λ&lt;sub&gt;3&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + λ&lt;sub&gt;n&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ &lt;u&gt;ถ้าหาก λ&lt;sub&gt;1&lt;/sub&gt; &amp;gt; λ&lt;sub&gt;2&lt;/sub&gt;&lt;/u&gt; ... ลองดึง λ&lt;sub&gt;1&lt;/sub&gt; ออกมาจากสัมประสิทธิ์ทุกตัวสิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;(a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + (λ&lt;sub&gt;2&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + (λ&lt;sub&gt;3&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + (λ&lt;sub&gt;n&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอเราให้ p → ∞ แล้ว เราจะเห็นว่า (λ&lt;sub&gt;i&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt; เป็น 0 หมดทุกตัวยกเว้นเมื่อ i = 1 ดังนั้นข้อสรุปของเราก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; ≈ λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แสดงว่า การเอา &lt;b&gt;A&lt;/b&gt; คูณซ้ำ ๆ ไปเรื่อย ๆ จะทำให้เราได้ &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; ออกมาเอง&lt;br /&gt;&lt;br /&gt;แต่ &lt;u&gt;ถ้าหาก λ&lt;sub&gt;1&lt;/sub&gt; = λ&lt;sub&gt;2&lt;/sub&gt; = λ&lt;sub&gt;3&lt;/sub&gt; = ... = λ&lt;sub&gt;m&lt;/sub&gt; หละ&lt;/u&gt;? (m ≤ n นะ) ... เราก็ดึงตัวร่วมออกจากทุกตัวได้อยู่ดีนะ มันจะเป็นงี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;จาก&lt;b&gt; A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;(a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + (λ&lt;sub&gt;2&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + (λ&lt;sub&gt;3&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + (λ&lt;sub&gt;n&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่ λ&lt;sub&gt;1&lt;/sub&gt; = λ&lt;sub&gt;2&lt;/sub&gt; = λ&lt;sub&gt;3&lt;/sub&gt; = ... = λ&lt;sub&gt;m&lt;/sub&gt; &amp;gt; λ&lt;sub&gt;m+1&lt;/sub&gt; (ถ้า m = n ก็ถือซะว่า λ&lt;sub&gt;n+1&lt;/sub&gt; = 0 ไปเลย) ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;(a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;&lt;br /&gt;+ (λ&lt;sub&gt;m+1&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;m+1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m+1&lt;/sub&gt; + (λ&lt;sub&gt;m+2&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;m+2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m+2 &lt;/sub&gt;+ (λ&lt;sub&gt;n&lt;/sub&gt;/λ&lt;sub&gt;1&lt;/sub&gt;)&lt;sup&gt;p&lt;/sup&gt;a&lt;sub&gt;n&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่ง เมื่อ p → ∞ เราจะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;p+1&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; ≈ λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;p&lt;/sup&gt;(a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ผลลัพธ์ที่ได้เป็นเวกเตอร์ a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt; ซึ่งเรารู้ว่า มันก็เป็น eigenvector เหมือนกัน เพราะว่า eigenvalue มันเท่ากัน (พิสูจน์ไปแล้วในหัวข้อย่อย "จริง ๆ แล้ว จำนวน Eigenvector เป็นอนันต์" ในเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues_28.html"&gt;Transformation Matrix: Eigenvalues &amp;amp; Eigenvectors "คุณสมบัติ"&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;ดังนั้น เราจึงสรุปได้ว่า การเอาเวกเตอร์ที่เราสุ่มขึ้นมา คูณด้วย &lt;b&gt;A&lt;/b&gt; ไปเรื่อย ๆ เราจะได้ eigenvector ตัวที่มีค่า eigenvalue สูงสุดออกมาเอง&lt;br /&gt;&lt;br /&gt;มีอีกเรื่องที่ยังคาใจเราอยู่นะ คือ เมื่อตอนแรก เราสมมติว่า a&lt;sub&gt;1&lt;/sub&gt; ≠ 0 ... แล้วถ้า a&lt;sub&gt;1&lt;/sub&gt; = 0 มันจะเป็นยังไงน่ะเหรอ? เราก็คิดที่ a&lt;sub&gt;2&lt;/sub&gt; แทนสิ ... ผลลัพธ์ก็คือ eigenvector ที่มี eigenvalue มากเป็นอันดับรองลงมาไงหละ&lt;br /&gt;&lt;br /&gt;ดังนั้น ถ้าเรามั่วเวกเตอร์ &lt;b&gt;u&lt;/b&gt; มาครั้งแรก แล้วเราหา &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; ได้แล้ว เราก็มั่ว &lt;b&gt;u&lt;/b&gt; มาอีกตัวที่ทำให้ a&lt;sub&gt;1&lt;/sub&gt; = 0 ซะ คราวนี้ เราก็จะได้ &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; แทน ... ทำซ้ำไปเรื่อย ๆ เราก็จะได้ &lt;b&gt;e&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ครบทุกตัว&lt;br /&gt;&lt;br /&gt;&lt;i&gt;ในทางปฏิบัติ ทุกครั้งที่เราเอา &lt;b&gt;A&lt;/b&gt; มาคูณ เราควรจะ normalize ผลลัพธ์ด้วย เพื่อให้ขนาดของเวกเตอร์ ไม่ใหญ่เกินไป จนเกิดปัญหา overflow&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ผลพลอยได้จากปัญหา Eigenvector&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;มีคนเค้าพิสูจน์ไว้แล้วว่า ถ้าเราสมมติ P(λ) เป็นพหุนามดีกรี n ที่มีสัมประสิทธิ์เป็นจำนวนจริง ขึ้นมาอันนึง เราจะสามารถหา &lt;b&gt;A&lt;/b&gt; ที่ทำให้ P(λ) = det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) ได้เสมอ&lt;br /&gt;&lt;br /&gt;ดังนั้น ... แทนที่เราจะใช้ numerical method สำหรับหารากของสมการพหุนาม มาแก้ปัญหา eigenvector เราก็สามารถทำกลับกันได้ โดนเปลี่ยนปัญหาการหารากของสมการพหุนาม ไปเป็นปัญหา eigenvector แล้วใช้วิธีอย่างเมื่อกี๊&lt;br /&gt;&lt;br /&gt;แปลว่า เราได้ numerical method สำหรับหารากของสมการพหุนาม เพิ่มขึ้นอีกวิธี ก็คือ วิธีการหา eigenvector นี่เอง&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ทิ้งท้าย&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จริง ๆ แล้ว numerical method สำหรับหา eigenvector เนี่ย มันมีอีกหลายวิธีมาก ๆ แต่ที่ยกมาให้ดูเนี่ย อยากให้เห็นวิธีการประยุกต์ความรู้มากกว่า (มันไม่ยาก แต่ใช้งานได้)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113121098506747629?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113121098506747629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113121098506747629' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113121098506747629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113121098506747629'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues_29.html' title='Transformation Matrix: Eigenvalues &amp; Eigenvectors &quot;การคำนวณ&quot;'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113105728570708294</id><published>2005-10-28T01:35:00.000+07:00</published><updated>2005-11-04T05:39:32.536+07:00</updated><title type='text'>Transformation Matrix: Eigenvalues &amp; Eigenvectors "คุณสมบัติ"</title><content type='html'>ขอกำหนดข้อตกลงบางอย่างก่อนนะ ไม่อยากจะเขียนอะไรยั้วเยี้ย ...&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์จัตุรัสที่มีมิติเท่ากับ n × n และมี eigenvector&lt;/li&gt;   &lt;li&gt;&lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; คือเวกเตอร์ของ &lt;b&gt;แถว&lt;/b&gt; ที่ i ของ &lt;b&gt;A&lt;/b&gt; (สังเกตว่า &lt;b&gt;แถว&lt;/b&gt; เรียงอยู่ในแนวนอน แต่ถือว่า &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; เป็นเมตริกซ์แนวตั้ง) ดังนั้น &lt;b&gt;A&lt;/b&gt; = ( &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; : ... : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; )&lt;/li&gt; &lt;/ul&gt; &lt;i&gt;&lt;u&gt;เผื่อลืม&lt;/u&gt;: ถ้าไม่รู้ว่าสัญลักษณ์ ( &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; : ... : &lt;b&gt;A&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; ) คืออะไร ไปดูที่ &lt;a href="http://tunococ.blogspot.com/2005/09/transformation-matrix.html"&gt;Transformation Matrix: พื้นฐาน&lt;/a&gt; นะ&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;คุณสมบัติพื้นฐาน ที่สำคัญ ๆ ของ eigenvalue และ eigenvector ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;λ เป็น Eigenvalue ของ A ก็ต่อเมื่อ det(A - λI) = 0&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า &lt;b&gt;u&lt;/b&gt; เป็น eigenvector ของ &lt;b&gt;A&lt;/b&gt; และมี eigenvalue เป็น λ จากนิยาม เราจะรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Au&lt;/b&gt; - λ&lt;b&gt;u&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จาก &lt;b&gt;Iu&lt;/b&gt; = &lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; - λ&lt;b&gt;Iu&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากคุณสมบัติการกระจายของเมตริกซ์&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;)&lt;b&gt;u&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ได้ระบบสมการเชิงเส้น n ตัวแปร ที่พจน์ของค่าคงที่ทางขวาเป็น 0 หมด&lt;br /&gt;&lt;br /&gt;เนื่องจากเราสนใจเฉพาะกรณี &lt;b&gt;u&lt;/b&gt; ≠ &lt;b&gt;0&lt;/b&gt; แสดงว่า สามารถเลือก &lt;b&gt;u&lt;/b&gt; ที่ทำให้ (&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;)&lt;b&gt;u&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt; ได้ มันก็แปลว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;เซตของเวกเตอร์ n เส้น จากแต่ละแถวของ &lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt; มีคุณสมบัติ linear dependency&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งประโยคนี้ เทียบเท่ากับ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;det(&lt;b&gt;A&lt;/b&gt; - λ&lt;b&gt;I&lt;/b&gt;) = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;เผื่อลืม&lt;/u&gt;: เรื่องของ det กับคุณสมบัติ linear dependency มีอยู่ใน 3 เรื่องนี้นะ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;&lt;a href="http://tunococ.blogspot.com/2005/08/determinant-linear-combination.html"&gt;ตามหาความหมายของ Determinant: Linear Combination&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://tunococ.blogspot.com/2005/09/discrete-linear-dependency.html"&gt;Discrete: Linear Dependency&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://tunococ.blogspot.com/2005/09/continuous-linear-dependency.html"&gt;Continuous: Linear Dependency&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/i&gt;ตอนนี้เราพิสูจน์ "ถ้า ... แล้ว" ได้เรียบร้อยละ การจะพิสูจน์ย้อนกลับก็ง่าย ๆ นะ ทำจากล่างขึ้นบนก็ได้เลย เพราะมันเป็น "ก็ต่อเมื่อ" ทุกขั้น ไม่เขียนให้ดูละกัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;จริง ๆ แล้ว จำนวน Eigenvector เป็นอนันต์&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เหมือนกับโกหกกันไปแล้วทีนึงนะ ว่าปกติ จะมี eigenvector อยู่ (ไม่เกิน) n เส้น ... :P&lt;br /&gt;&lt;br /&gt;จริง ๆ มันก็ไม่ใช่โกหกอะนะ เพราะมีคำว่า "ปกติ" อยู่ :D ... จริง ๆ มันขึ้นกับนิยามมากกว่าแหละ ลองดูนี่สิ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเราเอาจำนวนจริง c ≠ 0 คูณเข้าไปทั้งสองข้าง&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;c&lt;b&gt;Au&lt;/b&gt; = cλ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากคุณสมบัติพื้นฐานของเมตริกซ์และเวกเตอร์ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;(c&lt;b&gt;u&lt;/b&gt;) = λ(c&lt;b&gt;u&lt;/b&gt;)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เห็นมั้ยว่า ถ้า &lt;b&gt;u&lt;/b&gt; เป็น eigenvector แล้ว c&lt;b&gt;u&lt;/b&gt; ก็เป็น eigenvector แต่ว่าเวกเตอร์พวกนี้มันขนานกัน บางคนก็เลยไม่สนใจไง ถือว่ามันเป็นพวกเดียว ๆ กัน นับ 1 (หรือจะบอกว่า นับแต่ unit eigenvector ก็ได้)&lt;br /&gt;&lt;br /&gt;แต่มันก็มีความไม่ปกติที่ไม่ได้มาจากนิยามด้วยนะ ลองดูกรณีที่ eigenvector สองตัวมี eigenvalue เท่ากันซักหน่อย ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Av&lt;/b&gt; = λ&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;⇓&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;(p&lt;b&gt;u&lt;/b&gt; + q&lt;b&gt;v&lt;/b&gt;) = λ(p&lt;b&gt;u&lt;/b&gt; + q&lt;b&gt;v&lt;/b&gt;)&lt;br /&gt;ดังนั้น p&lt;b&gt;u&lt;/b&gt; + q&lt;b&gt;v&lt;/b&gt; ก็เป็น eigenvector&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ผลรวมเชิงเส้นของ eigenvector พวกนี้ ก็เป็น eigenvector หมดเลย!!!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;แนะแนวการมอง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สมมติว่า E เป็นเซตของ eigenvector ทั้งหมดของ &lt;b&gt;A&lt;/b&gt; และเราต้องการเลือก eigenvector กลุ่มนึง (ให้เป็นเซต S) ซึ่งมีคุณสมบัติว่า span(E) = span(S) และจำนวนสมาชิกของ S น้อยที่สุด&lt;br /&gt;&lt;br /&gt;คุณสมบัติที่สำคัญอย่างแรกของ E (และ S) ก็คือ ถ้า &lt;b&gt;x&lt;/b&gt; ∈ span(E) แล้ว &lt;b&gt;Ax&lt;/b&gt; ∈ span(E) ด้วย เพราะว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;(a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;)&lt;br /&gt;= a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;Ae&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;Ae&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;Ae&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;Ae&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt;&lt;br /&gt;= λ&lt;sub&gt;1&lt;/sub&gt;a&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; + λ&lt;sub&gt;2&lt;/sub&gt;a&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; + λ&lt;sub&gt;3&lt;/sub&gt;a&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; + ... + λ&lt;sub&gt;m&lt;/sub&gt;a&lt;sub&gt;m&lt;/sub&gt;&lt;b&gt;e&lt;/b&gt;&lt;sub&gt;m&lt;/sub&gt; ∈ span(E)&lt;br /&gt;เมื่อ m = | E |&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ถ้า A เป็นเมตริกซ์สมมาตรแล้ว x จะตั้งฉากกับ e ∈ E ก็ต่อเมื่อ Ax ตั้งฉากกับ e&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ถ้า &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์สมมาตร เราจะรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมมติว่า &lt;b&gt;e&lt;/b&gt; เป็น eigenvector ที่มี eigenvalue เป็น λ เราจะรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Ae&lt;/b&gt; = λ&lt;b&gt;e&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วก็สมมติอีกว่า &lt;b&gt;x&lt;/b&gt; เป็นเวกเตอร์ที่ตั้งฉากกับ &lt;b&gt;e&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;x&lt;/b&gt; ⋅ &lt;b&gt;e&lt;/b&gt; = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพื่อให้เขียนง่ายขึ้น เราจะเขียนแทนผลคูณภายในด้วยการคูณเมตริกซ์ แบบนี้ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;x&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;e&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากสมการแรก ถ้าเราเอา &lt;b&gt;x&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt; คูณทางซ้าย จะได้เป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;x&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;Ae&lt;/b&gt; = λ&lt;b&gt;x&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;e&lt;br /&gt;&lt;/b&gt;&lt;b&gt;x&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;Ae&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่ง ถ้าใส่ transpose เข้าไป จะกลายเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;x&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แต่เนื่องจาก &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt; ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;e&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;Ax&lt;/b&gt; = &lt;b&gt;0&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แสดงว่า &lt;b&gt;Ax&lt;/b&gt; ตั้งฉากกับ &lt;b&gt;e&lt;/b&gt; ด้วย&lt;br /&gt;&lt;br /&gt;ส่วนการพิสูจน์ย้อนกลับว่า "ถ้า &lt;b&gt;Ax&lt;/b&gt;  ตั้งฉากกับ &lt;b&gt;e&lt;/b&gt; แล้ว &lt;b&gt;x&lt;/b&gt; ตั้งฉากกับ &lt;b&gt;e&lt;/b&gt; ด้วย" ก็ทำย้อนกลับได้ง่าย ๆ เหมือนกัน ... ไม่เขียนให้ดูแล้วนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;การสร้าง Orthonormal Basis จาก Eigenvector&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;จริง ๆ เราสามารถหาเซต S ของ eigenvector ที่ตั้งฉากกันและเป็น basis ที่สมบูรณ์ (span(S) = span(E)) ได้จากแนวคิดที่แล้ว โดยคิดว่า ถ้าเราหา eigenvector ได้แล้วตัวนึง เราก็ตัดเวกเตอร์ทั้งหมดที่ไม่ตั้งฉากกับ eigenvector ตัวนั้นทิ้งจากการพิจารณาได้ ดังนั้น eigenvector ตัวต่อ ๆ ไปที่หาได้ มันจะตั้งฉากกับตัวก่อนหน้าทั้งหมด&lt;br /&gt;&lt;br /&gt;ที่เอามาให้ดูต่อไปนี้ เป็นอีกวิธีนึงสำหรับพิสูจน์ การมีอยู่จริงของ orthonormal basis จาก eigenvector โดยใช้หลักการที่ว่า ถ้าเซต S ของ eigenvector ยังไม่เป็น basis ที่สมบูรณ์ (คือ span(S) ≠ span(E)) เราจะสามารถหา &lt;b&gt;e&lt;/b&gt; ∈ E - S ที่ตั้งฉากกับสมาชิกทุกตัวใน S ได้&lt;br /&gt;&lt;br /&gt;สมมติว่า &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; เป็น eigenvector สองตัวที่มี eigenvalue เป็น λ กับ μ ตามลำดับ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Au&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Av&lt;/b&gt; = μ&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เติมผลคูณภายในเข้าไปแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;Au&lt;/b&gt; = λ&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;Av&lt;/b&gt; = μ&lt;b&gt;u&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอาอันล่างมา transpose จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = μ&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เนื่องจาก &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt; ฝั่งซ้ายของสมการนี้ จะไปเท่ากับสมการข้างบน ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;λ&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = μ&lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งแปลว่า λ = μ หรือ &lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = 0&lt;br /&gt;&lt;br /&gt;&lt;i&gt;ถึงตรงนี้ บางคนอาจจะเห็นว่า มันคล้าย ๆ กับบทพิสูจน์เรื่องที่แล้วเลย ... ถูกแล้วหละ จริง ๆ มันคืออันเดียวกันเลย&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;ถ้า &lt;b&gt;v&lt;/b&gt;&lt;sup&gt;T&lt;/sup&gt;&lt;b&gt;u&lt;/b&gt; = 0 มันก็แปลว่า &lt;b&gt;u&lt;/b&gt; ตั้งฉากกับ &lt;b&gt;v&lt;/b&gt; อยู่แล้ว ... ส่วนอีกกรณีนึง ...&lt;br /&gt;&lt;br /&gt;&lt;u&gt;ถ้า λ = μ&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;เราพิสูจน์ไปแล้วว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;w&lt;/b&gt; = p&lt;b&gt;u&lt;/b&gt; + q&lt;b&gt;v&lt;/b&gt; จะเป็น eigenvector ด้วย&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่งถ้า &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; ไม่ขนานกัน เราจะสามารถหา &lt;b&gt;w&lt;/b&gt; ที่ตั้งฉากกับ &lt;b&gt;u&lt;/b&gt; ได้แน่ ๆ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113105728570708294?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113105728570708294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113105728570708294' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113105728570708294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113105728570708294'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues_28.html' title='Transformation Matrix: Eigenvalues &amp; Eigenvectors &quot;คุณสมบัติ&quot;'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113087497244988270</id><published>2005-10-27T02:55:00.000+07:00</published><updated>2005-11-02T03:15:59.876+07:00</updated><title type='text'>Transformation Matrix: Eigenvalues &amp; Eigenvectors "ตอนแรก"</title><content type='html'>ถ้าใครช่างสังเกตหน่อย จะเห็นว่า ผมเปลี่ยนชื่อหัวข้อไปนิดนึง จากที่วางแผนไว้ใน &lt;a href="http://www.geocities.com/tunaococ/"&gt;Tunoblog Summarized&lt;/a&gt; จาก ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;เดิม Transformation: Eigenvalues &amp; Eigenvectors&lt;br /&gt;เป็น Transformation &lt;b&gt;Matrix&lt;/b&gt;: Eigenvalues &amp;amp; Eigenvectors (คงมีหลายตอน)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ มันเป็นตั้งแต่ตอนที่แล้วแล้วแหละ (Transformation &lt;b&gt;Matrix&lt;/b&gt;: Orthonormal Transformations) แต่ก็ยังไม่ลบชื่อหัวข้อเดิมออก ... มันเป็นความจงใจหนะนะ คือ จะเขียนต่ออีก ... ตอนนี้ขอเข้าเรื่องก่อน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;นิยามของ Eigenvalue และ Eigenvector&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ขอบอกนิยามสำหรับกรณีเมตริกซ์จัตุรัสมิติจำกัดก่อนนะ กรณีที่ทั่วไปมากขึ้น จะพูดถึงในตอนถัด ๆ ไป&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;u&gt;Eigenvalues &amp; Right Eigenvectors&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;&lt;br /&gt;ให้ &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์จัตุรัส มิติ n × n&lt;br /&gt;และให้ &lt;b&gt;u&lt;/b&gt; เป็นเวกเตอร์ n มิติ (คือ เมตริกซ์แนวตั้ง มิติ n × 1 หนะ)&lt;br /&gt;ถ้าสามารถหาจำนวนจริง λ ที่ไม่ใช่ 0 ที่ทำให้&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;u&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt; ได้&lt;br /&gt;จะเรียก &lt;b&gt;u&lt;/b&gt; ว่าเป็น &lt;b&gt;Eigenvector&lt;/b&gt; &lt;b&gt;ทางขวา&lt;/b&gt; ของ &lt;b&gt;A&lt;/b&gt;&lt;br /&gt;และจะเรียก λ ว่าเป็น &lt;b&gt;Eigenvalue&lt;/b&gt; ของ &lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt; &lt;/blockquote&gt;&lt;br /&gt;ที่เอานิยามแบบนี้มาให้ดู เพราะมันเป็นความนิยมหนะ จริง ๆ แล้ว ถ้าเราให้ &lt;b&gt;u&lt;/b&gt; เป็นเมตริกซ์แนวนอน มิติ 1 × n และเปลี่ยนเงื่อนไขของสมการเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;&lt;b&gt;A&lt;/b&gt; = λ&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็จะเรียก &lt;b&gt;u&lt;/b&gt; ว่าเป็น &lt;b&gt;Eigenvector ทางซ้าย&lt;/b&gt; ของ &lt;b&gt;A&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เรื่องมหัศจรรย์มีอยู่ว่า ... λ มันจะเท่ากันทั้งสองกรณีน่ะสิ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;เมตริกซ์ของ Eigenvalue และ เมตริกซ์ของ Eigenvector&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ตอนนี้ ขอเรียก eigenvector ทางซ้ายว่า eigenvector เฉย ๆ นะ จะได้สั้น ๆ และตรงตามความนิยม&lt;br /&gt;&lt;br /&gt;"โดยทั่วไป" แล้ว เมตริกซ์ n × n จะมี eigenvector อยู่ n ตัว ดังนั้น eigenvalue ก็จะมีอยู่ n ตัวด้วย&lt;br /&gt;&lt;br /&gt;สมมติว่า n = 3 ก่อนละกันนะ แล้วก็ให้ λ&lt;sub&gt;1&lt;/sub&gt; λ&lt;sub&gt;2&lt;/sub&gt; λ&lt;sub&gt;3&lt;/sub&gt; เป็น eigenvalue ทั้งสามของ เมตริกซ์ &lt;b&gt;A&lt;/b&gt; ที่มีมิติ 3 × 3&lt;br /&gt;&lt;br /&gt;เราจะเขียนเมตริกซ์ของ eigenvalue เป็นเมตริกซ์ทแยงมุมดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;D&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; = (λ&lt;sub&gt;1&lt;/sub&gt;, 0, 0)&lt;br /&gt;&lt;b&gt;D&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; = (0, λ&lt;sub&gt;2&lt;/sub&gt;, 0)&lt;br /&gt;&lt;b&gt;D&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; = (0, 0, λ&lt;sub&gt;3&lt;/sub&gt;)&lt;br /&gt;&lt;b&gt;D&lt;/b&gt; = [ &lt;b&gt;D&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;D&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;D&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เพื่อให้เขียนง่าย ๆ หน่อย ขอย่อเมตริกซ์ทแยงมุมเป็นแบบนี้นะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;D&lt;/b&gt; = [ λ&lt;sub&gt;1&lt;/sub&gt; \ λ&lt;sub&gt;2&lt;/sub&gt; \ λ&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วนเมตริกซ์ของ eigenvector ก็แค่เอา eigenvector มาต่อกัน มันก็จะได้เมตริกซ์จัตุรัสเอง ... หน้าตาแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;P&lt;/b&gt; = [ &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Eigen Decomposition&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;แล้วไอ้เมตริกซ์เมื่อกี๊ มันเอาไว้ทำอะไรอะ?&lt;br /&gt;&lt;br /&gt;เดี๋ยวจะเอาให้ดู ว่าประโยชน์มันคืออะไร&lt;br /&gt;&lt;br /&gt;สมมติก่อนว่า &lt;b&gt;A&lt;/b&gt; เป็นเมตริกซ์ที่มีมิติเป็น 3 × 3 ซึ่งมี eigenvector 3 เส้น คือ &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; และ eigenvector ทั้งสาม จับคู่กับ eigenvalue 3 ค่า คือ λ&lt;sub&gt;1&lt;/sub&gt; λ&lt;sub&gt;2&lt;/sub&gt; λ&lt;sub&gt;3&lt;/sub&gt; ตามลำดับ ... จากนั้น กำหนดให้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;D&lt;/b&gt; = [ λ&lt;sub&gt;1&lt;/sub&gt; \ λ&lt;sub&gt;2&lt;/sub&gt; \ λ&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;b&gt;P&lt;/b&gt; = [ &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะรู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;P&lt;/b&gt; = &lt;b&gt;A&lt;/b&gt;[ &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;P&lt;/b&gt; = [ &lt;b&gt;A&lt;/b&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;A&lt;/b&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;P&lt;/b&gt; = [ λ&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : λ&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : λ&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;และ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt; = [ &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : &lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ][ λ&lt;sub&gt;1&lt;/sub&gt; \ λ&lt;sub&gt;2&lt;/sub&gt; \ λ&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt; = [ λ&lt;sub&gt;1&lt;/sub&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; : λ&lt;sub&gt;2&lt;/sub&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; : λ&lt;sub&gt;3&lt;/sub&gt;&lt;b&gt;u&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;b&gt;P&lt;/b&gt; = &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;br /&gt;&lt;b&gt;A&lt;/b&gt; = &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;การยกกำลังเมตริกซ์ด้วย Eigen Decomposition&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;อันนี้เป็น หนึ่งในการใช้งานที่สุดแสนจะคลาสสิก และง่ายด้วย ... ความรู้ที่ต้องใช้ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;[ λ&lt;sub&gt;1&lt;/sub&gt; \ λ&lt;sub&gt;2&lt;/sub&gt; \ λ&lt;sub&gt;3&lt;/sub&gt; ]&lt;sup&gt;n&lt;/sup&gt; = [ λ&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;n&lt;/sup&gt; \ λ&lt;sub&gt;2&lt;/sub&gt;&lt;sup&gt;n&lt;/sup&gt; \ λ&lt;sub&gt;3&lt;/sub&gt;&lt;sup&gt;n&lt;/sup&gt; ] เมื่อ n เป็นจำนวนเต็มใด ๆ&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ สมมติว่าเราอยากหา &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; เราก็แตกด้วย Eigen Decomposition ก่อน แล้วทำแบบนี้&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt; &lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt; = &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt; = &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;3&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; &lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;...&lt;br /&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เนื่องจาก &lt;b&gt;D&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; มันหาได้ง่าย ๆ จากสมการข้างบน ดังนั้น วิธีนี้จึงมีประสิทธิภาพสูงกว่าการคูณมันไปเรื่อย ๆ ตรง ๆ เห็น ๆ&lt;br /&gt;&lt;br /&gt;นอกจากนี้ อินเวอร์สของ &lt;b&gt;A&lt;/b&gt; ก็หาได้ด้วยวิธีเดียวกัน ... แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;I&lt;/b&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; = &lt;b&gt;D&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;D&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; = &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;br /&gt;&lt;b&gt;P&lt;/b&gt;&lt;b&gt;D&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; = &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;-n&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น สมการ &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt; = &lt;b&gt;PD&lt;/b&gt;&lt;sup&gt;n&lt;/sup&gt;&lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; ก็เลยใช้ได้กับจำนวนเต็ม n ใด ๆ ไม่จำกัดเฉพาะจำนวนเต็มบวก (เป็น 0 ก็ได้นะ)&lt;br /&gt;&lt;br /&gt;คราวนี้ พอเราหาเมตริกซ์ยกกำลังได้สะดวก ๆ แล้ว พหุนามของเมตริกซ์ก็เขียนได้ง่าย ๆ เหมือนกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;สมมติว่า f(&lt;b&gt;A&lt;/b&gt;) เป็นพหุนามของ &lt;b&gt;A&lt;/b&gt;&lt;br /&gt;ถ้าเราสามารถแยก &lt;b&gt;A&lt;/b&gt; = &lt;b&gt;PDP&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; ได้ เราจะรู้ว่า&lt;br /&gt;f(&lt;b&gt;A&lt;/b&gt;) = &lt;b&gt;P&lt;/b&gt; f(&lt;b&gt;D&lt;/b&gt;) &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;ซึ่งทำให้ f(&lt;b&gt;A&lt;/b&gt;) = &lt;b&gt;P&lt;/b&gt; [ f(λ&lt;sub&gt;1&lt;/sub&gt;) \ f(λ&lt;sub&gt;2&lt;/sub&gt;) \ f(λ&lt;sub&gt;3&lt;/sub&gt;) \ ... \ f(λ&lt;sub&gt;n&lt;/sub&gt;) ] &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;พอรู้หยั่งงี้ ฟังก์ชันสุดฮิต e&lt;sup&gt;x&lt;/sup&gt; ของเรา ก็ใช้กับเมตริกซ์ได้แล้ว เพราะว่า เราสามารถเขียนให้อยู่ในรูปของพหุนามได้ ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;e&lt;sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;/sup&gt; = 1 + &lt;b&gt;A&lt;/b&gt; + &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;2&lt;/sup&gt;/2! + &lt;b&gt;A&lt;/b&gt;&lt;sup&gt;3&lt;/sup&gt;/3! + ...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น ถ้าเราแทนค่า e&lt;sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;/sup&gt; = f(&lt;b&gt;A&lt;/b&gt;) ในความสัมพันธ์ f(&lt;b&gt;A&lt;/b&gt;) = &lt;b&gt;P&lt;/b&gt; [ f(λ&lt;sub&gt;1&lt;/sub&gt;) \ f(λ&lt;sub&gt;2&lt;/sub&gt;) \ f(λ&lt;sub&gt;3&lt;/sub&gt;) \ ... \ f(λ&lt;sub&gt;n&lt;/sub&gt;) ] &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt; จะได้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;e&lt;sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;/sup&gt; = &lt;b&gt;P&lt;/b&gt; [ e&lt;sup&gt;λ&lt;sub&gt;1&lt;/sub&gt;&lt;/sup&gt; \ e&lt;sup&gt;λ&lt;sub&gt;2&lt;/sub&gt;&lt;/sup&gt; \ e&lt;sup&gt;λ&lt;sub&gt;3&lt;/sub&gt;&lt;/sup&gt; \ ... \ e&lt;sup&gt;λ&lt;sub&gt;n&lt;/sub&gt;&lt;/sup&gt; ] &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;และที่ยิ่งไปกว่านี้ ... หน้าตาแบบนี้ ทำไมมันจะใช้ได้แค่ e หละ? ... ขยายต่อสิ ให้ฐานมันเป็นจำนวนจริงอะไรก็ได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;a&lt;sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;/sup&gt; = &lt;b&gt;P&lt;/b&gt; [ a&lt;sup&gt;λ&lt;sub&gt;1&lt;/sub&gt;&lt;/sup&gt; \ a&lt;sup&gt;λ&lt;sub&gt;2&lt;/sub&gt;&lt;/sup&gt; \ a&lt;sup&gt;λ&lt;sub&gt;3&lt;/sub&gt;&lt;/sup&gt; \ ... \ a&lt;sup&gt;λ&lt;sub&gt;n&lt;/sub&gt;&lt;/sup&gt; ] &lt;b&gt;P&lt;/b&gt;&lt;sup&gt;-1&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เห็นมั้ย ว่าใช้เมตริกซ์เป็นเลขชี้กำลังได้ละ :D ผลลัพธ์เป็นเมตริกซ์ด้วย&lt;br /&gt;&lt;br /&gt;จริง ๆ เราจะนิยามสัญลักษณ์ &lt;b&gt;B&lt;/b&gt;&lt;sup&gt;&lt;b&gt;A&lt;/b&gt;&lt;/sup&gt; เมื่อ &lt;b&gt;A&lt;/b&gt; กับ &lt;b&gt;B&lt;/b&gt; เป็นเมตริกซ์ อีกก็ได้นะ ก็แค่เอา &lt;b&gt;B&lt;/b&gt; ไปแทนที่ a ในสมการข้างบนนี่ ... แต่ ... มันจะดูแปลก ๆ อ๊ะป่าว ??? ... เมตริกซ์ที่มีข้อมูลในช่องเป็นเมตริกซ์ ...&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;และแล้วก็จบตอนแรกของเรื่อง eigenvalue กับ eigenvector ... ยังมีอีกเยอะเลยหละ แต่ค่อย ๆ เอามาให้ดูละกัน จะได้อ่านกันไหว&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113087497244988270?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113087497244988270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113087497244988270' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113087497244988270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113087497244988270'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-matrix-eigenvalues.html' title='Transformation Matrix: Eigenvalues &amp; Eigenvectors &quot;ตอนแรก&quot;'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113086972643600601</id><published>2005-10-26T00:15:00.000+07:00</published><updated>2005-11-02T01:28:46.520+07:00</updated><title type='text'>Transformation Matrix: Orthonormal Transformations</title><content type='html'>พูดเรื่องคำศัพท์นิดนึงก่อน มาดูว่า คำว่า "&lt;b&gt;Normal&lt;/b&gt;" เนี่ย มันมีความหมายประมาณไหน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;blockquote&gt;สมมติว่าเรามีเวกเตอร์ &lt;b&gt;v&lt;/b&gt; อยู่ ขนาดของมัน เรียกว่า &lt;b&gt;Norm&lt;/b&gt; เขียนแทนด้วย || &lt;b&gt;v&lt;/b&gt; || (หรือ | &lt;b&gt;v&lt;/b&gt; |)&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Unit Vector&lt;/b&gt; คือ เวกเตอร์ที่มีขนาดเป็น 1 ภาษาไทยเรียกตรง ๆ ว่า &lt;b&gt;เวกเตอร์หนึ่งหน่วย&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Normalization&lt;/b&gt; คือ การหารเวกเตอร์ด้วยขนาดของมันเอง (เช่น &lt;b&gt;v&lt;/b&gt; / ||&lt;b&gt; v &lt;/b&gt;||) ผลลัพธ์เป็น unit vector ที่มีทิศทางเดิม&lt;/blockquote&gt; &lt;/div&gt;&lt;br /&gt;อีกที่นึงที่เจอคำว่า "&lt;b&gt;Normal&lt;/b&gt;" บ่อย ๆ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;blockquote&gt;ใน 2 มิติ &lt;b&gt;Normal Vector&lt;/b&gt; ของเส้นตรง คือ เวกเตอร์ที่มีทิศตั้งฉากกับแนวเส้นตรงนั้น&lt;br /&gt;&lt;br /&gt;ใน 3 มิติ &lt;b&gt;Normal Vector&lt;/b&gt; ของระนาบ คือ เวกเตอร์ที่มีทิศตั้งฉากกับระนาบนั้น&lt;/blockquote&gt; &lt;/div&gt;&lt;br /&gt;รู้สึกอันนี้ คำว่า normal มันจะไม่ค่อยเกี่ยวกันเท่าไหร่แฮะ&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;ถ้า &lt;b&gt;r&lt;/b&gt;(s) เป็นฟังก์ชันจาก เซตย่อยของจำนวนจริง ไปยังเซตย่อยของปริภูมิใด ๆ และมีอนุพันธ์อันดับสอง&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;T&lt;/b&gt;(s) = &lt;b&gt;r&lt;/b&gt;'(s) / || &lt;b&gt;r&lt;/b&gt;'(s) || เรียกว่า Tangent Vector&lt;br /&gt;&lt;b&gt;N&lt;/b&gt;(s) = &lt;b&gt;T&lt;/b&gt;'(s) / || &lt;b&gt;T&lt;/b&gt;'(s) || เรียกว่า Normal Vector&lt;br /&gt;&lt;b&gt;B&lt;/b&gt;(s) = &lt;b&gt;T&lt;/b&gt;(s) × &lt;b&gt;N&lt;/b&gt;(s) เรียกว่า Binormal Vector&lt;/div&gt; &lt;/blockquote&gt;&lt;br /&gt;อันนี้เกี่ยวกับอันที่แล้ว แต่ไม่ค่อยเกี่ยวกับอันแรกนะ&lt;br /&gt;&lt;br /&gt;แล้วบอกทำไมมากมาย??? ... นั่นสิ ... ช่างมันดีกว่า เข้าเรื่องเลยละกัน ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Orthogonal Transformation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คำว่า &lt;b&gt;Orthogonal&lt;/b&gt; มันก็แปลว่า &lt;b&gt;ตั้งฉาก&lt;/b&gt; อยู่แล้ว ดังนั้น &lt;b&gt;Orthogonal Transformation&lt;/b&gt; ก็คือ &lt;b&gt;การแปลงตั้งฉาก&lt;/b&gt; ... ???&lt;br /&gt;&lt;br /&gt;เอาตัวอย่างมาดูเลยดีกว่า ท่าจะง่ายกว่า&lt;br /&gt;&lt;br /&gt;สมมติว่า เดิมเรามีจุด (x, y) = x&lt;b&gt;i&lt;/b&gt; + y&lt;b&gt;j&lt;/b&gt; อยู่ แล้วเราอยากรู้ว่า ถ้าเปลี่ยนไปเป็นพิกัด a&lt;b&gt;u&lt;/b&gt; + b&lt;b&gt;v&lt;/b&gt; เนี่ย จะได้ค่า a กับ b เป็นเท่าไหร่ เราจะทำยังไง? (เรารู้ค่า &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; ในพิกัด &lt;b&gt;i&lt;/b&gt;-&lt;b&gt;j&lt;/b&gt; อยู่แล้วนะ)&lt;br /&gt;&lt;br /&gt;เอารูปเก่ามาดู (จาก &lt;a href="http://tunococ.blogspot.com/2005/08/determinant-linear-combination.html"&gt;ตามหาความหมายของ Determinant: Linear Combination&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://photos1.blogger.com/blogger/4334/1398/400/Combination1.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;วิธีที่เรารู้ ๆ กัน ก็คือใช้กฎของเครเมอร์ หาคำตอบของระบบสมการเชิงเส้น 2 ตัวแปร ก็จะได้ค่า a กับ b ออกมา ดังนี้ (เขียนไว้แล้วใน &lt;a href="http://tunococ.blogspot.com/2005/08/determinant-kramers-rule_21.html"&gt;ตามหาความหมายของ Determinant: Kramer's Rule&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;w&lt;/b&gt; = (x, y)&lt;br /&gt;a = | &lt;b&gt;w&lt;/b&gt; : &lt;b&gt;v&lt;/b&gt; | / | &lt;b&gt;u&lt;/b&gt; : &lt;b&gt;v&lt;/b&gt; |&lt;br /&gt;b = | &lt;b&gt;u&lt;/b&gt; : &lt;b&gt;w&lt;/b&gt; | / | &lt;b&gt;u&lt;/b&gt; : &lt;b&gt;v&lt;/b&gt; |&lt;br /&gt;(ถ้าดูเครื่องหมายไม่รู้เรื่อง กลับไปดู &lt;a href="http://tunococ.blogspot.com/2005/08/determinant_18.html"&gt;ตามหาความหมายของ Determinant: เวกเตอร์ตั้งฉาก&lt;/a&gt; ก่อนนะ)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;ถ้า &lt;b&gt;u&lt;/b&gt; กับ &lt;b&gt;v&lt;/b&gt; ตั้งฉากกันหละ?&lt;/u&gt; จะมีวิธีหา a กับ b ได้ง่ายกว่านี้รึเปล่า?&lt;br /&gt;&lt;br /&gt;ลองดูใหม่นะ เรารู้ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;w&lt;/b&gt; = a&lt;b&gt;u&lt;/b&gt; + b&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอา &lt;b&gt;u&lt;/b&gt; ไปคูณ (ภายใน) ทั้งสองข้าง ก็จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;w&lt;/b&gt; = &lt;b&gt;u&lt;/b&gt;⋅(a&lt;b&gt;u&lt;/b&gt; + b&lt;b&gt;v&lt;/b&gt;)&lt;br /&gt;&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;w&lt;/b&gt;&lt;b&gt;&lt;/b&gt; = a&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;u&lt;/b&gt; + b&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จากที่เราสมมติให้ &lt;b&gt;u&lt;/b&gt; ตั้งฉากกับ &lt;b&gt;v&lt;/b&gt; ดังนั้น &lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;v&lt;/b&gt; = 0 สมการก็จะกลายเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;w&lt;/b&gt; = a&lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;u&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;a = &lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;w&lt;/b&gt; / &lt;b&gt;u&lt;/b&gt;⋅&lt;b&gt;u&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอ้อ มันดูง่ายกว่ากฎของเครเมอร์นิดนึงนะ (ตอนนี้อาจจะยังไม่เห็นชัด แต่ว่า พอมันมีหลาย ๆ มิติหนะ จะเห็นชัดมาก)&lt;br /&gt;&lt;br /&gt;และแน่นอน ค่า b ก็หาได้ด้วยวิธีเดียวกัน แต่เปลี่ยนจากตอนที่เอา &lt;b&gt;u&lt;/b&gt; ไปคูณ (ภายใน) ให้เป็น &lt;b&gt;v&lt;/b&gt; แทน สูตรของ b ก็จะเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;b = &lt;b&gt;v&lt;/b&gt;⋅&lt;b&gt;w&lt;/b&gt; / &lt;b&gt;v&lt;/b&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ แล้ว เราขยายข้อสังเกตของเราได้นะ ... สมมติว่า เวกเตอร์แกนใหม่ของเรา มีอยู่ n ตัว คือ &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;1&lt;/sub&gt; &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;2&lt;/sub&gt; &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;3&lt;/sub&gt; ... &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; แล้วเรามีจุด &lt;b&gt;w&lt;/b&gt; = (x&lt;sub&gt;1&lt;/sub&gt;, x&lt;sub&gt;2&lt;/sub&gt;, x&lt;sub&gt;3&lt;/sub&gt;, ..., x&lt;sub&gt;n&lt;/sub&gt;) ใน n มิติอยู่ (ต้องรู้ค่าของเวกเตอร์ทุกตัว ในระบบแกนเดียวกันนะ ไม่งั้นจะหาผลคูณภายในไม่ได้) เราอยากรู้ว่า ในระบบพิกัดของแกนใหม่ ซึ่งระบุด้วย &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; เนี่ย ค่า w&lt;sub&gt;i&lt;/sub&gt; แต่ละตัวจะหาได้ยังไง? ... กำหนดให้&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;w&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; w&lt;sub&gt;i&lt;/sub&gt;&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าหากทุก ๆ &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ตั้งฉากกันหมด เราจะสามารถหาค่า w&lt;sub&gt;i&lt;/sub&gt; ทุกตัวได้ด้วยสมการ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;w&lt;sub&gt;i&lt;/sub&gt; = &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;w&lt;/b&gt; / &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หรือถ้าเขียนรวม ๆ ก็จะเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;w&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; (&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;w&lt;/b&gt; / &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;)&lt;b&gt; v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ซึ่ง ... คราวนี้เห็นชัดเลยหละ ว่ามันง่ายกว่ากฎของเครเมอร์&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Orthonormal Transformation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คราวนี้ ถ้าเกิดเรา normalize เวกเตอร์แกนใหม่ทุกตัว ให้เป็น unit vector ก่อนหละ ... มันจะมีอะไรง่ายขึ้นอีก?&lt;br /&gt;&lt;br /&gt;คำถามนี้ ตอบง่ายแฮะ ... ก็ดูจากสูตรเมื่อกี๊&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;w&lt;sub&gt;i&lt;/sub&gt; = &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;w&lt;/b&gt; / &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้า &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ทุกตัว มีขนาดเป็น 1 ... &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt; ก็ต้องเท่ากับ 1 ... ดังนั้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;w&lt;sub&gt;i&lt;/sub&gt; = &lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;w&lt;/b&gt;&lt;br /&gt;&lt;b&gt;w&lt;/b&gt; = Σ&lt;sub&gt;1≤i≤n&lt;/sub&gt; (&lt;b&gt;v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;⋅&lt;b&gt;w&lt;/b&gt;)&lt;b&gt; v&lt;/b&gt;&lt;sub&gt;i&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Fine ...&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113086972643600601?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113086972643600601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113086972643600601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113086972643600601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113086972643600601'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-matrix-orthonormal.html' title='Transformation Matrix: Orthonormal Transformations'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113068675676658266</id><published>2005-10-25T20:58:00.000+07:00</published><updated>2005-10-30T22:41:54.893+07:00</updated><title type='text'>ทฤษฎีเซต: Paradox ใน Naive Set Theory</title><content type='html'>ระบบเซตที่เราใช้ ๆ กันเนี่ย เราเรียกกันว่า &lt;b&gt;&lt;u&gt;Naive Set Theory&lt;/u&gt;&lt;/b&gt; เพราะมันมีบางอย่างพิเรนทร์อยู่ คิดว่า บางคนคงจะเคยได้ยินชื่อ &lt;b&gt;&lt;u&gt;Russell's Paradox&lt;/u&gt;&lt;/b&gt; กันมาบ้างแล้ว ... สำหรับใครที่ไม่คุ้น ก็ลองดูนี่ละกัน&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Russell's Paradox&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;ถ้าให้เซต M = { A | A ∉ A } แล้ว M ∈ M หรือ M ∉ M ?&lt;br /&gt;&lt;/blockquote&gt;ที่มาของความวุ่นวายนี้ อาจจะเกิดขึ้นเพราะ &lt;b&gt;เซตไม่มีนิยาม&lt;/b&gt; ก็ได้&lt;br /&gt;&lt;br /&gt;ครั้งนี้ไม่ได้จะเอามาให้ดูแค่ Russell's Paradox หรอกนะ แต่จะบอกว่า มี paradox อีกหลายอัน ที่เกิดจากวลีว่า "&lt;b&gt;เซตของ XXX ทั้งหมด&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;ทฤษฎีบทที่สำคัญของ Cantor อันนึง กล่าวไว้ว่า&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Cantor's Theorem&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;สำหรับเซต A ใด ๆ | A | &amp;lt; | 2&lt;sup&gt;A&lt;/sup&gt;|&lt;/blockquote&gt;&lt;i&gt;&lt;u&gt;เผื่อลืม&lt;/u&gt;: 2&lt;sup&gt;A&lt;/sup&gt; คือ power set ของ A นะ&lt;br /&gt;&lt;/i&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;(นิยามคือ 2&lt;sup&gt;A&lt;/sup&gt; = { x | x ⊆ A })&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cantor%27s_Theorem"&gt;วิธีพิสูจน์ ก็ดูได้ที่นี่นะ&lt;/a&gt; (มันต้องอาศัยนิยามของ การเปรียบเทียบ cardinal number ด้วย แต่ถือว่า เข้าใจด้วย sense ละกันนะ)&lt;br /&gt;&lt;br /&gt;คราวนี้ มาดู paradox อีกอันนึงบ้าง&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Set of All Sets (Cantor's Paradox)&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ให้ A เป็น &lt;b&gt;เซตของเซตทั้งหมด&lt;/b&gt;&lt;br /&gt;จากนิยามของ A และ 2&lt;sup&gt;A&lt;/sup&gt; ⇒ 2&lt;sup&gt;A&lt;/sup&gt; ⊆ A ⇒ | A | ≥ | 2&lt;sup&gt;A&lt;/sup&gt; |&lt;br /&gt;... ขัดแย้งกับ Cantor's Theorem&lt;br /&gt;&lt;/blockquote&gt;อีกอัน...&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Set of All Cardinal Numbers&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ให้ C เป็น &lt;b&gt;เซตของ cardinal number ทั้งหมด&lt;/b&gt;&lt;br /&gt;สำหรับแต่ละ i ∈ C ให้ A&lt;sub&gt;i&lt;/sub&gt; เป็นเซตใด ๆ ที่ | A&lt;sub&gt;i&lt;/sub&gt; | = i (เลือกมาอันนึง)&lt;br /&gt;&lt;br /&gt;ให้ S = ∪&lt;sub&gt;i∈C&lt;/sub&gt; A&lt;sub&gt;i&lt;/sub&gt; เราจะรู้ทันทีว่า A&lt;sub&gt;i&lt;/sub&gt; ⊆ S สำหรับทุก i ∈ C&lt;br /&gt;&lt;br /&gt;ที่ i = | 2&lt;sup&gt;S&lt;/sup&gt; |&lt;br /&gt;จากนิยามของ A&lt;sub&gt;i&lt;/sub&gt; จะรู้ว่า | A&lt;sub&gt;i&lt;/sub&gt; | = i = | 2&lt;sup&gt;S&lt;/sup&gt; |&lt;br /&gt;&lt;br /&gt;แต่เนื่องจาก A&lt;sub&gt;i&lt;/sub&gt; ⊆ S เราจะได้ว่า | A&lt;sub&gt;i&lt;/sub&gt; | ≤ | S |&lt;br /&gt;&lt;br /&gt;ข้อสรุปก็คือ | 2&lt;sup&gt;S&lt;/sup&gt; | ≤ | S | ... ขัดแย้งกับ Cantor's Theorem&lt;br /&gt;&lt;/blockquote&gt;แล้วก็ อีกอันนึง&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;u&gt;Set of All Sets Equivalent to a Set&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ให้ A เป็นเซตใด ๆ&lt;br /&gt;และ B เป็น &lt;b&gt;เซตของเซตทั้งหมดที่มี cardinal number เท่ากับ | A |&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สำหรับทุก i ใด ๆ&lt;sup&gt;&lt;/sup&gt; เราจะรู้ว่า | A | = | A × { i } |&lt;br /&gt;ซึ่งทำให้ A × { i } ∈ B (จากนิยามของ B)&lt;br /&gt;หรือก็คือ { A × { i } }&lt;sub&gt;i∈C&lt;/sub&gt; ⊆ B สำหรับเซต C ใด ๆ&lt;br /&gt;นอกจากนี้ เรายังรู้แน่ ๆ ว่า | { A × { i } }&lt;sub&gt;i∈C&lt;/sub&gt; | = | C | ด้วย&lt;br /&gt;&lt;br /&gt;พอเราให้ C = 2&lt;sup&gt;B&lt;/sup&gt; สิ่งที่เกิดขึ้นก็คือ&lt;br /&gt;&lt;ol&gt;     &lt;li&gt;{ A × { i } }&lt;sub&gt;i∈C&lt;/sub&gt; ⊆ B ⇒ | { A × { i } }&lt;sub&gt;i∈C&lt;/sub&gt; | ≤ | B |&lt;/li&gt;     &lt;li&gt;| { A × { i } }&lt;sub&gt;i∈C&lt;/sub&gt; | = | C | = | 2&lt;sup&gt;B&lt;/sup&gt; |&lt;/li&gt;   &lt;/ol&gt; ก็เลยสรุปได้ว่า | 2&lt;sup&gt;B&lt;/sup&gt; | ≤ | B | ... ขัดแย้งกับ Cantor's Theorem&lt;br /&gt;&lt;/blockquote&gt;แล้ว paradox พวกนี้จะแก้ยังไงหละ? ... ไว้มาต่อกันคราวหน้านะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113068675676658266?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113068675676658266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113068675676658266' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113068675676658266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113068675676658266'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/paradox-naive-set-theory.html' title='ทฤษฎีเซต: Paradox ใน Naive Set Theory'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113050335865173031</id><published>2005-10-24T19:39:00.000+07:00</published><updated>2005-10-28T19:42:41.343+07:00</updated><title type='text'>อัดมาให้ฟัง - Chopin: Nocturne in C Minor Op. 48 No. 1</title><content type='html'>ตามชื่อเลยละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.cp.eng.chula.ac.th/%7Eu44pvn/records/Nocturne-Take1.rar"&gt;Chopin: Nocturne in C Minor Op. 48 No. 1&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113050335865173031?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113050335865173031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113050335865173031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113050335865173031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113050335865173031'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/chopin-nocturne-in-c-minor-op-48-no-1.html' title='อัดมาให้ฟัง - Chopin: Nocturne in C Minor Op. 48 No. 1'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113050298197694760</id><published>2005-10-23T19:27:00.000+07:00</published><updated>2005-10-28T19:36:21.996+07:00</updated><title type='text'>อัดมาให้ฟัง - Chopin: Polonaise in Ab Major Op. 53</title><content type='html'>จริง ๆ วันนี้วันที่ 28 น่ะนะ (ขอโกงวันที่หน่อย) เป็นวันแข่งเปียโน แล้วก็...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;ตกรอบแรก T_T&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;จริง ๆ รู้ตัวตั้งแต่ยังอยู่บนเวทีเลย ตอนที่เล่นไปแล้ว 2 เพลง เหลืออีก 2 เพลงอะ รู้แล้วว่าจะเล่นต่อไม่ได้ ... มือมันเย็นเฉียบ แข็งโด๊ก ไม่ขยับเลย T_T&lt;br /&gt;&lt;br /&gt;แต่ช่างเถอะ อันนี้ เอามาให้ฟังกันเล่น ๆ นะ เป็นเพลงนึงที่เล่นวันนี้ (วันนี้เล่นไป 4 เพลง เพลงนี้เป็นเพลงสุดท้ายที่เล่น)&lt;br /&gt;&lt;br /&gt;ถึงที่อัดมาให้ฟังเนี่ย จะยังไม่ค่อยดี แต่ดีกว่าที่ไปเล่นบนเวทีหลายขุมเลยหละ T_T สถานการณ์การแสดงจริงเนี่ย มันทำให้ฝีมือลดลงได้ เกิน 50% เลยหละ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.cp.eng.chula.ac.th/%7Eu44pvn/records/Polonaise-Take1.rar"&gt;Chopin: Polonaise in A&lt;sub&gt;b&lt;/sub&gt; Major Op. 53&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113050298197694760?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113050298197694760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113050298197694760' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113050298197694760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113050298197694760'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/chopin-polonaise-in-ab-major-op-53.html' title='อัดมาให้ฟัง - Chopin: Polonaise in Ab Major Op. 53'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113024123571276285</id><published>2005-10-22T18:42:00.000+07:00</published><updated>2005-10-28T19:43:42.013+07:00</updated><title type='text'>อัดมาให้ฟัง - Chopin: Etude Op. 10 No. 10 (Eb Major)</title><content type='html'>กลัว blog ว่างไป ก็เลยเอาเพลงที่เล่นอัดไว้ตอนซ้อม มาให้ฟังกัน&lt;br /&gt;&lt;br /&gt;ต้องขอบอกไว้ก่อนนะ ว่า&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;ยังเล่นไม่ดีเลย&lt;/li&gt;   &lt;li&gt;ใช้เครื่อง notebook อัดเสียง&lt;/li&gt; &lt;/ol&gt; ดังนั้น ทั้งคุณภาพเสียง และคุณภาพการเล่น จะอยู่ในเกณฑ์ที่ ค่อนข้างแย่ :P&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;แล้วดันเอามาให้ฟังอีก ??!!&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอาหนะ ... กลัว blog มันว่างไง :P&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.cp.eng.chula.ac.th/%7Eu44pvn/records/Etude-Take1.rar"&gt;Chopin: Etude Op. 10 No. 10 (E&lt;sup&gt;b&lt;/sup&gt; Major)&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;เสียงมันเบาด้วยอะ เปิดลำโพงดัง ๆ นะ เวลาฟัง&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113024123571276285?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113024123571276285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113024123571276285' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024123571276285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024123571276285'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/chopin-etude-op-10-no-10-eb-major.html' title='อัดมาให้ฟัง - Chopin: Etude Op. 10 No. 10 (Eb Major)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113024052474023142</id><published>2005-10-21T18:35:00.000+07:00</published><updated>2005-10-25T18:42:04.740+07:00</updated><title type='text'>เอามาให้ฟัง - Scherzo in D Major</title><content type='html'>เพลงนี้เป็นเพลงที่เคยแต่งไว้ตอนอยู่ ม.4 หนะ (ก็ 7 ปีได้แล้วมั้ง) ไปขุดสมุดเขียนโน้ตเพลงเก่า ๆ แล้วเจอ ก็เลยเอามาให้ดูให้ฟังกัน&lt;br /&gt;&lt;br /&gt;(รูปแบบเพลง Scherzo มาจาก Minuet ซึ่ง มีจังหวะเป็น 3/4 และมีท่อน Trio อยู่ตรงกลาง)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.geocities.com/tunaococ/tunoblog/songs/ScherzoInDMajor.MID"&gt;ฟัง Scherzo in D Major (.mid)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/tunaococ/tunoblog/songs/ScherzoInDMajor.pdf"&gt;ดูโน้ต Scherzo in D Major (.pdf)&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ไว้มีเวลา จะเอาเพลงอื่น ๆ ที่เคยแต่งไว้ (และที่แต่งใหม่) มาลงให้ดูให้ฟังกันอีกนะ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113024052474023142?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113024052474023142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113024052474023142' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024052474023142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024052474023142'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/scherzo-in-d-major.html' title='เอามาให้ฟัง - Scherzo in D Major'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113024012168331202</id><published>2005-10-20T18:21:00.000+07:00</published><updated>2005-10-25T18:35:21.696+07:00</updated><title type='text'>เอามาให้ฟัง - Short Piece in C Minor</title><content type='html'>เพลงนี้ เป็นเพลงสั้น ๆ (เด็ก ๆ หน่อย) มีความยาว 20 ห้องเอง&lt;br /&gt;&lt;br /&gt;มีโน้ตให้ดูด้วย เอาไปเป็นแบบฝึกหัดเปียโน ระดับพื้นฐานได้นะ :D (ไม่หวง)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.geocities.com/tunaococ/tunoblog/songs/ShortPieceInCMinor.MID"&gt;ฟัง Short Piece in C Minor (.mid)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/tunaococ/tunoblog/songs/ShortPieceInCMinor.pdf"&gt;ดูโน้ต Short Piece in C Minor (.pdf)&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อ้อ แล้วก็ อีกอย่าง ... ไม่รู้จะตั้งชื่อว่าไรดีอะ ... ขอความเห็นหน่อย&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113024012168331202?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113024012168331202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113024012168331202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024012168331202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113024012168331202'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/short-piece-in-c-minor.html' title='เอามาให้ฟัง - Short Piece in C Minor'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-113001313243448141</id><published>2005-10-19T23:28:00.000+07:00</published><updated>2005-10-23T03:32:12.520+07:00</updated><title type='text'>Synonym ของคำว่า "โกรธ"</title><content type='html'>adjective ที่แปลว่า &lt;b&gt;โกรธ โมโห&lt;/b&gt; ก็มีดังนี้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;angered (anger [v] = โกรธ | ทำให้โกรธ)&lt;/li&gt;   &lt;li&gt;angry (anger [n] = ความโมโห)&lt;/li&gt;   &lt;li&gt;en'raged (en'rage [v] = ทำให้โมโห)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;e'xasperated (e'xasperate [v] = รบกวน, ยั่วโมโห | ทำให้เลวร้าย) = หมดความอดทน&lt;/li&gt;   &lt;li&gt;furious (fury [n])&lt;/li&gt;   &lt;li&gt;in'furiated (in'furiate [v], furious)&lt;/li&gt;   &lt;li&gt;irate/ireful (ire [n] = ความโกรธ ที่อาจจะนำไปสู่ ความมุ่งร้าย)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;livid*&lt;/b&gt; = โกรธ&lt;u&gt;จัด ๆ&lt;/u&gt; | ผิวเปลี่ยนสี (เช่น ซีดเพราะป่วย หรือสีเข้มเพราะช้ำ) | ท่าทางน่ากลัว&lt;/li&gt;   &lt;li&gt;maddened (mad [adj], madden [v])&lt;/li&gt;&lt;li&gt;pro'voked (pro'voke [v] = ยั่วโมโห | กระตุ้นให้เกิด (เหตุการณ์) | เรียก)&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;raging (rage [n, v])&lt;/li&gt;   &lt;li&gt;tem'pestuous (tempest [n] = พายุ | ความปั่นป่วน) - คำนี้มักใช้กับปรากฏการณ์ธรรมชาติ แต่ก็ใช้กับคนได้เหมือนกัน&lt;/li&gt;   &lt;li&gt;&lt;b&gt;wild&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt; ต่อด้วย noun ที่แปลว่า &lt;b&gt;ความโกรธ ความโมโห&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;b&gt;anger&lt;/b&gt; → anger [v], angry&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;angriness (angry)&lt;/li&gt;&lt;li&gt;&lt;b&gt;choler&lt;/b&gt; = ความโกรธ | ความขี้รำคาญ&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;enragement (enrage)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;fury&lt;/b&gt; → furious&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;infuri'ation (infuriate)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ire → irate, ireful&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;li'vidity (livid)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;madness (mad)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;rage&lt;/b&gt; → enrage&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;เค้าจะมีคำพิเศษนิดนึง สำหรับความโกรธที่สมเหตุสมผล (คือ เป็นเพราะ โดนทำอะไรที่ควรจะโกรธหนะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt; 'incensed [adj] (incense [v] = ทำให้โมโห | ส่งกลิ่นหอมฟุ้งกระจาย)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;in'dignant&lt;/b&gt; [adj] → indig'nation [n]&lt;/li&gt;   &lt;li&gt;'outraged [adj] (outrage [v])&lt;/li&gt;   &lt;li&gt;&lt;b&gt;umbrage&lt;/b&gt; [n] → um'brageous [adj]&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;ความโกรธ + เกลียด&lt;/b&gt; (แต่เน้นที่โกรธมากกว่า) ก็จะเป็น&lt;br /&gt;&lt;ul&gt;&lt;b&gt;   &lt;li&gt;dander&lt;/li&gt;   &lt;/b&gt;&lt;li&gt;&lt;b&gt;hackles&lt;/b&gt; - ต้องเติม s นะ ถ้าไม่เติม มันจะเป็นคนละคำ&lt;/li&gt;   &lt;li&gt;huffiness (huffy [adj])&lt;/li&gt;   &lt;li&gt;i'rascibility (i'rascible [adj])&lt;/li&gt;   &lt;li&gt;&lt;b&gt;spleen&lt;/b&gt; - อีกความหมายนึงคือ ม้าม นะ&lt;/li&gt; &lt;/ul&gt; ความโกรธที่เกิดจากความรำคาญ ก็จะมีคำพวกนี้ (ปกติ คำพวกนี้จะมีความหมายอื่นอยู่ด้วยนะ)&lt;br /&gt;&lt;ul&gt; &lt;li&gt;an'noyance (an'noy [v] = สร้างความรำคาญ, รบกวน)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;chafe (chafe [v] = annoy | ขัดถูผิวหนัง | เสียดทาน | เอามือมาถูกันให้อุ่น)&lt;/li&gt;&lt;li&gt;irri'tation ('irritate [v] = รบกวน | กระตุ้น)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ve'xation (vex [v] = annoy | ป่วน | ทำให้งง)&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; adjective ที่มีความหมายว่า &lt;b&gt;โกรธง่าย ขี้โมโห&lt;/b&gt; จะเป็นพวกนี้ (ความจุกจิกจู้จี้ ก็รวมอยู่ด้วย)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;bristly (bristle [n, v]) - คำนี้มีอีกความหมาย คือ "ปกคลุมด้วยหนาม"&lt;/li&gt;   &lt;li&gt;choleric (choler [n] = ความโกรธ, ความรำคาญ | อารมณ์ (ที่) เสีย)&lt;/li&gt;&lt;li&gt;cranky* (crank [n] = คนขี้โมโห, อารมณ์เปลี่ยนเร็ว) = ไม่เสถียร (ใช้กับอะไรก็ได้) | โมโหง่าย&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;'hot'headed (hot, head)&lt;/li&gt;   &lt;li&gt;hot-'tempered (temper [n] = อารมณ์)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;huffy&lt;/b&gt; → huffiness [n]&lt;/li&gt;&lt;li&gt;&lt;b&gt;fractious*&lt;/b&gt; = ขี้รำคาญ, เจ้าปัญหา&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;i'rascible* (ire [n], irate [adj])&lt;/li&gt;&lt;li&gt;irritable (irritate)&lt;/li&gt;   &lt;li&gt;nettlesome (nettle [v]) - จะแปลว่า น่ารำคาญก็ได้นะ (เคยเอามาให้ดูแล้วทีนึง)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;peckish&lt;/b&gt; - มีอีกความหมายนึง คือ &lt;b&gt;หิว&lt;/b&gt;&lt;br /&gt; &lt;/li&gt;   &lt;li&gt;peevish* (peeve [v] = ทำให้รำคาญ | ทำให้เกลียด)&lt;/li&gt;   &lt;li&gt;pettish (pet [n] = การแสดงออกถึงความโกรธ)&lt;br /&gt; &lt;/li&gt;   &lt;li&gt;&lt;b&gt;petulant*&lt;/b&gt; → petulance [n]&lt;br /&gt; &lt;/li&gt;    &lt;li&gt;prickly (prickle [n, v]) = bristly&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;'quick-'tempered&lt;/li&gt;   &lt;li&gt;short-'tempered&lt;/li&gt;   &lt;li&gt;sple'netic (spleen [n])&lt;/li&gt;&lt;li&gt;&lt;b&gt;techy/tetchy&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;testy&lt;/b&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt;&lt;b&gt;waspish&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;wrathful (wrath)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;wroth&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;wrothful (wroth)&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;สุดท้ายละ คำนามต่อไปนี้ หมายถึง การแสดงความโกรธออกมา&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;b&gt;con'niption&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;fit&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;pet&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;scene&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;tantrum&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt; เยอะเหมือนกันนะเนี่ย -_-' ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-113001313243448141?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/113001313243448141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=113001313243448141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113001313243448141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/113001313243448141'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/synonym.html' title='Synonym ของคำว่า &quot;โกรธ&quot;'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112992624069359046</id><published>2005-10-18T02:20:00.000+07:00</published><updated>2005-10-22T03:31:58.810+07:00</updated><title type='text'>Synonym ของคำว่า "ความเกลียดชัง" (Noun)</title><content type='html'>คำว่า "&lt;b&gt;HATE&lt;/b&gt;" เนี่ย มันสามารถเป็นได้ทั้ง verb และ noun อยู่แล้ว แต่ส่วนใหญ่เราจะเห็นอีกตัวนึงมากกว่า คือ "&lt;b&gt;HATRED&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;คำที่มีความหมายเหมือน ๆ กันกับ hate และ hatred ก็มีประมาณนี้ (noun ทุกตัวนะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ab'horrence (ab'hor)&lt;/li&gt;   &lt;li&gt;abomi'nation (a'bominate) - คำนี้มีอีกความหมาย คือ คนที่น่ารังเกียจ&lt;/li&gt;&lt;li&gt;&lt;b&gt;an'tipathy&lt;/b&gt; (anti-) → antipa'thetic [adj] = ขัดแย้งอย่างรุนแรง&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;a'version (a'vert [v] = หลีกเลี่ยง, หลบเลี่ยง)&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;detes'tation (de'test)&lt;/li&gt;&lt;li&gt;&lt;b&gt;dis'gust&lt;/b&gt; (dis'gust [v])&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;dis'like (dis'like [v])&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;dis'taste (dis-, taste [n, v])&lt;br /&gt;&lt;/li&gt; &lt;li&gt;exe'cration (execrate)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;hate&lt;/b&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;hatred&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;loathing (loath)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;odium&lt;/b&gt; → odius [adj]&lt;/li&gt;&lt;li&gt;re'pugnance (re'pugn [v], re'pugnant [adj]) = aversion ขั้นรุนแรง&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;re'pulsion (re'pel [v], re'pulse [v]) = repugnance&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;re'vulsion&lt;/b&gt; (ไม่ได้มาจาก revel [v] นะ) = repugnance&lt;/li&gt; &lt;li&gt;&lt;b&gt;scunner&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt; คาดว่า คงคุ้น ๆ หน้าตาคำพวกนี้อยู่แล้วจากตอนก่อน ๆ (&lt;a href="http://tunococ.blogspot.com/2005/09/synonym-verb.html"&gt;Synonym ของคำว่า "เกลียด" (Verb)&lt;/a&gt; กับ &lt;a href="http://tunococ.blogspot.com/2005/10/synonym-adjective.html"&gt;Synonym ของคำว่า "น่าเกลียด" และ "น่ารังเกียจ" (Adjective)&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;แล้วก็ คำที่มีความหมายว่าเกลียดอะไรซักอย่างเป็นพิเศษ มีประมาณนี้ (คำพวกนี้ รวมความมุ่งร้ายอยู่ด้วยนะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;mis'anthropy* (mis-, -anthropy) - เกลียดคน&lt;/li&gt;&lt;li&gt;&lt;b&gt;miso'cainea&lt;/b&gt; (mis-) - เกลียดแนวคิดใหม่&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;mi'sogamy (mis-, -gamy) - เกลียดการแต่งงาน&lt;/li&gt;   &lt;li&gt;mi'sogyny/mi'sogynism (mis-, -gyny) - เกลียดผู้หญิง&lt;/li&gt;   &lt;li&gt;mi'sology (mis-, -logy) - เกลียดการใช้เหตุผล&lt;/li&gt;   &lt;li&gt;&lt;b&gt;miso'neism&lt;/b&gt; (mis-) - เกลียดการเปลี่ยนแปลง&lt;/li&gt;   &lt;li&gt;&lt;b&gt;misopedia&lt;/b&gt; (mis-) - เกลียดเด็ก&lt;/li&gt;   &lt;li&gt;murderousness (murderous [adj], murder [n, v]) - เกลียดจนอยากฆ่า&lt;/li&gt; &lt;/ul&gt; เกลียดแบบดูถูก เหยียดหยาม ก็มี... (คำพวกนี้ อาจจะแปลว่า &lt;b&gt;การดูถูก&lt;/b&gt; เฉย ๆ ก็ได้นะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;con'tempt* (con'temn [v] = ดูถูก เหยียดหยาม)&lt;/li&gt;   &lt;li&gt;de'spisal (de'spise [v] = contemn)&lt;/li&gt;   &lt;li&gt;de'spite (despise) → de'spiteful [adj]&lt;/li&gt;   &lt;li&gt;&lt;b&gt;dis'dain&lt;/b&gt;* (dis'dain [v] = contemn | ปฏิเสธด้วยความดูถูก)&lt;/li&gt;   &lt;li&gt;&lt;b&gt;scorn&lt;/b&gt;* (scorn [v] = disdain) → scornful [adj]&lt;/li&gt; &lt;/ul&gt; ส่วนความเกลียดชัง ที่เน้น &lt;b&gt;มุ่งร้าย&lt;/b&gt; หนักหน่อย ก็มีดังนี้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;bitterness (bitter [adj])&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;gall&lt;/b&gt; (gall [v] = ทำให้รำคาญ, ทำให้โมโห | ขัดถูจนช้ำ)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;rancor/rancour&lt;/b&gt; → rancorous [adj] = re'sentful&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;re'sentment (re'sent)&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; ถ้า &lt;b&gt;มุ่งร้าย&lt;/b&gt; หนักมาก จะเป็นพวกนี้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;b&gt;an'tagonism&lt;/b&gt; → an'tagonize [v] = พยายามขัดแย้ง | ยั่วโมโห&lt;/li&gt;   &lt;li&gt;enmity (enemy)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;grievance (grieve) - คำนี้ มีความแค้นปนอยู่ด้วย&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;grudge&lt;/b&gt; (grudge [v]) = grievance&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;hos'tility (hostile [adj])&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ill will (ill [adj], will [n])&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;b&gt;score&lt;/b&gt; = grievance&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; ไว้จะเอาพวกคำที่แปลว่า &lt;b&gt;โกรธ&lt;/b&gt; กับ &lt;b&gt;มุ่งร้าย&lt;/b&gt; มาให้อีกทีละกัน มันมีอีกเพียบ ... (มันก็เกี่ยวกับความเกลียดชังด้วยแหละ)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-112992624069359046?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/112992624069359046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=112992624069359046' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112992624069359046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112992624069359046'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/synonym-noun.html' title='Synonym ของคำว่า &quot;ความเกลียดชัง&quot; (Noun)'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112967012413764476</id><published>2005-10-17T03:38:00.000+07:00</published><updated>2005-10-19T04:15:24.506+07:00</updated><title type='text'>Duality: ความเจ๋งของ Abstraction</title><content type='html'>จริง ๆ เคยแสดงเรื่อง abstraction ให้ดูไปแล้วในเรื่อง  แต่คราวนี้อยากจะเอามาพูดถึง เน้นย้ำอีกนิดนึง&lt;br /&gt;&lt;br /&gt;ลองดูคุณสมบัติสำหรับตรรกศาสตร์เชิงประพจน์ (Propositional Logic) ข้างล่างนี่ก่อน กฎต่อไปนี้ ใช้กับกรณีที่มีแต่เครื่องหมาย ∧ ∨ กับ ¬ นะ (p q r หมายถึง ประพจน์ใด ๆ หนะ แล้วก็ T หมายถึง&lt;b&gt;เป็นจริง&lt;/b&gt; และ F หมายถึง&lt;b&gt;เป็นเท็จ&lt;/b&gt; นะ)&lt;ol&gt;   &lt;li&gt;p ∧ F ≡ F&lt;/li&gt;   &lt;li&gt;p ∨ T ≡ T&lt;/li&gt;&lt;li&gt;p ∧ ¬p = F&lt;/li&gt;   &lt;li&gt;p ∨ ¬p = T&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;¬(p ∧ q) ≡ ¬p ∨ ¬q&lt;/li&gt;   &lt;li&gt;¬(p ∨ q) ≡ ¬p ∧ ¬q&lt;/li&gt;   &lt;li&gt;p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)&lt;/li&gt;   &lt;li&gt;p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r)&lt;/li&gt; &lt;/ol&gt;กฎทั้งหกข้อนี้ เป็นจริงสำหรับพีชคณิต ของตรรกศาสตร์เชิงประพจน์ (แน่นอนสิ) ... แต่เราสามารถทำอะไรได้มากกว่านี้นิดนึงนะ&lt;br /&gt;&lt;br /&gt;สมมติว่า เราเปลี่ยนหน้าตาเครื่องหมาย แบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;∧ กลายเป็น ∩&lt;br /&gt;∨ กลายเป็น ∪&lt;br /&gt;T กลายเป็น &lt;b&gt;U&lt;/b&gt;&lt;br /&gt;F กลายเป็น ∅&lt;br /&gt;(≡ กลายเป็น =)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็จะได้ กฎสำหรับพีชคณิตของเซต ... ถ้าไปพิสูจน์ดู ก็จะรู้ว่ามันถูก ... แต่อันนี้ ยังไม่เจ๋งหรอก ลองเปลี่ยนอีกแบบดีกว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;∧ กลายเป็น ∨&lt;br /&gt;∨ กลายเป็น ∧&lt;br /&gt;T กลายเป็น F&lt;br /&gt;F กลายเป็น T&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ กฎข้อที่ 1 ของเดิม จะกลายเป็นกฎข้อที่ 2 (ลองกลับขึ้นไปดูสิ) แล้วกฎข้อที่ 2 มันก็กลายเป็นกฎข้อที่ 1 ... !?&lt;br /&gt;&lt;br /&gt;อ๊ะ! ... คู่อื่น ๆ (คู่ 3 กับ 4 คู่ 5 กับ 6 แล้วก็คู่ 7 กับ 8) ก็สลับกันเหมือนกัน ... สรุปคือ เราได้กฎเดิม!!! แน่นอนว่า มันก็ต้องถูกสิ เพราะกฎเดิมมันถูก&lt;br /&gt;&lt;br /&gt;แล้วมันมีอะไรดีหละ? ... ลองดูอันนี้ละกัน&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(p ∨ q) ∧ ¬p ≡ ¬p ∧ q&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมมติไปเลยละกัน ว่าเราพิสูจน์แล้วว่าเป็นจริง (จากกฎทั้ง 8 ข้อข้างบนน่ะแหละ) มันแปลว่า เราสามารถใช้กฎทั้ง 8 ข้อนั้น แปลงรูปฝั่งซ้าย ให้กลายเป็นฝั่งขวาได้&lt;br /&gt;&lt;br /&gt;แล้ว ... มันจะเกิดอะไรขึ้น ถ้าเราเปลี่ยนหน้าตาเครื่องหมายแบบที่บอกไว้ ???&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(p ∧ q) ∨ ¬p ≡ ¬p ∨ q&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;อันนี้ก็ต้องถูกต้องด้วยน่ะสิ!!! ... ทำไมน่ะเหรอ?&lt;br /&gt;&lt;br /&gt;ก็เพราะว่า ... เราสามารถเลือกใช้กฎ ตามขั้นตอนการพิสูจน์ในแบบแรก (ที่เราสมมติว่า พิสูจน์ได้ไปแล้ว) ได้ในการพิสูจน์ประโยคแบบหลัง (คือ ที่สลับเครื่องหมายแล้วหนะ) น่ะสิ แค่เปลี่ยนจาก ถ้าเดิมใช้ข้อที่ 1 ก็ไปใช้ข้อที่ 2 แทน สลับกันแบบเนี้ย&lt;br /&gt;&lt;br /&gt;นี่แหละ ที่เราเรียกว่า &lt;b&gt;Duality&lt;/b&gt; ใน &lt;b&gt;Boolean Algebra&lt;/b&gt; (มันก็คือ พีชคณิตของตรรกศาสตร์เชิงประพจน์แหละ)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;ห้อยท้าย&lt;/u&gt;: ถ้าไปนั่งคิดดี ๆ จะเห็นว่า ถ้าเราเขียนวรรค จาก&lt;b&gt;รูปแบบปกติประพจน์แยก (Disjunctive Normal Form)&lt;/b&gt; โดยให้ แต่ละวรรคมีหน้าตาเป็น A ∧ B ∧ C ∧ ... ∧ Z และเชื่อมกันด้วย ∨ การรวม (Resolution) ก็ยังสามารถทำได้เหมือนกันนะ แต่เค้าไม่นิยมกัน (เท่านั้นเอง)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-112967012413764476?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/112967012413764476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=112967012413764476' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112967012413764476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112967012413764476'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/duality-abstraction.html' title='Duality: ความเจ๋งของ Abstraction'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112966778160222541</id><published>2005-10-16T02:39:00.000+07:00</published><updated>2005-10-19T03:36:23.866+07:00</updated><title type='text'>ตรรกศาสตร์: วรรคฮอร์น และ ภาษา PROLOG</title><content type='html'>เราจะเรียกวรรควรรคนึงว่าเป็น &lt;b&gt;วรรคฮอร์น (Horn Clause)&lt;/b&gt; ก็ต่อเมื่อ มีเพียง predicate เดียวในวรรคนั้น ที่ไม่มีเครื่องหมายนิเสธกำกับ เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;¬P(x) ∨ Q(y) ∨ ¬R(z) เป็นวรรคฮอร์น&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt;P(x) ∨ ¬Q(y) ∨ R(z) ไม่เป็นวรรคฮอร์น&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ลองสังเกตนิดนึง จะเข้าใจว่า วรรคฮอร์นพิเศษยังไง ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;¬A ∨ ¬B ∨ ¬C ∨ Z&lt;br /&gt;≡ (A ∧ B ∧ C) → Z&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ความหมายมันก็คือ การพิสูจน์ว่า Z เป็นจริง สามารถทำได้โดยการ พิสูจน์ว่า A B C เป็นจริงพร้อมกัน&lt;br /&gt;&lt;br /&gt;สมมติว่าเรามีวรรคฮอร์นเพิ่มอีกวรรค กลายเป็นสองวรรค ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;¬A ∨ ¬B ∨ ¬C ∨ Z&lt;br /&gt;¬ D ∨ ¬ E ∨ ¬ F ∨ Z&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าเราต้องการจะพิสูจน์ว่า Z เป็นจริง จะมีทางเลือกให้ 2 ทาง คือ&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;พิสูจน์ว่า A B C เป็นจริงพร้อมกัน&lt;/li&gt;   &lt;li&gt;พิสูจน์ว่า D E F เป็นจริงพร้อมกัน&lt;/li&gt; &lt;/ol&gt; ถ้าทำได้ซักทาง ก็แปลว่า Z เป็นจริง แต่ถ้าทำไม่ได้ ก็แปลว่า Z "&lt;b&gt;ไม่จำเป็นต้องจริง&lt;/b&gt;" (ไม่ได้แปลว่า &lt;b&gt;ไม่จริง&lt;/b&gt; นะ)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;วรรคเป้าหมาย (Goal Clause)&lt;/b&gt; คือ วรรคที่ predicate ทุกตัว มีเครื่องหมายนิเสธกำกับ เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;¬P(x) ∨ ¬Q(y) ∨ ¬R(z)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมมติว่า เรามีระบบของภาษาอันดับหนึ่ง ซึ่งเมื่อแปลงเป็นรูปแบบวรรคแล้ว ทุกวรรคเป็นวรรคฮอร์น แล้วเราต้องการจะพิสูจน์ว่า วรรคเป้าหมายซักอันนึง เป็นจริงรึเปล่า ... เราต้องพยายามหา &lt;b&gt;วรรคที่รวมกับวรรคเป้าหมายได้&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ดูตัวอย่างดีกว่า ถ้าอ่านแล้วงง ... ถ้าเราต้องการจะนิยามประพจน์ Even(x) กับ Odd(x) เมื่อ x เป็นจำนวนเต็มไม่ติดลบ ดังนี้&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Even(x) ≡ x เป็นเลขคู่&lt;/li&gt;   &lt;li&gt;Odd(x) ≡ x เป็นเลขคี่&lt;/li&gt; &lt;/ul&gt; เราจะรู้ว่า "&lt;b&gt;กฎ&lt;/b&gt;" ต่อไปนี้ เป็นจริง&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Even(0)&lt;/li&gt;   &lt;li&gt;Even(x) → Odd(NextOf(x))&lt;/li&gt;   &lt;li&gt;Odd(x) → Even(NextOf(x))&lt;/li&gt; &lt;/ol&gt; &lt;ul&gt;          &lt;/ul&gt;เราก็ แปลงให้เป็นรูปแบบวรรค ได้แบบนี้&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;Even(0)&lt;/li&gt;   &lt;li&gt;¬Even(x) ∨ Odd(NextOf(x))&lt;/li&gt;   &lt;li&gt;¬Odd(x) ∨ Even(NextOf(x))&lt;/li&gt; &lt;/ol&gt; วรรคทั้งสามวรรคนี้ เป็นวรรคฮอร์นหมดเลย&lt;br /&gt;&lt;br /&gt;สมมติ เราอยากรู้ว่า Odd(NextOf(NextOf(NextOf(0)))) เป็นจริงรึเปล่า (คือ "3 เป็นเลขคี่รึเปล่า" อะนะ) เราก็ต้องตั้งวรรคเป้าหมาย เป็นนิเสธของสิ่งที่ต้องการพิสูจน์ ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;u&gt;Goal&lt;/u&gt;: ¬Odd(NextOf(NextOf(NextOf(0))))&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็ต้อง พยายามหา predicate ที่รวมกับกฎได้ ... จะเห็นว่า วรรคที่ 2 สามารถรวมกับ วรรคเป้าหมาย ได้ด้วยตัวรวมทั่วไปที่สุด { NextOf(NextOf(0)) / x } ผลลัพธ์ก็จะเป็นวรรคใหม่ อันนี้...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;u&gt;Goal&lt;/u&gt;: ¬Even(NextOf(NextOf(0)))&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;มันก็เป็นวรรคเป้าหมายเหมือนกัน ตามนิยาม ... จะคิดซะว่า เป็นเป้าหมายใหม่ ก็ใช่แหละ ... คราวนี้ วรรคเป้าหมายนี้ ก็สามารถรวมได้กับ วรรคที่ 3 เท่านั้น ตัวรวมทั่วไปที่สุดคือ { Next(0) / x } ผลลัพธ์เป็น วรรคเป้าหมายใหม่อีกวรรค คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;u&gt;Goal&lt;/u&gt;: ¬Odd(NextOf(0))&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หาวรรคมารวมอีกที จะเห็นว่า วรรคที่ 2 เป็นวรรคเดียวที่ใช้ได้ โดยมีตัวรวมทั่วไปที่สุดเป็น { 0 / x } ผลลัพธ์คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;u&gt;Goal&lt;/u&gt;: ¬Even(0)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ เห็นชัดเลยว่า วรรคที่ 1 จะรวมกับวรรคนี้ได้ และให้ผลลัพธ์เป็นวรรคว่าง ... สรุปว่า 3 เป็นเลขคี่นะ :D&lt;br /&gt;&lt;br /&gt;เห็นแล้วใช่มั้ยหละ ว่าวรรคฮอร์น กับวรรคเป้าหมาย มีคุณสมบัติพิเศษคือ&lt;br /&gt;&lt;div style="text-align: center;"&gt;"&lt;b&gt;ผลลัพธ์ของการรวมวรรคฮอร์นกับวรรคเป้าหมาย (เก่า) คือวรรคเป้าหมาย (ใหม่)&lt;/b&gt;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สาเหตุที่วรรคฮอร์น ก่อกำเนิดขึ้น และได้รับความนิยม เป็นเพราะว่า&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ในวรรคเป้าหมาย ทุก predicate ติดนิเสธ&lt;/li&gt;   &lt;li&gt;ในวรรคฮอร์น มี predicate เดียวที่ไม่ติดนิเสธ&lt;/li&gt;   &lt;li&gt;ผลลัพธ์ของการรวม เป็นวรรคเป้าหมาย (ซึ่งทุก predicate ติดนิเสธ)&lt;br /&gt; &lt;/li&gt; &lt;/ul&gt; ดังนั้น การค้นหา predicate ที่สามารถรวมกันได้ จะรวดเร็วกว่ากรณีทั่วไป (ที่มีกฎที่ไม่อยู่ในรูปแบบ วรรคฮอร์น)&lt;br /&gt;&lt;br /&gt;นอกจากนั้น การเพิ่มข้อกำหนดที่ว่า กฎทุกข้อ ต้องเป็นวรรคฮอร์น ลงไป ทำให้การสร้างโปรแกรมสำหรับช่วยพิสูจน์ ง่ายขึ้นมาก ... มันก็เร็วขึ้นด้วยแหละ อย่างที่บอกไปแล้ว&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;ภาษา PROLOG&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;โปรแกรมคอมพิวเตอร์ที่พูดถึงเมื่อกี๊ ก็คือ ภาษา &lt;b&gt;PROLOG&lt;/b&gt; น่ะแหละ หน้าตามันจะประมาณนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Z :- A, B, C.&lt;br /&gt;Z :- D, E, F.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ความหมายก็คือ ถ้าฝั่งขวาทุกตัวเป็นจริง ฝั่งซ้ายจะเป็นจริง แต่ถ้าจะเขียนว่า ฝั่งซ้ายเป็นจริงเสมอ ก็เขียนได้ โดยไม่ต้องมีเครื่องหมาย ":-" (แต่อย่าลืม "." ลงท้ายนะ) เช่น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Even(0).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ส่วน วรรคเป้าหมาย เค้ามักจะเขียนกันแบบนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;:- P, Q, R.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ใครสนใจ ลองไปหาตัวแปลภาษา PROLOG เล่นได้ &lt;a href="http://www.swi-prolog.org/"&gt;ที่นี่: SWI-Prolog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;อ้อ ... สำหรับใครที่เอา SWI-Prolog ไปเล่น ... ชื่อตัวแปรที่ใช้ จะต้องขึ้นต้นด้วยตัวใหญ่นะ นอกนั้น ให้ขึ้นด้วยตัวเล็ก (ทั้งชื่อ predicate ชื่อฟังก์ชัน แล้วก็ชื่อค่าคงที่ด้วย) ... เอาตัวอย่างให้ดูนิดนึง&lt;br /&gt;&lt;br /&gt;even(0).&lt;br /&gt;odd(nextof(X)) :- even(X).&lt;br /&gt;even(nextof(X)) :- odd(X).&lt;br /&gt;&lt;br /&gt;แล้วก็ ... เค้ามีฟังก์ชันพื้นฐานให้ใช้ เยอะเหมือนกัน จริง ๆ ไม่ต้องเขียน nextof อะไรแบบนี้หรอก ใช้คำสั่ง add เลยก็ได้&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-112966778160222541?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/112966778160222541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=112966778160222541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112966778160222541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112966778160222541'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/prolog.html' title='ตรรกศาสตร์: วรรคฮอร์น และ ภาษา PROLOG'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112954496117277008</id><published>2005-10-15T16:18:00.000+07:00</published><updated>2005-10-17T17:39:10.656+07:00</updated><title type='text'>Center of Mass &amp; Centroid - Polyhedron</title><content type='html'>คราวที่แล้ว (เรื่อง &lt;a href="http://tunococ.blogspot.com/2005/10/center-of-mass-centroid-polygon.html"&gt;Center of Mass &amp; Centroid - Polygon&lt;/a&gt;) เราได้แนวคิดการหา centroid ของ polygon แล้ว การขยายเป็น 3 มิติ ก็ทำเหมือน ๆ กันแหละ&lt;br /&gt;&lt;br /&gt;การหา centroid ของ polyhedron เราจะใช้แนวคิดจากเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/08/tetrahedron.html"&gt;ต่อจากสูตรเมื่อสมัยเด็ก - ปริมาตรของ Tetrahedron&lt;/a&gt; ผนวกกับความจริงที่ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"&lt;b&gt;Centroid ของ Tetrahedron คือ Centroid ของจุดยอดทั้งสี่ของมัน&lt;/b&gt;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ดังนั้น วิธีหา centroid ของ polyhedron ก็คล้าย ๆ กับการหาปริมาตรมันน่ะแหละ เพียงแต่ต้องเอา centroid ของ tetrahedron แต่ละชิ้นเข้าไปคูณด้วย ... สูตรสำเร็จหน้าตาหยั่งงี้&lt;br /&gt;&lt;br /&gt;สมมติว่า tetrahedron มีจุดยอดคือ &lt;b&gt;P Q R S&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ให้ a = | &lt;b&gt;P&lt;/b&gt; : &lt;b&gt;Q&lt;/b&gt; : &lt;b&gt;R&lt;/b&gt; |&lt;br /&gt;b = | &lt;b&gt;Q&lt;/b&gt; : &lt;b&gt;R&lt;/b&gt; : &lt;b&gt;S&lt;/b&gt; |&lt;br /&gt;c = | &lt;b&gt;R&lt;/b&gt; : &lt;b&gt;S&lt;/b&gt; : &lt;b&gt;P&lt;/b&gt; |&lt;br /&gt;d = | &lt;b&gt;S&lt;/b&gt; : &lt;b&gt;P&lt;/b&gt; : &lt;b&gt;Q&lt;/b&gt; |&lt;br /&gt;&lt;b&gt;C&lt;/b&gt; = (a(&lt;b&gt;P&lt;/b&gt; + &lt;b&gt;Q&lt;/b&gt; + &lt;b&gt;R&lt;/b&gt;) + b(&lt;b&gt;Q&lt;/b&gt; + &lt;b&gt;R&lt;/b&gt; + &lt;b&gt;S&lt;/b&gt;) +&lt;br /&gt;c(&lt;b&gt;R&lt;/b&gt; + &lt;b&gt;S&lt;/b&gt; + &lt;b&gt;P&lt;/b&gt;) + d(&lt;b&gt;S&lt;/b&gt; + &lt;b&gt;P&lt;/b&gt; + &lt;b&gt;Q&lt;/b&gt;)) /4(a + b + c + d)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C&lt;/b&gt; ก็คือ centroid ของ tetrahedron หนะนะ&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ ถ้าเรามี polyhedron ... เราก็สามารถแบ่งมันเป็น tetrahedron หลาย ๆ อันได้ แล้วก็หา centroid ของ tetrahedron เหล่านั้น เอามารวมกันแบบถ่วงน้ำหนักด้วยปริมาตรของมัน แต่การคิดมันจะไม่ง่ายเหมือนกับกรณีของ polygon แล้ว ต้องใช้ความระมัดระวังใน &lt;b&gt;การรวมเข้าหักออก&lt;/b&gt; เหมือนกับในการหาปริมาตรของ tetrahedron&lt;br /&gt;&lt;br /&gt;แล้วก็ ถึงจะขยายไปเป็นกี่มิติก็ตาม เราก็ใช้หลักการที่ว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"&lt;b&gt;Centroid ของ รูปพื้นฐานใน n มิติ ก็คือ Centroid ของจุดยอดทั้งหมด n + 1 จุดของมัน&lt;/b&gt;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แล้วคิดในลักษณะเดียวกัน&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-112954496117277008?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/112954496117277008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=112954496117277008' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112954496117277008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112954496117277008'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/center-of-mass-centroid-polyhedron.html' title='Center of Mass &amp; Centroid - Polyhedron'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112940641594478219</id><published>2005-10-14T23:32:00.000+07:00</published><updated>2005-10-16T03:00:17.800+07:00</updated><title type='text'>Transformation: Domain, Range and Inverse</title><content type='html'>ย้ำคำเดิมอีกที ... การแปลง (Transformation) มันก็คือฟังก์ชัน (Function) น่ะแหละ ดังนั้น มันต้องมีโดเมนกับเรนจ์ และอาจจะมีอินเวอร์ส&lt;br /&gt;&lt;br /&gt;สมมติให้ T เป็นการแปลงที่มีโดเมนเป็น D และเรนจ์เป็น R&lt;br /&gt;&lt;br /&gt;เงื่อนไขการมีอินเวอร์สของการแปลง ก็คือ (ทวนของเก่านิดนึงอะนะ)&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;x, y ∈ D → [T(x) = T(y) ↔ x = y]&lt;/li&gt;&lt;li&gt;y ∈ R → จะมี x ∈ D ที่ทำให้ T(x) = y&lt;br /&gt;&lt;/li&gt;     &lt;/ol&gt;ข้อแรก ก็คือที่เราเรียกกันว่า &lt;b&gt;คุณสมบัติหนึ่งต่อหนึ่ง (One-to-One)&lt;/b&gt; และข้อสองก็คือที่เรียกว่า &lt;b&gt;คุณสมบัติทั่วถึง (Onto)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เรามักจะเขียนว่า T:A → B เพื่อบอกว่า A เป็นโดเมนของ T และ เรนจ์ของ T &lt;b&gt;เป็นสับเซต&lt;/b&gt;ของ B นะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Bijection&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สั้น ๆ ก็คือ "ถ้า T เป็น bijection จาก A ไป B แปลว่า T เป็นฟังก์ชันที่มีอินเวอร์ส"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Finite, Infinitely Countable, Uncountable&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;เซต A จะเป็นเซตจำกัด (Finite) ก็ต่อเมื่อ มันมีจำนวนสมาชิกจำกัดไง ... (จะบอกทำไมเนี่ย - -'')&lt;/li&gt;   &lt;li&gt;เซตจำกัดทุกเซต นับได้ (Countable)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;เซต A จะเป็นเซตไม่จำกัด แต่นับได้ (Infinitely Countable หรือ Countably Infinite) ถ้าสามารถหา Bijection จาก A ไป &lt;b&gt;Z&lt;/b&gt; (เซตของจำนวนเต็มหนะ) ได้&lt;/li&gt;   &lt;li&gt;เซต A จะเป็นเซตนับไม่ได้ (Uncountable) ถ้ามันไม่จำกัด และนับไม่ได้&lt;/li&gt; &lt;/ol&gt;&lt;b&gt;&lt;u&gt;ความเป็นจริงบางประการ&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;ถ้า A ⊆ &lt;b&gt;Z&lt;/b&gt; และ A เป็นเซตไม่จำกัด แล้ว A จะนับได้&lt;/li&gt;   &lt;li&gt;&lt;b&gt;Q&lt;/b&gt; (เซตของจำนวนตรรกยะ) นับได้&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ถ้า A และ B นับได้ A ∪ B กับ A × B จะนับได้&lt;/li&gt;    &lt;li&gt;&lt;b&gt;R&lt;/b&gt; × A จะนับได้ก็ต่อเมื่อ A = ∅&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;ช่วง [a, b] (a, b) [a, b) และ (a, b] จะนับไม่ได้ก็ต่อเมื่อ a &amp;lt; b (คือ โดยทั่วไป มันจะนับไม่ได้หนะ)&lt;/li&gt;    &lt;/ol&gt;&lt;b&gt;&lt;u&gt;ตัวอย่าง Bijection ที่ง่าย ๆ&lt;/u&gt;&lt;/b&gt; (x กับ y เป็นตัวแปร นอกนั้นเป็นค่าคงที่นะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;x + a ⇒ (s, t) → (s + a, t + a)&lt;/li&gt;   &lt;li&gt;ax ⇒ (s, t) → (as, at)&lt;/li&gt;   &lt;li&gt;tan x ⇒ (-π/2, π/2) → (-∞, ∞)&lt;/li&gt;   &lt;li&gt;e&lt;sup&gt;x&lt;/sup&gt; ⇒ (-∞, ∞) → (0, ∞)&lt;/li&gt;   &lt;li&gt;x + y(y + 1)/2 ⇒ (&lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; ∪ {0}) × (&lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; ∪ {0}) → (&lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; ∪ {0})&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;&lt;u&gt;ตัวอย่าง Bijection ที่พิเรนทร์นิดนึง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ก่อนจะเอาให้ดู ขอตกลงเครื่องหมายนิดนึงก่อน เพื่อให้เขียนง่ายขึ้น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;[P] เมื่อ P เป็น predicate จะมีค่าเป็น 1 ถ้า P เป็นจริง และเป็น 0 ถ้า P เป็นเท็จ&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เอาหละ ต่อไปนี้คือ bijection ตัวอย่างอีกตัวนึง&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;[x ∈ &lt;b&gt;Z&lt;/b&gt;] + x ⇒ [0, ∞) → (0, ∞)&lt;/li&gt; &lt;/ul&gt; bijection แบบนี้ มีได้อีกหลายแบบนะ แต่ที่ต้องการจะสื่อก็คือ ... เราสามารถหา bijection ที่ถ่ายทอดช่วงเปิดไปปิด หรือปิดไปเปิด หรือครึ่งเปิดครึ่งปิด ยังไงก็ได้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Cardinal Numbers&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;สำหรับเซตนับได้ &lt;a href="http://en.wikipedia.org/wiki/Cardinal_number"&gt;Cardinal Number&lt;/a&gt; ของมันก็คือ จำนวนสมาชิกนั่นเอง ดังนั้น วิธีเขียน cardinal number ของเซต A ก็คือ |A|&lt;br /&gt;&lt;br /&gt;คุณสมบัติสำคัญของ cardinal number ก็คือ ถ้าสามารถหา bijection จาก A ไป B ได้ เราจะรู้ว่า |A| = |B|&lt;br /&gt;&lt;br /&gt;สำหรับเซตอนันต์ เค้าก็มีการนิยาม cardinal number ไว้เช่นกัน ดังนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;|&lt;b&gt;Z&lt;/b&gt;| = ℵ&lt;sub&gt;0&lt;/sub&gt;&lt;br /&gt;|&lt;b&gt;R&lt;/b&gt;| = &lt;i&gt;c&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;โดยที่ ℵ&lt;sub&gt;0&lt;/sub&gt; คือ cardinal number ที่น้อยที่สุดของเซตอนันต์ (มันเลยห้อย 0 ไง) จะว่าไปก็คือ &lt;b&gt;Z&lt;/b&gt; คือเซตอนันต์ที่ "&lt;b&gt;เล็ก&lt;/b&gt;" ที่สุดน่ะแหละ&lt;br /&gt;&lt;br /&gt;แล้วเค้าก็มีสมมติฐานอันนึง ชื่อว่า &lt;b&gt;&lt;u&gt;Continuum Hypothesis&lt;/u&gt;&lt;/b&gt; ซึ่งบอกว่า ไม่สามารถหาเซต A ที่ทำให้ ℵ&lt;sub&gt;0&lt;/sub&gt; &amp;lt; |A| &amp;lt; &lt;i&gt;c&lt;/i&gt; ได้ ... เน้นว่าเป็น &lt;b&gt;สมมติฐาน&lt;/b&gt; นะ เพราะว่า มันไม่สามารถพิสูจน์ได้ (ด้วยระบบเซตแบบ Cantor)&lt;br /&gt;&lt;br /&gt;คราวนี้ เราอาจจะสรุปบางอย่างได้สะดวกขึ้น เช่น&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ถ้า a &amp;lt; b แล้ว | (a, b) | = | [a, b) | = | (a, b] | = | [a, b] | = &lt;i&gt;c&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;      &lt;li&gt;|2&lt;sup&gt;&lt;b&gt;Z&lt;/b&gt;&lt;/sup&gt;| = 2&lt;sup&gt;ℵ&lt;sub&gt;0&lt;/sub&gt;&lt;/sup&gt; = &lt;i&gt;c&lt;/i&gt;&lt;/li&gt;   &lt;li&gt;&lt;i&gt;c&lt;/i&gt;&lt;sup&gt;2&lt;/sup&gt; = &lt;i&gt;c&lt;/i&gt; × &lt;i&gt;c&lt;/i&gt; &amp;gt; &lt;i&gt;c&lt;/i&gt;&lt;/li&gt;   &lt;li&gt;ถ้า |A| = ℵ&lt;sub&gt;0&lt;/sub&gt; และ 0 &lt; |B| ≤ ℵ&lt;sub&gt;0&lt;/sub&gt; แล้ว |A × B| = ℵ&lt;sub&gt;0&lt;/sub&gt;&lt;/li&gt;   &lt;li&gt;ถ้า |A| = &lt;i&gt;c&lt;/i&gt; และ 0 &lt; |B| ≤ ℵ&lt;sub&gt;0&lt;/sub&gt;  แล้ว |A × B| = &lt;i&gt;c&lt;/i&gt;&lt;/li&gt; &lt;/ul&gt; &lt;b&gt;&lt;u&gt;แถมทิ้งท้าย เปลี่ยนเรื่องนิดนึง&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ลองเอาการแปลงที่เคยพูดถึงแล้ว ในเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/09/discrete-vs-continuous_24.html"&gt;Discrete vs Continuous: ฟังก์ชัน เวกเตอร์ และเมตริกซ์&lt;/a&gt; มาดูกันดีกว่า ว่า อันไหนมีโดเมนกับเรนจ์เป็นอะไรบ้าง (ขอละเว้นกรณีจำนวนเชิงซ้อน กับเงื่อนไขบางอย่าง ทิ้งไปก่อนนะ)&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Discrete Fourier Transform&lt;br /&gt;⇒D = {f | f:&lt;b&gt;Z&lt;/b&gt;&lt;sub&gt;n&lt;/sub&gt; → &lt;b&gt;R&lt;/b&gt;}, R = D&lt;/li&gt;   &lt;li&gt;Fourier Series&lt;br /&gt;⇒D = {f | f:[-L, L] → &lt;b&gt;R&lt;/b&gt;}, R = {f | f:&lt;b&gt;Z&lt;/b&gt; → &lt;b&gt;R&lt;/b&gt;}&lt;/li&gt;   &lt;li&gt;Fourier Transformation&lt;br /&gt;⇒D = {f | f:&lt;b&gt;R&lt;/b&gt; → &lt;b&gt;R&lt;/b&gt;}, R = D&lt;/li&gt;   &lt;li&gt;Generating Function&lt;br /&gt;⇒D = {f | f:&lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; → &lt;b&gt;R&lt;/b&gt;}, R = D&lt;/li&gt;   &lt;li&gt;Z Transformation&lt;br /&gt;⇒D = {f | f:&lt;b&gt;Z&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; → &lt;b&gt;R&lt;/b&gt;}, R = D&lt;/li&gt;   &lt;li&gt;Laplace Transformation&lt;br /&gt;⇒D = {f | f:&lt;b&gt;R&lt;/b&gt;&lt;sup&gt;+&lt;/sup&gt; → &lt;b&gt;R&lt;/b&gt;}, R = D&lt;/li&gt; &lt;/ul&gt; &lt;i&gt;&lt;u&gt;หมายเหตุ&lt;/u&gt;: D อันนี้ กับ D ในเรื่อง &lt;a href="http://tunococ.blogspot.com/2005/09/discrete-vs-continuous_24.html"&gt;Discrete vs Continuous: ฟังก์ชัน เวกเตอร์ และเมตริกซ์&lt;/a&gt; มันคนละตัวกันนะ&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15190589-112940641594478219?l=tunococ.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tunococ.blogspot.com/feeds/112940641594478219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15190589&amp;postID=112940641594478219' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112940641594478219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15190589/posts/default/112940641594478219'/><link rel='alternate' type='text/html' href='http://tunococ.blogspot.com/2005/10/transformation-domain-range-and.html' title='Transformation: Domain, Range and Inverse'/><author><name>Tunococ</name><uri>http://www.blogger.com/profile/02940719268853405975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.geocities.com/tunaococ/tunoblog/tunococ2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15190589.post-112939287474088274</id><published>2005-10-13T22:04:00.000+07:00</published><updated>2005-10-15T23:14:39.236+07:00</updated><title type='text'>Discrete vs Continuous: สมการผลต่างและสมการอนุพันธ์</title><content type='html'>หลุดจากหัวข้อนี้ไปนาน ยังไม่ลืมหรอกนะ :D ... ขอโทษอีกทีที่ไม่ได้ update ทุกวันนะ ช่วงนี้ไม่ค่อยมีเวลาได้ต่อเน็ตหนะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Continuous&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;เริ่มเลยละกันนะ ... สมมติว่า y เป็นฟังก์ชันของ x ก่อน แล้วก็ มี &lt;b&gt;สมการอนุพันธ์ (Differential Equation)&lt;/b&gt; ต่อไปนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y' = f(x)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็จะสามารถหา y(x) ได้เท่ากับ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = ∫&lt;sub&gt;k≤t&amp;lt;x&lt;/sub&gt; f(t) dt + c&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เมื่อ k กับ c เป็นค่าคงที่&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Discrete&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ในลักษณะเดียวกัน ถ้าเรามี &lt;b&gt;สมการผลต่าง (Difference Equation)&lt;/b&gt; ต่อไปนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Δy = f(x)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ค่า y(x) ก็จะหาได้จาก&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = Σ&lt;sub&gt;k≤t&amp;lt;x&lt;/sub&gt; f(t) δt + c&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เหมือนกัน&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Continuous&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;คราวนี้ สมมติว่า D = d/dx ... &lt;b&gt;สมการอนุพันธ์&lt;/b&gt; แบบต่อไปที่แก้ง่าย ๆ ก็จะมีหน้าตาประมาณนี้ (เอาดีกรี 2 ก่อนนะ)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;D&lt;sup&gt;2&lt;/sup&gt;y + aDy + by = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เมื่อ a และ b เป็นค่าคงที่&lt;br /&gt;&lt;br /&gt;วิธีแก้สมการนี้ ก็ทำได้ง่าย ๆ โดยการคาดคะเนว่า รูปของคำตอบจะเป็น y = e&lt;sup&gt;mx&lt;/sup&gt; แล้วแทนค่าลงไป ผลลัพธ์ก็คือ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;(m&lt;sup&gt;2&lt;/sup&gt; + am + b)y = 0&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;เนื่องจาก เราไม่ต้องการคำตอบที่ว่า y ≡ 0 ก็เลยเอา y ออกไปได้ กลายเป็นสมการนี้ ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;m&lt;sup&gt;2&lt;/sup&gt; + am + b = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมการพหุนามกำลังสองอันนี้ จะมีคำตอบ m อยู่สองค่า สมมติให้เป็น m&lt;sub&gt;1&lt;/sub&gt; กับ m&lt;sub&gt;2&lt;/sub&gt; นะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ถ้า m&lt;sub&gt;1&lt;/sub&gt; ≠ m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบของสมการอนุพันธ์เป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;e&lt;sup&gt;m&lt;sub&gt;1&lt;/sub&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;e&lt;sup&gt;m&lt;sub&gt;2&lt;/sub&gt;x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;แต่ถ้า m&lt;sub&gt;1&lt;/sub&gt; = m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;e&lt;sup&gt;m&lt;sub&gt;1&lt;/sub&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;xe&lt;sup&gt;m&lt;sub&gt;1&lt;/sub&gt;x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Discrete&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ในลักษณะเดียวกัน ถ้าเรามี &lt;b&gt;สมการผลต่าง&lt;/b&gt; ต่อไปนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Δ&lt;sup&gt;2&lt;/sup&gt;y + aΔy + by = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราจะพยายามเดารูปคำตอบ ที่ทำให้ Δy = my ...&lt;br /&gt;&lt;br /&gt;เริ่มจาก&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Δa&lt;sup&gt;x&lt;/sup&gt; = (a - 1) a&lt;sup&gt;x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เราก็สมมติให้ m = a - 1 และ y = (m + 1)&lt;sup&gt;x&lt;/sup&gt; จะเห็นว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = (m + 1)&lt;sup&gt;x&lt;/sup&gt;&lt;br /&gt;Δy = m (m + 1)&lt;sup&gt;x&lt;/sup&gt; = my&lt;br /&gt;Δ&lt;sup&gt;2&lt;/sup&gt;y = m&lt;sup&gt;2&lt;/sup&gt; (m + 1)&lt;sup&gt;x&lt;/sup&gt; = m&lt;sup&gt;2&lt;/sup&gt;y&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ พอแทนค่ากลับลงไปในสมการดั้งเดิม ก็จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;m&lt;sup&gt;2&lt;/sup&gt; + am + b = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;สมการนี้ เหมือนกับในกรณี Continuous เด๊ะเลย (ก็เราจงใจให้มันเป็นงี้หนิ) ถ้าแก้สมการออกมาจะได้ 2 คำตอบ สมมติให้เป็น m&lt;sub&gt;1&lt;/sub&gt; กับ m&lt;sub&gt;2&lt;/sub&gt; นะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ถ้า m&lt;sub&gt;1&lt;/sub&gt; ≠ m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบของสมการผลต่างเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;(m&lt;sub&gt;1&lt;/sub&gt; + 1)&lt;sup&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;(m&lt;sub&gt;2&lt;/sub&gt; + 1)&lt;sup&gt;x&lt;/sup&gt;&lt;sup&gt;&lt;/sup&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;แต่ถ้า m&lt;sub&gt;1&lt;/sub&gt; = m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;(m&lt;sub&gt;1&lt;/sub&gt; + 1)&lt;sup&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;x(m&lt;sub&gt;1&lt;/sub&gt; + 1)&lt;sup&gt;x&lt;/sup&gt;&lt;sup&gt;&lt;/sup&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Discrete: Recurrence Relation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;หลาย ๆ คนคงจะคุ้นเคยกับลำดับ Fibonacci นี่นะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;a&lt;sub&gt;n+2&lt;/sub&gt; = a&lt;sub&gt;n+1&lt;/sub&gt; + a&lt;sub&gt;n&lt;/sub&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;คราวนี้ ถ้าเราเปลี่ยนหน้าตาตัวแปรซักนิด ให้ n → x แล้วก็ให้ a → y จะเห็นว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y(x + 2) = y(x + 1) + y(x)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หรือ ถ้าเขียนใหม่อีกนิดนึงด้วยตัว E จะเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;E&lt;sup&gt;2&lt;/sup&gt;y = Ey + y&lt;br /&gt;E&lt;sup&gt;2&lt;/sup&gt;y - Ey - y = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;หน้าตามันคล้าย ๆ กับสมการผลต่างเลยนะเนี่ย ... งั้น เดี๋ยวเราจะลองแก้สมการนี้เลยดีกว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;E&lt;sup&gt;2&lt;/sup&gt;y + aEy + by = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าให้ a = b = -1 ก็จะเป็นความสัมพันธ์ Fibonacci นั่นแหละ&lt;br /&gt;&lt;br /&gt;คราวที่แล้ว เราเดารูปคำตอบที่ทำให้ Δy = my ... คราวนี้ ลองเดาให้ Ey = my สิ ... ดูมันจะง่ายกว่าเมื่อกี๊อีกนะเนี่ย เพราะว่า&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Ea&lt;sup&gt;x&lt;/sup&gt; = a⋅a&lt;sup&gt;x&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ถ้าให้ m = a และ y = a&lt;sup&gt;x&lt;/sup&gt; เราจะได้ความสัมพันธ์ต่อไปนี้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Ey = my&lt;br /&gt;E&lt;sup&gt;2&lt;/sup&gt;y = m&lt;sup&gt;2&lt;/sup&gt;y&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;แทนกลับลงไปในสมการตั้งต้น จะได้&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;m&lt;sup&gt;2&lt;/sup&gt; + am + b = 0&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;เห็นมาสามรอบละ ... สมมติว่า รากทั้งสองของสมการนี้คือ m&lt;sub&gt;1&lt;/sub&gt; กับ m&lt;sub&gt;2&lt;/sub&gt; เราก็จะสรุปได้คล้าย ๆ เดิม คือ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ถ้า m&lt;sub&gt;1&lt;/sub&gt; ≠ m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบของสมการดั้งเดิมเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;m&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;m&lt;sub&gt;2&lt;/sub&gt;&lt;sup&gt;x&lt;/sup&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;แต่ถ้า m&lt;sub&gt;1&lt;/sub&gt; = m&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt; จะได้คำตอบเป็น&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;y = c&lt;sub&gt;1&lt;/sub&gt;m&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;x&lt;/sup&gt; + c&lt;sub&gt;2&lt;/sub&gt;xm&lt;sub&gt;1&lt;/sub&gt;&lt;sup&gt;x&lt;/sup&gt;&lt;/div&gt;&lt;br /&gt;รู้สึกว่า หน้าตามันจะคล้ายกับกรณี continuous มากขึ้นนิดนึงเนอะ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Laplace Transformation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;แถมนิดนึงละกัน เพราะว่า Laplace Transformation ก็เป็นเครื่องมืออย่างนึง สำหรับแก้สมการอนุพันธ์&lt;br /&gt;&lt;br /&gt;หลักการก็คือ แปลงสมการเริ่มต้นด้วย Laplace Transformation ทีนึง แก้หาคำตอบในโดเมนใหม่ แล้วแปลงกลับด้วย Inverse Laplace Transformation&lt;br /&gt;&lt;br /&gt;ตามความนิยม ตัวแปร x ที่เราใช้ ๆ กันเมื่อกี๊ เค้ามักจะเขียนด้วยตัว t แทนนะ เวลาพูดถึง Laplace Transformation หนะ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;t domain differential equation&lt;br /&gt;↓ L Transform ↓&lt;br /&gt;s domain polynomial equation&lt;br /&gt;↓ Solving ↓&lt;br /&gt;s domain solution&lt;br /&gt;↓ L&lt;sup&gt;-1&lt;/sup&gt; Transform ↓&lt;br /&gt;t domain solution&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;นิยามของ Laplace Transformation ของฟังก์ชัน f(t) ก็คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;L[f(t)] = F(s) = ∫&lt;sub&gt;0≤t&amp;lt;∞&lt;/sub&gt; f(t) e&lt;sup&gt;-st&lt;/sup&gt; dt&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Z Transformation&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Z Transformation ก็คือ Laplace Transformation ในภาคไม่ต่อเนื่องน่ะแหละ มันเอาไว้แก้สมการ E ได้ วิธีทำก็เหมือนกันเลย แต่นิยามต่างกันนิดนึง คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Z[f(t)] = F(z) = Σ&lt;sub&gt;0≤t&amp;lt;∞ &lt;/sub&gt;f(t) z&lt;sup&gt;-t&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ที่ใช้ตัว z ก็เพราะความนิยมเหมือนกันอะนะ จริง ๆ จะเขียนเป็น s ก็ได้&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Generating Function&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ด้วยความนิยมอีกด้านนึง Generating Function ถูกสร้างขึ้นมาจากคนละทิศทางกับ Z Transformation แต่ไป ๆ มา ๆ มันก็คืออันเดียวกันน่ะแหละ แค่มีการเปลี่ยนหน้าตานิดหน่อย คือ&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;G[f(t)] = F(s) = Σ&lt;sub&gt;0≤t&amp;lt;∞ &lt;/sub&gt;f(t) s&lt;sup&gt;t&lt;/sup&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;มันต่างกับ z แค่ว่า เลขชี้กำลังของ s มันเป็น +t แต่เลขช
