|
การฝึกเขียนโปรแกรม SciLab ขั้นแนะนำ (โดย MathGuy)
โพสต์เมื่อ:
11:21 วันที่ 30 เม.ย. 2550 ชมแล้ว:
22,225
ตอบแล้ว:
197
วิชาการ.คอม > ครูอาจารย์
วิชาการ.คอม > ครูอาจารย์ > ครูคุยทั่วไป วิชาการ.คอม > ครูอาจารย์ > การเรียนการสอน วิชาการ.คอม > ครูอาจารย์ > เทคนิควิธีการสอน
น่าจะนับได้ว่า เป็นการนับ 1 ของการที่จะพอมีอะไรแบ่งปันให้กับคนอื่นๆบ้าง ในโลก Internet
จากที่เราได้ใช้ประโยชน์จากแหล่งความรู้ ข้อมูลต่างที่มีประโยชน์ต่อเรา ที่มีคนเสียสละเวลา
เสียสละแรงกายใจ แบ่งปันให้เราได้ใช้ร่วมกัน
เมื่อถึงจุดๆหนึ่ง เราก็น่าจะได้เริ่ม ทดแทนคุณกลับคืนบ้าง (รับมามากแล้ว เราก็ฝึกที่จะให้
)
.........................................................................................................................
กระทู้นี้ จึงเป็นการแบ่งปัน ในเรื่องการฝึกเขียนโปรแกรม SciLab
เข้าไปดูตรงนี้นะครับ : http://www.champa.kku.ac.th/jeerayut/scilab41/scilab41.html
(1) ถ้ารู้ว่า MatLab, Maple, Mathematica, Maxima, Octave คืออะไร ก็จะรู้ว่า SciLab เป็นพี่น้องกันด้วย
(2) SciLab เป็น Freeware และเข้าใจว่าจะเป็นต่อไปเรื่อยๆ (เช่นเดียวกับ Maxima และ Octave)
(3) ผมเชือว่า SciLab มีความสามารถสูงในการใช้งาน และกำลังจะเข้าไปพิสูจน์ หาคำตอบอันนี้
(4) กระทู้นี้จึงเป็นการเชิญชวน ผู้ที่สนใจ ให้เรียนรู้ไปด้วยกัน
(5) ผู้เรียนควรจะมีพื้นความรู้ทางคณิตศาสตร์ (มัธยมปลายน่าจะ OK) และมีพื้นความรู้ทางการเขียนโปรแกรมคอมพิวเตอร์บ้างพอสมควร (เคยเขียนมาบ้าง ภาษาอะไรก็ได้)
(6) ผมจะแนะนำให้น้อยที่สุด (เท่าที่คิดว่าน่าจะพอเริ่มต้นได้) และจะเน้นการทดลองเขียน การเรียนรู้ด้วยตัวเอง
(7) ถ้ามีผู้ใดที่ใช้โปรแกรมนี้อยู่ และถึงขั้นเชี่ยวชาญแล้ว ก็อยากจะให้มาช่วยๆกัน แลกเปลี่ยนประสบการณ์ครับ
(8) ผู้ที่สนใจ ถ้าได้ทดลองเขียน เรียนรู้ตามไป ถ้าไม่เข้าใจ ก็ให้ post ถามในกระทู้นี้นะครับ
คำตอบบางส่วนต่อคำถามของคุณ np เกี่ยวกับการวาดรูปสี่เหลี่ยม ................................................................... -->clf() -->plot2d(2,2,-1) -->xrect(2,2,0.2,0.2) -->xfrect(2.3,2.3,0.1,0.1) -->xset("color",5) -->xrect(1.5,1.5,0.2,0.4) -->xfrect(1.5,2,0.4,0.2) -->xset("color",3) -->xrect(1.6,2.4,0.3,0.3) -->xfrect(2.5,1.5,0.4,0.4) -->xgrid() --> ได้ผลดังนี้ ![]() เพิ่มเติม เกี่ยวกับ xrect() และ xfrect() ที่ใช้วาดสี่เหลี่ยม และสี่เหลี่ยมที่ระบายสี ....................................................................................................... -->clf() -->plot2d(2,2,-1) -->xrect(1.2,2.8,1.6,1.6) -->xset("color",5) -->xrect(1.4,2.6,1.2,1.2) -->xfrect(1.4,2.6,1.2,1.2) -->xset("color",1) -->xfrect(1.6,2.4,0.8,0.8) -->xset("color",2) -->xfrect(1.8,2.2,0.4,0.4) -->xset("color",3) -->xfrect(1.9,2.1,0.2,0.2) --> ได้ผลดังนี้ ![]() คุณ MathGuy ชอบปล่อยหมัดหนักๆอยู่เรื่อยเลยนะ งงไปหมดเลย ตามไม่ทันหรอก(ขี้เกียจแกะ แกะแล้วก็คงจะไม่เข้าใจ) แต่ถ้าตอบคำถามผม คหพต.85 ผมอาจจะตามทันก็ได้นะ np (IP:58.8.89.230) เริ่มจะไม่สนุกเสียแล้ว np (IP:58.8.89.230) เรื่องของเรื่องก็คือ ไม่รู้ว่า ตัวไหนใช้ฟังก์ชันก์อะไร ฟังก์ชันไหน มี Syntax ว่ายังไง มี argument ยังไง argument แต่ละตัว หมายความว่ายังไง แทนที่จะสนุก ก็กลายเป็นเรื่องเครียดไป np (IP:58.8.86.71) ต้องขอโทษด้วยครับ ไม่มีเจตนาให้เครียดเลย .............................................................................. (1) ฟังก์ชัน clf() ใช้ล้าง หรือ เคลียร์หน้าต่างแสดงผลกราฟิก (2) ฟังก์ชัน plot2d(x,y) ใช้ plot เส้นตรงแบบต่อจุด โดย x,y เป็น array หรือ เวกเตอร์ ที่เก็บพิกัดของจุด x เก็บพิกัดของ X และ y เก็บพิกัดของ Y สมมติว่า เราจะวาดรูปสามเหลี่ยม ที่มีจุดยอดทั้ง 3 เป็น (1,1), (2,2) และ (3,1) วิธีทำ : เราจะลากเส้นจาก (1,1) ไปยัง (2,2) ไปยัง (3,1) แล้วกลับมาที่ (1,1) พิกัดของ X (พิกัดแรก) คือ 1, 2, 3, 1 พิกัดของ Y (พิกัดที่สอง) คือ 1, 2, 1, 1 ดังงนั้นเราต้องสร้าง array หรือเวกเตอร์ x = [1 2 3 1] และ y = [1 2 1 1] แล้วค่อยสั่งฟังก์ชัน plot2d(x,y) ได้ code ทั้งหมดดังนี้ -->clf() -->x=[1 2 3 1]; -->y=[1 2 1 1]; -->plot2d(x,y) --> ได้ผลดังนี้ครับ ![]() จากรูปก่อนหน้านี้ เราจะวาดรูปสี่เหลี่ยม (โดยการลากเส้นต่อจุด) โดยมีจุดยอดคือ (1.8,1.2), (1.8,1.4),(2.2,1.4),(2.2,1.2) เราจึงสร้าง a=[1.8 1.8 2.2 2.2 1.8] และ b=[1.2 1.4 1.4 1.2 1.2] เพิ่ม code ต่อไปนี้ -->a=[1.8 1.8 2.2 2.2 1.8]; -->b=[1.2 1.4 1.4 1.2 1.2]; -->plot2d(a,b) --> ได้ผลดังนี้ ![]() คุณ np จะลองสร้างรูป 8 เหลี่ยม หรือ 6 เหลี่ยมดูก็ได้ครับ วิธีการคิด 1) ลองวาดรูปดังกล่าวในกระดาษ ที่มีพิกัด 2) ดูว่าจุดยอดที่เราต้องการนั้น มีจุดอะไรบ้าง 3) เรียงจุด ตามลำดับที่เราจะลากเส้น (อย่าลืมวนกลับมาที่จุดเริ่มต้น) 4) นำพิกัดของจุดไปสร้าง array หรือเวกเตอร์ x และ y 5) สั่ง plot2d(x,y) จะได้รูปที่เราต้องการครับ จริงๆ แล้ว การทำกราฟิกใน scilab นั้น จะเน้นหนักเพื่อการ plot ที่อยู่ในรูปแบบของฟังก์ชัน ดังนั้นผมขออนุญาต แนะนำกราฟิก ที่เป็นเป้าหมายหลักของ Scilab ...................................................................................................... Simple 2D Plot with grids ( การพลอตใน 2 มิติ อย่างง่าย พร้อมกับการใส่ grids ) ตัวอย่าง -->t=0:0.1:6*%pi; -->plot2d(t,sin(t)); -->xtitle('plot2d and xgrid','t','sin(t)'); -->xgrid(); --> ได้ผลดังนี้ ![]() plot แบบขั้นบันได โดยใช้ฟังก์ชัน plot2d2() ตัวอย่าง -->x=linspace(0,2*%pi,50); -->y=sin(x); -->plot2d2(x,y) --> ได้ผลดังนี้ ![]() plot แบบต้นไม้หรือก้านไม้ขีด (เส้นแนวดิ่งแสดงความสูง) ด้วย plot2d3() ตัวอย่าง -->x=linspace(0,2*%pi,50); -->y=sin(x); -->plot2d3(x,y) --> ได้ผลดังนี้ ![]() ไทยรักไทย ถูกยุบ กรรมการบริหารพรรคถูกตัดสิทธิ์ ห้ามเล่นการเมือง 5 ปี np (IP:58.8.83.213) อันนี้ ถือว่า เป็น break ระหว่าง session นะครับ เมื่อวานผมก็นั่งฟัง งีบหลับไปหลายยก ............................................................. รู้สึกยินดี ที่ศาลให้ทั้งคำตัดสิน และให้คำอธิบาย ให้ความรู้กับประชาชนด้วย ( ก็ไม่แน่ใจว่า ผู้ฟังทั้งหลาย จะได้เปิดใจ ที่จะรับสื่อ เหตุผลที่เป็นสติปัญญาหรือไม่ ) เวลาพูดถึงประชาธิปไตย เราต้องมองให้เห็น ทั้ง รัฐบาล รัฐสภา และ ศาล ไปพร้อมๆกัน อย่างเห็นความสำคัญทัดเทียมกัน ที่จะดุลอำนาจ ตรวจสอบกันอย่างเป็นธรรม ครับ ... สงสัยว่า ผมก็ควรจะเอาแบบอย่างการตัดสิน วินิจฉัยของศาล ในครั้งนี้ .................................................................................................... ไม่แน่ใจว่าคุณ np จะลองดูกับ การทำกราฟิก อีกสักตั้งหนึ่งหรือเปล่า? - ผมต้องขอสารภาพว่า syntax ของการทำกราฟิกใน SciLab แบบครบถ้วนสมบูรณ์นี่ ทำความเข้าใจค่อนข้างลำบากทีเดียว - ที่ผมคัดเอาบางส่วนมาให้ดู อันนี้คือที่พอดูง่ายๆ เท่านั้น - อย่างเจ้าฟังก์ชัน plot2d( ) จริงๆแล้ว มี syntax หลายรูปแบบมาก - ที่ผมแสดงให้ดูคือ plot2d(x,y) เป็นการพลอตแบบต่อจุด โดย x เป็น array ของพิกัดแรกของจุดต่างๆ ในขณะที่ y เป็น array ของพิกัดที่ 2 ของจุดเหล่านั้น ......................................................................... ถ้าคุณ np ยังอยากจะทำรูป 6 เหลี่ยม หรือ 8 เหลี่ยมอยู่ เราก็จะได้ช่วยกันทำได้ครับ ......................................................................... หรือไม่อย่างนั้น เราก็จะได้เปลี่ยนเนื้อหา ไปทำการคำนวณแบบอื่นๆ ทางคณิตศาสตร์ เช่น การแยกตัวประกอบของพหุนาม การ dif หรือ การ integrate การหาคำตอบของระบบสมการ เป็นต้น สิ่งที่ผมอยากทราบ คือคำถามที่ คหพต.85 (เป็นข้อๆ ไม่ใช่รวมกันในข้อเดียว ซึ่งแยกไม่ออกว่าคำสั่งใดของข้อไหน)แต่ก็ทำได้แล้วเป็นบางข้อ แต่ . . .พิจารณาแล้วเห็นว่าโปรแกรมนี้มันไม่สากลนำไปประยุกต์ใช้กับโปรแกรมอื่นไม่ได้ เช่น สี แทนที่จะเป็น RGB 0-255 มันเป้นอะไรก็ไม่ทราบ จุดต่างๆบนจอก็ไม่สากล ดังนั้น ผมก็คงจะไม่ติดตามต่อไปหรอกครับ และประการสำคัญก็คือ คุณ MathGuy เป็นครูในระดับอุดมศึกษา ไม่มีประสบการณ์การสอนในระดับประถมหรือมัธยม ผมคงจะตามไม่ทัน np (IP:58.8.93.109) 1) เรื่องการเป็นสากลหรือไม่ของ SciLab นี้ ผมเองก็ยังบอกไม่ได้ครับ คือ ผมเองก็พึ่งจะเข้ามาทำความรู้จักกับ SciLab ได้สัก 2 - 3 เดือนนี้เอง ก็พยายามเรียนรู้เองไปเรื่อยๆ 2) ผมเข้าใจว่าการที่เราจะลงทุนลงแรงฝึกใช้งานโปรแกรมอะไรสักอย่าง โดยเฉพาะโปรแกรมประเภทที่ต้องมีระยะเวลาในการเรียนรู้พอสมควรเช่นนี้ ก็จะมีปัจจัยอะไรหลายๆอย่างเป็นแรงผลักดัน รวมทั้งเรื่องกำลังใจ ผู้สอน หรือแหล่งความรู้ต่างๆที่เราจะค้นคว้าเองได้ 3) SciLab ก็เป็นเพียงโปรแกรมหนึ่งที่มีจุดเด่นในหลายๆด้าน แต่ก็ไม่ได้ออกแบบมาเพื่อให้ทำงานได้หมดทุกสิ่งทุกอย่าง 4) การใช้ SciLab อยู่ที่การเขียน code ค่อนข้างมาก ดังนั้นสำหรับระดับประถมแล้วคงจะเป็นไปไม่ได้ ระดับมัธยมเองก็ต้องมีพื้นและมีใจรักจริงๆ จึงพอจะทำได้ และยิ่งติดที่เนื้อหาที่เป็นภาษาอังกฤษ เป็นคณิตศาสตร์ เป็นวิทยาการคอมพิวเตอร์ ก็จะทำให้ผู้ที่อยากเรียนรู้เองนั้นลดน้อยลงไปอีก 5) แม้แต่ระดับอุดมศึกษาเองก็ตาม คนที่จะมีความรู้ด้านการเขียนโปรแกรม ถ้าไม่ได้เรียน หรือทำงานด้าน computer ที่ต้องเขียน code ก็นับว่ายังมีน้อยเช่นกัน 6) เท่าที่ผมได้โพสต์ทิ้งไว้กว่า 1-2 เดือน ก็เป็นการยืนยันได้ค่อนข้างดีว่า กลุ่มเป้าหมายนั้นมีไม่มาก (แทบไม่มีเลย) 7) ผมยินดี และดีใจมากๆ ที่คุณ np เข้ามาร่วมเรียนรู้ด้วย เป็นกำลังใจที่ดีให้ และก็ต้องขออภัยที่เจ้า SciLab และตัวผมเองยังไปไม่ถึงจุดที่น่าจะไปถึงได้มากกว่านี้ 8) ผมก็คงจะโพสต์อะไรๆ ทิ้งไว้เรื่อยๆ ให้เป็นสมบัติของที่นี้ เพื่อว่าจะมีประโยชน์ในภายหลัง กับใครที่สนใจได้บ้าง 9) จะอย่างไรก็ตามก็ขอให้แวะเข้ามาพุดคุยทักทายกันบ้างเป็นครั้งคราวนะครับ การแก้ระบบสมการอย่างง่าย ตัวอย่าง จงหาคำตอบของระบบสมการ 2x + y = 13 3x - 2y = 9 ซึ่งหาคำตอบได้ดังนี้ -->A=[2 1; 3 -2] A = 2. 1. 3. - 2. -->X=inv(A)*[13; 9] X = 5. 3. --> (ตัวอย่างเพิ่มเติม) จงหาคำตอบของระบบสมการ x + y + 5z = 18 2x + 3y -z = 5 4x - y + 2z = 8 ซึ่งหาคำตอบได้ดังนี้ -->A=[1 1 5; 2 3 -1; 4 -1 2] A = 1. 1. 5. 2. 3. - 1. 4. - 1. 2. -->b=[18; 5; 8] b = 18. 5. 8. -->X=inv(A)*b X = 1. 2. 3. --> อินเวอร์ส และ ดีเทอมิแนนท์ของเมตริกซ์ -->A A = 1. 1. 5. 2. 3. - 1. 4. - 1. 2. -->det(A) ans = - 73. -->inv(A) ans = - 0.0684932 0.0958904 0.2191781 0.1095890 0.2465753 - 0.1506849 0.1917808 - 0.0684932 - 0.0136986 -->det(A)*inv(A) ans = 5. - 7. - 16. - 8. - 18. 11. - 14. 5. 1. --> เด็กใหม่ครับ แล้วถ้า ต้องการให้หาค่า สูงสุดและ ต่ำสุด ของสมการ ได้ไหมครับ แล้วจะต้องเขียนยังง่ะครับ |
ขอบคุณผู้สนับสนุนHot Links |
Copyright© 2000-2007, Vcharkarn.Com. All rights reserved.
|
คลิ๊กเพื่อดูสถิติ รับรองและสนับสนุนโดย |
![]() สสวท. |
![]() มูลนิธิ พสวท. |
![]() พสวท. |