Friday, September 30, 2005

ขอพักซักวันเหอะ ...

คือ รู้สึกว่า ชักจะไม่สบาย วันนี้ปวดหัว -*-

ผนวกกับว่า เห็นมีหลาย ๆ คนบ่นว่า อ่านไม่ทัน อ่านไม่รู้เรื่อง ... 555 งั้นคงไม่เป็นไรใช่มั้ย ถ้าวันนี้ไม่มีเรื่องใหม่

อ่อ ... เผื่อใครที่ยังไม่รู้นะ ... เรื่องต่าง ๆ ที่เขียนอยู่ในนี้ มีจัดหมวดหมู่ไว้ที่นี่นะ


มี link อยู่ด้านขวาด้วย เขียนว่า Tunoblog Summarized อะ

อ้อ แล้วก็ วันนี้มี blog เกิดใหม่ของเพื่อนผมอีกอันนะ ยังไม่มีอะไรมาก แต่ลอง ๆ ไปดู ให้กำลังใจคนเพิ่งจะ in trend กันหน่อยละกัน ...

Thursday, September 29, 2005

ตรรกศาสตร์: รูปแบบปกติประพจน์รวม

จุดประสงค์ของตอนนี้และตอนต่อ ๆ ไปของเรื่อง "ตรรกศาสตร์" ก็คือ หาวิธีที่จะให้ คอมพิวเตอร์สามารถช่วยเราคิดได้ เมื่อประพจน์ต่าง ๆ เขียนในรูปของภาษาอันดับหนึ่ง

Propositional Logic กับ Predicate Logic

ก็ ถ้าพูดง่าย ๆ ก็คือ Predicate จะมีตัวแปรด้วย เช่น P(x) หรือ P(x, y) แต่ Proposition จะไม่มีตัวแปร คือเป็น P เฉย ๆ ค่าความจริงก็จะตายตัว ไม่ขึ้นกับตัวแปรใด ๆ

เราจะศึกษาตรรกศาสตร์ของประพจน์ (Proposition) ก่อน แล้วจึงขยายเป็นภาษาอันดับหนึ่ง (คือ มี ∀ กับ ∃ และประพจน์ภาคแสดง) ด้วยหลักการคล้าย ๆ กัน

รูปแบบปกติประพจน์รวม (Conjunctive Normal Form)

ใน Propositional Logic สมมติว่าเรามีประพจน์ ที่ประกอบด้วยตัวเชื่อมต่าง ๆ กัน เราจะสามารถเขียนใหม่ให้มีแต่ตัวเชื่อม ∧ ∨ และ ¬ ได้ เช่น

p → q ≡ ¬p ∨ q
p ↔ q ≡ (¬p ∨ q) ∧ (p ∨ ¬q)

คราวนี้ เราจะจัดรูปให้เป็นรูปแบบปกติประพจน์รวม ได้ โดยเขียนให้เป็น "ผล ∧ ของผล ∨" เช่น

p ∨ (q ∧ (r ∨ s)) ≡ (p ∨ q) ∧ (p ∨ r ∨ s)

เพื่อให้เขียนสะดวก เรามักจะเขียนแยก ๆ กัน เป็น

p ∨ q
p ∨ r ∨ s

ประโยชน์ของประพจน์ในรูปแบบนี้ก็คือ เราสามารถใช้วิธีการรวมของ Robinson (Robinson's Resolution) ได้ ซึ่งหลักการก็คือ

(p ∨ q) ∧ (¬p ∨ r) ≡ (p ∨ q) ∧ (¬p ∨ r) ∧ (q ∨ r)

จะได้พจน์ใหม่เกิดขึ้นจากการรวม p กับ ¬p ในสองพจน์แรก คือ q ∨ r

วิธีพิสูจน์อันนี้ไม่ยากเท่าไหร่ แค่คิดว่า ถ้า p เป็นจริงแล้วเป็นยังไง ถ้า p เป็นเท็จแล้วเป็นยังไง ก็พิสูจน์ได้แล้ว

ตัวอย่างการใช้งาน เช่น สมมติว่าต้องการพิสูจน์ว่า

((p → q) ∧ (q → r)) → (p → r)

บทพิสูจน์โดยใช้ต้นไม้พิสูจน์ มีให้ดูแล้วใน ตรรกศาสตร์: ต้นไม้การพิสูจน์ และต้นไม้ตัวอย่างขัดแย้ง แต่คราวนี้จะแสดงอีกวิธีให้ดู เรียกว่า Resolution-Refutation

เริ่มโดยการใส่นิเสธเข้าไปก่อน

¬[((p → q) ∧ (q → r)) → (p → r)]

เราจะแสดงว่า ประพจน์นี้เป็นเท็จ ... กำจัดเครื่องหมาย "→" ซะก่อน

¬[¬((¬p ∨ q) ∧ (¬q ∨ r)) ∨ (¬p ∨ r)]

แล้วก็กระจายเข้าไป

(¬p ∨ q) ∧ (¬q ∨ r) ∧ p ∧ ¬r

ได้เป็นรูปแบบปกติประพจน์รวมแล้ว ประกอบด้วยวรรค (Clause) สี่วรรค คือ

¬p ∨ q
¬q ∨ r
p
¬r

คราวนี้ก็ใช้ resolution ได้ละ ลองรวม 2 วรรคแรกก่อน ... วรรคใหม่จะไม่มี q

¬p ∨ q
¬q ∨ r
p
¬r
¬p ∨ r

จะเห็นว่า ถ้าเรารวมวรรคใหม่นี้กับ p (วรรคที่ 3) ก็จะเหลือ r ซึ่งพอรวมกับ ¬r (วรรคที่ 4) จะได้วรรคว่าง แสดงว่า ประพจน์ตั้งต้นเป็นสัจพจน์ (นิเสธมันเลยเป็นเท็จ)

¬p ∨ q
¬q ∨ r
p
¬r
¬p ∨ r
r


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

แล้ว ... ภาษาอันดับหนึ่งหละ?

พอจะทำแบบเดียวกันในภาษาอันดับหนึ่ง ปัญหามันก็เกิดหละ ... จริง ๆ เราก็ทำให้อยู่ในรูปแบบปกติประพจน์รวมได้นะ แต่มันมีขั้นตอนเพิ่ม ... ดูตัวอย่างนี้ละกัน

∀x[∀y[P(x, y) → ∃z[Q(x, y, z)]] ↔ R(x)]

เริ่มโดยกำจัดตัวเชื่อม → และ ↔ ออกก่อน แล้วย้ายเครื่องหมาย ¬ เข้าไปในสุด (คือ ติดกับตัวประพจน์)

∀x[∀y[¬P(x, y) ∨ ∃z[Q(x, y, z)]] ↔ R(x)]
≡ ∀x[(¬∀y[¬P(x, y) ∨ ∃z[Q(x, y, z)] ∨ R(x)) ∧
(∀y[¬P(x, y) ∨ ∃z[Q(x, y, z)] ∨ ¬R(x))]
≡ ∀x[(∃y[P(x, y) ∧ ∀z[¬Q(x, y, z)]] ∨ R(x)) ∧
(∀y[¬P(x, y) ∨ ∃z[Q(x, y, z)] ∨ ¬R(x))]

แล้วตอนนี้จะทำไงต่อดีหละ ??? ... ติดตามตอนหน้าละกัน (ตอนหน้าชื่อว่า ตรรกศาสตร์: รูปแบบปกติสโกเล็ม นะ มันเป็นขั้นตอนต่อจากนี้เลยหละ)

Wednesday, September 28, 2005

ตรรกศาสตร์: ความ "เข้าใจ" ของคน

เอาแต่เพลงมาใส่เดี๋ยวจะเบื่อกัน สลับไปเป็นตรรกศาสตร์บ้างนะ

ก็ ที่จะเอามาให้ดูกันครั้งนี้คือ เรื่องของ "ความเข้าใจ" ของคนหนะ ว่ามันต่างกับคอมพิวเตอร์ยังไง ทำไมบางทีเราถึงรู้สึกว่า คอมพิวเตอร์มันไม่สามารถ "เข้าใจ" อะไรได้

สมมติว่า เรามีภาษาอันดับหนึ่งต่อไปนี้
Predicate Symbol: P
Function Symbol: f
Variable Symbol: a, b, c, d
Predicate Set:
1. ∀a∀b∀c[P(a, b) → P(f(a, c), f(c, b))]
2. ∀a∀b∀c[(P(a, b) ∧ P(b, c)) → P(a, c)]
เราจะพิสูจน์ว่า

∀a∀b∀c∀d[(P(a, b) ∧ P(c, d)) → P(f(a, c), f(b, d))]

... เห็นสัญลักษณ์แล้วก็เหงื่อตกเลย แต่จริง ๆ ทำได้ไม่ยากหรอก ลองเริ่มจาก สมมติค่าคงที่ A B C D แทนลงไปในตัวแปร (เพราะมันเป็น ∀ แสดงว่า ใส่อะไรลงไปมันก็ต้องเป็นจริง)

P(A, B) ∧ P(C, D)

เอา P(A, B) ไปแทนค่าใน 1 แบบนี้... (a = A, b = B, c = C)

P(A, B) → P(f(A, C), f(C, B))
จะได้ว่า P(f(A, C), f(C, B))

จากนั้น เอา P(C, D) ไปใส่ใน 1 เหมือนกัน... (a = C, b = D, c = B)

P(C, D) → P(f(C, B), f(B, D))
จะได้ว่า P(f(C, B), f(B, D))

คราวนี้ เอาไปแทนใน 2 (a = f(A, C), b = f(C, B), c = f(B, D)) ก็จะได้ว่า

(P(f(A, C), f(C,B)) ∧ P(f(C, B), f(B, D))) → P(f(A, C), f(B, D))

ซึ่ง ฝั่งซ้ายของ "→" เป็นจริง ดังนั้น

P(f(A, C), f(B, D)) เป็นจริง

ก็เลยสรุปได้ว่า

∀a∀b∀c∀d[(P(a, b) ∧ P(c, d)) → P(f(a, c), f(b, d))] เป็นจริง

แต่ ... ลองเปลี่ยนหน้าตาสัญลักษณ์เราซักหน่อยซิ...
Predicate Symbol: =
Function Symbol: +
Variable Symbol: a, b, c, d
Predicate Set:
1. ∀a∀b∀c[a = b → a + c = c + b]
2. ∀a∀b∀c[(a = b ∧ b = c) → a = c]
ข้อสรุปเรากลายเป็น

∀a∀b∀c∀d[a = b ∧ c = d → a + c = b + d]

ดูแล้ว "เข้าใจ" มากขึ้นมั้ย? แล้วลองดูอีกอย่าง
Predicate Symbol: >
Function Symbol: +
Variable Symbol: a, b, c, d
Predicate Set:
1. ∀a∀b∀c[a > b → a + c > c + b]
2. ∀a∀b∀c[(a > b ∧ b > c) → a > c]
แล้วก็ อีกแบบ (อันนี้เป็นจริงเฉพาะจำนวนบวกนะ)
Predicate Symbol: ≤
Function Symbol: ⋅
Variable Symbol: a, b, c, d
Predicate Set:
1. ∀a∀b∀c[a ≤ b → a⋅c ≤ c⋅b]
2. ∀a∀b∀c[(a ≤ b ∧ b ≤ c) → a ≤ c]
จะเห็นว่า จริง ๆ แล้ว เรา "เข้าใจ" ไอ้เครื่องหมายพวกนี้แตกต่างกัน แต่สำหรับคอมพิวเตอร์ มันเหมือนกันหมด

"ความเข้าใจ" ของเรา ทำให้เราคิดอะไรได้เร็วขึ้น แต่โปรแกรมคอมพิวเตอร์ทุกวันนี้ ไม่มี "ความเข้าใจ" ตรงนี้ ดังนั้น ถึงแม้คอมพิวเตอร์จะคิดได้เร็วแค่ไหน ขอบเขตความรู้ของมัน ก็ยังถูกตีกรอบด้วย "Axiom" ที่เราโปรแกรมให้ แต่มนุษย์มีความสามารถที่จะสร้าง Axiom เหล่านี้ขึ้นมาได้จากการสังเกต การคาดเดา ฯลฯ หรือที่เราเรียกรวม ๆ ว่า "ความคิดสร้างสรรค์"

ถ้าเมื่อไหร่มีโปรแกรมคอมพิวเตอร์ที่ประมวลผลกรณี P กับ f ช้ากว่ากรณีของเครื่องหมาย "+" กับ "=" แล้วล่ะก็ คอมพิวเตอร์ที่คิดได้อย่างมนุษย์ก็คงใกล้แล้วหละ (ไม่ได้หมายถึง ใส่คำสั่งให้มัน delay เพิ่มขึ้นอะนะ แต่หมายถึงช้าโดยธรรมชาติ)

แต่โดยส่วนตัว ผมว่า ทำไม่ได้อยู่ดีแหละ ... จักรวาลนี้อาจจะเป็นเซตของ Axiom ที่เล็กที่สุด ที่สามารถทำให้เกิด "ความคิดสร้างสรรค์" ได้ก็ได้

Tuesday, September 27, 2005

เอามาให้ฟัง - เพลงจากงาน TAM

ต่อไปนี้ เป็นเพลงที่แต่งขึ้นสำหรับใช้ในการแข่งขันทำ Animation งาน On-Site Live Contest ซึ่งอยู่ใน TAM คราวที่แล้ว

ผมใช้เวลาแต่งทั้ง 4 เพลง รวมประมาณ 4-5 ชั่วโมงได้ (มั้ง) โชคดีที่ตัว Animation เพื่อน ๆ ในทีมทำได้ดี ผมเลยได้รางวัลไปกับเค้าด้วยทั้ง ๆ ที่ไม่ได้วาดรูปซักแอะ :P

ก็ ... เนื่องจากมันใช้ประกอบใน Animation ที่ยาวแค่ประมาณ 3 นาที ผมก็เลยไม่ได้ทำให้มันจบเป็นเพลงจริง ๆ ซักเพลง แต่ละอันก็เหมือนจะเป็นแค่ "ท่อน" ของเพลง ... ถ้ามีเวลาอาจจะมาแต่งต่อให้มันยาว ๆ หน่อย

เชิญรับฟังได้ครับ:
อ้อ! มีอีกอย่าง ... เพลงพวกนี้ยังไม่มีชื่อเลย ช่วยเสนอชื่อเพลงให้หน่อยนะครับ (อันที่แล้วก็ด้วย)

Monday, September 26, 2005

ทั่วไป

จากเพลง Because You Loved Me ของ Celine Dion

You were my strength when I was weak
You were my voice when I couldn't speak
You were my eyes when I couldn't see

มันคิดได้สองแบบรึเปล่า? :P

เอามาให้ฟัง - เพลงประกอบงาน Imagine Cup ของเพื่อน

นี่เป็นเพลงบรรเลงที่ผมแต่ง ให้เพื่อนเอาไปประกอบผลงาน Animation ที่ส่งประกวด Imagine Cup ครับ ก็ ... งาน Imagine Cup ครั้งนั้น เพื่อน ๆ ไม่ค่อยมีเวลาทำเท่าไหร่ ก็เลยยอมรับผลการตัดสินของเค้าได้ (อย่างเต็มใจด้วย)

จะว่าไป มันยังไม่เป็นเพลงหรอก แต่ก็ใช้เวลาแต่งปาเข้าไปเกือบ 2 ชั่วโมงได้มั้ง (จริง ๆ ก็ ... ส่วนใหญ่นั่งจ้อมากกว่า :P) แบบว่า ถูกวานให้แต่งเอาวันส่งงานน่ะ ก็เลยได้แค่ "ท่อน" ของเพลง

ลองไปฟังเล่น ๆ ดูละกันครับ "จิ้มที่นี่"

เพลงนี้ ทำด้วย Finale 2005 แล้วก็ Save เป็น .mid ไม่ได้ตกแต่ง Dynamic และ Effect ใด ๆ ทั้งสิ้น ถ้ามีใครสนใจไปทำต่อให้ ก็ขอบคุณไว้ล่วงหน้าละกัน ส่วนตัว Score ถ้าอยากดู ไว้จะเอามาให้ดูอีกทีละกัน (คงไม่ค่อยอยากดูกันมั้ง?)

Sunday, September 25, 2005

เรื่องดนตรี - บรรทัดห้าเส้น และ Key Signature

ครั้งจะเอาสัญลักษณ์ที่คนทั่วโลกเค้าใช้กัน มาให้ดูนะ

คิดว่าเกือบทุกคน คงจะรู้อยู่แล้วว่า ปกติ เค้าบันทึกโน้ตกันบน "บรรทัดห้าเส้น" เรามาเริ่มต้นโดยทำความรู้จักกับ "Clef" กันก่อน

รูปพวกนี้เอามาจากที่อื่นนะ (http://www.thefreedictionary.com/) ... นี่คือหน้าตาของ "กุญแจซอล (Treble Clef)" ที่เรารู้จักกัน



แล้วก็ "กุญแจฟา (Bass Clef)" ...



จริง ๆ ยังมีตัวอื่น ๆ อีกเยอะเลย ลองไปดูนี่ละกัน (Clef จาก Wikipedia อีกแล้ว) แต่สองตัวนี้ นิยมใช้ที่สุดหละ ... ตำแหน่งของหัวโน้ตในบรรทัดห้าเส้น บ่งบอกถึงโน้ตต่าง ๆ ดังรูป



คราวนี้มาคิดย้อนไปนิดนึง เรื่องเก่า ๆ เราพูดถึงโน้ตคู่ คราวนี้จะเอามาให้เห็นภาพ ในบรรทัดห้าเส้นนะ
(P = Perfect, M = Major, m = Minor, dim = Diminished, Aug = Augmented)



พอพลิกตัวล่างขึ้นไป 1 octave ก็จะสลับ M กับ m กัน



ตัวอย่างโน้ตคู่อื่น ๆ ... เมื่อสลับตัวบนตัวล่างกัน dim กับ Aug ก็จะสลับกัน (สังเกตว่า โน้ตแต่ละคู่ที่ตำแหน่งเดียวกัน ใน Treble Clef กับ Bass Clef อยู่ใน note class เดียวกันนะ)



Key Signature

คราวนี้ มาถึงตัวสำคัญของเราละ ... ลองดูก่อนว่า ถ้าเราเขียนโน้ตในบันไดเสียง D เมเจอร์ (คือ D[i] เมื่อ i = 1, 2, 3, 4, 5, 6, 7) จะมีหน้าตายังไงบ้าง



แล้วลอง Eb เมเจอร์บ้าง...



พอเอาไปเขียนเป็นเพลงจริง ๆ เข้า ไอ้ตัว # กับ b เนี่ย มันก็รกเลย เค้าก็เลยมีวิธีขี้เกียจขึ้นมา คือ เขียน Key Signature ไว้ข้างหน้าก่อน



เย่ ... จะได้ประหยัดหมึก แล้วก็ไม่รกตาด้วย

จากที่รู้ในตอนก่อน ๆ ว่า nmScale(P) = MScale(P + 1.5) (เรื่องดนตรี - Scale) ดังนั้น Key Signature ของบันไดเสียง C เมเจอร์ จะเหมือนกับ A ไมเนอร์ คู่อื่น ๆ ก็ด้วย

Key Signature ของบันไดเสียงทั้งหมด มีให้ดู "ที่นี่" (Wikipedia อีกแล้ว)

Saturday, September 24, 2005

Discrete vs Continuous: ฟังก์ชัน เวกเตอร์ และเมตริกซ์

ในตอน Discrete: ฟังก์ชัน เวกเตอร์ และเมตริกซ์ เรารู้ว่าผลคูณเมตริกซ์ ที่แท้ก็คือผลคูณภายในนั่นเอง คราวนี้เราจะมาลองดูว่า ในกรณีของเวกเตอร์ที่มีโดเมนเป็นเซตอนันต์นับไม่ได้ อะไรคือ เมตริกซ์ และ ผลคูณ ของมันกับเวกเตอร์

คิดว่าเมตริกซ์คือฟังก์ชันสองตัวแปรนะ

จากความเดิมในเรื่อง Discrete: ฟังก์ชัน เวกเตอร์ และเมตริกซ์ สมมติว่า มีเวกเตอร์ f และเมตริกซ์ K ผลคูณก็จะเป็น

F = Kf

หรือถ้าคิดที่แต่ละตัวของ F ก็จะได้

F(y) = KT(y) ⋅ f
(KT คือ transpose ของ K นะ)

คราวนี้ ถ้าคิดผลคูณภายใน เราก็จะได้ว่า

F(y) = Σx∈D KT(y, x) f(x)
เมื่อ D คือ โดเมนของ KT(y) กับ f ซึ่งนับได้

แต่ถ้า D เป็นเซตอนันต์ที่นับไม่ได้ เราก็จะได้ว่า

F(y) = ∫x∈D KT(y, x) f(x) dx

ถ้ามองทั้งสองสมการนี้ เป็นการแปลง T ซึ่งแปลงเวกเตอร์จาก f ไปเป็น F เราจะรู้คุณสมบัติที่สำคัญ 2 อย่าง คือ

T(f + g) = T(f) + T(g)
และ T(cf) = cT(f)
(ไม่พิสูจน์ให้ดูนะ มันง่าย)

ซึ่งก็แสดงว่า T เป็นการแปลงเชิงเส้น (ถ้าลืมว่ามันหมายความว่าไง ลองไปดู Transformation: Abstraction & Overview นะ)

เมื่อมองเป็นการแปลง ทั่ว ๆ ไปคนจะนิยมใช้ตัวแปร "t" กับ "s" มากกว่า...

F(s) = Σt∈D KT(s, t) f(t)
F(s) = ∫t∈D KT(s, t) f(t) dt

แล้วก็ D กับ KT(s, t) ที่นิยมใช้กันก็มี...
  • Discrete Fourier Transformation
    → D = Zn, KT(s, t) = e-ist
  • Fourier Series
    → D = [-L, L], KT(s, t) = (1/2L)e-iπst/L
  • Fourier Transformation
    → D = R, KT(s, t) = e-ist
  • Generating Function (Transformation)
    → D = Z+, KT(s, t) = st
  • Z Transformation
    → D = Z+, KT(s, t) = s-t
  • Laplace Transformation
    → D = R+, KT(s, t) = e-st
หมายเหตุ: i = √-1 , R = จำนวนจริง, Z = จำนวนเต็ม, Zn = {0, 1, 2, ..., n - 1}

จริง ๆ มีมากกว่านี้แหละ แต่ยังไม่พูดถึงละกัน

Friday, September 23, 2005

Synonym ของคำว่า "เกลียด" (Verb)

ยังไม่ลืมนะ ว่าจะเอาคำศัพท์มาให้ดูกันเรื่อย ๆ :D

คำว่า "เกลียด" เนี่ย มีหลายลักษณะนะ เดี๋ยวค่อย ๆ ดูไปทีละแบบแล้วกัน คราวนี้เอาแค่ verb ก่อน

เกลียดแบบทั่วไปก็คือ "ไม่ชอบ"
  • dislike
คราวนี้ คำว่าเกลียดที่มีหมายความว่า "รู้สึกว่าเลว" หรือ "รังเกียจมาก" ก็มี... (verb หมดทุกตัวนะ)
  • abhor
  • abominate
  • loathe
การ "ดูถูก" ก็เป็นการแสดงความเกลียดชังแบบนึง ไปลองดูตอนเก่า ๆ นะ (Synonym ของคำว่า "ดูถูก")

แล้วก็ เกลียดแบบ "โกรธเกลียดเคียดแค้น"...
  • begrudge ← grudge (n) = ความแค้น
  • resent
เกลียดมาก ๆ เข้า ก็จะเป็น "มุ่งร้าย" และ "สาปแช่ง"
  • anathemize/anathematize ← anathema (n) = คนเลว, คนน่ารังเกียจ
  • bedamn (damn)
  • begrudge ← grudge (n) = ความแค้น
  • beshrew ← shrew(n) = คำด่า
  • comminate
  • curse
  • damn
  • detest
  • execrate - ตรงข้ามกับ consecrate (v) น่ะ
  • hate
  • imprecate
  • maledict (mal = ร้าย)
verb ที่เกี่ยวข้อง แต่ความหมายเป็นอีกด้านนึง คือ "ทำให้(คนอื่น)เกลียด" ก็มีประมาณนี้
  • disgust
  • offend
  • pique
  • repel
  • repulse
  • revolt
ไว้จะมาต่อ noun กับ adjective นะ

Thursday, September 22, 2005

Continuous: Linear Dependency

ขอทวนความรู้ในตอนอื่นนิดนึงนะ เราจะเรียกการแปลง f:A → B ว่าเป็น การแปลงเชิงเส้น (Linear Transformation) ก็ต่อเมื่อ

f(x + y) = f(x) + f(y)
และ
f(cx) = cf(x)

จากนิยามของ Linear Combination ถ้า

w = au + bv
เมื่อ a, b ∈ R
หรือก็คือ
w ∈ span({u, v})

เราจะบอกว่า w เป็น ผลรวมเชิงเส้น (Linear Combination) ของ u กับ v

คราวนี้ ถ้าเราจะบอกว่า {u, v} มีคุณสมบัติ Linear Dependency หรือไม่ เราก็ต้องตรวจสอบว่า | u : v | = 0 รึเปล่า

ข้อจำกัดของวิธีนี้ก็คือ u และ v จะต้องมีจำนวนมิติเท่ากับ 2 เท่านั้น แต่ถ้า u กับ v ของเรามีโดเมนที่มากกว่านี้หละ เราจะทำยังไง?

วิธีแก้ก็คือ ... สมมติว่าเรามีการแปลงเชิงเส้น ชื่อว่า f เราจะรู้ว่า

ถ้า w = au + bv
แล้ว f(w) = af(u) + bf(v)

เพื่อให้เขียนง่าย ๆ หน่อย เราจะกำหนดให้

u' = f(u)
v' = f(v)
w' = f(w)

ซึ่งแปลว่า ถ้าเรากำหนดเวกเตอร์ใหม่กลุ่มนึง ชื่อว่า p(x) กับ q(x) ดังนี้

p(x) = ( u(x), u'(x) )
q(x) = ( v(x), v'(x) )

ข้อสรุปที่เราจะได้ก็คือ (f ต้องเป็นตามเงื่อนไขบางอย่างด้วย ... ไว้พูดถึงทีหลังนะ)

ถ้า {u, v} มีคุณสมบัติ Linear Dependency แล้ว {p(x), q(x)} ก็จะมีด้วยสำหรับทุก x (ที่อยู่ในโดเมนของ u กับ v)

และ

ถ้า {u, v} มีคุณสมบัติ Linear Independency แล้ว {p(x), q(x)} ก็จะมีด้วยสำหรับทุก x

ซึ่งเมื่อรวมกัน จะได้

"{u, v} มีคุณสมบัติ Linear Dependency ก็ต่อเมื่อ {p(x), q(x)} มีคุณสมบัติ Linear Dependency สำหรับทุก x"

จริง ๆ แล้ว วิธีนี้สามารถใช้กับเวกเตอร์มากกว่า 2 ตัวได้ด้วย แต่เราก็ต้องหา f2 f3 ... fn - 1 ตัวอื่น ๆ (เดี๋ยวจะพูดถึงวิธีเลือก)

สังเกตว่า ข้อสรุปนี้ทำให้เราสามารถตรวจสอบ Linear Dependency ของกลุ่มเวกเตอร์ที่มีโดเมนเป็นอนันต์ได้ด้วย

ตัวอย่างการใช้งานที่รู้จักกันดีก็คือ Wronskian ซึ่งเป็นกรณีที่ fi(x) คือ อนุพันธ์อันดับที่ i ของ x เช่น

u(x) = 2x + 1
v(x) = x2 - x
w(x) = 2x2 + 1

เราอยากรู้ว่า {u, v, w} มีคุณสมบัติ Linear Dependency หรือไม่ เราจะใช้ Wronskian ได้เพราะว่าเวกเตอร์ทั้งสามนี้มีอนุพันธ์ที่ทุกจุดที่เราสนใจ เริ่มโดยหาอนุพันธ์อันดับต่าง ๆ ของเวกเตอร์ทั้งสามก่อน

u'(x) = 2
v'(x) = 2x - 1
w'(x) = 4x

u''(x) = 0
v''(x) = 2
w''(x) = 4

คราวนี้ เราก็สร้างเวกเตอร์ p(x) q(x) และ r(x) ดังนี้

p(x) = (u(x), u'(x), u''(x)) = (2x + 1, 2, 0)
q(x) = (v(x), v'(x), v''(x)) = (x2 - x, 2x - 1, 2)
r(x) = (w(x), w'(x), w''(x)) = (2x2 + 1, 4x, 4)

คราวนี้เราก็หาค่า Wronskian สำหรับแต่ละค่า x ดังนี้

W(x) = | p(x) : q(x) : r(x) |

พอแทนค่าลงไป จะได้
W(x) = 4(2x + 1)(2x - 1) + 4(2x2 + 1)


- 8x(2x + 1) - 8(x2 - x)

= 16x2 - 4 + 8x2 + 4 - 16x2 - 8x - 8x2 + 8x

= 0

เราจึงสรุปได้ว่า {u, v, w} มีคุณสมบัติ Linear Dependency

นอกจากการใช้ Wronskian เราอาจจะหา fi ตัวอื่น ๆ มาแทนได้ เช่น Δ ลองคิดในตัวอย่างอันเดิม ก็จะได้ว่า

Δu(x) = 2
Δv(x) = 2x
Δw(x) = 4x + 2

Δ2u(x) = 0
Δ2v(x) = 2
Δ2w(x) = 4

แล้วก็สร้าง p(x) q(x) r(x) เหมือนเดิม

p(x) = (u(x), Δu(x), Δ2u(x)) = (2x + 1, 2, 0)
q(x) = (v(x), Δv(x), Δ2v(x)) = (x2 - x, 2x, 2)
r(x) = (w(x), Δw(x), Δ2w(x)) = (2x2 + 1, 4x + 2, 4)

แล้วก็หา | p(x) : q(x) : r(x) | สำหรับแต่ละค่า x (ยืมเครื่องหมาย W(x) จาก Wronskian มาละกันนะ)
W(x) = 8x(2x + 1) + 4(2x2 + 1)


- 2(2x + 1)(4x + 2) - 8(x2 - x)

= 16x2 + 8x + 8x2 + 4 - 16x2 - 16x - 4 - 8x2 + 8x

= 0

นอกจากนี้ เราจะลองให้ f1 = d/dx และ f2 = Δ ก็ได้ คราวนี้ p(x) q(x) r(x) จะเปลี่ยนเป็น

p(x) = (u(x), u'(x), Δu(x)) = (2x + 1, 2, 2)
q(x) = (v(x), v'(x), Δv(x)) = (x2 - x, 2x - 1, 2x)
r(x) = (w(x), w'(x), Δw(x)) = (2x2 + 1, 4x, 4x + 2)

ซึ่ง (ไปลองทด ๆ ดูเองละกันนะ) | p(x) : q(x) : r(x) | = 0 สำหรับทุก x

จะเห็นว่า เพียงแค่เลือก fi ให้ใช้งานได้ เราก็จะตรวจสอบ Linear Dependency ได้ ไม่ว่าโดเมนของเวกเตอร์ จะเป็นเซตจำกัด เซตอนันต์นับได้ หรือเซตนับไม่ได้

การเลือก fi

ในกรณีที่เวกเตอร์ของเรามีโดเมนเป็นจำนวนเต็ม (นับได้) ตัวเลือกที่นิยมคือ fi = Δi หรือ Ei (เผื่อลืม... Eu(x) = u(x + 1) นะ)

ส่วนกรณีที่โดเมนเป็นช่วง (คือนับไม่ได้) ตัวเลือกที่นิยมคือ fi = (d/dt)i (ผลลัพธ์เป็น Wronskian)

แต่จริง ๆ แล้ว เราสามารถเลือก f อื่น ๆ ได้อีกมากมาย ... ขอกำหนดสัญลักษณ์อีกตัวนึงก่อนนะ

Eru(x) = u(x + r)
เมื่อ r ∈ R

คราวนี้ แค่เราเลือกให้

fi = Er(i)
โดยที่ r(i) = r(j) ก็ต่อเมื่อ i = j

ก็จะใช้กับเวกเตอร์ที่มีโดเมนเป็นอนันต์แล้ว

นอกจากนี้ ถ้าสังเกตดี ๆ จะเห็นว่า
Δ = E - 1
d/dx = limr→0 (Er - 1)/r

ซึ่งถ้าคิดขยายไปเรื่อย ๆ แล้ว เราจะสรุปกรณีที่กว้างกว่าได้ว่า

ถ้า Pi(x) เป็นฟังก์ชัน โดยที่ { Pi(x) | i = 0, 2, ..., n - 1 } มีคุณสมบัติ Linear Independency สำหรับทุก x ∈ R แล้ว fi = Pi(E) จะเป็นการแปลงที่ใช้ตรวจสอบ Linear Dependency ของเวกเตอร์ได้

จบและ ... ยาวเนอะ

เฮ่อ ...

จะบอกว่า ... ส่งเปเปอร์ไปแล้ว!!! ... ถึงเวลาซ้อมเปียโนละ

Wednesday, September 21, 2005

ตรรกศาสตร์: ภาษาอันดับหนึ่ง

ถ้าว่ากันสั้น ๆ ว่า ภาษาอันดับหนึ่ง (First-Order Language) คืออะไร? มันก็คือ ภาษาที่ไม่มีความคลุมเครือ และง่ายกับคอมพิวเตอร์ครับ

โครงสร้างของภาษาอันดับหนึ่ง มีส่วนประกอบ 5 กลุ่มหลัก ๆ คือ
  1. สัญลักษณ์ประพจน์ภาคแสดง (Predicate Symbol)
  2. สัญลักษณ์ฟังก์ชัน (Function Symbol)
  3. สัญลักษณ์ค่าคงที่ (Constant Symbol)
  4. สัญลักษณ์ตัวแปร (Variable Symbol)
  5. กลุ่มของประพจน์ภาคแสดง (Predicate Set)
ซึ่งประพจน์ภาคแสดงใน 4 จะต้องประกอบด้วยเครื่องหมายใน 3 กลุ่มแรก รวมกับกลุ่มของตัวเชื่อม และตัวบ่งปริมาณ ได้แก่
  1. ¬ ∧ ∨ → ↔
  2. ∃ ∀ ที่ตามหลังด้วยสัญลักษณ์ตัวแปร
  3. , ( ) [ ] { } ตามแต่สะดวกใช้
จริง ๆ กฎเกณฑ์มันมากกว่านี้ แต่ขอไม่พูดถึงละกัน เพราะคิดว่าใช้สามัญสำนึกจะง่ายกว่า ส่วนความหมายของเครื่องหมายพวกนี้ คงไม่ต้องอธิบายนะ

ตัวอย่างเช่น
Predicate Symbol: Even, Odd
Function Symbol: NextOf
Constant Symbol: 0
Variable Symbol: x
Predicate Set:
1. Even(0)
2. ∀x [ Even(x) ↔ ¬Odd(x) ]
3. ∀x [ Even(x) → Odd(NextOf(x)) ]
4. ∀x [ Odd(x) → Even(NextOf(x)) ]
สมมติว่า เรามีระบบของภาษาอันดับแล้วอันนึง เราอยากรู้ว่า ประพจน์ภาคแสดงอีกอันนึง เป็นจริงในระบบนั้นรึเปล่า เช่นในตัวอย่างนี้ เราอยากรู้ว่า Odd(NextOf(0)) เป็นจริงรึเปล่า วิธีที่นิยมใช้กันก็คือ เพิ่มนิเสธของประพจน์ดังกล่าวเข้าไป ซึ่งก็คือ

5. ¬Odd(NextOf(0))

คราวนี้ ถ้าเราสามารถแสดงให้เห็นว่าเกิด ความไม่สมเหตุสมผล (Inconsistency) ของระบบขึ้นมาได้ เราก็จะรู้ว่าประพจน์ที่เราต้องการตรวจสอบเป็นจริง แต่ถ้าไม่ได้ เราก็จะยังสรุปไม่ได้

ในตัวอย่างที่ยกมานี่ ถ้าเราเอา 1 กับ 3 รวมกัน จะได้ประพจน์ใหม่คือ

Odd(NextOf(0))

ซึ่ง ขัดแย้งกับประพจน์ที่ 5 เราก็เลยสรุปได้ว่า Odd(NextOf(0)) เป็นจริง

คำว่า "รวมกัน" เนี่ย ตอนนี้ก็ขอให้เข้าใจไปตาม "สามัญสำนึก" ก่อนละกัน วิธีตายตัวที่เรียกได้ว่าเป็น "Algorithm" เนี่ย จะต้องพูดถึงแน่ ๆ แต่รอก่อนนะ

คุณสมบัติสำคัญของภาษาอันดับหนึ่งก็คือ เราสามารถเปลี่ยนชื่อสัญลักษณ์ต่าง ๆ ได้ตามใจชอบ ขอแค่อย่าให้มันซ้ำกัน ชนกัน ก็พอ ... แล้วมันสำคัญยังไงน่ะหรอ? ... ตอนหน้าจะยกตัวอย่างให้ดูละกัน

Tuesday, September 20, 2005

Continuous: ผลคูณภายใน

จากตอน Discrete: ฟังก์ชัน เวกเตอร์ และเมตริกซ์ เรารู้ว่า ถ้า u และ v เป็นฟังก์ชันที่มีโดเมนจำกัดเป็น D แล้ว

uv = Σx∈D u(x)v(x)

(จริง ๆ D อาจจะเป็นเซตอนันต์ที่นับได้ ก็ได้)

คราวนี้ ถ้า D เป็นเซตอนันต์ที่นับไม่ได้หละ? ... uv จะมีค่าที่ไม่ใช่ ∞ ก็ต่อเมื่อ u(x) หรือ v(x) ต้องมีค่าเข้าใกล้ 0

สมมติเลยละกันว่า v(x) = w(x) Δx เมื่อ Δx → 0 (ไม่อยากให้ยาว ใครไม่รู้เรื่องไปลองดูเรื่อง Riemann Integral ก่อนนะ) เราก็จะได้ว่า

uv = limΔx→0 Σx∈D(Δx) u(x)w(x) Δx

เมื่อ D(Δx) คือโดเมนที่เกิดจากการซอยย่อยโดเมนเดิม เช่น

ถ้า D(1) = {0, 1, 2, 3, ...}
จะได้ D(0.5) = {0, 0.5, 1, 1.5, 2, 2.5, 3, ...}
D(0.25) = {0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, ...}
เป็นต้น

ถ้าเราให้ D = limΔx→0 D(Δx) จะได้ว่า

uv = ∫x∈D u(x)w(x) dx

เพื่อให้สะดวก เราจะเขียนใหม่เลยว่า

uv = ∫x∈D u(x)v(x) dx

สังเกตว่า ของเดิม v(x) มีค่าเข้าใกล้ศูนย์ แต่ตอนนี้ไม่ใช่แล้ว

เราเรียกตัวนี้ว่า ผลคูณภายใน ของ u กับ v ในกรณีที่โดเมนเป็นเซตนับไม่ได้

Monday, September 19, 2005

ตรรกศาสตร์: ต้นไม้การพิสูจน์ และต้นไม้ตัวอย่างขัดแย้ง

เดี๋ยวจะแสดง algorithm สำหรับพิสูจน์ว่า "ประพจน์เป็นสัจพจน์หรือไม่" ให้ดู

สมมติว่าเรามีประพจน์
(A ∧ B ∧ C) → (D ∨ E ∨ F)
เพื่อให้เขียนสะดวก เราจะใช้สัญลักษณ์นี้แทน
A, B, C → D, E, F

ประพจน์นี้ จะเป็นเท็จก็ต่อเมื่อ ทุกตัวทางซ้ายเป็นจริง และทุกตัวทางขวาเป็นเท็จ

คราวนี้ ถ้ามีประพจน์ตัวนึงที่อยู่ทั้งสองฝั่ง เช่น
A, B → A, C

เราจะสรุปได้ทันทีว่าประพจน์นี้เป็นจริง

Algorithm - Constructing Trees

วิธีตรวจสอบความเป็นสัจพจน์ที่จะพูดถึง ก็คือ การพยายามหาเงื่อนไขที่ทำให้ประพจน์ไม่เป็นจริง ถ้าเราหาไม่ได้ แสดงว่ามันเป็นสัจพจน์

หลักการก็คือ พยายามทำให้ทุกตัวทางขวาเป็นเท็จ และพยายามทำให้ทุกตัวทางซ้ายเป็นจริง เอาตัวอย่างไปดูดีกว่า น่าจะเข้าใจง่ายกว่า ... สมมติว่าโจทย์คือ



ฝั่งซ้ายเราก็กระจายเครื่องหมาย "∨" เข้าไป ส่วนฝั่งขวา ก็แปลง "∨" ให้เป็น ","



(โดยทั่วไปเค้าจะเขียนจากล่างขึ้นบนกันนะ)

คราวนี้ เราต้องการทำให้เทอม "P ∨ Q" ที่อยู่ฝั่งซ้ายเป็นจริง ก็แยกได้สองกรณี คือ P เป็นจริง หรือ Q เป็นจริง ดังนี้



ประพจน์ที่เกิดขึ้นทางซ้าย ไม่มีพจน์หน้าตาซ้ำกัน กรณีนี้เราเรียกว่าเกิด ตัวอย่างขัดแย้ง (Counterexample) ซึ่งก็แปลว่า ถ้าให้ P เป็นจริง และ Q กับ R เป็นเท็จ ประพจน์นี้จะไม่เป็นจริง

แล้วก็ ... เราลองอ่านย้อนลงมาจากข้างบน เราก็จะเห็นขั้นตอนการแสดง ว่าทำไมประพจน์ตั้งต้น
(ที่อยู่ล่างสุด) มันถึงไม่เป็นสัจพจน์

รูปที่เราสร้างขึ้นมานี่ เรียกว่า "ต้นไม้ตัวอย่างขัดแย้ง" (Counterexample Tree)

คราวนี้ลองดูกรณีที่มันเป็นสัจพจน์บ้าง สมมติว่าโจทย์คือ


เราก็ค่อย ๆ แปลงให้อยู่ในรูปของเครื่องหมาย "," ก่อน แล้วทำให้มันดูง่ายที่สุด



(อย่าลืมว่า ล่างขึ้นบน)

คราวนี้ เราก็เลือกพจน์ทางซ้ายที่ยังมีตัวเชื่อม "∨" อยู่ แล้วแตกออกเป็นสองกรณี เหมือนในตัวอย่างที่แล้ว



(ขอตัดส่วนข้างล่างทิ้งนะ จะได้ไม่รก)

ประพจน์ใหม่ฝั่งซ้าย มี P อยู่ทั้งหัวและท้ายลูกศร จึงเป็นสัจพจน์ คราวนี้ลองดูประพจน์ใหม่ฝั่งขวาบ้าง จะเห็นว่ายังแตกต่อได้อีก



คราวนี้ ประพจน์ใหม่ที่เกิดขึ้น เป็นสัจพจน์ทั้งหมด ก็เลยไม่ต้องแตกต่อแล้ว สรุปได้เลยว่าประพจน์ตั้งต้นเป็นสัจพจน์

รูปที่สร้างอันนี้ เรียกว่า "ต้นไม้การพิสูจน์" (Proof Tree)



จะเห็นว่า ถ้าอ่านจากบนลงล่าง ก็จะได้วิธีพิสูจน์ความเป็นสัจพจน์ ของประพจน์ตั้งต้น (ตรงที่มีการแตก การรวม ถ้าอ่านลง ให้คิดว่าเป็นคำว่า "และ")

สรุป

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

แล้วถ้า?

ถ้าประพจน์ที่ต้องการพิสูจน์ ไม่ได้อยู่ในรูปแบบ "ถ้า...แล้ว" (A → B) หละ?

ก็เอาไว้ฝั่งขวาแต่เริ่มเลยสิ เพราะวิธีพิสูจน์ก็คือ เราจะหาวิธีทำให้มันเป็นเท็จไงหละ (จำได้มั้ยว่า อยู่ฝั่งขวา แปลว่า เราจะพยายามทำให้เป็นเท็จ)

อีกมุมมองนึง (แต่จริง ๆ แล้วเหมือนกัน) ก็คือ
→ P
แปลว่า ไม่ต้องรู้อะไรเลย ก็สรุปได้ว่า P หรือก็คือ P เป็นจริงเสมอ น่ะแหละ

Sunday, September 18, 2005

Transformation: Abstraction & Overview

หัวข้อนี้จะไม่มีเนื้อหาเท่าไหร่นะ เป็นการเกริ่นสำหรับตอนต่อ ๆ ไปมากกว่า

คำว่า Transformation หรือ การแปลง เนี่ย จะว่าเป็นฟังก์ชันก็ไม่เชิงหละ ถ้าคิดไม่มาก เราจะใช้คำว่า การแปลง สลับกับคำว่า ฟังก์ชัน ได้เสมอ หรือพูดง่าย ๆ ว่า "ฟังก์ชัน = การแปลง"

แต่คำว่าการแปลงเนี่ย โดยทั่วไปมักจะแฝงความหมายว่า มีอินเวอร์ส อยู่ด้วย (แต่ก็ไม่เสมอไปนะ)

เซตกำลัง และ ฟังก์ชันของสับเซตของโดเมน

สมมติว่ามีเซต A อยู่ เซตกำลัง (Power Set) ของเซต A ก็คือ
2A = { X | X ⊆ A }

แล้วคราวนี้ สมมติว่าเรามีการแปลง f:A → B อยู่ ถ้าเรานิยาม F ได้ดังนี้
F(X) = { f(x) | x ∈ A }

จะเห็นว่า F:2A → 2B ก็เป็นการแปลงอีกตัวนึง

เนื่องจากในบางบริบท เรารู้อยู่แล้วว่าตัว x ใน f(x) เป็นสมาชิกของ A หรือสับเซตของ A (และไม่เป็นทั้งสองอย่างพร้อมกัน) คนส่วนใหญ่ก็เลยใช้เครื่องหมาย f ตัวเดิม (คือ ไม่เปลี่ยนเป็นตัวใหญ่) เพื่อหมายถึง F เช่น

f = { (1, a), (2, b), (3, c) } → f({1, 3}) = {a, c}
เป็นต้น

ตัวอย่างบริบทที่ทำให้เกิดความกำกวม:

f = { (1, a), (2, b), ({1, 2}, c) } → f({1, 2}) = c หรือว่า {a, b} ?
f = { (∅, 1) } → f(∅) = 1 หรือว่า ∅ ?

ประเภทการแปลงที่ได้ยินบ่อย ๆ (เอาแค่นี้ก่อนละกัน)

สมมติว่ามีการแปลง f:A → B
  • f จะเป็น Total Function ก็ต่อเมื่อ f(x) มีค่าสำหรับทุก x ∈ A โดยทั่วไป คำว่าฟังก์ชันเฉย ๆ จะหมายถึง Total Function ดังนั้น โดยทั่วไปเราจะคิดว่า A เป็นโดเมนได้เลย
  • f จะเป็น Injective Function (หรือ Injection) ก็ต่อเมื่อ ถ้า f(x) = f(y) แล้ว x = y
  • f จะเป็น Surjective Function (หรือ Surjection) ก็ต่อเมื่อ สำหรับทุก y ∈ B แล้ว จะสามารถหา x ∈ A ที่ทำให้ f(x) = y ได้
  • f จะเป็น Bijective Function (หรือ Bijection) ก็ต่อเมื่อ f เป็น injection และ surjection บางทีเราก็เรียก bijection ว่าเป็น Invertible Function
  • f จะเป็น Endomorphism ก็ต่อเมื่อ B ⊆ A
  • f จะเป็น Automorphism ก็ต่อเมื่อ B = A
  • f จะเป็น Homomorphism ก็ต่อเมื่อ f(x + y) = f(x) + f(y)
  • f จะเป็น Linear Transformation ก็ต่อเมื่อ f เป็น homomorphism และ A กับ B เป็นเซตของเวกเตอร์ คุณสมบัติที่เพิ่มเข้ามาก็คือ f(cx) = cf(x) เมื่อ c ∈ C (C คือเซตของจำนวนเชิงซ้อนนะ)
  • f จะเป็น Affine Transformation ก็ต่อเมื่อ ถ้า a + b = 1 แล้ว f(ax + by) = af(x) + bf(y)
  • f จะเป็น Orthogonal Transformation ก็ต่อเมื่อ ถ้า x ตั้งฉากกับ y แล้ว f(x) ตั้งฉากกับ f(y)
  • f จะเป็น Topological Transformation ก็ต่อเมื่อ f เป็น bijection ที่ต่อเนื่อง
ตัวอย่างการแปลงเชิงเส้น (Linear Transformation) ที่คุ้นเคย
  • การคูณด้วยเมตริกซ์
  • การหาอนุพันธ์
  • การหาผลต่าง
  • การอินทิเกรต
  • การหาผลบวก
การแปลงเชิงเส้นที่จะพูดถึงในอนาคตอันใกล้ (และยังไม่ได้พูดถึง)
  • อนุกรมฟูเรียร์ (Fourier Series)
  • การแปลงฟูเรียร์ (Fourier Transformation) = อนุกรมฟูเรียร์แบบ continuous
  • ฟังก์ชันก่อกำเนิด (Generating Function) และการแปลง Z (Z Transformation)
  • การแปลงลาปลาซ (Laplace Transformation) = การแปลง Z แบบ continuous
การแปลงพื้นฐาน สำหรับ Signal & Image Processing (ถ้าจะเอามาเขียน คงไม่ลงรายละเอียดนะ)
  • การแปลงฟูเรียร์แบบไม่ต่อเนื่อง (Discrete or Fast Fourier Transformation)
  • การแปลงเวฟเล็ต (Wavelet Transformation)
  • การแปลง Hough (Hough Transformation)
การแปลงอื่น ๆ และเรื่องที่เกี่ยวข้อง
  • พิกัดเชิงขั้ว (Polar Coordinate)
  • การแทนการหมุนด้วย Quarternion
  • แรง Coriolis
  • การแปลง Lorentz
  • Jacobi
รายละเอียดทั่ว ๆ ไปของเรื่องพวกนี้ คงจะไม่เอามาเขียนให้อ่านกันหละ เพราะหาจากที่อื่นได้ไม่ยาก (หนังสือหรือ internet ก็ได้) จะเขียนแต่แนวคิดที่ค่อนข้างพิเศษหนะนะ แต่ถ้าอยากให้เขียนเรื่องไหนเป็นพิเศษก็บอกได้

Saturday, September 17, 2005

เรื่องดนตรี - โน้ตสัมพัทธ์

ไว้จะเขียนเรื่องทฤษฎีสัมพัทธภาพบ้างละ แต่ตอนนี้เอาเรื่องนี้ก่อน ตัวโน้ตสัมพัทธ์ :P

โดยปกติ หู (และสมองส่วนการฟัง) จะสามารถรับรู้ความสัมพัทธ์ของตัวโน้ตได้ง่ายกว่า pitch ของมันซะอีก

เวลาเราพูดถึงตัวโน้ตสัมพัทธ์แบบนี้ เราจะต้องบอกก่อนว่ามันสัมพัทธ์กับบันไดเสียงอะไร โดนส่วนใหญ่เราจะคิดเทียบกับบันไดเสียงเมเจอร์ และ บันไดเสียงไมเนอร์

Note Class

ก่อนที่จะพูดถึงตัวโน้ตสัมพัทธ์ เอาสัญลักษณ์อีกอย่างนึงก่อนดีกว่า

[ (X, O, M) ] = { (X, O + n, M) | n เป็นจำนวนเต็ม }

เนื่องจาก note class ไม่สนใจค่า O ดังนั้น เราจะเขียนใหม่ได้ว่า

(X, M) = { (X, n, M) | n เป็นจำนวนเต็ม }

คราวนี้ ถ้าเราเขียนชื่อตัวโน้ตแต่ไม่มีเลข octave ห้อย ก็ให้คิดว่าเป็น note class นะ เช่น Eb A Cx

นอกจากนี้ การใส่ # b x bb หรือ + n octaves ก็ทำได้ที่ note class เช่นกัน

[ X ]# = [ X# ]

สุดท้าย ... pitch class ของ note class ก็คือ

| [ (X, M) ] | = [ | (X, O, M) |P ]
เมื่อ O เป็นจำนวนเต็มอะไรก็ได้

โน้ตสัมพัทธ์ในบันไดเสียงเมเจอร์

ให้ X เป็น note class และ
MNoteClass(X, n) = N
โดยที่ (X0, N1) เป็นโน้ตคู่ n เมเจอร์หรือเพอร์เฟกต์
เราจะเรียกสมาชิกทุกตัวของ MNoteClass(X, n) ว่าเป็น
โน้ตตัวที่ n ของบันไดเสียง X เมเจอร์

ตัวอย่างเช่น
  • MNoteClass(C, 1) = C
  • MNoteClass(C, 2) = D
  • MNoteClass(C, 3) = E
  • MNoteClass(C, 4) = F
  • MNoteClass(C, 5) = G
  • MNoteClass(C, 6) = A
  • MNoteClass(C, 7) = B
  • MNoteClass(F, 1) = F
  • MNoteClass(G, 2) = A
  • MNoteClass(Bb, 3) = D
  • MNoteClass(D, 4) = G
  • MNoteClass(Eb, 5) = Bb
  • MNoteClass(A, 6) = F#
  • MNoteClass(Ab, 7) = G
ข้อสังเกต:
1. ถ้า MNoteClass(X, n) = Y แล้ว MNoteClass(X#, n) = Y# และ สำหรับเครื่องหมายอื่น ๆ ก็เหมือนกัน
2. ถ้า Y ∈ MNoteClass(X, n) แล้ว Y ∈ MScale( | X0 |P)


โน้ตสัมพัทธ์ในบันไดเสียงไมเนอร์

ก็คล้าย ๆ กับบันไดเสียงเมเจอร์แหละ สำหรับฮาร์โมนิกไมเนอร์ จะต่างกันที่โน้ตตัวที่ 3 กับ 6 คือ

hmNoteClass(X, 1) = MNoteClass(X, 1)
hmNoteClass(X, 2) = MNoteClass(X, 2)
hmNoteClass(X, 3) = MNoteClass(X, 3)b
hmNoteClass(X, 4) = MNoteClass(X, 4)
hmNoteClass(X, 5) = MNoteClass(X, 5)
hmNoteClass(X, 6) = MNoteClass(X, 6)b
hmNoteClass(X, 7) = MNoteClass(X, 7)

ข้อสังเกต: ถ้า Y ∈ hmNoteClass(X, n) แล้ว Y ∈ hmScale( | X0 |P)

ส่วนบันไดเสียงไมเนอร์อีกสองแบบที่เหลือ ก็ต่างกันนิดเดียว

nmNoteClass(X, 1) = MNoteClass(X, 1)
nmNoteClass(X, 2) = MNoteClass(X, 2)
nmNoteClass(X, 3) = MNoteClass(X, 3)b
nmNoteClass(X, 4) = MNoteClass(X, 4)
nmNoteClass(X, 5) = MNoteClass(X, 5)
nmNoteClass(X, 6) = MNoteClass(X, 6)b
nmNoteClass(X, 7) = MNoteClass(X, 7)b

amNoteClass(X, 1) = MNoteClass(X, 1)
amNoteClass(X, 2) = MNoteClass(X, 2)
amNoteClass(X, 3) = MNoteClass(X, 3)b
amNoteClass(X, 4) = MNoteClass(X, 4)
amNoteClass(X, 5) = MNoteClass(X, 5)
amNoteClass(X, 6) = MNoteClass(X, 6)
amNoteClass(X, 7) = MNoteClass(X, 7)

ข้อสังเกต:
1. ถ้า Y ∈ nmNoteClass(X, n) แล้ว Y ∈ nmScale( | X0 |P)
2. ถ้า
Y ∈ amNoteClass(X, n) แล้ว Y ∈ amScale( | X0 |P)

วิธีอ่านชื่อโน้ตคู่ (อีกที)

ตกลงกันอีกนิด สมมติว่าเรามี note class อยู่ ชื่อว่า X เราจะเอาตัวโน้ตที่ octave นึงของ X ออกมาได้ โดยเขียนว่า Xn เช่น MNoteClass(C, 3)5 = E5

แล้วก็ เราจะเขียน X[m] = MNoteClass(X, m) นะ จะได้สั้น ๆ

คราวก่อน (2 ตอนที่แล้ว) เคยบอกไปแล้วว่าโน้ตคู่มีชนิดอะไรบ้าง แต่คราวนี้จะบอกซ้ำ ในแบบที่จำง่ายขึ้นอีกนิดนึง
  • (X[1]n, X[4]n) และ (X[1]n, X[5]n) เป็นโน้ตคู่เพอร์เฟกต์
  • (X[1]n, X[2]n) (X[1]n, X[3]n) (X[1]n, X[6]n) และ (X[1]n, X[7]n) เป็นโน้ตคู่เมเจอร์
เมื่อใส่ b เข้าไป จะได้
  • (X[1]n, X[4]nb) และ (X[1]n, X[5]nb) เป็นโน้ตคู่ดิมินิช
  • (X[1]n, X[2]nb) (X[1]n, X[3]nb) (X[1]n, X[6]nb) และ (X[1]n, X[7]nb) เป็นโน้ตคู่ไมเนอร์
ใส่ b เข้าไปอีกทีที่ตัวบนของโน้ตคู่ไมเนอร์ จะกลายเป็นโน้ตคู่ดิมินิช
  • (X[1]n, X[2]nbb) (X[1]n, X[3]nbb) (X[1]n, X[6]nbb) และ (X[1]n, X[7]nbb) เป็นโน้ตคู่ดิมินิช
กลับไปที่กลุ่มแรก (เพอร์เฟกต์กับเมเจอร์) เมื่อใส่ # เข้าไปที่ตัวบน จะได้
  • (X[1]n, X[m]n#) เป็นโน้ตคู่อ็อกเมนต์ เมื่อ m = 1, 2, 3, 4, 5, 6, 7
เหตุผลนิด ๆ หน่อย ๆ กับการเรียกชื่อโน้ตคู่

ย้ำข้อสังเกตที่เคยบอกไว้อีกทีละกัน เผื่อจะเข้าใจกันมากขึ้นว่า ทำไมเราถึงเรียกโน้ตคู่พวกนี้ว่า เพอร์เฟกต์ เมเจอร์ ไมเนอร์ อ็อกเมนต์ และดิมินิช

สมมติว่า (u, v) เป็นโน้ตคู่ 2 3 4 5 6 หรือ 7 เราจะรู้ว่า (v, u + octave) เป็นโน้ตคู่ 7 6 5 4 3 หรือ 2 ตามลำดับ ถ้าให้ w = u + octave เราจะสรุปได้ว่า
  • (u, v) เป็นโน้ตคู่เพอร์เฟกต์ → (v, w) เป็นโน้ตคู่เพอร์เฟกต์
  • (u, v) เป็นโน้ตคู่เมเจอร์ → (v, w) เป็นโน้ตคู่ไมเนอร์
  • (u, v) เป็นโน้ตคู่ไมเนอร์ → (v, w) เป็นโน้ตคู่เมเจอร์
  • (u, v) เป็นโน้ตคู่อ็อกเมนต์ → (v, w) เป็นโน้ตคู่ดิมินิช
  • (u, v) เป็นโน้ตคู่ดิมินิช → (v, w) เป็นโน้ตคู่อ็อกเมนต์

Friday, September 16, 2005

Discrete: ฟังก์ชัน เวกเตอร์ และเมตริกซ์

เรื่องนี้ ต่อเนื่องมาจาก Discrete: ผลคูณภายใน และ การถ่วงน้ำหนัก" นะ คราวนี้จะไม่มีอะไรหนัก ๆ เหนื่อย ๆ แต่ยาวอะ ต้องดูรายละเอียดให้ดี ๆ หน่อยนะ ... มันดูเหมือนไม่มีอะไร แต่ก็พอมีเหมือนกัน

เวกเตอร์ = ฟังก์ชัน

สมมติว่า u เป็นเวกเตอร์ใน n มิติ โดยที่
u = (u1, u2, u3, ..., un)
เราอาจจะมองว่า ux เป็นฟังก์ชันของ x ที่มีโดเมนเป็น {1, 2, 3, ..., n} ก็ได้

ดังนั้น ต่อจากนี้ไปจะเขียน u(x) แทน ux นะ

สมมติว่า α เป็นเวกเตอร์ n มิติที่ค่าในทุกแกนเป็น 1 เราจะเขียนได้ว่า

α(x) = 1

คราวนี้ ผลคูณภายในของ α กับ u ก็จะมีหน้าตาเป็น...

αu = Σ1≤x≤n u(x)

กลายเป็นผลรวมของ u(x) ตั้งแต่ x = 1 ถึง n น่ะเอง

ขยายสัญลักษณ์เราอีกนิดนึง ... สมมติว่าโดเมนเราไม่ใช่ {1, 2, 3, ..., n} แต่เป็นเซตจำกัดอื่น ซึ่งมีจำนวนสมาชิกเท่ากัน สมมติให้ชื่อว่า D เราจะสามารถหาฟังก์ชันหนึ่งต่อหนึ่งและทั่วถึง T: {1, 2, 3, ..., n} → D ได้

เพื่อให้เขียนง่าย ๆ หน่อย เราก็นิยามซะเลยว่า

uv = Σx∈D u(x)v(x)
เมื่อ D คือโดเมนร่วมของ u และ v

พอสัญลักษณ์เราเป็นแบบนี้แล้ว D ของเรา อาจจะเป็นเซตอนันต์ก็ได้นะ

เมตริกซ์ = ฟังก์ชันของเวกเตอร์ = ฟังก์ชันสองตัวแปร → ผลคูณของเมตริกซ์ = ผลคูณภายใน

สมมติว่า A = [ A1 : A2 : A3 : ... : Am ] เมื่อ Ax เป็นเวกเตอร์ n มิติ

คิดเหมือนกับเวกเตอร์ก็คือ เราจะมอง Ax เป็นฟังก์ชันของ x ก็ได้ ดังนั้นก็เขียนเป็น A(x) แทนละกัน แต่เนื่องจาก A(x) ก็เป็นเวกเตอร์อีก เราจะมองว่า (A(x))y = A(x, y) ก็ได้อีก

สมมติว่า D = {1, 2, 3, ..., m} และ E = {1, 2, 3, ..., n} เราจะมอง A เป็นฟังก์ชันได้สองแบบ คือ
  1. A: D → Rn จะได้ว่า A(x) เป็นเวกเตอร์ n มิติ
  2. A: D × E → R จะได้ว่า A(x, y) เป็นสเกลาร์
ถ้ามองแบบแรก เราจะสามารถหาผลคูณภายในของ A กับฟังก์ชันที่มีโดเมนเดียวกันคือ D ได้

สมมติว่า b = (b(1), b(2), b(3), ..., b(m))
ผลคูณภายในของ A กับ b ก็จะเป็น:

c = Ab = Σx∈D A(x) b(x)

ซึ่งถ้าคิดทีละตัวของผลลัพธ์ จะเห็นว่า

c(y) = Σx∈D A(x, y) b(x)

ซึ่งถ้าเรากำหนดให้ A'(y) = (A(1, y), A(2, y), A(3, y), ..., A(m, y)) ก็จะยุบรูปได้เป็น

c(y) = A'(y) ⋅ b

จากเรื่องในตอนเก่า ๆ (ดูอันบนก็พอ)



เห็นมั้ยว่า...

Ab = Ab เมื่อคูณแบบเมตริกซ์ !!!

รู้หยั่งงี้ ก็ไม่ต้องจำแล้ว ว่าคูณเมตริกซ์มันทำกันยังไง :D

ถ้างง ๆ ก็เอารูปนี้ไปลองเพ่ง ๆ ดูนะ (รูปในตอนเก่าหนะ) นี่เป็นกรณี 2 มิติที่ m = n น่าจะง่ายหน่อย แต่แนวคิดเดียวกัน จะเอาไปขยายให้ m กับ n เป็นเท่าไหร่ก็ได้



ข้างล่างนี่แหละ ผลลัพธ์ที่ต้องการ (ไม่ต้องสนใจตรงที่บอกว่า "= w" นะ)



เรื่องของคำศัพท์: การคูณ และ การแปลง

เคยสงสัยมั้ยว่า ทำไมบางทีเรียกเมตริกซ์ว่า "การแปลง"?

เหตุผลมันอยู่ในสมการข้างบน สองสมการนี่แหละ (ยกมาให้ดูตรงนี้อีกทีละกัน จะได้ไม่ต้องกลับขึ้นไปดู)

c = Ab = Σx∈D A(x) b(x)
c(y) = Σx∈D A(x, y) b(x)

แต่เดิมที b เป็นฟังก์ชันของ x (คือมีโดเมนเป็น D = {1, 2, 3, ..., n}) พอเอา A มาคูณข้างหน้า ได้ผลลัพธ์เป็น c ซึ่งเป็นฟังก์ชันของ y (คือมีโดเมนเป็น E = {1, 2, 3, ..., m}) นี่แหละถึงเรียก A ว่าเป็น "การแปลง" (Transformation)

ถ้าให้ A เป็นเมตริกซ์จัตุรัส เราอาจจะมองได้ง่ายขึ้นนิดหน่อย ... ลองดูรูปนี้ (รูปเก่าเล่าใหม่อีกแล้ว :P)





รูปนี้ก็คือ ถ้าเรามีจุด (a, b) อยู่ในระบบพิกัด u-v และเรารู้ค่าของ u กับ v เทียบกับ i และ j เราก็จะสามารถแปลง (a, b) ให้เป็น (x, y) ในพิกัด i-j ได้โดยเอา [ u : v ] มาคูณกับ (a, b)

ในกรณีนี้ [ u : v ] ก็คือเมตริกซ์การแปลงของเรา

อินเวอร์สของการแปลง... ก็อินเวอร์สเมตริกซ์น่ะแหละ

อันนี้ต่อเนื่องจากเมื่อกี๊เลย เรารู้ว่า [ u : v ] เป็นเมตริกซ์การแปลง ซึ่งใช้แปลง (a, b) เป็น w = (x, y) แต่นอกจากนี้ เรายังรู้อีกอย่างจากในตอน ตามหาความหมายของ Determinant: Kramer's Rule ก็คือ



ซึ่งแสดงให้เห็นว่า เราสามารถเอาค่า (a, b) คืนจาก (x, y) ได้ด้วย แต่เฉพาะเมื่อ | u : v | ≠ 0 นะ



และแล้ว หัวเรื่อง Transformation ก็พร้อมที่จะเดินหน้าต่อแล้วครับ! โปรดติดตาม :D

Thursday, September 15, 2005

เรื่องดนตรี - ไทรแอด

ขอพูดถึงเรื่องนี้ก่อนจะเอาบรรทัดห้าเส้นให้ดูละกันนะ ครั้งนี้เยอะแต่ไม่ยากนะ

คราวที่แล้วเรารู้จักโน้ตคู่ประเภทต่าง ๆ ไปแล้ว คราวนี้จะเติมโน้ตอีกตัว กลายเป็นไทรแอด (Triad)

นิยามก็คือ ไทรแอดคือเซตของตัวโน้ต 3 ตัว ตัวโน้ตตัวที่มี clef pitch ต่ำที่สุดในไทรแอด เรียกว่า เบส

เพื่อให้เขียนสะดวก เราจะเขียน (X, Y, Z) เพื่อแสดงไทรแอดที่มี X เป็นเบส และ | X |C < | Y |C < | Z |C

ตัวอย่างเช่น (F3, G3#, D4x) เป็นไทรแอดที่มี F3 เป็นเบส

ไทรแอดมีจำนวนอยู่นับไม่ถ้วน แต่ว่า เราจะสนใจแค่ไทรแอดบางประเภท ซึ่งเดี๋ยวจะค่อย ๆ แนะนำให้รู้จัก

จะเริ่มจากกลุ่มไทรแอดที่ตำแหน่งรากก่อนนะ แล้วต่อด้วยไทรแอดพลิกกลับ

ไทรแอดเมเจอร์ที่ตำแหน่งราก (Major Triads at Root Position)

(X, Y, Z) จะเป็นไทรแอด X เมเจอร์ที่ตำแหน่งราก ก็ต่อเมื่อ
1. (X, Y) เป็นโน้ตคู่ 3 เมเจอร์
2. (X, Z) เป็นโน้ตคู่ 5 เพอร์เฟกต์

ตัวอย่าง: (D1, F1#, A1) (A3#, C4x, E4#) (G8b, B8b, D9b)

แถม: ถ้า (X, Y, Z) เป็นไทรแอดเมเจอร์ที่ตำแหน่งรากแล้ว (Y, Z) จะเป็นโน้ตคู่ 3 ไมเนอร์

ไทรแอดไมเนอร์ที่ตำแหน่งราก (Minor Triads at Root Position)

(X, Y, Z) จะเป็นไทรแอด X ไมเนอร์ที่ตำแหน่งราก ก็ต่อเมื่อ
1. (X, Y) เป็นโน้ตคู่ 3 ไมเนอร์
2. (X, Z) เป็นโน้ตคู่ 5 เพอร์เฟกต์

ตัวอย่าง: (A2, C3, E3) (F5, A5b, C6) (D7b, F7bb, A7b)

แถม: ถ้า (X, Y, Z) เป็นไทรแอดไมเนอร์ที่ตำแหน่งรากแล้ว (Y, Z) จะเป็นโน้ตคู่ 3 เมเจอร์

ไทรแอดดิมินิชที่ตำแหน่งราก (Diminished Triads at Root Position)

(X, Y, Z) จะเป็นไทรแอด X ดิมินิชที่ตำแหน่งราก ก็ต่อเมื่อ
1. (X, Y) เป็นโน้ตคู่ 3 ไมเนอร์
2. (X, Z) เป็นโน้ตคู่ 5 ดิมินิช

ตัวอย่าง: (B4, D5, F5) (F6x, A6#, C7#) (D2, F2, A2b)

แถม: ถ้า (X, Y, Z) เป็นไทรแอดดิมินิชที่ตำแหน่งรากแล้ว (Y, Z) จะเป็นโน้ตคู่ 3 ไมเนอร์

ไทรแอดอ็อกเมนต์ที่ตำแหน่งราก (Augmented Triads at Root Position)

(X, Y, Z) จะเป็นไทรแอด X อ็อกเมนต์ที่ตำแหน่งราก ก็ต่อเมื่อ
1. (X, Y) เป็นโน้ตคู่ 3 เมเจอร์
2. (X, Z) เป็นโน้ตคู่ 5 อ็อกเมนต์

ตัวอย่าง: (B7, D8#, F8x) (E6b, G6, B6) (A1bb, C2b, E2b)

แถม: ถ้า (X, Y, Z) เป็นไทรแอดอ็อกเมนต์ที่ตำแหน่งรากแล้ว (Y, Z) จะเป็นโน้ตคู่ 3 เมเจอร์

ไทรแอดพลิกกลับครั้งที่หนึ่ง (First Inversions of Triads)

ถ้า (X, Y, Z) เป็นไทรแอด X เมเจอร์ (หรือไมเนอร์ หรือดิมินิช หรืออ็อกเมนต์) ที่ตำแหน่งราก เราจะเรียก (Y, Z, X + octave) ว่าเป็น ไทรแอด X เมเจอร์ (หรือไมเนอร์ หรือดิมินิช หรืออ็อกเมนต์) พลิกกลับครั้งที่หนึ่ง

ตัวอย่าง:
  • (E5, G5, C6) = ไทรแอด C5 เมเจอร์พลิกกลับครั้งที่หนึ่ง
  • (D1, F1, B1) = ไทรแอด B0 ดิมินิชพลิกกลับครั้งที่หนึ่ง
  • (E2, G2#, C3#) = ไทรแอด C3# ไมเนอร์พลิกกลับครั้งที่หนึ่ง
  • (A4b, C5, F5b) = ไทรแอด F4b อ็อกเมนต์พลิกกลับครั้งที่หนึ่ง
ไทรแอดพลิกกลับครั้งที่สอง (Second Inversions of Triads)

ถ้า (X, Y, Z) เป็นไทรแอด X เมเจอร์ (หรือไมเนอร์ หรือดิมินิช หรืออ็อกเมนต์) พลิกกลับครั้งที่หนึ่ง เราจะเรียก (Y, Z, X + octave) ว่าเป็น ไทรแอด X เมเจอร์ (หรือไมเนอร์ หรือดิมินิช หรืออ็อกเมนต์) พลิกกลับครั้งที่สอง

ตัวอย่าง:
  • (E7#, A7, C8#) = ไทรแอด A6 อ็อกเมนต์พลิกกลับครั้งที่สอง
  • (G2, C3, E3) = ไทรแอด C2 เมเจอร์พลิกกลับครั้งที่สอง
  • (E5b, A5, C6) = ไทรแอด A4 ดิมินิชพลิกกลับครั้งที่สอง
  • (A3#, D4#, F4#) = ไทรแอด D4# ไมเนอร์พลิกกลับครั้งที่สอง
สัญลักษณ์ย่อ

ในกรณีที่เรารู้ว่ากำลังพูดถึงไทรแอด เราอาจจะเขียนสัญลักษณ์สั้น ๆ เพื่อหมายถึงไทรแอดได้ ดังนี้
  • ไทรแอด X เมเจอร์ที่ตำแหน่งราก = M0:X = X
  • ไทรแอด X ไมเนอร์ที่ตำแหน่งราก = m0:X = Xm = x (เปลี่ยนเป็นตัวอักษรเล็ก)
  • ไทรแอด X ดิมินิชที่ตำแหน่งราก = dim0:X = Xdim = x° (เปลี่ยนเป็นตัวอักษรเล็กแล้วเติมวงกลม)
  • ไทรแอด X อ็อกเมนต์ที่ตำแหน่งราก = Aug0:X = XAug = X+ (เต็มเครื่องหมาย +)
ส่วนไทรแอดพลิกกลับครั้งที่หนึ่งและสอง เราจะเติม "a" และ "b" หรือเปลี่ยนเป็น "1" และ "2"

ดูตัวอย่างให้เข้าใจละกัน
  • (B4, D5, F5) = dim0:B4 = B4dim = b4°
  • (D8#, F8x, B8) = Aug1:B7 = B7Aug a = B7+a
  • (G2, C3, E3) = M2:C2 = C2b
  • (F5, A5b, C6) = m0:F5 = F5m = f5
สัญลักษณ์ที่จะเพิ่มเติมอีกกลุ่มก็คือ # b x bb และการบวก/ลบด้วย octave ดังนี้
  • (X, Y, Z)# = (X#, Y#, Z#)
  • (X, Y, Z)b = (Xb, Yb, Zb)
  • (X, Y, Z)x = (Xx, Yx, Zx)
  • (X, Y, Z)bb = (Xbb, Ybb, Zbb)
  • (X, Y, Z) + n octaves = (X + n octaves, Y + n octaves, Z + n octaves)
Pitch และ Pitch Class ของไทรแอด

เพื่อความสะดวกในอนาคต สมมติว่า (X, Y, Z) เป็นไทรแอด เราจะเขียน pitch ทั้งสามของโน้ตในไทรแอดนี้ว่า
| (X, Y, Z) | = { | X |P, | Y |P, | Z |P }

และเขียน pitch class ของโน้ตในไทรแอดนี้ว่า
[ (X, Y, Z) ] = [ | X |P ] ∪ [ | Y |P ] ∪ [ | Z |P ]

ไว้พูดถึงคอร์ดเมื่อไหร่ ก็ต้องใช้ตัวนี้อีกนะ

สรุป + ข้อสังเกต

ถ้า (X, Y, Z) = T0:X
  • (Y, Z, X + octave) = T1:X
  • (Z, X + octave, Y + octave) = T2:X
ถ้า (X, Y, Z) = M0:X
  • (X, Yb, Z) = m0:X
  • (X, Yb, Zb) = dim0:X
  • (X, Y, Z#) = Aug0:X
ถ้า (X, Y, Z) = Aug0:X
  • | Aug1:X | = | Aug0:Y |
  • | Aug2:X | = | Aug1:Y | = | Aug0:Z |
ถ้า (X, Y, Z) = T:X
  • (X, Y, Z)# = T:X#
  • เครื่องหมาย b x bb และ + n octaves ก็เหมือนกัน
ถ้า (X, Y, Z) = T0:X
  • (X, Y) เป็นโน้ตคู่ 3
  • (X, Z) เป็นโน้ตคู่ 5
  • (Y, Z) เป็นโน้ตคู่ 3
ถ้า (X, Y, Z) = T1:Z
  • (X, Y) เป็นโน้ตคู่ 3
  • (X, Z) เป็นโน้ตคู่ 6
  • (Y, Z) เป็นโน้ตคู่ 4
ถ้า (X, Y, Z) = T2:Y
  • (X, Y) เป็นโน้ตคู่ 4
  • (X, Z) เป็นโน้ตคู่ 6
  • (Y, Z) เป็นโน้ตคู่ 3
พอแค่นี้นะ ยาวแล้ว :D

Wednesday, September 14, 2005

Tunoblog Summarized

เนื่องจาก ... เริ่มรู้สึกว่าเรื่องที่เขียน ๆ นี่มันรก ๆ แล้วหละ ก็เลยจัดหมวดหมู่ให้ คนอ่านจะได้สะดวกนะ
เชิญดูจ้า


ด้านขวาเอา Link ไปปะไว้ให้แล้วด้วยนะ

แต่บอกไว้ก่อนนิดนึงนะ ว่าอาจจะไม่ update บ่อยเท่า blog จริงอันนี้หละ

Discrete: Linear Dependency

จากตอน ตามหาความหมายของ Determinant: Linear Combination เราพอจะสรุปอะไรบางอย่างได้...

ขอนิยาม span แบบใหม่ก่อนทีนึง คราวนี้อาจจะอ่านยากนิดนึงนะ

span(S) = { Σu∈S auu | auR }

คราวนี้ก็นิยาม Linear Dependency ได้แล้ว (ขอไม่แปลนะ แปลแล้วน่าเกลียดยังไงก็ไม่รู้)

S จะมีคุณสมบัติ Linear Dependency
ก็ต่อเมื่อ
มี u ∈ S ที่ทำให้
u ∈ span(S - {u})

แล้วก็ ตัวตรงข้าม - Linear Independency

S จะมีคุณสมบัติ Linear Independency
ก็ต่อเมื่อ
สำหรับทุก ๆ u ∈ S
u ∉ span(S - {u})

จากแนวคิดแบบค่อย ๆ เพิ่มเข้าไปทีละตัว เราจะรู้ว่า
ถ้า S = { u1, u2, u3, ..., un } มีคุณสมบัติ Linear Independency
แล้ว span(S) = Rn
ดังนั้น | u1 : u2 : u3 : ... : un | ≠ 0 (จากตอนที่แล้ว)

ตอนนี้เราพิสูจน์อะไรเด็ด ๆ ได้ครึ่งทางละ ขอบอกอะไรนิดนึงก่อน (ไม่น่าจะต้องแสดงวิธีพิสูจน์ให้ดูนะ)

(*) ถ้า u ∈ span(S) แล้ว span(S) = span(S ∪ {u})

แล้วก็คราวนี้ สมมติ S = { u1, u2, u3, ..., un } และ S มีคุณสมบัติ linear dependency เราจะรู้ว่า
มี ui ∈ S ที่ทำให้ ui ∈ span(S - {ui})
จากนี้ ถ้าเราเอา ui ใส่คืนเข้าไป จะเห็น (จาก (*) น่ะนะ) ว่า
span(S - {ui}) = span(S)
ดังนั้น span(S) ≠ Rn (ไม่เขียนวิธีพิสูจน์ละเอียดนะ) เลยสรุปได้ว่า
| u1: u2: u3 : ... : un | = 0

สรุปก็คือ
S = { u1, u2, u3, ..., un } มีคุณสมบัติ linear dependency
ก็ต่อเมื่อ
| u1 : u2 : u3 : ... : un | = 0



อย่าเพิ่งงงชื่อหัวเรื่องอันนี้หละ มันเกี่ยวกับ Discrete vs Continuous ในอนาคต

ขอโทษล่วงหน้านิดนึงนะ ช่วงนี้คงเขียนน้อยลงหน่อยหละ เพราะจะส่งเปเปอร์ปลายสัปดาห์นี้ แล้วปลายเดือนหน้าก็แข่งเปียโนด้วย ไว้เรื่องพวกนี้จบเมื่อไหร่ จะทำสองภาษาเลย :D

Tuesday, September 13, 2005

คำศัพท์เกี่ยวกับเทพเจ้า (ชุดสอง)

เห็นเรียกร้องมาหลายทีแล้ว ถึงตาแล้วหละ

เริ่มโดย ... มารู้จักกับเทวดาระดับต่าง ๆ กันก่อน

SERAPH และ CHERUB

ลองไปดู ระดับของ angel ใน Wikipedia กัน

จะเห็นว่า cherub และ seraph เป็น angel ระดับสูงสุด ถ้าไปเปิดใน WordWeb ดู จะบอกว่า
  • seraph (n) = An angel of the first order; usually portrayed as the winged head of a child
  • cherub (n) = An angel of the second order whose gift is knowledge; usually portrayed as a winged child | A sweet innocent baby
จะเห็นว่า cherub มีอีกความหมายนึง ก็คือเด็กทารก ซึ่งความหมายนี้ สืบเนื่องมาจากรูปลักษณ์ของ cherub ที่ศิลปินในสมัยก่อนสร้างขึ้นมา (เป็นเด็กทารกมีปีก)

พหูพจน์ของทั้งสองคำนี้ แต่เดิมที คือ seraphim และ cherubim แต่ไป ๆ มา ๆ พอมีคนเขียนแบบเติม s เข้าไปเฉย ๆ เยอะเข้า WordWeb ก็เลยเติมลงไปด้วย

รายละเอียดของ cherub และ seraph ก็สามารถดูใน Wikipedia ได้

คำใหม่ที่เกิดขึ้นต่อเนื่องมาอีกทีก็คือ คำว่า cherubic (adj) และ seraphic (adj) ซึ่งถ้าแปลตรง ๆ จะแปลได้ว่า ราวกับเป็น cherub หรือ seraph และถ้าแปลอ้อม ๆ หน่อย ก็จะแปลว่า เป็นคนดีราวกับเทวดา

HALO และ HALLOW

ขอพึ่ง Wikipedia อีกทีนะ: HALO ใน Wikipedia

ความหมายของ halo คร่าว ๆ ก็คือ สิ่งที่เป็นวง ๆ ที่ดูแล้วเจ๋ง

จริง ๆ คำว่า halo กับ hallow มันก็ไม่ได้เกี่ยวอะไรกันนักหรอก แต่ว่าเห็นว่าหน้าตาคล้าย ๆ กัน แล้วความหมายก็พอจะจับโยงกันได้ เลยเอามาพูดรวมกัน

Dictionary.com นิยามคำว่า hallow ไว้ดังนี้
  • hallow (v) = make or set apart as holy | respect or honor greatly; revere
ส่วนใน WordWeb คำว่า hallow มีเพียงความหมายเดียว และเฉพาะเจาะจงมากกว่า คือ
  • hallow (v) = render holy by means of religious rites
เห็นมะว่า ... ถ้าเราจะโยงว่ามันเกี่ยวกับ halo ก็ได้อยู่ :D

CUPID

อีกคำที่จะเอามาให้ดูตอนนี้ก็คือ คำว่า CUPIDITY

คราวนี้ไม่ได้จะบอกว่ามันความหมายใกล้เคียงหรือโยงกันได้นะ แต่จะเตือนว่ามันไม่ใกล้ต่างหาก

จาก WordWeb:
  • Cupid (n) = (Roman mythology) god of love; counterpart of Greek Eros
  • cupidity (n) = extreme greed for material wealth

สรุป

seraph (n, pl = seraphim/seraphs) = เทวดาขั้นสูงสุด
cherub (n, pl = cherubim/cherubs) = เทวดาขั้นรองจาก seraph | เด็กน้อยน่ารัก
seraphic (adj) = cherubic = (เด็กทารก) น่ารัก, ราวกับเป็นเทวดา

halo (n) = รูปทรงเหมือนโดนัท | แสงเป็นวง ๆ เปล่งออกรอบศีรษะของนักบุญ หรือผู้มีบารมี | ปรากฏการณ์ธรรมชาติ ที่ทำให้เห็นแสงดวงอาทิตย์หรือดวงจันทร์เป็นวง ๆ
hallow (v) = bless, beatify, consecrate
hallowed (adj) = blessed, sacred

Cupid (n) = god of love
cupidity (n) = ความละโมบ โลภมาก อยากทรัพย์

Monday, September 12, 2005

สูตรเมื่อสมัยเด็ก - วิธีการหาห.ร.ม.ของยูคลิด

มีคนมาทำให้นึกถึงสูตรเมื่อสมัยเด็กอีกแล้ว ... ใครที่ยังความจำเลือนลาง ลองมาหาห.ร.ม.ของ 20 กับ 88 ด้วยวิธีของยูคลิดกันก่อน
88 = (4)20 + 8
20 = (2)8 + 4
8 = (2)4
ดังนั้น 4 จึงเป็นห.ร.ม.ของ 20 กับ 88 ... แต่ทำไมหละ?

มอง ๆ ดู จะเห็นว่าสมการแต่ละอัน มันเขียนได้เป็น

a = qb + r

โดยที่ q เป็นจำนวนเต็มที่มากที่สุด ที่ทำให้ 0 ≤ r < b

เราจะพิสูจน์ว่า ห.ร.ม. ของ a กับ b มันเท่ากับ ห.ร.ม. ของ b กับ r นะ

เริ่มโดยกำหนดให้

x = ห.ร.ม. ของ a กับ b → x หาร a และ b ลงตัว
y = ห.ร.ม. ของ b กับ r → y หาร a และ b ลงตัว

ดังนั้น จะสามารถหาจำนวนเต็ม A B B' R' ที่ทำให้...

a = Ax
b = Bx = B'y
r = R'y

ได้ คราวนี้เราจะพิสูจน์ว่า x กับ y เป็นตัวเดียวกัน

เริ่มโดยแทนค่าเหล่านี้ลงไปในสมการแรก ครั้งแรกแทนด้วย a = Ax และ b = Bx สมการจะกลายเป็น
Ax = Bxq + r
(A - Bq)x = r
ดังนั้น x หาร r ลงตัว

แล้วก็ แทนค่าในสมการแรกอีกครั้งด้วย b = B'y และ r = R'y จะได้
a = B'yq + R'y
a = y(B'q + R')
ดังนั้น y หาร a ลงตัว

จากที่คิด ๆ มาทั้งหมด จะเห็นว่า
  1. x เป็นห.ร.ม.ของ a b และ r
  2. y เป็นห.ร.ม.ของ a b และ r
ก็เลยสรุปได้ว่า x = y

Sunday, September 11, 2005

เรื่องดนตรี - โน้ตคู่ Diminished และ Augmented

คราวที่แล้วเขียนผิดไปนิดนึง ตรงนิยามของโน้ตคู่ 3 ชนิดหนะ ช่วยกลับไปดูใหม่ด้วยนะ แก้ให้แล้ว

บันไดเสียงโครมาติก (Chromatic Scale)

จริง ๆ น่าจะพูดถึงตั้งนานแล้ว แต่ดันลืมไป

ChromaticScale = [C, C#, D, D#, E, F, F#, G, G#, A, A#, B]

บันไดเสียงนี้ประกอบด้วย pitch class ทั้งหมด 12 กลุ่ม ดนตรีที่ตรงกับสามัญสำนึกของมนุษย์ ก็จะเกิดจาก pitch ในบันไดเสียงนี้ซะส่วนใหญ่

โปรดสังเกตว่า pitch ทุกตัวที่อยู่ในบันไดเสียงโครมาติก จะสามารถเขียนในรูป "ตัวโน้ต" ได้ (ถ้าลืมนิยามของตัวโน้ต ลองกลับไปอ่านตอนที่แล้วนะ)

บันไดเสียงดิมินิช(ท์) (Diminished Scale)

dimScale(P) = [P, P + 1, P + 1.5, P + 2.5, P + 3, P + 4, P + 4.5, P + 5.5]
dim2Scale(P) = [P, P + 0.5, P + 1.5, P + 2, P + 3, P + 3.5, P + 4.5, P + 5]

ถ้าสังเกตดี ๆ จะเห็นว่า dimScale(P + 0.5) = dim2Scale(P)

นอกจากนี้ ข้อสังเกตที่สำคัญอีกอย่างนึง ก็คือ

dimScale(C) = dimScale(D#) = dimScale(F#) = dimScale(A)
dimScale(C#) = dimScale(E) = dimScale(G) = dimScale(A#)
dimScale(D) = dimScale(F) = dimScale(G#) = dimScale(B)

ซึ่งแสดงว่า มีบันไดเสียงดิมินิช ที่อยู่ในบันไดเสียงโครมาติก เพียง 3 แบบเท่านั้น

นอกจากนี้ เรายังสามารถสร้างบันไดเสียงโครมาติก ได้จากบันไดเสียงดิมินิชทั้งสาม เพราะว่า

dimScale(C) ∪ dimScale(C#) ∪ dimScale(D) = ChromaticScale

บันไดเสียงอ็อกเมนต์(เทิด) (Augmented Scale)

AugScale(P) = [P, P + 1, P + 2, P + 3, P + 4, P + 5]

จะเห็นว่าบันไดเสียงนี้ เกิดจาก pitch class ที่ห่างกัน 1 ช่วงเสียง ข้อสังเกตที่คล้าย ๆ กับบันไดเสียงดิมินิช ก็คือ
  1. บันได้เสียงอ็อกเมนต์ ที่เป็นเซตย่อยของบันไดเสียงโครมาติก มีอยู่เพียง 2 แบบที่แตกต่างกัน
  2. AugScale(C) ∪ AugScale(C#) = ChromaticScale
สัญลักษณ์อีกนิดนึง

เพื่อให้เขียนง่าย อ่านง่าย ตรงกับสามัญสำนึก จะขอกำหนดข้อตกลงอีกซักนิดก่อน

ถ้า N = (X, O, M) เป็นตัวโน้ตแล้ว
N + k octaves = (X, O + k, M)

เช่น C#4 + octave = C#5 เป็นต้น

โน้ตคู่อ็อกเมนต์ (Augmented Interval)

(X, Y) เป็นโน้ตคู่อ็อกเมนต์ ก็ต่อเมื่อ (X, Yb) เป็นโน้ตคู่เพอร์เฟกต์หรือเมเจอร์

โน้ตคู่ดิมินิช (Diminished Interval)

(X, Y) เป็นโน้ตคู่ดิมินิช ก็ต่อเมื่อ (X, Y#) เป็นโน้ตคู่เพอร์เฟกต์หรือไมเนอร์

Saturday, September 10, 2005

ตรรกศาสตร์: อารัมภบท

จริง ๆ อยากเขียนเรื่องตรรกะมานานแล้ว เพราะมันเป็นหัวข้อ Senior Project ที่ผมเคยทำไป แต่แบบว่ามันติดลมเรื่อง Discrete vs Continuous ก็เลยปล่อยมานานขนาดนี้ บังเอิญว่าได้รับแรงกระตุ้นจากกระทู้นึงใน PANTIP.COM วันนี้ก็ขอเริ่มเลยละกัน

อันนี้ที่เป็นจุดเริ่มต้นของโจทย์


คือ มีหลายคนที่หาคำตอบได้ แต่ผมว่ามันไม่มีคำตอบ ผมก็เลยตั้งข้อสังเกตขึ้นมาอย่างนึง เป็น Simplified Version อยู่ในกระทู้นี้


แล้วก็พบว่า ... ความเห็นที่ 12 ในกระทู้นี่ พูดถูกใจมาก

(แล้วตกลง มันเป็นโจทย์จากไหนอะ ... จาก Einstein จริง ๆ เหรอ ? ใครรู้ช่วยบอกด้วย)

จุดประสงค์ของเรื่องนี้ก็คือ อยากจะเตือนเรื่องการใช้ตรรกะกันหน่อยนะครับ โจทย์สุดแสนจะคลาสสิกของเรื่องนี้ ก็คือ
กำหนดให้
1. ถ้าฝนตก แล้วถนนจะเปียก
2. ถนนเปียก
สรุปว่า "ฝนตก" สมเหตุสมผลรึเปล่า?
หลาย ๆ คนคงจะรู้อยู่แล้วว่ามัน ไม่สมเหตุสมผล แต่ใครที่ยังคิดไม่ทัน ลองดูนี่นะ

ให้ "ฝนตก" ≡ p
"ถนนเปียก" ≡ q

โจทย์จะแปลงได้เป็นคำถามนี้
[(p → q) ∧ q] → p เป็นสัจพจน์หรือไม่?
จากการคิดนิดหน่อย เราจะหา Counterexample ได้ คือ p เป็นเท็จ และ q เป็นจริง ดังนั้น การสรุปไม่สมเหตุสมผล ซึ่งคิดในภาษาไทย มันก็คือ ถนนอาจจะเปียก เพราะอย่างอื่นก็ได้ เช่นมีคนเอาน้ำราด หรือเกิด Tsunami เราจึงไม่ควรสรุปว่าฝนตก

แต่อย่างไรก็ตาม ต่อให้เพิ่มสิ่งต่อไปนี้
  1. ถ้าฝนตก แล้วถนนจะเปียก
  2. ถ้ามีคนเอาน้ำราดถนน แล้วถนนจะเปียก
  3. ถ้าเกิด Tsunami แล้วถนนจะเปียก
  4. ถนนเปียก
  5. ไม่มีคนเอาน้ำมาราดถนน
  6. ไม่เกิด Tsunami
ข้อสรุปที่ว่า "ฝนตก" ก็ยังไม่ถูกอยู่ดี (ใครสงสัย กรุณาเขียนใน comment ครับ)

แล้วมันเกี่ยวอะไรกับกระทู้ในหว้ากอ? มันก็คือโจทย์นี้ล่ะครับ
มีค่าคงที่อยู่ 5 ตัว คือ a b c d e ซึ่งแต่ละตัวมีค่าไม่ซ้ำกันเลย โดยที่
a = 1
b = 2
c = 3
d = 4
สรุปว่า e = 5 ... ถูกรึเปล่า?
ใคร ๆ ก็คงรู้ว่า มันไม่ถูกแน่ ๆ ... แต่พอเปลี่ยนโจทย์เป็น
มีค่าคงที่อยู่ 5 ตัว คือ a b c d e ซึ่งแต่ละตัวมีค่าไม่ซ้ำกันเลย โดยที่
a = 1
b = 2
c = 3
d = 4
ถามว่า ค่าไหนเท่ากับ 5?
ดันมีคนตอบว่าเป็น e (- -'')

จะหาว่ากวนก็ได้นะ แต่ถ้าเอาโจทย์นี้ไปแปลงเป็น First-Order Language แล้วเอาไปคิด ไม่ว่าจะใช้วิธีอะไรก็ตาม คำตอบที่ว่า e = 5 จะไม่หลุดออกมาหรอก (ไว้จะเขียนเรื่อง First-Order Language อีกที)

ถ้าหากต้องการให้ตอบว่า 5 ต้องเติมเงื่อนไขอีกข้อนึงครับ
มีค่าคงที่อยู่ 5 ตัว คือ a b c d e ซึ่งแต่ละตัวมีค่าไม่ซ้ำกันเลย โดยที่
{a, b, c, d, e} = {1, 2, 3, 4, 5}
a = 1
b = 2
c = 3
d = 4
ถามว่า ค่าไหนเท่ากับ 5?
คราวนี้ถ้าเอาไปถามคอมพิวเตอร์ มันก็จะตอบว่า 5 แน่นอน!

ขอแอบบอกไว้ก่อนนิดนึง ว่าตรรกศาสตร์ตอนหน้า จะมี Algorithm สำหรับพิสูจน์ความสมเหตุสมผล ของตรรกศาสตร์เชิงประพจน์ (Propositional Logic) มาฝาก

Friday, September 09, 2005

การ์ตูน AF2

ไปเห็นลิงก์มาจาก PANTIP.COM เจ๋งดี ... แต่มันก็ ... ไปดูเองเหอะ แนะนำ ๆ
http://imome.exteen.com/

Discrete: ผลคูณภายใน และ การถ่วงน้ำหนัก

ขอเบนประเด็นมานิดนึงนะ แต่หัวข้อใหญ่อันเดิม ใครที่อ่านสองตอนที่แล้วไม่รู้เรื่อง ช่างมันไปก่อนก็ได้ ครั้งนี้ง่ายมาก ๆ นะ (เน้นแต่เรื่องการตีความกับการใช้งาน)

มาลองดูสิ่งที่เราเรียกว่า "ผลคูณภายใน" (Inner Product หรือ Dot Product น่ะนะ) ของเวกเตอร์สองตัวกัน

สมมติว่า u และ v เป็นเวกเตอร์ที่มีโดเมนเป็น {1, 2, 3, ..., n} (เรียกง่าย ๆ ว่า เวกเตอร์ n มิติ :D) ผลคูณภายในของ u กับ v ก็คือ

uv = u1v1 + u2v2 + u3v3 + ... + unvn

หรือเขียนในรูป Σ ได้เป็น

Σ1≤x≤n (uxvx)

แล้ว ... ผลคูณภายในมันเอาไปใช้ทำอะไรหละ? ลองดูนี่นะ
"สมมติว่า เปิดก๊อกน้ำด้วยอัตรา 1 ลิตรต่อนาที นาน 4 นาที จากนั้นเปลี่ยนอัตราการไหลเป็น 5 ลิตรต่อนาที ทิ้งไว้ 6 นาที แล้วก็หมุนก๊อกเป็น 10 ลิตรต่อนาที ทิ้งไว้อีก 3 นาที จะได้น้ำกี่ลิตร?"
วิธีคิดก็ง่าย ๆ คือ

น้ำทั้งหมด = 1⋅4 + 5⋅6 + 10⋅3 = 64

แต่ ลองสังเกตดูนิดนึง ก็จะเห็นว่า

1⋅4 + 5⋅6 + 10⋅3 = (1, 5, 10)⋅(4, 6, 3)

แล้วถ้าถามต่อว่า
"อัตราการไหลเฉลี่ยเป็นเท่าไหร่?"
จะคิดยังไง?

ก็หารด้วยเวลาทั้งหมดใช่มะ ... ใช่สิ แล้วมันคือเท่าไหร่หละ?

4 + 6 + 3 = 13

สังเกตแบบเดิมอีกที...

4 + 6 + 3 = 1⋅4 + 1⋅6 + 1⋅3 = (1, 1, 1)⋅(4, 6, 3)

โอ้ว ... ขอหยุดเรื่องค่าเฉลี่ยแป๊บนะ ... เราได้ข้อสรุปอะไรบางอย่างละ

ถ้าให้ v เป็นเวกเตอร์ n มิติ โดยที่ vi = อัตราการไหลในช่วงเวลาที่ i
และ u เป็นเวกเตอร์ n มิติ โดยที่ ui = ความยาวของช่วงเวลาที่ i

จะรู้ว่า

uv = ปริมาณน้ำทั้งหมด
(1, 1, 1, ..., 1)⋅v = เวลาทั้งหมด
อัตราการไหลเฉลี่ย = uv/(1, 1, 1, ..., 1)⋅v

ได้ค่าเฉลี่ยละ :D ... คราวนี้ สมมติว่าเราไม่รู้จัก v เลยนะ สมมติว่ารู้จักแต่ u (ก็คือ รู้แต่ว่ามีอัตราการไหลเท่าไหร่บ้าง)

u⋅(1, 1, 1, ..., 1) = อัตราการไหลรวม
(ก็คือ ปริมาณรวมเมื่อหมุนก๊อกเปลี่ยนทุก 1 นาที)

อันนี้ มันก็คือผลรวมของ ui น่ะแหละ ส่วนอัตราการไหลเฉลี่ยก็คือ ค่าเฉลี่ยของ ui ซึ่งเท่ากับ

u⋅(1, 1, 1, ..., 1)/n

ซึ่ง ... สังเกตอีกแล้ว จะเห็นว่า

n = 1⋅1 + 1⋅1 + 1⋅1 + ... + 1⋅1 จำนวน n ตัว

สรุปละนะ!!! สำหรับเวกเตอร์ตัวเดียว

u เป็นเวกเตอร์ ซึ่ง ui = ค่าของข้อมูลตัวที่ i
และ (1, 1, 1, ..., 1) = α

จะได้ว่า
αα = จำนวนข้อมูล
uα = ผลรวมค่าของข้อมูลทั้งหมด
ค่าเฉลี่ย (เลขคณิต) = uα / αα

แล้วถ้ามีเวกเตอร์สองตัว

u เป็นเวกเตอร์ ซึ่ง ui = ค่าของข้อมูล 1 ตัวในกลุ่มที่ i
v เป็นเวกเตอร์ ซึ่ง vi = จำนวนข้อมูลที่อยู่ในกลุ่มที่ i
และ (1, 1, 1, ..., 1) = α

จะสรุปได้ว่า
αv = จำนวนข้อมูล
uv = ผลรวมค่าของข้อมูลทั้งหมด
ค่าเฉลี่ย = uv / αv

เราเรียก v ว่าเป็น เวกเตอร์ถ่วงน้ำหนัก หรือ ฟังก์ชันถ่วงน้ำหนัก

คราวนี้ ... อะไรคือ "เวกเตอร์ตั้งฉากกัน"?

จากนิยามที่เราน่าจะคุ้น ๆ กันมาก่อน...

"uv ก็ต่อเมื่อ u ตั้งฉากกับ v"

จริง ๆ ใน 2 มิติกับ 3 มิติ เราก็เห็นภาพว่ามันเป็นยังไงนะ แต่ใน n มิติหละ? ... ก็เอามาจากข้อสรุปเมื่อกี๊ไง
ผลรวมค่าของข้อมูลทั้งหมด = 0

Thursday, September 08, 2005

ครบ 1000 แล้ว!!!

Counter ทางขวาถึง 1000 แล้ว!!!

มาบอกแค่นี้แหละ :P

Discrete vs Continuous: เทคนิคการหาผลบวก (2)

(ใครยังไม่ได้อ่านตอนแรก โปรดเลื่อนลงไปดูด้วยนะครับ)

คราวก่อน ๆ เรารู้จัก xn ไปแล้ว แต่นั่นเฉพาะตอนที่ n เป็นบวก คราวนี้ลองมาดูตอนที่ n ติดลบบ้าง เรานิยามให้

xn = 1/[x(x + 1)(x + 2)...(x - n - 1)]
เมื่อ n ∈ Z-

จะเห็นว่า (n < 0 นะ)


Δ(xn) = 1/[(x + 1)(x + 2)...(x - n)] - 1/[x(x + 1)...(x - n - 1)]

= [(x) - (x - n)]/[x(x + 1)(x + 2)...(x - n)(x - n - 1)]

= nxn - 1
เหมือนเดิม ลองเอาไปประยุกต์ใช้ง่าย ๆ นะ

Σ 1/[x(x + 1)] δx = Σ x-2 δx = -x-1 + c = -1/x + c

แต่คราวนี้โชคร้ายไปหน่อย เพราะว่า 1/x2 มันเขียนในรูปของ xn ไม่ได้ เราก็เลยหาผลบวกของ 1/x2 ไม่ได้จากสูตรนี้

จบเรื่องที่เราทำไม่ได้ T_T ... มาดูอะไรที่เราทำได้ดีกว่า ลองมาดูฟังก์ชันตรีโกณมั่ง ...

Δ cos ax = cos(ax + a) - cos ax

= cos ax cos a - sin ax sin a - cos ax

= (cos a - 1) cos ax - sin a sin ax ... (1)

สำหรับ sin ก็จะคิดได้ด้วยวิธีเดียวกัน

Δ sin ax = sin(ax + a) - sin ax

= sin ax cos a + cos ax sin a - sin ax

= sin a cos ax + (cos a - 1) sin ax ... (2)

คราวนี้ ถ้าเราอยากรู้ผลบวก ก็ต้องจัดรูปนิดหน่อย ลองกำจัด sin ax ออกไปก่อน โดย...

(cos a - 1) × (1) + (sin a) × (2):


(cos a - 1)Δcos ax + (sin a)Δsin ax = [(cos a - 1)2 + sin2a]cos ax
(cos a - 1)Δcos ax + (sin a)Δsin ax = 2(1 - cos a)cos ax
-Δcos ax + cot(a/2)Δsin ax
= 2cos ax
cos ax = (1/2)[-Δcos ax + cot(a/2)Δsin ax]

เราได้ cos ax ในเทอมของ Δ cos ax กับ Δ sin ax แล้ว คราวนี้ลองหา sin ax บ้างโดย...
(sin a) × (1) - (cos a - 1) × (2):


(sin a)Δcos ax - (cos a - 1)Δsin ax = -[(cos a - 1)2 + sin2a]sin ax
(sin a)Δcos ax - (cos a - 1)Δsin ax = -2(1 - cos a)sin ax
-cot(a/2)Δcos ax -Δsin ax
= 2sin ax
sin ax = (1/2)[-cot(a/2)Δcos ax - Δsin ax]

จากสมการใหม่สองสมการนี้ ทำให้เรารู้ว่า

Σ cos ax δx = (1/2)[-cos ax + cot(a/2) sin ax] + c

และ

Σ sin ax δx = (1/2)[-cot(a/2) cos ax - sin ax] + c

คราวนี้ อนุกรมตรีโกณแบบง่าย ๆ เราก็แทนสูตรนี้ได้เลย เดี๋ยวลองแทนให้ดูตัวนึงละกัน สมมติว่าเราจะหา
S = sin 0° + sin 1° + sin 2° + sin 3° + ... + sin n°
(sin 0° = 0 นะ จะตัดทิ้งก็ได้)

หมายเหตุ: ° เป็นค่าคงที่ มีค่าเท่ากับ 180/π

ก็แทนค่าลงไปตรง ๆ ได้เลย: F(x) = Σ sin x° δx → S = F(n + 1) - F(0)

จากสูตรข้างบน: F(x) = (1/2)[-cot(0.5°) cos x° - sin x°] + c

ดังนั้น
S = (1/2)[-cot(0.5°) cos(n + 1)° - sin(n + 1)°] - (1/2)[-cot(0.5°)]
= (1/2)[cot(0.5°) (1 - cos(n + 1)°) - sin(n + 1)°]

เป็นสูตรสำเร็จที่เราหาได้ตรง ๆ เลย

นอกจากนี้ เรายังประยุกต์ต่อจากสูตรนี้ เพื่อหา Σ sin(ax + b) δx และ Σ cos(ax + b) δx ได้อีกด้วย (ไปคิดเองละกันนะ ง่าย ๆ)

วันนี้จบแค่นี้จ้า :D

Wednesday, September 07, 2005

Discrete vs Continuous: เทคนิคการหาผลบวก

เดี๋ยวจะลุยเทคนิคการหาผลบวกละ ขอทวนของเก่าก่อน สัญลักษณ์ที่จะใช้สำหรับผลบวก เป็นหยั่งงี้นะ



ดูดี ๆ หละ index ไม่เหมือนกัน ... แล้วก็ สัญลักษณ์ของผลต่าง

Δ f(x) = f(x + 1) - f(x)

คราวที่แล้ว เรารู้จักผลต่างและผลบวกของฟังก์ชัน พหุนามแบบมีขีดล่าง (ไม่รู้จะเรียกว่าไรดีอะ) xn ไปแล้ว


xn = x(x - 1)(x - 2)...(x - n + 1)
Δ(xn) = nxn - 1
Σ xn δx = xn + 1/(n + 1) + c

ซึ่งหน้าตามัน ละม้ายคล้ายกับ

d(xn)/dx = nxn - 1
∫ xn dx = xn + 1/(n + 1) + c

ลองมาหาฟังก์ชันอื่น ๆ บ้าง

Δ(2x) = 2x + 1 - 2x
Δ(2x) = 2x

โอ๊ะ! มันคล้าย ๆ กับ ex ในแคลคูลัสเลยหนิ เพราะว่า d(ex)/dx = ex

แล้วถ้าเปลี่ยนฐานหละ?
Δ(ax) = ax + 1 - ax
Δ(ax) = (a - 1) ax

ก็คล้าย ๆ กับในแคลคูลัสนะ แต่ค่าคงที่มาคูณข้างหน้ามันต่างกัน (ให้ดูเผื่อขี้เกียจคิด: d(ax)/dx = (ln a) ax)

คราวนี้ก็ได้สูตรของผลบวกอีกสูตรละ

Σ ax δx = ax/(a - 1) + c

คราวนี้มาลองหาอะไรที่มันใกล้ ๆ กับ ln แบบ discrete ดีกว่า เริ่มจาก ...

∫ (1/x) dx = ln x + c

ลองเปลี่ยนฝั่งซ้ายเป็น Σ ดูสิ

Σ (1/x) δx = (1 + 1/2 + 1/3 + ... + 1/(x - 1)) + c เมื่อ x > 0

อนุกรม 1 + 1/2 + 1/3 + ... + 1/(x - 1) เรียกว่า อนุกรมฮาร์โมนิก (Harmonic Series) เราจะใช้สัญลักษณ์ har x เพื่อแทนอนุกรมนี้นะ สูตรนี้ก็จะเขียนใหม่ได้เป็น

Σ (1/x) δx = har x + c

ผลต่างของ har x ก็คือ

Δ(har x) = 1/x

ข้อสังเกต: โดเมนของ ln x คือ (0, ∞) และโดเมนของ har x คือ {1, 2, 3, ...}

แล้วเอาไปใช้ยังไงหละ? ลุยต่อนะ ต่อไปนี้จะแสดงถึง Summation By Parts

ดูสัญลักษณ์ใหม่ก่อน ตัวนี้แปลว่า "ค่าถัดไป"

E f(x) = f(x + 1)

คุณสมบัติสำคัญของ E ก็คือ

E[f(x) + g(x)] = E[f(x)] + E[g(x)]
E[f(x) g(x)] = E[f(x)] E[g(x)]
E[f(g(x))] = f(E[g(x)])

ความสัมพันธ์ของ Δ กับ E ก็คือ

Δ = E - 1

ต่อไปนี้คือ ผลต่างของผลคูณ สมมติว่า u กับ v เป็นฟังก์ชันของ x นะ


Δ[uv] = (E - 1)[uv]

= E[uv] - uv

= E[u]E[v] - uv

ลองเอา uE[v] บวกเข้าแล้วลบออก



Δ[uv] = E[u]E[v] - uE[v] + uE[v] - uv

= (E[u] - u)E[v] + u(E[v] - v)

= (E - 1)[u]E[v] + u(E - 1)v

= u Δv + Ev Δu

ได้สูตรแล้ว หน้าตาคล้าย ๆ กับ d(uv) = u dv + v du เนอะ

เมื่อกี๊เราเอา uE[v] บวกเข้าแล้วลบออก แต่จริง ๆ แล้วเราเอา vE[u] แทนก็ได้ สูตรจะเป็น

Δ[uv] = Eu Δv + v Δu

คราวนี้ เราหาผลรวมสองข้าง (ใช้สูตรบนนะ เพราะอยากได้สูตรของ Σ u Δv δx)

uv = Σ u Δv δx + Σ Ev Δu δx

ย้ายข้าง ก็จะได้สูตร by parts

Σ u Δv δx = uv - Σ Ev Δu δx

เอามาใช้ยังไงหละ? ลองดูโจทย์ integration by parts ง่าย ๆ ก่อนอันนึงละกัน


∫ xex dx = ∫ x [d(ex)/dx] dx

= xex - ∫ ex [d(x)/dx] dx

= xex - ex + c

คราวนี้ลองคิดเหมือนกัน แต่เป็นแบบผลบวก


Σ x2x δx = Σ x [Δ(2x)] δx

= x2x - Σ 2x + 1 [Δ(x)] δx

= x2x - 2 ⋅ 2x + c

คิดได้เกือบเหมือนกันเลย ต่างกันนิดนึงก็เพราะว่าสูตร summation by parts มันมีตัว E ห้อยอยู่หน้า v น่ะเอง คราวนี้พอก่อนนะ เดี๋ยวมาเล่นกับพวกนี้อีก

Tuesday, September 06, 2005

เอาเรื่องฟิสิกส์มั่ง - สรุปโจทย์คราวที่แล้ว

จากโจทย์ครั้งแรก ถามว่า ถ้าไม่มีการสูญเสียพลังงาน และ B ไม่หลุดออกจากราง...

อันไหนถึงก่อน หรือพร้อมกัน หรือสรุปไม่ได้?

เฉลยไปแล้วว่า B ถึงก่อน คราวนี้จะแสดงให้ดูว่าทำไมนะ (คนที่รู้แล้ว จะข้ามไปก็ได้)

เริ่มจาก คิดครึ่งแรกก่อน (จนถึงจุดที่ B อยู่ต่ำสุด) ดูรูป จะเห็นว่า...

  1. vmax > vA จากกฎทรงพลังงาน
  2. ตอนเริ่ม vBx = vA
  3. vBx เพิ่มขึ้นเรื่อย ๆ จนเท่ากับ vmax
ดังนั้น vBx ≥ vA ตลอดการเคลื่อนที่ลง

สำหรับคนที่สงสัยข้อสังเกตที่ 3 ลองดูรูปนี้นะ (ใครไม่สงสัยข้ามไปเลย)

จะเห็นว่าเกิดความเร่งในแนวระดับจากแรง Nx มีทิศไปทางขวาซึ่งส่งเสริมให้ vBx มีค่าเพิ่มขึ้น (g จะมากกว่า Ny เสมอ เพราะนี่ไม่ใช่สมดุล)

คราวนี้ลองพิจารณาครึ่งหลัง ตั้งแต่ B เคลื่อนที่จากจุดต่ำสุด ไปถึงปลายทาง

จะเห็นว่า
  1. ตอนแรก vBx = vmax > vA
  2. ตอนสุดท้าย vBx = vA
เราก็เลยสรุปได้เหมือนครึ่งแรก คือ vBx ≥ vA ตลอดการเคลื่อนที่ขึ้น

รวมทั้งสองช่วงเข้าด้วยกัน เราจะรู้ว่า ความเร็วในแนวระดับของ B จะมากกว่าความเร็วในแนวระดับของ A ตลอดการเคลื่อนที่ ซึ่งสามารถเขียนกราฟได้ดังนี้


เนื่องจากทั้ง A และ B มีระยะทางในแนวระดับเท่ากัน ดังนั้น B ต้องไปถึงก่อน A แน่นอน

คราวนี้มาดูอีกปัญหาจากคราวที่แล้ว

คำถาม คือ B จะถึงก่อน A เสมอ รึเปล่า?

วิธีคิดจริง ๆ แล้ว ง่าย ๆ ก็แค่หมุนรูปนิดหน่อย (มีคนตอบไปแล้วใน comment ครั้งที่แล้วหละ)

จะได้รูปเหมือนกับโจทย์ข้อแรกเลย ยกเว้นว่า g มีทิศเฉียง ๆ วิธีคิดก็เหมือนกันคือ คิดเฉพาะความเร็วในแนวนอนของรูปนี้ ต่อจากนี้ไม่แสดงแล้วกันนะ เพราะแนวคิดเหมือนกับข้อที่แล้ว

จบละครับ ...

ทิ้งท้าย: ถ้าสงสัยก็ฝากไว้ใน comment ได้นะ ไม่แน่ใจเหมือนกันว่าอธิบายดีพอรึเปล่า

Monday, September 05, 2005

สมการพหุนามกำลังสามและสี่

คราวนี้แค่เอา link มาฝากให้ดูนะ ในนี้จะบอกที่มาของวิธีแก้สมการด้วย

ค่อย ๆ เรียนวิธีแก้ Cubic Equation ด้วยวิธีของ Cardano ที่นี่

อีกวิธีสำหรับแก้ Cubic Equation จาก Math Forum: Ask Dr. Math FAQ อันนี้เข้าใจง่ายสุดมั้ง

จาก Mathworld: Cubic Equation, Quartic Equation

จาก Wikipedia: Cubic Equation, Quartic Equation

Related Prefixes: dys-, caco-, และ eu-

DYS = CACO = ไม่ดี
EU = ดี


คำที่ขึ้นต้นด้วย dys- มีเยอะมากเลย ส่วนใหญ่เป็น "โรค" ทั้งนั้น ขอเอามาแสดงเฉพาะคำที่มี eu- เป็นคำตรงข้ามละกัน

demon (วิญญาณ)
  • eudemon (n) = วิญญาณดี → eudemonic (adj) = ทำให้มีความสุข
  • cacodemon (n) = วิญญาณร้าย, ปิศาจ
genic (ยีน)
  • eugenic (adj) = มีพันธุ์ที่ดี (รุ่นลูกจะดีขึ้น)
  • dysgenic (adj) = มีพันธุ์ที่ไม่ดี (รุ่นลูกจะแย่ลง)
  • cacogenic (adj) = dysgenic
phony (เสียง)
  • euphony (n) = เสียงไพเราะเสนาะหู → euphonic (adj) = รื่นหู
  • cacophony (n) = เสียงทำลายโสตประสาท → cacophonic (adj) = ขัดหู
graphy (การเขียน)
  • cacography (n) = ลายมือห่วย
logistic (คำพูด)
  • eulogistic (adj) = เป็นการชม, สรรเสริญ → eulogy (n) = คำสรรเสริญ
  • dyslogistic (adj) = เป็นการด่า, ต่อว่า
peptic (การย่อยอาหาร)
  • eupeptic (adj) = อาหารย่อยเป็นปกติ
  • dyspeptic (adj) = อาหารไม่ย่อย → dyspepsia (n) = โรคอาหารไม่ย่อย
phem (คำ)
  • euphemism (n) = คำที่ใช้แทนคำที่ฟังดูไม่ดี เพื่อให้ฟังดูดีขึ้น (เช่น "หลับ" แทน "ตาย")
  • dysphemism (n) = คำที่ใช้แทนคำปกติ เพื่อให้ฟังดูแย่ลง (สลับกัน)
phoric (ความรู้สึก)
  • euphoric (adj) = มีความสุขมาก (อาจจะมากเกินไป) → euphoria (n)
  • dysphoric (adj) = ซึมเศร้า → dysphoria (n)
pnea (การหายใจ)
  • eupnea (n) = สภาวะการหายใจเป็นปกติ → eupneic (adj)
  • dyspnea (n) = อาการหายใจลำบาก → dyspneic/dyspneal (adj)
trophy/trophication (การเจริญเติบโต)
  • eutrophication (n) = สภาวะสัตว์น้ำขาด O2 เนื่องจากพืชผิวน้ำเจริญเติบโตมากเกินไป
  • dystrophy (n) = โรคขาดสารอาหาร
คราวนี้คงไม่ต้องสรุปนะ

Sunday, September 04, 2005

เรื่องดนตรี - ตัวโน้ต และ โน้ตคู่

ต่อละกัน สองครั้งที่แล้วพูดถึง Pitch กับ Pitch Class คราวนี้ขอร่ายยาวเรื่องโน้ตคู่นะ

คำว่า "ตัวโน้ต" จริง ๆ แล้วมีคุณสมบัติหลายอย่างนะ ทั้งความถี่ ความยาว ความดัง คุณภาพเสียง ฯลฯ แต่ในคราวนี้จะพูดถึงเฉพาะ "ความถี่" นะ

แล้วมันต่างอะไรกับ Pitch? ... จริง ๆ มันไม่ใช่แค่ความถี่หรอกที่เราสนใจ ... เอาเป็นว่า ดูนิยามอันนี้ละกัน

ตัวโน้ต N = (อักษร C D E F G A หรือ B, octave, modulation)

ค่า pitch ของ N (เขียนแทนด้วย |N|P) จะได้จากการเอาตัวอักษรกับเลข octave มาต่อกัน (ได้เป็น pitch) แล้วบวกด้วย modulation ซึ่งมีค่าได้ตั้งแต่ -1 ถึง 1 เช่น

|(C, 4, 0.5)|P = C4 + 0.5 = C#4

จะเห็นว่า |(C, 4, 0.5)|P = |(D, 4, -0.5)|P แต่ (C, 4, 0.5) ≠ (D, 4, -0.5) (เปรียบเทียบแบบคู่อันดับน่ะ มันจะไม่เท่ากันตั้งแต่ C ≠ D แล้ว)

คราวนี้ ... เพื่อให้สะดวกต่อการเขียนและพูดถึงต่อ ๆ ไป จะกำหนดวิธีเขียน "ตัวโน้ต" ย่อ ๆ แบบนี้

Z#n = (Z, n, 0.5)
Zbn = (Z, n, -0.5)
Zxn = (Z, n, 1)
Zbbn = (Z, n, -1)
เมื่อ Z = C D E F G A หรือ B
และ n เป็นจำนวนเต็ม

ตอนนี้สัญลักษณ์นึงของเรา (เช่น C4#) มี 2 ความหมายแล้วนะ คือ pitch กับ ตัวโน้ต (C4# = (C, 4, 0.5)) ต่อจากนี้ ถ้าจะพูดถึง pitch ของตัวโน้ต N จะเขียนแทนด้วย |N| นะ จะได้แบ่งแยกกันชัด ๆ ไม่คลุมเครือ

Clef Pitch

ก่อนจะพูดถึงโน้ตคู่ ต้องนิยามอะไรอีกอย่างนึงก่อน
clef pitch เป็นคุณสมบัติของตัวโน้ต (X, O, M) มีค่าเท่ากับ
|(X, O, M)|C = 7 ⋅ O + ค่าประจำตัวอักษร X

ซึ่งค่าประจำตัวอักษรก็คือ




ตัวอักษรค่าประจำตัวอักษร
C0
D1
E2
F3
G4
A5
B6

ถึง M จะเปลี่ยนเป็นค่าอะไรก็ตาม |(X, O, M)|C ก็จะมีค่าเท่าเดิมถ้า X กับ O ไม่เปลี่ยน

ถ้าจะพูดให้ง่าย ๆ clef pitch ก็คือ ตำแหน่งของหัวตัวโน้ตบนบรรทัดห้าเส้นน่ะแหละ งงมั้ย? ... เอาตัวอย่างละกัน

|C4|C = 7 ⋅ 4 + 0 = 28
|E2bb|C = 7 ⋅ 2 + 2 = 16
|F5x|C = 7 ⋅ 5 + 3 = 38

โน้ตคู่

กำหนดให้ N1 = (X1, O1, M1) และ N2 = (X2, O2, M2) เป็นตัวโน้ตสองตัว (อาจจะเหมือนกันหรือต่างกันก็ได้) เราจะเรียกคู่อันดับ (N1, N2) ว่าเป็นโน้ตคู่ |N2|C - |N1|C + 1

ตัวอย่างเช่น

(E4, A4#) เป็นโน้ตคู่ 4
(A4#, E5) เป็นโน้ตคู่ 5
(C0, C1) เป็นโน้ตคู่ 8

โดยทั่วไปเราจะถือว่า โน้ตคู่มีนิยามเฉพาะกรณีที่ผลลัพธ์เป็นจำนวนเต็มบวก

โน้ตคู่เพอร์เฟกต์ (Perfect Interval)

กำหนดให้ N1 = (X1, O1, M1) และ N2 = (X2, O2, M2) เป็นตัวโน้ตสองตัว เราจะเรียก (N1, N2) ว่าเป็นโน้ตคู่เพอร์เฟกต์ก็ต่อเมื่อ
1. |N2|C - |N1|C ≡ 0, 3 หรือ -3 (mod 7)
2. |N2|P - |N1|P ≡ 0, 2.5 หรือ -2.5 (mod 6)
ตามลำดับ (หมายถึง ต้องเป็นคู่ที่ตรงกันในลำดับ เช่น ถ้าในข้อ 1 เป็น 3 ในข้อ 2 ก็ต้องเป็น 2.5 ถึงจะเรียกว่า โน้ตคู่เพอร์เฟกต์)

อันนี้จะเริ่มคิดยากแล้วหละ ตัวอย่างโน้ตคู่เพอร์เฟกต์นะ

(C4, F4), (C3, G3), (C2, C3), (F3, B3b), (G1#, D2#), (A5bb, D6bb)

คิดเล่น ๆ (ควรจะรู้ว่าเป็นจริงนะ):
1. พิสูจน์ว่า (N, N) เป็นโน้ตคู่เพอร์เฟกต์
2. พิสูจน์ว่า ((X1, O, M
1), (X2, O, M2)) เป็นโน้ตคู่เพอร์เฟกต์ก็ต่อเมื่อ ((X2, O, M2), (X1, O + 1, M1)) เป็นโน้ตคู่เพอร์เฟกต์

โน้ตคู่เมเจอร์ (Major Interval)

กำหนดให้ N1 = (X1, O1, M1) และ N2 = (X2, O2, M2) เป็นตัวโน้ตสองตัว เราจะเรียก (N1, N2) ว่าเป็นโน้ตคู่เมเจอร์ก็ต่อเมื่อ
1. |N2|C - |N1|C ≡ 1, 2, -1 หรือ -2 (mod 7)
2. |N2|P - |N1|P ≡ 1, 2, -0.5 หรือ -1.5 (mod 6)
ตามลำดับ

นิยามมันคล้าย ๆ กับโน้ตคู่เพอร์เฟกต์แหละ แต่เลขมันต่างกัน
ลองดูตัวอย่างโน้ตคู่ที่เป็นเมเจอร์นะ...

(C3, D3), (C0, E4), (C1, A3), (C2, B2), (B4, G5#), (A2b, G4)

โน้ตคู่ไมเนอร์ (Minor Interval)

กำหนดให้ N1 = (X1, O1, M1) และ N2 = (X2, O2, M2) เป็นตัวโน้ตสองตัว เราจะเรียก (N1, N2) ว่าเป็นโน้ตคู่ไมเนอร์ก็ต่อเมื่อ
1. |N2|C - |N1|C ≡ 1, 2, -1 หรือ -2 (mod 7)
2. |N2|P - |N1|P ≡ 0.5, 1.5, -1 หรือ -2 (mod 6)
ตามลำดับ

อันนี้ก็คล้ายนิยามของโน้ตคู่เมเจอร์ ต่างกันที่ตัวเลขในเงื่อนไขที่ 2 (ลองเปรียบเทียบกับกรณีของเมเจอร์ดูสิ)

เอาตัวอย่างละกัน
(C3, D3b), (C0, E4b), (C1#, A3), (C2, B2b), (B4, G5), (A2, G4)

คิดเล่น ๆ (ควรจะรู้ว่าเป็นจริงอีกแล้ว):
1. พิสูจน์ว่า ((X1, O, M1), (X2, O, M2)) เป็นโน้ตคู่เมเจอร์ (ไมเนอร์) ก็ต่อเมื่อ ((X2, O, M2), (X1, O + 1, M1)) เป็นโน้ตคู่ไมเนอร์ (เมเจอร์)
2.
พิสูจน์ว่า ((X1, O, M1), (X2, O, M2)) เป็นโน้ตคู่ไมเนอร์ก็ต่อเมื่อ ((X1, O, M1), (X2, O, M2 + 0.5)) เป็นโน้ตคู่เมเจอร์

ตอนนี้พอแค่นี้ก่อนละกัน ยาวแล้ว ... คราวหน้าจะมาต่อเรื่องชนิดของโน้ตคู่อีก 2 ชนิดนะ ชื่อว่า Augmented กับ Diminished