วันเสาร์ที่ 15 กันยายน พ.ศ. 2555

การคำนวณเมตริกซ์เบื้องต้นด้วยโปรแกรม R

โปรแกรม R เป็น Freeware/Open source ที่พัฒนาโดยนักสถิติและผู้ใช้งานโดยตรง
สามารถ downlaod ได้ที่ http://mirrors.psu.ac.th/pub/cran/
ผมขออนุญาตข้ามขั้นตอนการติดตั้งนะครับ
หลังจากติดตั้งและเปิดโปรแกรมมาแล้วหน้าจอก็จะประมาณนี้ครับ

ก่อนที่จะสร้างเมตริกซ์ จะต้องเข้าใจตัวแปรและสัญลักษณ์เหล่านี้ก่อนครับ
ตัวแปรจะต้องเป็นภาษาอังกฤษหรือตัวเลข โดยจะต้องขึ้นต้นด้วยตัวอักษร ไม่มีเว้นวรรค
เช่น Data1, X, x, AX, Ax9 ... โดยที่ควรจะตั้งชื่อตัวแปรให้สื่อความหมายกับข้อมูล
และต้องระมัดระวังเกี่ยวกับชื่อตัวแปรที่คล้ายกัน เนื่องจากตัวเล็กและตัวใหญ่ถือว่าเป็นตัวแปรที่ต่างกัน
เช่น Data1, DATA1, data1, ....
ส่วนของสัญลักษณ์ในเบื้องต้นมีดังนี้

































































สัญลักษณ์



ความหมาย



ตัวอย่าง



<- หรือ =



นำค่าการทำงานของฟังก์ชั่นที่อยู่ทางด้านขวาไปเก็บไว้ในตัวแปรที่ตั้งชื่อไว้ทางด้านซ้าย



k <- 10 หรือ k = 10 คือเก็บค่า 10 ไว้ใน k



c()



นำข้อมูลมาต่อกันเป็นเวคเตอร์ (Concatination operator)



y = (1,2,5,6) คือการเก็บค่า (1,2,5,6) ใน y



:



Sequence operator



m = 0:99 คือสร้าง 0 ถึง 99 เก็บค่าไว้ใน m



seq(from a,to b,by c)



Sequence operator from a to b by c



p = seq(0,3,0.1) คือ สร้าง 0 ถึง 3 โดยเพิ่มค่าครั้งละ 0.1



rep(a,times)



การอ่านข้อมูลซ้ำ



h = rep(“VT”,3) คือสร้าง “VT” ซ้ำกัน 3 ครั้ง



sort(a)



การเรียงลำดับจากน้อยไปหามากของ a



a = c(0,3,2,1)



b = sort(a)



result = 0,1,2,3



rev(sort(a))



การเรียงลำดับจากมากไปหาน้อยของ a



t = rev(sort(a))



result = 3,2,1,0



a[i]



การอ้างอิงสมาชิกตำแหน่งที่ i ของ a



a[1] = 0, a[2] = 3



a[i:j]



การอ้างอิงสมาชิกตำแหน่งที่ i ถึง j ของ a



a[2:4] = 3,2,1



a[3:4] = 2,1



a[-i]



การอ้างอิงค่าที่ไม่ใช่ตำแหน่งที่ i ของ a



a[-3] = 0,3,1



a[-length(a)]



การอ้างอิงค่าที่ไม่ใช่ตำแหน่งสุดท้ายของ a



a[-length(a)] = 0,3,2



ต่อไปก็เป็นฟังก์ชั่นต่าง ๆ ที่ใช้ในการคำนวณเมตริกซ์





























































































สัญลักษณ์



ความหมาย



ตัวอย่าง



+



การบวก



g = 1+9 (g=10)



-



การลบ



p = 5-2 (p=3)



*



การคูณ



s = 4*12 (s=48)



/



การหาร



d = 1/9 (d=0.1111111)



^



การยกกำลัง



z = 2^10 (z=1024)



sqrt()



การหารากที่สอง



n = sqrt(64) (n = 8)



abs()



การหาค่าสัมบูรณ์



e = abs(-21) (e = 21)



log()



การหา Natural log



v = log(2) (v = 0.6931472)



log10()



การหา Common log



f = log10(100) (f =2)



exp()



การหาค่า e^x



 u = exp(2) (u = 7.389056)



%/%



การหาจำนวนเต็มที่ได้จากการหาร



r1 = 6%/%4 (r1 = 1)



r2 = 19%/%3 (r2 = 6)



%%



การหาเศษที่เหลือจากการหาร



j1 = 109%%2 (j1=1)



j2 = 10%%7 (j2 = 3)



sum(x)



คำนวณผลรวมของ x



x = (1,2,3)



sum(x) = 6



mean(x)



คำนวณค่าเฉลี่ยเลขคณิตของ x



mean(x) = 2



median(x)



คำนวณค่ามัธยฐานของ x



median(x) = 2



sd(x)



คำนวณค่าเบี่ยงเบนมาตรฐานของ x



sd(x) = 1



var(x)



คำนวณค่าความแปรปรวนของ x



var(x) = 1



เราลองมาคำนวณเวคเตอร์กันก่อนนะครับ ก่อนที่จะไปคำนวณเมตริกซ์
สร้างตัวแปรขึ้นมา 3 ตัว
a1 = (1,2,3)
a2 = (4,5,6)
a3 = (7,8,9)
ให้หาคำตอบ
(1) 5*a1     (2) a1+a2     (3) a2-a3     (4) a3*a1



 


สังเกตว่าการคูณ ก็คือ การเอาสมาชิกในตำแหน่งเดียวกัน มาคูณกันเลย
ยังไม่ใช่การคูณตามหลักของเมตริกซ์นะครับ
ให้หาคำตอบ
(1) ผลรวมของ 1,2,3,...,32,33
(2) ค่าเฉลี่ย 2,4,6,...,198,200



หลังจากที่เราสร้างเวคเตอร์ขึ้นมาแล้ว เราก็จะเอาเวคเตอร์เหล่านั้นมารวมกัน เพื่อสร้างเป็นเมตริกซ์
โดยมีสัญลักษณ์ที่ใช้คือ
cbind(x1,x2,x3,...,xn) = การรวมเวคเตอร์ x1,x2,x3,...,xn ทางด้านคอลัมน์
rbind(x1,x2,x3,...,xn) = การรวมเวคเตอร์ x1,x2,x3,...,xn ทางด้านแถว
ตัวอย่างเช่น
p=(1,2,3)
q=(2,4,7)
r=(9,4,0)



นอกจากนี้ยังมีอีกสัญลักษณ์คือ
matrix(data =, nrow =, ncol =, byrow = TRUE/FALSE)
เช่น s1=(1,2,3,4,5,6,7,8,9) สร้างเป็นเมตริกซ์ 3*3



สังเกตว่าถ้าเราไม่ใส่ byrow จะมีค่าเท่ากับ FALSE
สัญลักษณ์ที่เกี่ยวข้องอีกเล็กน้อยครับ
K[i,j] เป็นการอ้างอิงสมาชิกแถวที่ i คอลัมน์ที่ j ของเมตริกซ์ K
dim(K) เป็นการตรวจสอบมิติของเมตริกซ์ K



สังเกตว่า P[5,2] = Error เพราะว่าเมตริกซ์มีมิติ 2*5 แต่เราถามถึงสมาชิกแถวที่ 5 คอลัมน์ที่ 2 ซึ่งไม่มีจริง
สัญลักษณ์ที่ใช้เกี่ยวกับการคำนวณ









































สัญลักษณ์



ความหมาย



t()



Transpose



det()



Determinant



solve()



Inverse matrix



A*B



การคูณของสมาชิกในเมตริกซ์



A%*%B



การคูณเมตริกซ์



colMeans()



การหาค่าเฉลี่ยเมตริกซ์ของแต่ละคอลัมน์



rowMeans()



การหาค่าเฉลี่ยเมตริกซ์ของแต่ละแถว



colSums()



การหาค่าผลรวมเมตริกซ์ของแต่ละคอลัมน์



rowSums()



การหาค่าผลรวมเมตริกซ์ของแต่ละแถว



ตัวอย่าง








สังเกตว่า A*A ไม่เท่ากับ A%*%A นะครับ ระวังอย่าใช้สัญลักษณ์ผิด



โจทย์กำหนด
(1) x+2y-z = 1
(2) 2x-y+z = 3
(3) -x+2y+3z = 7
หากจะแก้สมการเพื่อหาค่า x,y,z ก็มีได้หลายวิธี โดยวิธีพื้นฐานก็คือนำสมการเหล่านี้มาบวกลบกัน
เพื่อกำจัดตัวแปรออกไปทีละตัว จนได้คำตอบตัวแปรใดตัวแปรหนึ่งแล้วค่อยเอาไปแทนค่าหาตัวแปรที่เหลือ
ในที่นี้เราจะใช้โปรแกรม R คำนวณหาคำตอบให้ โดยคำนวณแบบเมตริกซ์
ก่อนอื่นต้องเปลี่ยนรูปร่างของสมการเหล่านี้ให้เป็นเมตริกซ์ Ax = B ก่อน
โดยดึงสัมประสิทธ์ของแต่ละตัวแปรออกมาเป็นเมตริกซ์ A ส่วนเมตริกซ์ x คือตัวแปร x,y,z
และเมตริกซ์ B คือคำตอบ
หาค่า x โดยคูณ Inverse A ด้านหน้าทั้ง 2 ข้าง
x = (Inverse A)B



จากนั้นแก้สมการโดยใชัสัญลักษณ์คือ
solve(A,B) ก็จะได้ x



หากคิดทีละขั้นตอน กำหนดเมตริกซ์ H คือ Inverse A
x = Inverse(A)%*%B นั่นคือ x = H%*%B
ถ้าใช้ solve(A,B) ก็จะได้ค่า x เท่ากัน
เพราะฉนั้นคำตอบคือ x=1, y=1, z=2
กำหนดเมตริกซ์ A และ B จงหา (A2 - B2)t



จงหา  det(C)



จงหา Inverse K



กำหนดให้
(1) a-b+c+d = 8
(2) a+b-c+d = 6
(3) a+b-c-d = 0
(4) a-b-c+d = 4
จงหาค่า c



เพราะฉนั้น c=2




วันอาทิตย์ที่ 26 สิงหาคม พ.ศ. 2555

คิดถึงสายใจ

สายใจ ... Golden retriever สุดรักของผมจากไปเกือบปีแล้ว พอดีเปิดมาเจอรูป ก็เลยคิดถึงขึ้นมาเป็นพิเศษ ;-)

เที่ยวใกล้บ้าน วัดเจ็ดยอด ^_^




สวัสดีครับ

นี่ก็คงจะเป็นบล็อกแรกของผมเลยล่ะ
วันนี้จะชวนทุก ๆ ท่านไปเที่ยววัดเจ็ดยอด ที่จังหวัดเชียงใหม่กันครับ

วัดเจ็ดยอด (พระอารามหลวง) เป็นวัดโบราณและมีความสำคัญทางด้านประวัติศาสตร์วัดหนึ่งของอาณาจักรล้านนาไทย กล่าวคือ เป็นวัดที่สมเด็จพระเจ้าติโลกราช รัชกาลที่ 10 แห่งราชวงศ์มังราย ทรงโปรดเกล้าให้สร้างขึ้น เมื่อ พ.ศ. 1998 โปรดให้หมื่นด้ามพร้าคต หรือ สีหโคตรเสนาบดี เป็นนายช่างทำการก่อสร้าง ศาสนสถานและเสนาสนะขึ้นเป็นพระอาราม โปรดฯ ให้นิมนต์พระมหาเถระชื่อพระอุตตมปัญญา มาสถิตเป็นอธิบดีสงฆ์องค์แรกในพระอารามนี้ ครั้นนั้นสมัยพระเจ้าสมเด็จติโลกราชได้ทรงสดับพระธรรมเทศนาจากสำนักพระภิกษุสีหล (ศรีลังกา) เรื่องอานิสงส์ปลูกต้นโพธิ์ พระองค์ทรงมีพระราชประสงค์ใคร่จะปลูกต้นโพธิ์ จึงโปรดฯ ให้แบ่งหน่อมหาโพธิ์เดิม ที่พระภิกษุสีหลนำมาจากศรีลังกาเอามาปลูกไว้ในอารามป่าแดงหลวงเชิงดอยสุเทพ เอามาปลูกขึ้นไว้ในวัดนี้ เพราะเหตุที่ปลูกมหาโพธิ์ในพระอารามนี้ จึงได้รับขนานนามว่า "วัดโพธาราม"หรือวัดโพธารามมหาวิหาร"

ถ่ายรูปมาให้ดูครับ ถ่ายด้วยกล้อง compact นะ ภาพอาจจะไม่โปร แต่ก็พอดูได้ล่ะ





พอดีไปวัดช่วงสงกรานต์ก็เลยมีภาพที่ผมคิดว่าน่าสนใจ เอามาฝากครับ