|
การฝึกเขียนโปรแกรม SciLab ขั้นแนะนำ (โดย MathGuy)
โพสต์เมื่อ:
11:21 วันที่ 30 เม.ย. 2550 ชมแล้ว:
16,242
ตอบแล้ว:
187
วิชาการ.คอม > ครูอาจารย์
วิชาการ.คอม > ครูอาจารย์ > ครูคุยทั่วไป วิชาการ.คอม > ครูอาจารย์ > การเรียนการสอน วิชาการ.คอม > ครูอาจารย์ > เทคนิควิธีการสอน
น่าจะนับได้ว่า เป็นการนับ 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 ถามในกระทู้นี้นะครับ
หน้าตาของโปรแกรม เมื่อ run ในตอนแรก ___________________________________________ scilab-4.1 Copyright (c) 1989-2006 Consortium Scilab (INRIA, ENPC) ___________________________________________ Startup execution: loading initial environment --> ตัวอย่างการคำนวณอย่างง่าย -->1+2+3+4+5 ans = 15. -->1^2+2^2+3^2+4^2+5^2 ans = 55. -->1*1+2*2+3*3+4*4+5*5 ans = 55. -->a=7,b=5 a = 7. b = 5. -->c=(a+b)*(a-b) c = 24. -->a^2-b^2 ans = 24. --> ตัวอย่างการคำนวณกับ array หรือ เวกเตอร์แถว -->x=[1 2 3 4 5 6 7 8 9] x = 1. 2. 3. 4. 5. 6. 7. 8. 9. -->y=10*x y = 10. 20. 30. 40. 50. 60. 70. 80. 90. -->y=x.^2 y = 1. 4. 9. 16. 25. 36. 49. 64. 81. -->z=[5*x; x.^3] z = 5. 10. 15. 20. 25. 30. 35. 40. 45. 1. 8. 27. 64. 125. 216. 343. 512. 729. --> ตัวอย่าง การวาดกราฟอย่าง่าย -->x=0:0.1:10 x = column 1 to 13 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 column 14 to 26 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 column 27 to 39 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 column 40 to 52 3.9 4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. 5.1 column 53 to 65 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6. 6.1 6.2 6.3 6.4 column 66 to 78 6.5 6.6 6.7 6.8 6.9 7. 7.1 7.2 7.3 7.4 7.5 7.6 7.7 column 79 to 91 7.8 7.9 8. 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9. column 92 to 101 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10. -->plot(x,sin(x)) --> ![]() -->plot(x,sin(x)+cos(2*x)) ![]() การประมาณค่ารากที่ 2 (อย่างง่าย) -->function y=MySq(x), -->a=1, -->for i=1:10, b=(a+x/a)/2; a=b; end, -->y=b, -->endfunction -->u=[2 3 4 9 100] u = 2. 3. 4. 9. 100. -->for i=1:5, v(i)=MySq(u(i)); end -->v v = 1.4142136 1.7320508 2. 3. 10. -->for i=1:5, w(i)=sqrt(u(i)); end -->w w = 1.4142136 1.7320508 2. 3. 10. ใน คหพ#6 ฟังก์ชัน MySq() เราเขียนขึ้นมาเอง ( เป็นวิธีการที่ใช้กันมากว่า 2000 ปีแล้วเห็นจะได้ ถ้าจำไม่ผิด ) เป็นการคำนวณแบบทำซ้ำ 10 รอบ (ดูแล้วน่าจะพอ) ตอนท้าย เราเปรียบเทียบผลที่ได้กับ buit-in function คือ sqrt() คำถาม มีใครทราบบ้างว่า ในโปรแกรมการคำนวณต่างๆ หรือในเครื่องคิดเลขของเรา เขาใช้วิธีการอะไร ในการประมาณค่ารากที่สอง ขอปรบมือให้ คุณ MathGuy และ โปรแกรม Scilab (ยอดเยี่ยมจริงๆ) ไหน ๆ ก็คิดจะ"ให้" แล้ว ช่วยแปล สคริปต์ต่อไปนี้เป็นภาษามนุษย์(ไทย)ให้หน่อยครับ -->function y=MySq(x), -->a=1, -->for i=1:10, b=(a+x/a)/2; a=b; end, -->y=b, -->endfunction ---------------------------------------- -->u=[2 3 4 9 100] u = 2. 3. 4. 9. 100. -->for i=1:5, v(i)=MySq(u(i)); end -->v v = 1.4142136 1.7320508 2. 3. 10. -->for i=1:5, w(i)=sqrt(u(i)); end -->w w =1.4142136 1.7320508 2. 3. 10. np (IP:58.8.92.132) ดีใจมากครับ ที่คุณ np กรุณาเป็นผู้ช่วยสอน (ผมขออนุญาตแต่งตั้งนะครับ -->function y=MySq(x), -->a=1, -->for i=1:10, b=(a+x/a)/2; a=b; end, -->y=b, -->endfunction บรรทัดแรก : function y=MySq(x), ตั้งชื่อฟังก์ชันว่า MySq() ตัวแปร x เป็น input ส่วนตัวแปร y เป็น output ( ใช้ในการนิยามฟังก์ชัน) บรรทัดที่ 2 : a=1, จริงๆ ฟังก์ชัน MySq() จะใช้กับ input ที่เป็นจำนวนจริงบวกเท่านั้น a=1 เป็นค่าประมาณของราก(อย่างง่าย)ค่าแรก ต่อไปเราจะพิจารณาค่า a กับค่า x/a ถ้าค่า a ประมาณมากไป ค่า x/a จะเป็นค่าประมาณที่น้อยไป ในทางกลับกัน ถ้าค่า a ประมาณน้อยไป ค่า x/a จะเป็นค่าประมาณที่มากไป ก็เลยหาค่าเฉลี่ย ให้ b=(a+x/a)/2 แล้ว update ค่า a ใหม่ โดยให้ a=b ซึ่งจะทำซ้ำเช่นนี้ 10 ครั้ง ตาม code for i=1:10, b=(a+x/a)/2; a=b; end, ซึ่งเขียนโดยใช้โครงสร้างของ FOR LOOP เมื่อครบ 10 รอบ ก็ให้ค่า y =b เป็นอันจบครับ (ตามด้วย end function) เหมือนเป่าปี่ ใส่หูกระบือเลยครับ ไม่เป็นไรครับ จะพยายามทำความเข้าใจไปทีละนิดๆ อันดับแรก ขอถามว่า for i=1:10 นั้น หมายถึง i เท่ากับ 1 ต่อ 10 ใช่หรือไม่ หรือว่า i เท่ากับ 1 จนกระทั่งถึง 10 เพราะแต่ละภาษาก็เขียนต่างกันไป np (IP:58.8.95.144) for i=1:10, ..., end เป็นการใช้ LOOP ช่วยในการคำนวณครับ i เป็นตัวนับจำนวนครั้งในการวนลูป จริงๆ แล้ว for i=1:10 ให้ผลเท่ากับ for i=1:1:10 เลขตัวแรก เป็นค่าเริ่มต้น เลขตัวกลางเป็น ค่าที่เพิมในแต่ละรอบ (ในที่นี้เพิ่มทีละ 1) เลขตัวสุดท้าย เป็นค่าที่สิ้นสุด ถ้าเราเพิ่มค่าทีละ 1 โปรแกรม SciLab อนุญาตให้ละเอาไว้ได้ ไม่ต้องเขียน ตัวอย่างเพิ่มเติม -->for i=5:2:13, a((i-3)/2)=i, end a = 5. a = 5. 7. a = 5. 7. 9. a = 5. 7. 9. 11. a = 5. 7. 9. 11. 13. --> อันนี้แสดงผลในแต่ละรอบที่ได้ ถ้าให้แสดงผลตอนจบทีเดียว เปลี่ยนจาก a((i-3)/2)=i, เป็น a((i-3)/2)=i; ดังนี้ -->for i=5:2:13, a((i-3)/2)=i; end -->a a = 5. 7. 9. 11. 13. --> (เพิ่มเติม) ในภาษา C++ จะเขียนแบบนี้ครับ for (int i=1;i<=10;i++) { : } หรือ for (int i=5;i<=13;i=i+2) { : } (เพิ่มตัวอย่าง code ในการตรวจสอบการเป็นจำนวนเฉพาะ พร้อมทั้งหา prime factor ตัวแรก ในกรณีที่เป็นจำนวนประกอบ) -->function y=MyFactor(x), -->a=1, -->b=2, -->while((b*b)<=x), -->if ((x-b*int(x/b))==0) then a=b, break; else b=b+1; end, -->end, -->y=a, -->endfunction -->y1=MyFactor(15) y1 = 3. -->y2=MyFactor(49) y2 = 7. -->y3=MyFactor(1111) y3 = 11. -->y4=MyFactor(11111) y4 = 41. -->y5=MyFactor(2549) y5 = 1. --> ถ้า x เป็นจำนวนเฉพาะ ฟังก์ชัน MyFactor(x) จะให้ค่าเท่ากับ 1 (ตัวอย่าง การวาดกราฟ 3 มิติ) -->deff('z=MyFn(x,y)','z=x.^2+y.^2') -->x=-5:0.1:5; -->y=-5:0.1:5; -->z=feval(x,y,MyFn); -->plot3d(x,y,z) --> ![]() ตัวอย่างการใช้ฟังก์ชัน MyFactor() ที่เขียนก่อนนี้ ในการหาจำนวนเฉพาะทั้งหมดที่มีค่าไม่เกิน 100 -->PM(1)=2; -->count=1; -->for i=3:2:99, if (MyFactor(i)==1) then count=count+1; PM(count)=i; end, end -->PM PM = 2. 3. 5. 7. 11. 13. 17. 19. 23. 29. 31. 37. 41. 43. 47. 53. 59. 61. 67. 71. 73. 79. 83. 89. 97. --> ตามไม่ทันเลยครับ หลงทางตั้งแต่แรก 1.ไม่ได้บอก(ตั้งแต่แรก)เลยว่า จะหาโปรแกรมนี้ได้จากที่ไหน 2.จะ Install โปรแกรมอย่างไร 3. จะขียนคำสั่งไว้ที่ไหน หรือใช้ Tools ตัวไหนเขียนคำสั่งต่างๆ ใน word หรือ notepad ได้หรือไม่ 4. ส่วนไหน คือคำสั่ง (Script) ที่เขียน ส่วนไหน คือผลที่แสดงออกมา หรือรัน ยังไง 5. การแปลความหมายหรือภาษาของโปรแกรม คำต่อคำ ประโยคต่อประโยค เป็นภาษามนุษย์ ยังไม่ชัดเจน 6. ถ้าเป็นไปได้ลองเขียนในภาษาอื่น เช่น C++, PHP, VBScript, JavaScript เปรียบเทียบกับมาให้ดูบ้าง(เผื่อคนรู้ภาษาใด จะได้ทำความเข้าใจโดยเทียบกับภาษานั้น) โดยทำเฉพาะระยะแรกเท่านั้น พอจับหลักรู้ทางแล้ว ก็ไม่ต้อง 7. จะศึกษาหาความรู้เกี่ยวกับการใช้โปรแกรมนี้(โดยไม่ต้องให้รอป้อนให้ทีละคำ) ได้จากไหน np (IP:58.8.85.76) ขอยกเลิกคำถามข้อที่ 7 ของ คหพต.16 ครับ เพราะเจอแล้ว ที่ http://www.champa.kku.ac.th/jeerayut/scilab41/scilab41.html np (IP:58.8.85.76) ได้พบแหล่งเรียนรู้(ดังใน คหพต. 17 )แล้ว ลองเข้าไปศึกษาดู(นิดหน่อย) พอที่จะได้คำตอบของ คำถามใน คหพต.16 ได้บ้าง ดังนั้น ยังไม่ขอยกเลิกคำถามใน คหพต.16 นะครับ ให้เป็นคำตอบเสริม หรือ นึกเสียว่า "คุยกัน" ก็แล้วกัน np (IP:58.8.85.76) พบแหล่งเรียนรู้เกี่ยวกับ SciLab บ้างแล้ว ที่. . . . http://home.npru.ac.th/~t3058/Scilab.html http://home.npru.ac.th/~t3058/Documents/3.pdf http://topicstock.pantip.com/wahkor/topicstock/2006/11/X4884810/X4884810.html np (IP:58.8.85.76) เนื้อหาตอนที่ 1 : แนะนำโปรแกรม SciLab 1.1 การติดตั้งโปรแกรม Scilab installation on Windows Scilab-4.1 Get the binary file (scilab-4.1.exe) and double click on this file To launch Scilab , go in startup menu and double click on Scilab 4.1 การลงโปรแกรม Scilab บน Windows 1) เข้าไปดาวโหลดไฟล์ scilab-4.1.exe ที่ http://www.scilab.org/ 2) ดับเบิลคลิ๊กไฟล์ดังกล่าวเพื่อทำการติดตั้ง (install) 3) จะได้ icon ของโปรแกรมบนหน้าจอ (desktop) หรือใน startup menu ก็ให้คลิ๊กเพื่อ run หรือ เริ่มต้นเข้าโปรแกรม จะได้หน้าจอเหมือนใน คหพ#1 |