Professional Documents
Culture Documents
สํ าหรับผ้ ูเริ่มต้ น
(ฉบับปรับปรุ งใหม่)
ผศ.ดร.ปิ ยะ โควินท์ทวีวฒั น์
โปรแกรมวิศวกรรมโทรคมนาคม
มหาวิทยาลัยราชภัฏนครปฐม
คู่มอื โปรแกรมภาษา SCILAB สํ าหรับผู้เริ่มต้ น
(ฉบับปรับปรุ งใหม่)
สงวนลิขสิ ทธิ์ตามพระราชบัญญัตลิ ขิ สิ ทธิ์
่่ ่
ห้ามลอกเรี ยนแบบไมวาสวนใด ่
สวนหนึ ่ ้ ไมวาในรู
่ งในหนังสื อเลมนี ่ ่ ปแบบใดๆ
นอกจากจะได้รับอนุญาตเป็ นลายลักษณ์อกั ษรจากผูเ้ ขียนเทานั ่ ้น
ข้ อมลทางบรรณานกรมของหอสมดแห่
ู ุ ุ งชาติ
ปิ ยะ โควินท์ทวีวฒั น์
คูม่ ือโปรแกรมภาษา SCILAB สําหรับผูเ้ ริ่ มต้น./ ปิ ยะ โควินท์ทวีวฒั น์. --นครปฐม:
โปรแกรมวิศวกรรมโทรคมนาคม คณะวิทยาศาสตร์และเทคโนโลยี
มหาวิทยาลัยราชภัฏนครปฐม, 2551
310 หน้า
1. ภาษาคอมพิวเตอร์ 2. เอสซี ไอแอลเอบี (ภาษาคอมพิวเตอร์). 3. ชื่อเรื่ อง
GA 76.73.S3ป621
ISBN 974-620-609-5
หมายเหตุ
่
หนังสื ออิเล็กทรอนิ กส์ฉบับนี้ ได้ถกู จัดทําขึ้ นเพื่อใช้ในการศึกษาและการทําวิจยั ผูอ้ านสามารถ
ดาวน์โหลดไปใช้งานได้โดยไมต้่ องเสี ยคาใช้ ่ จ่ายใดๆ
ขอขอบคุณสํานักงานคณะกรรมการวิจยั แหงชาติ ่ (วช.) ที่ให้ทุนสนับสนุน
สําหรับครอบครัว โควินท์ทวีวฒั น์
คํานํา
้
ในปั จจุบนั นี้ ความเจริ ญกาวหน้ ่
าทางด้านเทคโนโลยีเป็ นไปอยางรวดเร็ ่
ว หลายๆ หนวยงานในภาค
การศึกษาได้มีการนําอุปกรณ์คอมพิวเตอร์ และซอฟต์แวร์ ต่างๆ มาใช้ช่วยในการเรี ยนการสอนและ
ทํางานวิจยั ในหลายสาขาวิชาเชน่ วิศวกรรมศาสตร์ และวิทยาศาสตร์ เป็ นต้น โปรแกรม MATLAB
่ นซอฟต์แวร์ ที่นิยมใช้งานกนมาก
ถือวาเป็ ั สําหรับการคํานวณเชิงตัวเลขและการแสดงผลกราฟิ กที่
ซับซ้อน โดยเฉพาะอยางยิ ่ ง่ สําหรับผูท้ ี่ทาํ งานทางด้านวิศวกรรมและวิทยาศาสตร์ ทั้ งนี้ เป็ นเพราะวา่
โปรแกรม MATLAB งายตอการเรี ่ ่ ่ ็
ยนรู้และทําความเข้าใจ อยางไรกตามโปรแกรม MATLAB
่ ขสิ ทธิ์ ของซอฟต์แวร์ซ่ ึ งมีราคาแพงมาก ทําให้ผคู้ นจํานวนมากเสี ย
เป็ นโปรแกรมที่ตอ้ งเสี ยเงินคาลิ
โอกาสที่จะศึกษาและเรี ยนรู ้การใช้งานโปรแกรมนี้ เพื่อนํามาชวยในการทํ ่ างานของตนเอง
โปรแกรม SCILAB เป็ นโปรแกรมที่พฒั นาโดยกลุ่มของนักวิจยั จาก INRIA และ ENPC
ในประเทศฝรั่งเศส เมื่อปี ค.ศ. 1990 โดยมีจุดมุ่งหมายเพื่อใช้ในการคํานวณเชิงตัวเลขและแสดงผล
่ ยวกบโปรแกรม
กราฟิ กที่ซบั ซ้อนเชนเดี ั ่
MATLAB แตโปรแกรม SCILAB เป็ นโปรแกรมที่ให้ฟรี
่ ยเงินคาลิ
(ไมเสี ่ ขสิ ทธิ์ ของซอฟต์แวร์ ) ผูท้ ี่สนใจสามารถดาวน์โหลดโปรแกรมนี้ ไปใช้งานได้ทนั ที
จากเว็บไซต์ http://home.npru.ac.th/~t3058/Scilab.html หรื อ http://www.scilab.org จากที่
ข้าพเจ้าได้ศึกษาการใช้งานโปรแกรม SCILAB พบวาเป็ ่ นโปรแกรมที่สามารถทํางานได้อยางมี ่
ั
ประสิ ทธิ ภาพใกล้เคียงกบโปรแกรม MATLAB ในหลายๆ ด้าน ดังนั้ นจะเห็นได้วาในปั ่ จจุบนั นี้
มหาวิทยาลัยหลายแหงทั ่ ้ งในประเทศและตางประเทศได้
่ เริ่ มมีการนําโปรแกรม SCILAB มาใช้ช่วย
ในการเรี ยนการสอนและทํางานวิจยั
หนังสื อ “คู่มือโปรแกรมภาษา SCILAB สําหรับผูเ้ ริ่ มต้น” มีจุดมุ่งหมายเพื่ออธิบายถึง
พื้นฐานการใช้งานโปรแกรม SCILAB ในรู ปแบบที่ง่ายตอก
่ ารเข้าใจและเรี ยนรู้ได้ดว้ ยตนเอง ทําให้
สามารถนําโปรแกรมนี้ ไปประยุกต์ใช้ในการเรี ยนการสอนของวิชาตางๆ ่ ทางด้านวิศวกรรมและ
่
วิทยาศาสตร์ได้อยางรวดเร็ ่ าให้นกั ศึกษาสามารถเข้าใจถึงทฤษฏีในบทเรี ยนมากยิง่ ขึ้ น
ว ซึ่ งจะชวยทํ
่ ้ จึงสามารถนํามาใช้ประกอบการเรี ยนการสอนในระดับมัธยมศึกษาตอนปลาย
ฉะนั้ นหนังสื อเลมนี
่ เชน่ วิชาคณิ ตศาสตร์, วิชาฟิ สิ กส์, วิชาการสื่ อสารดิจิทลั (digital
และระดับอุดมศึกษาได้เป็ นอยางดี
communication), วิชาสัญญาณและระบบ (signals and systems), และวิชาการประมวลผล
สัญญาณดิจิทลั (digital signal processing) เป็ นต้น
่ ้ จะเริ่ มต้นอธิ บายจาก ความรู้ทว่ั ไปเกยวกบโปรแกรม
หนังสื อเลมนี ี่ ั SCILAB เชน ่ ประวัติ
ความเป็ นมาของโปรแกรม SCILAB และการใช้งานคําสั่งพื้นฐานทัว่ ไป เป็ นต้น บทที่ 2 จะกลาวถึ ่ ง
ประเภทของข้อมูล เพื่อที่ผใู้ ช้จะได้สามารถสร้างตัวแปรสําหรับข้อมูลประเภทตางๆ ่ ได้สอดคล้องกบั
ความต้องการในการใช้งาน บทที่ 3 จะอธิบายถึงตัวดําเนินการที่ใช้สาํ หรับการคํานวณทางคณิ ตศาสตร์
เชน่ เครื่ องหมายการบวก การลบ การคูณ และการหาร เป็ นต้น บทที่ 4 จะอธิบายถึงการใช้เรี ยกงาน
ฟังกชั์ นพื้นฐานตางๆ
่ สําหรับการคํานวณทางคณิ ตศาสตร์ บทที่ 5 จะกลาวถึ ่ งหลักการเขียนโปรแกรม
SCILAB ซึ่ งจะทําให้ผใู ้ ช้สามารถพัฒนาฟั งกชั ์ นใหมๆ่ ขึ้ นมาใช้งานรวมกบโปรแกรม
่ ั SCILAB
่
ได้อยางรวดเร็ วและมีประสิ ทธิภาพ บทที่ 6 จะอธิบายการนําเสนอผลการวิจยั หรื อผลการทดลองที่
ได้มาโดยใช้รูปกราฟทั้ งแบบสองมิติและสามมิติ บทที่ 7 จะอธิบายระบบพื้นฐานอินพุตและเอาต์พุต
ของโปรแกรม SCILAB ซึ่ งจะทําให้สามารถพัฒนาโปรแกรมเพื่อใช้ในการอานและเขี ่ ยนข้อมูล
ระหวางเครื่ ่ องคอมพิวเตอร์กบโปรแกรม
ั SCILAB ได้ บทที่ 8 จะกลาว ่ ถึงขั้ นตอนพื้นฐานในการ
ตรวจสอบหาข้อผิดพลาดภายในตัวโปรแกรม และบทที่ 9 ซึ่ งเป็ นบทสุ ดท้ายจะยกตัวอยางการ ่
ประยุกต์ใช้งานของโปรแกรม SCILAB เพื่อใช้แกปั้ ญหาเฉพาะด้านในรู ปแบบตางๆ ่
่ ้ มาทดลองใช้กบนั
ข้าพเจ้าได้นาํ หนังสื อเลมนี ั กศึกษาชั้ นปี ที่ 1 และ 2 โปรแกรมวิศวกรรม
โทรคมนาคม มหาวิทยาลัยราชภัฏนครปฐม พบวานั ่ กศึกษาที่ไมเคยรู
่ ้จกั โปรแกรม SCILAB มากอน ่
สามารถทําความเข้าใจตามเนื้ อหาในแตละบทได้ ่ ่ และเมื่อศึกษาครบทั้ งเลมแล้
โดยงาย ่ วกจะชวยทํ
็ ่ า
่
ให้นกั ศึกษาสามารถพัฒนาโปรแกรมพื้นฐานขึ้ นมาใช้งานได้อยางรวดเร็ วและมีประสิ ทธิภาพ สําหรับ
ผูท้ ี่สนใจรายละเอียดการใช้งานและความสามารถของโปรแกรม SCILAB เพิ่มเติม ก็สามารถศึกษา
ค้นคว้าได้ดว้ ยตนเองจากเว็บไซต์ http://www.scilab.org
หนังสื อเลมนี ่
่ ้ จะไมสามารถทํ ่
าให้สาํ เร็ จขึ้ นมาได้ ถ้าหากขาดบุคคลตางๆ ที่คอยให้ความ
่
ชวยเหลื ํ งใจให้ขา้ พเจ้าตลอดมา ดังนั้ นข้าพเจ้าขอกราบขอบพระคุณอาจารย์ทุกทานที
อและเป็ นกาลั ่ ่
ให้ความรู้และคําปรึ กษาตลอดระยะเวลาการศึกษา รวมทั้ งทุกๆ คนในครอบครัวของข้าพเจ้า ได้แก่
ี โควินท์ทวีวฒั น์, คุณพรรณี โควินท์ทวีวฒั น์, คุณรัชนิศ โรจนกจิ, คุณอนุทศั น์ โรจนกิจ,
คุณเกยรติ
ิ ศกั ดิ์ โควินท์ทวีวฒั น์, และคุณศิรสุ ดา โสมนัส นอกจากนี้
คุณฉัตรชัย โควินท์ทวีวฒั น์, คุณกตติ
ข้าพเจ้าขอขอบคุณมหาวิทยาลัยราชภัฏนครปฐมที่ให้การสนับสนุนและให้ความสะดวกแกข้่ าพเจ้า
ตลอดระยะเวลาในการเขียนหนังสื อเลมนี่ ้
่ ง่ ในการที่จะทําให้หนังสื อเลมนี
ท้ายสุ ดนี้ ขา้ พเจ้าพยายามอยางยิ ่ ้ ง่ายตอการเรี
่ ยนรู้ เพื่อให้
่
ผูอ้ านสามารถทํ ่
าความเข้าใจได้ดว้ ยตนเองอยางรวดเร็ วและมีประสิ ทธิผล ดังนั้ นหากมีขอ้ บกพรอง ่
ประการใด ข้าพเจ้ามีความยินดีและจักขอบพระคุณยิง่ ถ้าทานผู ่ ใ้ ช้หนังสื อเลมนี่ ้ จะสงข้
่ อคิดเห็นและ
คําแนะนําที่เป็ นประโยชน์สาํ หรั บการปรับปรุ งหนังสื อเลมนี ่ ้ มาที่อีเมล์ piya@npru.ac.th เพื่อที่
้
ข้าพเจ้าจะได้ดาํ เนินการปรับปรุ งและแกไขในการพิ ่
มพ์ครั้ งตอไป
ผศ.ดร.ปิ ยะ โควินท์ทวีวฒั น์
โปรแกรมวิศวกรรมโทรคมนาคม
มหาวิทยาลัยราชภัฏนครปฐม
กรกฎาคม พ.ศ. 2551
สารบัญ
บทที่ 1 ความรู้ เบือ้ งต้ นเกียวกั
่ บโปรแกรม SCILAB.............................................................. 1
1.1 ประวัติความเป็ นมาของโปรแกรม SCILAB .......................................................................... 1
1.2 เริ่ มต้นการใช้งานโปรแกรม SCILAB .................................................................................... 3
1.2.1 แถบเมนูในหน้าตางคํ ่ าสั่ง ................................................................................................ 5
1.3 คําสั่งพื้นฐานสําหรับการเริ่ มต้นใช้งานโปรแกรม SCILAB .................................................. 7
1.4 สรุ ป ....................................................................................................................................... 18
1.5 แบบฝึ กหัดท้ายบท................................................................................................................. 18
บทที่ 2 ประเภทของข้ อมลู .................................................................................................. 19
่ ่พิเศษ........................................................................................................................... 19
2.1 คาคงที
่ ่พิเศษ %i............................................................................................................. 19
2.1.1 คาคงที
่ ่พิเศษ %pi .......................................................................................................... 20
2.1.2 คาคงที
2.1.3 คาคงที ่ ่พิเศษ %e............................................................................................................. 21
่ ่พิเศษ %inf ....................................................................................................... 21
2.1.4 คาคงที
2.1.5 คาคงที่ ่พิเศษ %nan ....................................................................................................... 21
2.1.6 คาคงที ่ ่พิเศษ %eps ....................................................................................................... 21
2.1.7 คาคงที ่ ่พิเศษ ans .......................................................................................................... 23
2.1.8 คาคงที ่ ่พิเศษ %t, %T, %f, และ %F ............................................................................... 23
่ ่พิเศษ %s และ %z .............................................................................................. 24
2.1.9 คาคงที
2.1.10 คาคงที ่ ่พิเศษ %io ........................................................................................................ 24
2.2 เมทริ กซ์คาคงที ่ ่ ...................................................................................................................... 25
2.2.1 สเกลาร์ ............................................................................................................................25
2.2.2 เวกเตอร์ ..........................................................................................................................26
2.2.3 เมทริ กซ์ ..........................................................................................................................29
2.2.4 การหาทรานส์โพสเมทริ กซ์ ............................................................................................32
2.2.5 การหาดีเทอร์ มิแนนต์ .....................................................................................................32
2.2.6 การหาอินเวอร์ สการคูณของเมทริ กซ์ .............................................................................33
2.2.7 การสลับตําแหนงสมาชิ ่ กภายในเมทริ กซ์ .......................................................................35
2.3 เมทริ กซ์ของสายอักขระ.........................................................................................................37
2.4 พหุนาม...................................................................................................................................39
2.4.1 สมการพหุนาม................................................................................................................40
2.4.2 เมทริ กซ์พหุนาม .............................................................................................................43
2.5 เมทริ กซ์บูลีน ..........................................................................................................................44
2.6 เมทริ กซ์เลขจํานวนเต็ม ..........................................................................................................44
2.7 ลิตซ์ ........................................................................................................................................46
2.7.1 ลิตซ์แบบธรรมดา ...........................................................................................................47
2.7.2 ไทพ์ลิตซ์ .........................................................................................................................49
2.8 อาร์เรย์หลายมิติ ......................................................................................................................50
2.9 การตรวจสอบประเภทของข้อมูล ..........................................................................................52
่
2.10 ตัวอยางการคํ านวณ ..............................................................................................................56
2.11 สรุ ป ......................................................................................................................................59
2.12 แบบฝึ กหัดท้ายบท ...............................................................................................................60
บทที่ 3 ตัวดําเนินการทางคณิตศาสตร์ ................................................................................. 63
3.1 ตัวดําเนินการเลขคณิ ต ............................................................................................................63
3.1.1 การดําเนินการทางคณิ ตศาสตร์ที่เกยวข้ ี่ องกบคาคงที ั ่ ่ .....................................................63
3.1.2 ลําดับความสําคัญของการดําเนินการทางคณิ ตศาสตร์ ...................................................64
3.1.3 การดําเนินการทางคณิ ตศาสตร์ที่เกยวข้ ี่ องกบเมทริ ั กซ์ ..................................................65
้
3.1.4 การแกระบบสมการเชิ งเส้น............................................................................................71
3.1.5 การดําเนินการทางคณิ ตศาสตร์ที่เกยวข้ ี่ องกบพหุ ั นาม .................................................. 74
3.2 ตัวดําเนินการสัมพันธ์และตรรกะ.......................................................................................... 76
3.2.1 ตัวดําเนินการสัมพันธ์ .................................................................................................... 76
3.2.2 ตัวดําเนินการตรรกะ ...................................................................................................... 77
3.3 ตัวดําเนินการระดับบิต .......................................................................................................... 80
่
3.4 ตัวอยางการคํ านวณ ............................................................................................................... 82
3.5 สรุ ป ....................................................................................................................................... 85
3.6 แบบฝึ กหัดท้ายบท................................................................................................................. 86
บทที่ 4 ฟังก์ ชันพืน้ ฐานทางคณิตศาสตร์ ............................................................................. 89
4.1 ฟังกชั์ นพื้นฐานที่เกยวกบตั
ี่ ั วเลข............................................................................................ 89
4.1.1 ฟังกชั์ น abs(x) .......................................................................................................... 89
4.1.2 ฟังกชั์ น sqrt(x) ....................................................................................................... 90
4.1.3 ฟังกชั์ น int(x) .......................................................................................................... 92
4.1.4 ฟังกชั์ น modulo(m,n) ............................................................................................. 92
4.1.5 ฟังกชั์ น ceil(x) ....................................................................................................... 93
4.1.6 ฟังกชั์ น floor(x)..................................................................................................... 93
4.1.7 ฟังกชั์ น round(x)..................................................................................................... 93
4.1.8 ฟังกชั์ น fix(x) .......................................................................................................... 93
4.1.9 ฟังกชั์ น rat(x) .......................................................................................................... 94
4.1.10 ฟังกชั์ น sign(x) ..................................................................................................... 95
4.1.11 ฟังกชั์ น roots(x)................................................................................................... 96
4.1.12 ฟังกชั์ น real(x) ..................................................................................................... 96
4.1.13 ฟังกชั์ น imag(x) ..................................................................................................... 96
4.1.14 ฟังกชั์ น conj(x) ..................................................................................................... 96
4.2 ฟังกชั์ นเลขชี้ กาลั
ํ งและลอการิ ทึม .......................................................................................... 97
4.2.1 ฟังกชั์ น exp(x) .......................................................................................................... 97
4.2.2 ฟังกชั์ น log(x) .......................................................................................................... 98
4.2.3 ฟังกชั์ น log2(x) ........................................................................................................98
4.2.4 ฟังกชั์ น log10(x) .....................................................................................................98
4.3 ฟังกชั์ นตรี โกณมิติ..................................................................................................................99
4.3.1 ฟังกชั์ น sin(x).........................................................................................................100
4.3.2 ฟังกชั์ น cos(x).........................................................................................................101
4.3.3 ฟังกชั์ น tan(x).........................................................................................................101
4.3.4 ฟังกชั์ น asin(y) ......................................................................................................101
4.3.5 ฟังกชั์ น acos(y) ......................................................................................................102
4.3.6 ฟังกชั์ น atan(y) ......................................................................................................102
4.4 ฟังกชั์ นไฮเพอร์ โบลิก...........................................................................................................103
4.4.1 ฟังกชั์ น sinh(x) ......................................................................................................104
4.4.2 ฟังกชั์ น cosh(x) ......................................................................................................104
4.4.3 ฟังกชั์ น tanh(x) ......................................................................................................104
4.4.4 ฟังกชั์ น asinh(y) ...................................................................................................105
4.4.5 ฟังกชั์ น acosh(y) ...................................................................................................105
4.4.6 ฟังกชั์ น atanh(y) ...................................................................................................106
4.5 ฟังกชั์ นพื้นฐานทางสถิติ ......................................................................................................106
4.5.1 ฟังกชั์ น min(x).........................................................................................................106
4.5.2 ฟังกชั์ น max(x).........................................................................................................108
4.5.3 ฟังกชั์ น mean(x) ......................................................................................................108
4.5.4 ฟังกชั์ น median(x) .................................................................................................109
4.5.5 ฟังกชั์ น stdev(x) ...................................................................................................109
4.5.6 ฟังกชั์ น sum(x).........................................................................................................110
4.5.7 ฟังกชั์ น cumsum(x) .................................................................................................110
4.5.8 ฟังกชั์ น prod(x) ......................................................................................................111
4.5.9 ฟังกชั์ น cumprod(x) ..............................................................................................111
4.5.10 ฟังก์ชนั sort(x) ....................................................................................................112
4.5.11 ฟังกชั์ น histplot(n,x) ....................................................................................113
4.5.12 ฟังกชั์ น variance(x) ......................................................................................... 113
4.5.13 ฟังกชั์ น geomean(x) ........................................................................................... 114
4.5.14 ฟังกชั์ น harmean(x) ........................................................................................... 115
4.5.15 ฟังกชั์ น nfreq(x)................................................................................................. 115
4.6 เมทริ กซ์พิเศษ ...................................................................................................................... 117
4.6.1 เมทริ กซ์เอกลักษณ์ ....................................................................................................... 117
4.6.2 เมทริ กซ์คาหนึ ่ ่ ง ............................................................................................................ 118
4.6.3 เมทริ กซ์คาศู ่ นย์ ............................................................................................................ 119
4.6.4 เมทริ กซ์สุ่ม .................................................................................................................. 119
4.6.5 เมทริ กซ์ทแยงมุม ......................................................................................................... 121
4.6.6 เมทริ กซ์สามเหลี่ยมด้านลาง ่ ......................................................................................... 123
4.6.7 เมทริ กซ์สามเหลี่ยมด้านบน......................................................................................... 124
4.6.8 เมทริ กซ์รูปแบบพิเศษ.................................................................................................. 124
่
4.7 ตัวอยางการคํ านวณ ............................................................................................................. 125
4.8 สรุ ป ..................................................................................................................................... 130
4.9 แบบฝึ กหัดท้ายบท............................................................................................................... 130
บทที่ 5 การเขียนโปรแกรมด้ วย SCILAB ......................................................................... 133
5.1 คําสัง่ วนซํ้ า........................................................................................................................... 133
5.1.1 คําสัง่ for.................................................................................................................... 133
5.1.2 คําสัง่ while .............................................................................................................. 135
5.2 คําสัง่ ทดสอบเงื่อนไข .......................................................................................................... 136
5.2.1 คําสัง่ if ...................................................................................................................... 136
5.2.2 คําสัง่ select-case .............................................................................................. 139
5.3 การพัฒนาฟังกชั์ น ............................................................................................................... 140
5.3.1 ไฟล์สคริ ปต์และไฟล์ฟังกชั์ น....................................................................................... 140
5.3.2 รู ปแบบและข้อกาหนดในการเขีํ ยนไฟล์ฟังกชั์ น ......................................................... 141
5.3.3 การใช้งานคําสัง่ argn ................................................................................................ 145
5.3.4 การเขียนฟั งกชั์ นแบบอินไลน์ ......................................................................................147
5.4 การเขียนไฟล์ไดอารี .............................................................................................................149
5.5 ความรู้เพิ่มเติมในการเขียนไฟล์ฟังกชั์ น ...............................................................................150
5.5.1 การโหลดไฟล์ฟังกชั์ น ..................................................................................................151
5.5.2 คําสั่งพื้นฐานสําหรับการพัฒนาฟังกชั์ น .......................................................................151
5.5.3 ข้อแนะนําในการพัฒนาโปรแกรมให้มีประสิ ทธิภาพ..................................................155
่
5.6 ตัวอยางการคํ านวณ ..............................................................................................................156
5.7 สรุ ป ......................................................................................................................................161
5.8 แบบฝึ กหัดท้ายบท ...............................................................................................................162
บทที่ 6 การวาดกราฟด้ วย SCILAB .................................................................................. 165
6.1 รายละเอียดหน้าตางกราฟ ่ ....................................................................................................165
6.2 การวาดกราฟสองมิติ ............................................................................................................168
6.2.1 พื้นฐานการวาดกราฟสองมิติ........................................................................................168
6.2.2 การตกแตงรู ่ ปกราฟ ......................................................................................................179
6.2.3 กราฟเชิงขั้ ว ...................................................................................................................187
6.2.4 การวาดกราฟสองมิติแบบพิเศษ ...................................................................................188
6.3 การวาดกราฟสามมิติ ............................................................................................................190
6.3.1 พื้นฐานการวาดกราฟสามมิติ........................................................................................190
6.3.2 กราฟคอนทัวร์ ..............................................................................................................198
6.3.3 การวาดกราฟสามมิติแบบพิเศษ ...................................................................................200
6.4 การวาดกราฟแบบผสม ........................................................................................................201
่
6.5 ตัวอยางการวาดกราฟ ...........................................................................................................202
6.6 สรุ ป ......................................................................................................................................211
6.7 แบบฝึ กหัดท้ายบท ...............................................................................................................211
บทที่ 7 พืน้ ฐานระบบอินพตและ
ุ เอาต์ พตุ .......................................................................... 215
7.1 คําสั่งพื้นฐานสําหรับการติดตอระบบอิ่ นพุตและเอาต์พุต....................................................215
7.1.1 คําสัง่ input ...............................................................................................................215
7.1.2 คําสัง่ file ................................................................................................................. 216
7.1.3 คําสัง่ printf............................................................................................................ 217
7.1.4 คําสัง่ fprintf ......................................................................................................... 220
7.1.5 คําสัง่ scanf .............................................................................................................. 221
7.1.6 คําสัง่ fscanf............................................................................................................ 222
7.1.7 คําสัง่ read ................................................................................................................. 223
7.1.8 คําสัง่ write .............................................................................................................. 224
่
7.2 ตัวอยางการเขี ยนโปรแกรมเพื่อติดตอระบบอิ ่ นพุตและเอาต์พตุ ......................................... 224
7.2.1 การอานข้ ่ อมูลจากไฟล์ ................................................................................................ 228
7.2.2 การเขียนข้อมูลลงในไฟล์ ............................................................................................ 231
7.3 สรุ ป ..................................................................................................................................... 235
7.4 แบบฝึ กหัดท้ายบท............................................................................................................... 235
บทที่ 8 การตรวจสอบหาข้ อผิดพลาดของโปรแกรม ......................................................... 237
8.1 ขั้ นตอนการตรวจสอบหาข้อผิดพลาด ................................................................................. 237
8.1.1 คําสัง่ setbpt............................................................................................................ 239
8.1.2 คําสัง่ resume และ return ................................................................................... 240
8.1.3 คําสัง่ pause .............................................................................................................. 242
8.1.4 คําสัง่ ที่น่าสนใจ............................................................................................................ 242
8.2 สรุ ป ..................................................................................................................................... 245
8.3 แบบฝึ กหัดท้ายบท............................................................................................................... 245
บทที่ 9 ตัวอย่ างการประยกต์
ุ ใช้ งาน ................................................................................... 247
9.1 การใช้งานเวกเตอร์และเมทริ กซ์ตรรกะ .............................................................................. 247
9.1.1 การใช้งานเวกเตอร์และเมทริ กซ์ตรรกะสําหรับวาดรู ปกราฟ ...................................... 249
9.2 การดําเนินการเชิงสัญลักษณ์ ............................................................................................... 256
9.2.1 ฟังกชั์ น addf, subf, mulf, ldivf, และ rdivf .............................................. 256
9.2.2 ฟังกชั์ น cmb_lin ..................................................................................................... 257
9.2.3 ฟังกชั์ น eval และ evstr ....................................................................................... 258
9.2.4 ฟังกชั์ น trianfml ...................................................................................................259
9.2.5 ฟังกชั์ น solve ...........................................................................................................259
9.3 ตัวคูณรวมน้่ อยและตัวหารรวมมาก ่ .....................................................................................260
9.3.1 ตัวคูณรวมน้ ่ อย .............................................................................................................261
9.3.2 ตัวหารรวมมาก ่ .............................................................................................................262
9.4 พหุนาม.................................................................................................................................264
9.4.1 การแยกตัวประกอบของพหุนาม..................................................................................265
9.4.2 การลดรู ปพหุ นาม.........................................................................................................268
9.4.3 คําสัง่ ที่น่าสนใจ ............................................................................................................268
9.5 การหาปริ พนั ธ์จาํ กดเขต ั .......................................................................................................273
้
9.6 การแกสมการอนุ พนั ธ์อนั ดับหนึ่ง........................................................................................277
9.6 สรุ ป ......................................................................................................................................280
9.7 แบบฝึ กหัดท้ายบท ...............................................................................................................281
ภาคผนวก ก ....................................................................................................................... 283
ภาคผนวก ข....................................................................................................................... 285
บรรณานกรม
ุ ..................................................................................................................... 291
ประวัตผิ ู้เขียน .................................................................................................................... 293
บทที่ 1
ความร้ ู เบือ้ งต้ นเกีย่ วกับโปรแกรม SCILAB
่ งประวัติความเป็ นมาของโปรแกรม
ในบทนี้ จะกลาวถึ SCILAB โครงสร้างทัว่ ไป และคําสั่งพื้นฐาน
สําหรับการเริ่ มต้นใช้งานโปรแกรม SCILAB
2
ั
นอกจากนี้ ยงั มีโปรแกรมอื่นๆ อีกที่ให้ฟรี (freeware) และทํางานคล้ายกบโปรแกรม SCILAB เชน ่ โปรแกรม
่ ่ขา้ พเจ้า
Octave (http://www.octave.org) และโปรแกรม Rlab (http://rlab.sourceforge.net) เป็ นต้น แตจากที
ได้ศึกษาค้นคว้าข้อมูลของโปรแกรมเหลานี ่
่ ้ ดูพบวา่ โปรแกรมภาษา SCILAB สามารถทํางานได้อยางรวดเร็ วและมี
ประสิ ทธิภาพมากที่สุด
3
1.2.1 แถบเมนในหน้
ู าต่ างคําสั่ ง
่ าสั่งของโปรแกรม SCILAB จะประกอบไปด้วยเมนูหลักหลายๆ เมนู ซึ่ งมีรายละเอียด
หน้าตางคํ
่
ดังตอไปนี
้
เมนู File ประกอบไปด้วย
New SCILAB ่ าสั่งขึ้ นมาใหมอี่ กหน้าตางหนึ
สร้างหน้าตางคํ ่ ่ง
Exec … ประมวลผลชุดคําสั่งจากไฟล์ ซึ่ งโดยทัว่ ไปจะเป็ นไฟล์ที่ปิดท้ายด้วย
.sci หรื อ .sce
Open … เรี ยกไฟล์ที่มีอยูใ่ นสารบบขึ้ นมาใช้งาน
Load … เรี ยกข้อมูลที่บนั ทึกไว้ในไฟล์กลับมาใช้งาน ซึ่ งโดยทัว่ ไปจะเป็ นไฟล์
ที่ปิดท้ายด้วย .sav หรื อ .bin
Save … บันทึกข้อมูลของตัวแปรตางๆ ่ เข้าไปเกบ็ไว้ในไฟล์ที่กาหนด
ํ
Change Directory เปลี่ยนสารบบที่กาลั ํ งทํางาน
Get Current Directory แสดงสารบบที่กาลั ํ งทํางานอยู่ ณ ขณะนั้ น
Print Setup … ํ
กาหนดคา ่ พารามิเตอร์ ต่างๆ ของเครื่ องพิมพ์
Print … พิมพ์ขอ้ มูลออกทางเครื่ องพิมพ์
Exit ่ าสั่ง
ปิ ดหน้าตางคํ
4
ํ งทํางาน คือ สารบบที่ โปรแกรม SCILAB กาลั
สารบบที่ กาลั ํ งทํางานอยู่ ณ ขณะนั้ น กลาวคื
่ อเป็ นสารบบที่
โปรแกรม SCILAB จะทําการค้นหาไฟล์ต่างๆ หรื อบันทึกไฟล์ลงไปเกบไว้
็
6
5
ี่ ั ฟังกชั์ น (file function) ได้ในหัวข้อที่ 5.3
ศึกษารายละเอียดเกยวกบไฟล์
8
-->x = 5
่ าสัง่ จะแสดงผลลัพธ์เป็ น
เมื่อกดปุ่ ม Enter หน้าตางคํ
x =
5.
-->
็ ่
เมื่อกดปุ่ ม Enter โปรแกรม SCILAB กจะไมแสดงผลลั ่ าสั่ง แตจะปรากฎ
พธ์ออกทางหน้าตางคํ ่
เครื่ องหมาย SCILAB prompt “-->” แทน
ํ
หมายเหตุ ข้อควรระวังในการกาหนดชื ่อของตัวแปรมีดงั นี้
โปรแกรม SCILAB จะพิจารณาถึงความแตกตางของ ่ ตัวอักษรตัวพิมพ์ใหญ่ (capital letter)
กบัอักษรตัวพิมพ์เล็ก ซึ่ งโปรแกรม SCILAB จะถือวาตั่ วแปรที่มีชื่อเหมือนกนั แต่ใช้ตวั อักษร
่ ั จะเป็ นตัวแปรคนละตัวกนั ดังนั้ นควรหลีกเลี่ยงการกาหนด
ตางกน ํ ชื่อตัวแปรที่เหมือนกนั
่ ิน 24 ตัวอักษร ทั้ งนี้ อาจจะ
ชื่อของตัวแปรจะต้องเริ่ มด้วยตัวอักษรและมีความยาวได้ท้ งั หมดไมเก
่
ใช้ตวั เลขหรื อสัญลักษณ์ underline “_” (สัญลักษณ์อื่นห้ามใช้) ชวยในการกาหนดชื ํ ่ อของ
ตัวแปรกได้็
9
ํ
ชื่อของตัวแปรที่กาหนดขึ ้ นมาจะต้องไมซํ่ ้ ากบชื
ั ่อเฉพาะหรื อคําสําคัญ (key word) ที่ใช้ใน
โปรแกรม SCILAB เชน่ ชื่อคําสั่ง และชื่อฟังกชั์ น เป็ นต้น ดังตัวอยางที
่ ่แสดงในรู ปที่ 1.3
่ ตัวเลขห้าพัน “5,000” เวลากาหนดคานี
สําหรับตัวเลขที่มีจาํ นวนเกินสี่ หลัก เชน ํ ่ ้ ให้กบตั
ั วแปร
่ ่ องหมายคอมมา่ (comma) คัน่ ระหวางเลข
จะต้องไม่ใสเครื ่ ห้ากบเลขศู
ั นย์ มิฉะนั้ นแล้วโปรแกรม
SCILAB จะเข้าใจวาเป็ ่ นเลขสองชุดคือ คา่ 5 กบคา ั ่ 0 ตัวอยาง
่ เชน่
-->x = [5,000]
x =
5. 0. //ตัวแปร x เป็ นเวกเตอร์ที่มีขอ้ มูลสองตัวคือ คา่ 5 กบ
ั คา่ 0
-->x = [5000]
x =
5000. //ตัวแปร x เป็ นสเกลาร์ที่มีค่าเทากบ
่ ั 5000
หมายเหตุ ในโปรแกรม SCILAB เครื่ องหมาย double slash “//” หรื อเครื่ องหมายคอมเมนต์
(comment) ที่ ปรากฎอยูใ่ นชุ ดคําสั่งนี้ จะเป็ นเครื่ องหมายที่ จะบอกให้โปรแกรม SCILAB
ไมทํ่ าการประมวลผลตอคํ่ าสั่งหรื อข้อความที่อยูหลั่ งเครื่ องหมายคอมเมนต์น้ ี ประโยชน์ของ
็ ่อเป็ นการเขียนคําอธิบายตางๆ
เครื่ องหมายคอมเมนต์กเพื ่ ภายในตัวโปรแกรมที่พฒั นาขึ้ นมาเพื่อ
เป็ นการเตือนความจําของผูเ้ ขียนถึงขั้ นตอนการทํางานของตัวโปรแกรม ซึ่ งจะทําให้ง่ายตอ่การ
้
เข้าใจและแกไขโปรแกรมในภายหลั ่ ยวกนกบผู
ง เชนเดี ั ั ที้ ่นาํ โปรแกรมที่พฒั นาขึ้ นมานี้ ไปใช้งาน
็
กสามารถเข้ าใจถึงตัวโปรแกรมได้โดยงาย ่
-->who
your variables are...
ซึ่ งจะพบวามี ํ
่ ตวั แปร x และ y รวมอยูใ่ นผลลัพธ์ดว้ ย ทั้ งนี้ เนื่องจากได้มีการกาหนดคา ่ ของตัวแปร
x และ y ไว้ก่อนการเรี ยกใช้คาํ สั่ง who นอกจากนี้ ยงั พบตัวแปรอื่นอีกด้วย ได้แก่ scipad,
scicos_pal, %scicos_menu, %help, และ MSDOS เป็ นต้น ซึ่ งเป็ นตัวแปรที่โปรแกรม
SCILAB ได้ทาํ การโหลด (load) เข้าไปเกบไว้ ็ ในหนวยความจํ
่ าของเครื่ องคอมพิวเตอร์โดยอัตโนมัติ
ตั้ งแตเริ่ ่ มเปิ ดเรี ยกใช้งานโปรแกรม SCILAB โดยที่ตวั แปรเหลานี ี่ ข้องกบค
่ ้ จะเกยว ั ่าเริ่ มต้นของ
โปรแกรม เชน่ ไลบรารี (library), คาโดยปริ่ ยาย (default) ตางๆ ่ ของสารบบ, เดโม (demo), และ
่ ่พิเศษ6 เป็ นต้น
คาคงที
่
ในขณะที่การใช้คาํ สัง่ whos จะให้ผลลัพธ์ที่แสดงข้อมูลมากกวาการใช้ คาํ สัง่ who เชน่
บอกวา่ตัวแปรแตละตั
่ วเป็ นข้อมูลประเภท (type) ใด, มีขนาดเทาใด ่ , และใช้หนวยความจํ
่ ี่
ากไบต์
็ วแปรตัวนั้ นๆ ดังแสดงในตัวอยาง
(byte) ในการเกบตั ่ ตอไป
่ นี้
6
่ ่พิเศษของโปรแกรม SCILAB จะเป็ นตัวอักขระที่เริ่ มต้นด้วยเครื่ องหมายเปอร์เซ็นต์ “%” (สําหรับ
คาคงที
่ ่พิเศษนี้ จะมีอธิบายในหัวข้อที่ 2.1)
รายละเอียดเพิ่มเติมของคาคงที
11
-->whos
Name Type Size Bytes
whos function 8512
x constant 1 by 1 24
scipad function 14312
y constant 1 by 1 24
scicos_pal string 12 by 2 2048
%scicos_menu list 2440
%scicos_short string 12 by 2 408
%scicos_help sch ? 62440
%scicos_display_mode constant 1 by 1 24
modelica_libs string 1 by 3 528
scicos_pal_libs string 1 by 11 376
%helps *string 28 by 2 16
WSCI string 1 by 1 144
home string 1 by 1 144
SCIHOME string 1 by 1 224
PWD string 1 by 1 144
TMPDIR string 1 by 1 200
MSDOS boolean 1 by 1 16
SCI string 1 by 1 112
guilib library 288
sparselib library 280
xdesslib library 3176
percentlib library 13120
polylib library 880
intlib library 1368
elemlib library 2024
utillib library 4688
statslib library 1280
alglib library 1336
siglib library 1768
optlib library 608
autolib library 2144
roblib library 1192
soundlib library 464
metalib library 3928
armalib library 488
tkscilib library 848
[More (y or n ) ?]
-->who_user
User variables are:
whos x scipad y modelica_libs
using 2925 elements out of 4984207
-->help who
็
เมื่อกดปุ่ ม Enter กจะปรากฎหน้ าตาง ่ Scilab Browse Help ขึ้ นมาตามรู ปที่ 1.4 ซึ่ งจะแสดง
ข้อความอธิบายรู ปแบบการใช้งานของคําสัง่ who จะเห็นได้วา่คําสัง่ help มีประโยชน์มากสําหรับ
การเขียนโปรแกรม เพราะวา่คําสัง่ แตละคํ ่ าสังมี ่ ั นอกจากนี้ คาํ สัง่ หนึ่ ง
่ ลกั ษณะการเรี ยกใช้งานที่ตางกน
คําสั่งอาจจะมีรูปแบบการใช้งานหลายแบบกได้ ็ ดังนั้ นผูใ้ ช้จะต้องศึกษาลักษณะการใช้งานคําสัง่ตางๆ่
่ ้ นมาใช้งานได้อยาง
ให้เข้าใจเพื่อที่จะได้สามารถนําคําสั่งเหลานั ่ ถูกต้อง และตรงตามความต้องการของ
ํ งพัฒนา
งานประยุกต์ (application) ที่กาลั
่
หากต้องการทราบวาโปรแกรม SCILAB ได้เตรี ยมฟั งกชั ์ นอะไรไว้ให้บา้ งในแตละไลบรารี
่
็
กสามารถทํ าได้โดยการพิมพ์ชื่อไลบรารี นั้ นลงที่หน้าต่างคําสัง่ แล้วกด Enter เชน่ ถ้าต้องการทราบวา่
ไลบรารี สาํ หรับฟังกชั์ นพื้นฐาน (elementary function) มีฟังกชั์ นอะไรบ้าง กให้ ็ ป้อนคําสัง่ ดังนี้
13
-->elemlib
elemlib =
-->whereis('log10')
ans =
elemlib
-->whereis('convol')
ans =
siglib
่ เข้าไปเกบ็ไว้ในไฟล์ กสามารถทํ
ในกรณี ที่ตอ้ งการจะบันทึกข้อมูลของตัวแปรตางๆ ็ าได้
โดยการใช้คาํ สัง่ save ซึ่ งมีรูปแบบการใช้งาน คือ
save('filename', [list_of_variables])
7
เชน่ถ้าต้องการบันทึกข้อมูลของตัวแปรทุกตัวลงในไฟล์ชื่อ test.dat และเกบไว้
็ ในสารบบ “C:\SCIDIR”
ก็ให้ใช้คาํ สัง่ดังนี้
-->save('C:\SCIDIR\test.dat')
8
พารามิเตอร์ ท่ีเป็ นตัวเลือกจะมีหรื อไมมี่ในคําสัง่กได้
็ เนื่ องจากโดยทัว่ ไปจะมีการกาหนดคาโดยปริ
ํ ่ ยาย (default
value) ของพารามิเตอร์ ที่เป็ นตัวเลือกไว้ให้เรี ยบร้อยแล้ว
9
็
ถ้าต้องการลบข้อมูลของตัวแปรบางตัวกสามารถทํ าได้โดยการระบุชื่อตัวแปรนั้ นๆ ตามหลังคําสัง่ clear เชน่
ถ้าต้องการลบข้อมูลเฉพาะของตัวแปร y กทํ็ าได้โดยการใช้คาํ สัง่
-->clear y;
16
-->MSDOS
MSDOS =
T
่
ผลลัพธ์ที่ได้คือ T หรื อเป็ นจริ ง (True) ซึ่ งหมายความวาโปรแกรม SCILAB กาลัํ งทํางานอยูบ่ น
ระบบ MSDOS จริ ง ในกรณี ที่ตอ้ งการทราบวาโปรแกรม ่ ํ งทํางานอยูใ่ นสารบบใด
SCILAB กาลั
ก็สามารถตรวจสอบได้โดยใช้คาํ สัง่ pwd ดังนี้
-->pwd
ans =
C:\Documents and Settings\User
load('filename')
-->y
--error 4
undefined variable : y
-->x = 5;
-->y = 3;
-->z = x + y ั วแปร y
//หาผลบวกของตัวแปร x กบตั
z = ่ ่ชื่อตัวแปร z
//แล้วนําผลลัพธ์ที่ได้ไปบรรจุไว้ในตัวแปรใหมที
8.
18
่ พธ์ที่ได้มีคาเทากน
จะเห็นได้วาผลลั ่ ่ ั
1.4 สรปุ
่ งประวัติความเป็ นมาและการใช้งานคําสั่งพื้นฐานทัว่ ไปของโปรแกรม SCILAB
ในบทนี้ได้กลาวถึ
เพื่อเป็ นแนวทางเบื้องต้นในการเรี ยนรู้ในบทตอๆ ่ ไป เนื่องจากโปรแกรม SCILAB เป็ นโปรแกรม
ที่ให้ฟรีและอนุญาตให้ผใู้ ช้สามารถนําไปพัฒนาตอ่ยอดได้ ดังนั้ นโปรแกรม SCILAB จึงถือได้วา่
่
เป็ นทางเลือกใหมของผู ท้ ี่ตอ้ งการจะใช้งานโปรแกรมที่มีความสามารถในการคํานวณทางเชิงตัวเลข
และแสดงผลกราฟริ กที่ซบั ซ้อน เพื่อใช้ในการแกไขปั ้ ญหาทางด้านวิศวกรรมและวิทยาศาสตร์ ได้
่
อยางรวดเร็ วและมีประสิ ทธิภาพ เชนเดี ่ ยวกนกบโปรแกรม
ั ั MATLAB
2.1 ค่ าคงทีพ่ เิ ศษ
่ ่พิเศษ (special constant) เป็ นคาคงที
คาคงที ่ ่ที่ติดตั้ งมาพร้อมกบตั
ั วโปรแกรม SCILAB (built-in
่
constant) ไมสามารถลบทิ ้งได้10 เชน่ %i, %pi, %e, %inf, %nan, %eps, และ ans เป็ นต้น
จะเห็นได้วา่คาคงที
่ ่พิเศษเหลานี่ ้ จะเริ่ มต้นด้วยเครื่ องหมายเปอร์ เซ็นต์ “%” แล้วตามด้วยตัวอักขระ
่ นี้ จะขอสรุ ปการใช้งานของคาคงที
ในสวน ่ ่พิเศษตางๆ่ ตามตารางที่ 2.1 ดังตอไป ่ นี้
2.1.1 ค่ าคงทีพ่ เิ ศษ %i
10
สามารถดูรายละเอียดของคาคงที ่ ่พเิ ศษตางๆ
่ ที่ใช้ในโปรแกรม SCILAB วามี
่ อะไรบ้าง ได้จากไฟล์เริ่ มต้น
่ ี่สารบบ “SCIDIR/scilab.star”
(start-up file) ซึ่ งอยูท
20
่ ่พิเศษในโปรแกรม SCILAB
ตารางที่ 2.1 คาคงที
ค่ าคงทีพ่ เิ ศษ คําอธิบาย
%i ่ ่ที่ใช้ในการแสดงตัวเลขเชิงซ้อน มีค่าเทากบ
คาคงที ่ ั %i = −1
%pi คาอั่ ตราสวนระหวางความยาวเส้
่ ่ นรอบวงกบเส้ ั นผานศู่ นย์กลางของวงกลม
%e ่ ่ตรี โกณมิติ (trigonometric constant)
คาคงที
%inf ใช้แทนตัวเลขที่มีค่าเป็ นอนันต์ (infinity) นัน่ คือ %inf = ∞ เชน่ คา่ 1/0
ใช้แสดงถึงคาที ่ ่ไมสามารถแสดงให้
่ อยูใ่ นรู ปของตัวเลขได้ (มาจากคําวา่ Not-A-
%nan
Number)
คา่หนวยยอยขนาดเล็
่ ่ กที่สุดที่โปรแกรม SCILAB สามารถรองรับได้ กลาวคื ่ อคาจํ
่ านวน
%eps
จริ งที่ค่าน้อยกวาคา
่ ่ %eps โปรแกรม SCILAB จะถือวามี ่ ค่าเป็ นคา่ 0
ตัวแปรชัว่ คราว (temporary variable) ที่เกบผลลั ็ พธ์ที่ได้จากการคํานวณของคําสัง่
ans
ซึ่งจะถูกนํามาใช้โดยอัตโนมัติ ในกรณี ที่ไมมี่ การระบุตวั แปรรับคาของผลลั ่ พธ์
%t หรื อ %T ่ ่บูลีน (Boolean constant) ที่แสดงวาเป็
คาคงที ่ นจริ ง (True)
%f หรื อ %F คาคงที่ ่บูลีนที่แสดงวา่ เป็ นเท็จ (False)
%s และ %z ํ
ตัวแปรที่ใช้ในการกาหนดสมการ พหุ นาม
%io เป็ นตัวอ้างถึงระบบอินพุตและเอาต์พตุ ของโปรแกรม SCILAB
-->%i
%i =
i
-->%pi
%pi =
3.1415927
21
2.1.3 ค่ าคงทีพ่ เิ ศษ %e
-->%e
%e =
2.7182818
-->%inf
%inf =
Inf
-->1/%inf
ans =
0.
-->%nan
%nan =
Nan
่ ่พิเศษ
คาคงที %eps มาจากคําวา่ “epsilon” คือ คาหนวยยอยขนาดเล็
่ ่ ่ กที่สุดที่โปรแกรม SCILAB
22
-->%eps
%eps =
2.220D-16 ั
//ตัวแปร D-16 หมายถึงให้คูณกบเลขสิ ํ งลบสิ บหก นัน่ คือ 2.22*10-16
บยกกาลั
-->2 + %eps
ans =
2.
-->0 + %eps
ans =
2.220D-16
-->sin(t)./t
--error 27
่ วเลขที่มีคามากๆ
สังเกตจะพบวาตั ่ หรื อน้อยๆ สามารถที่จะเขียนให้อยูใ่ นรู ปของเลขยกกาลั
ํ งได้โดย
่ ดังตัวอยางตอไปนี
ใช้พารามิเตอร์ d, e, D, หรื อ E เข้าชวย ่ ่ ้
่ ่พิเศษ ans คือ ตัวแปรชัว่ คราว (temporary variable) ของโปรแกรม SCILAB ที่ใช้ในการ
คาคงที
็
เกบผลลั ่ าสัง่ ในหน้าตางคํ
พธ์ที่ได้จากการคํานวณของคําสัง่ แตละคํ ่ าสั่ง โดยตัวแปร ans จะถูกนํามาใช้
อัตโนมัติในกรณี ที่ไมมี่ การระบุตวั แปรรับคาของผลลั
่ พธ์ เชน่
-->3 + 2
โดยที่เครื่ องหมายทิวด้า (tilda) “~” เป็ นตัวดําเนิ นการตรรกะ (logical operator) ที่แสดงถึงการ
ปฏิเสธ นัน่ คือ ~%t = F และ ~%f = T (ดูรายละเอียดในหัวข้อที่ 3.2.2)
24
-->%s
%s =
s
-->%z
%z =
z
2
-->y = 2*%s^2 - 3*%s + 1 //มีค่าเทากบ
่ ั y = 1 − 3s + 2 s
y =
2
1 - 3s + 2s
3 2
3z + 2 z
-->x = (3*%z^3 + 2*%z^2)/(2*%z - 1) //มีค่าเทากบ
่ ั x=
2z − 1
z =
2 3
2z + 3z
-------
- 1 + 2z
่ ่พิเศษทั้ งหมดที่กลาวมานี
นอกจากคาคงที ่ ํ ่ ่พิเศษอื่นๆ ขึ้ นมาใหม่
้ แล้ว ผูใ้ ช้ยงั สามารถที่จะกาหนดคาคงที
ได้โดยใช้คาํ สัง่ predef ในโปรแกรม SCILAB สําหรับผูส้ นใจลองใช้คาํ สัง่ help เพื่อศึกษา
รู ปแบบการใช้งานของคําสั่ง predef
2.2.1 สเกลาร์
่ ่เป็ นได้ท้ งั จํานวนจริ งหรื อจํานวนเชิงซ้อน คา่สเกลาร์สามารถที่จะถูกกาหนด
สเกลาร์ คือ คาที ํ ลงใน
ตัวแปรใดๆ ตามที่ตอ้ งการได้ทนั ที เชน่
-->a = 2 + 3*%i
a
2. + 3.i
-->b = 3
b =
3.
26
่ นเมทริ กซ์ขนาด 1×1 นัน่ คือมีขนาด 1 แถว (row) และ 1 แนวตั้ ง (column)
ตัวแปรสเกลาร์ ถือได้วาเป็
่ วแปรสเกลาร์ a และ b มีขนาดเทาใด
ดังนั้ นถ้าต้องการตรวจสอบวาตั ่ กสามารถทํ
็ าได้โดยการใช้
คําสัง่ size ซึ่ งมีรูปแบบการใช้งานคือ
[m, n] = size(X)
โดยที่พารามิเตอร์
X ่ ่ใดๆ (เป็ นได้ท้ งั คา่ สเกลาร์ เวกเตอร์ และเมทริ กซ์)
คือตัวแปรคาคงที
m และ n คือขนาด m×n ของพารามิเตอร์ X เมื่อ m บอกจํานวนแถวของ X และ n บอก
จํานวนแนวตั้ งของ X
่ งานคําสัง่ size เชน่
ตัวอยางการใช้
-->size(a)
ans =
1. 1.
-->size(b)
ans =
1. 1.
2.2.2 เวกเตอร์
เวกเตอร์ คือ เมทริ กซ์ขนาดหนึ่ งแถวหรื อเมทริ กซ์ขนาดหนึ่ งแนวตั้ ง เวกเตอร์ แถว (row vector)
สามารถสร้างได้โดยการใช้เครื่ องหมายคอมมา่ (comma) “,” หรื อชองวาง ่ ่ (space) เป็ นตัวแยก
สมาชิกแตละ่ สมาชิกในเวกเตอร์ แถว เชน่
-->v = [1 2 -3]
v =
1. 2. - 3.
27
-->size(v)
ans =
1. 3.
-->length(v)
ans =
3. ่
//หมายความวาเวกเตอร์ v มีสมาชิกสามตัว
หมายเหตุ การใช้ช่องวางในการแยก
่ ่
สมาชิกของเวกเตอร์แถวมีขอ้ ควรระวัง ดังแสดงในตัวอยาง
่
ตอไปนี้
-->v = [1 +2]
v =
1. 2.
-->v = [1 + 2]
v =
3.
-->v = [1 +2 5 - 4]
v =
1. 2. 1.
-->v' ั
//ใช้ทรานส์โพสกบเวกเตอร์ แถวเพื่อให้ได้เป็ นเวกเตอร์แนวตั้ ง
ans =
1.
2.
3.
ํ
นอกจากการกาหนดคาโด ่ ยตรงให้กบเวกเตอร์
ั ํ ่
แล้ว ผูใ้ ช้ยงั สามารถกาหนดคาของเวกเตอร์
ให้มีค่าเพิ่มขึ้ นหรื อลดลงแบบอัตโนมัติได้ โดยการใช้เครื่ องหมายโคลอน ่ (colon) “ : ” เข้าชวย
่
ซึ่ งมีรูปแบบการใช้งานดังนี้
่ ่ มต้น : คาที
ชื่อตัวแปร = คาเริ ่ ่เพิ่มขึ้ น (หรื อคาที
่ ่ลดลง) : คาสุ
่ ดท้าย
11
ทรานส์โพสของเวกเตอร์ เป็ นการเปลี่ยนเวกเตอร์แนวตั้ งให้เป็ นเวกเตอร์แถว หรื อการเปลี่ยนเวกเตอร์แถวให้เป็ น
เวกเตอร์แนวตั้ง (ดูรายละเอียดของการทรานส์โพสเพิ่มเติมในหัวข้อที่ 2.2.3.1)
29
2.2.3 เมทริกซ์
เมทริ กซ์ขนาด m×n คือ เมทริ กซ์ที่มีจาํ นวนจํานวน m แถว และ n แนวตั้ ง เชน่ ถ้าต้องการสร้าง
เมทริ กซ์ขนาด 2×3 สามารถสร้างได้ เชน่
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
่
โดยที่เครื่ องหมายเซมิโคลอนจะทํ ่ นจุดสิ้ นสุ ดของข้อมูลในแตละแถว
าหน้าที่ระบุวาเป็ ่ หากต้องการ
่
ทราบวาเมทริ ่ ก็สามารถทําได้โดยใช้คาํ สัง่ size ดังนี้
กซ์ A มีขนาดเทาใด
-->size(A)
ans =
2. 3.
-->b = A(2, 3)
b =
6.
30
่ สมาชิกในแถวที่สองและแนวตั้ งที่สามของ
คําสั่งนี้ เป็ นการบอกโปรแกรม SCILAB ให้นาํ คาของ
่ แก่สมาชิก
เมทริ กซ์ A ไปบรรจุไว้ในตัวแปร b ในทํานองเดียวกนัผูใ้ ช้ยงั สามารถที่จะกาหนดคาให้
ํ
่ วในเมทริ กซ์ได้โดยตรง เชน่
แตละตั
-->A(2, 3) = 10
A =
1. 2. 3.
4. 5. 10.
ํ
ซึ่ งเป็ นการกาหนดให้ ่ สมาชิกในแถวที่สองและแนวตั้ งที่สามของเมทริ กซ์
คาของ A ่ นคา่ 10
มีคาเป็
ดังนั้ นเมทริ กซ์ A จึงมีผลลัพธ์ตามที่แสดงไว้ขา้ งต้น
่ สมาชิกทั้ งหมดเฉพาะในแถวที่หนึ่ งของเมทริ กซ์ A ก็ทาํ ได้
ในกรณี ที่ตอ้ งการแสดงคาของ
โดยใช้เครื่ องหมายโคลอน ่ เชน่
-->A(1, :)
ans =
1. 2. 3.
่
โดยที่เครื่ องหมายโคลอนจะทํ าหน้าที่ระบุช่วงทั้ งหมดของแนวตั้ ง (หรื อของแถว ทั้ งนี้ ข้ ึนอยูก่ บวา
ั ่
่
เครื่ องหมายโคลอนอยู ่ ณ ตําแหนงใดในการอ้
่ างอิงถึง) และเพื่อให้เข้าใจลักษณะการใช้งานของ
่
เครื่ องหมายโคลอนมากขึ ่ ่
้ น ให้พิจารณาตัวอยางตอไปนี ้
สังเกตจะพบวา่ ณ ตอนนี้ เมทริ กซ์ A จะมีจาํ นวนแถวและแนวตั้ งเทากน ่ ั นัน่ คือเป็ นเมทริ กซ์ขนาด
่ นเมทริ กซ์จตั ุรัส12 (square matrix) ถ้าต้องการอ้างถึง
2×2 ในกรณี น้ ี เมทริ กซ์ A จะถูกเรี ยกวาเป็
่
สมาชิกตัวท้ายสุ ดในแตละแถว ่ แนวตั้ ง) ก็สามารถทําได้โดยการให้ใช้เครื่ องหมาย “$”
(หรื อแตละ
่ เชน่
ตัวอยาง
-->A = [1 2; 3 4];
-->B = [5 6; 7 8];
-->C = [A B]
C =
1. 2. 5. 6.
3. 4. 7. 8.
-->D = [A; B]
D =
1. 2.
3. 4.
5. 6.
7. 8.
12
่ ั านวนแนวตั้ ง
เมทริ กซ์จตั ุรัส คือ เมทริ กซ์ที่มีจาํ นวนแถวเทากบจํ
32
-->A' //ใช้ทรานส์โพสแบบสังยุค
ans =
1. - 2.i 3. 2. + i //ทําการสังยุคของตัวเลขเชิงซ้อนด้วย
-->A.' //ใช้ทรานส์โพสแบบธรรมดา
ans =
1. + 2.i 3. 2. - i
⎡a b⎤
A=
⎢⎣c d ⎥⎦
33
-->B = [1 2 3; 2 -1 4; -3 1 2];
⎡a b⎤
A=
⎢⎣c d ⎥⎦
−1 1 ⎡ d − b⎤
=
det ( A ) ⎢⎣−c a ⎥⎦
A
13
เมทริ กซ์ที่มีสมาชิกที่มีค่าเป็ นคา่ 1 ปรากฎอยูใ่ นแนวเส้นทแยงมุมหลัก สวนสมาชิ
่ ่ ่นๆ ของ
กในตําแหนงอื
เมทริ กซ์จะมีค่าเป็ นคา่ 0 (ดูรายละเอียดของเมทริ กซ์เอกลักษณ์ได้ในหัวข้อที่ 4.6.1)
34
่ ่ ถ้าให้ A = ⎡⎢
1 2⎤
ตัวอยางเชน ดังนั้ นอินเวอร์สการคูณของเมทริ กซ์ A จะมีค่าเทากบ
่ ั
⎣3 4⎥⎦
−1 1 ⎡ 4 −2⎤ ⎡ −2 1 ⎤
= =
A
⎢
−2 ⎣ −3 1 ⎥
⎦ ⎣ ⎢1.5 −0.5⎥⎦
-->1/A ่ ั
//เทียบเทากบการใช้
คาํ สัง่ A\1
ans =
- 2. 1.
1.5 - 0.5
่
จะเห็นได้วาการห าอินเวอร์สการคูณของเมทริ กซ์ นอกจากจะใช้คาํ สัง่ inv(x) แล้ว ยังสามารถที่
จะใช้เครื่ องหมายหารในการหาอินเวอร์สการคูณของเมทริ กซ์ได้เชนกน่ ั สวนการจะใช้
่ เครื่ องหมาย
หารซ้าย “\” หรื อเครื่ องหมายหารขวา “/” จะขึ้ นอยูก่ บตํ
ั าแหนงของเมทริ
่ ่ ด่ า้ นไหน
กซ์ A วาอยู
35
-->Y = clean(X)
Y =
1. 0. 0.
0. 1. 0.
0. 0. 1.
14
โปรแกรม SCILAB มีฟังกชั์ นในการแปลงโปรแกรมที่เขียนโดยภาษา MATLAB ให้อยูใ่ นรู ปของโปรแกรมที่
ํ
สามารถนํามาใช้งานในโปรแกรม SCILAB ได้ตามข้อกาหนดของโปรแกรม SCILAB (ดูรายละเอียดเพิ่มเติมที่
36
-->A = [1 2 3 4; 5 6 7 8]
A =
1. 2. 3. 4.
5. 6. 7. 8.
matrix(X, m, n)
โดยที่พารามิเตอร์
X คือ เมทริ กซ์ขนาด a×b
m และ n คือ ขนาด m×n (หมายถึง m แถวและ n แนวตั้ ง) ของเมทริ กซ์ใหม่ โดยที่ผลคูณ
ของ a กบั b จะต้องมีคา่เทากบผลคู
่ ั ณของ m กบั n
่ ่จะศึกษาตัวอยางการใช้
กอนที ่ งานคําสั่ง matrix จะขอกลาวถึ ่ งลักษณะการจัดเกบข้ ็ อมูลของ
เมทริ กซ์ในโปรแกรม SCILAB กอน ่ โดยทัว่ ไปแล้วข้อมูลในเมทริ กซ์จะถูกจัดเกบให้
็ อยูใ่ นรู ปของ
เวกเตอร์ โดยที่สมาชิกในเมทริ กซ์จะถูกเกบ็เรี ยงจากบนลงลางและจากซ้
่ ายไปขวา เชน่ ถ้าเมทริ กซ์
A = [1 2 3; 4 5 6] ข้อมูลที่โปรแกรม SCILAB จัดเกบจะอยู ็ ใ่ นรู ปของเวกเตอร์
ชัว่ คราว [1 4 2 5 3 6] ดังนั้ นเมื่อใช้คาํ สั่ง matrix โปรแกรม SCILAB กจะดึ ็ งข้อมูลที่
็ ในรู ปของเวกเตอร์ ชัว่ คราวทีละตัวจากซ้ายไปขวามาสร้างเป็ นเมทริ กซ์ใหม่ ให้พิจารณา
จัดเกบไว้
่ ่
ตัวอยางตอไปนี ้ จะได้เข้าใจถึงการใช้งานคําสั่งนี้ มากขึ้ น
-->C = matrix(A, 3, 3) ่ ่ ั
//จํานวนสมาชิกของเมทริ กซ์ C ไมเทากบของ เมทริ กซ์ A
!--error 60
argument with incompatible dimensions
่
คําสั่งสุ ดท้ายจะเป็ นการนําเอาข้อมูลในเวกเตอร์ ชวั่ คราวมาสร้างเป็ นเมทริ กซ์ใหมขนาด 3×2 โดย
่ กเรี ยงจากบนลงลางแล
ข้อมูลที่นาํ มาใช้ในเมทริ กซ์ใหมจะถู ่ ะจากซ้ายไปขวา
--> x = 'Piya'
x =
Piya
-->y = "_Kovintavewat"
y =
_Kovintavewat
่ ั นอันเดียวได้โดยการใช้เครื่ องหมายบวก
ผูใ้ ช้สามารถที่จะนําสายอักขระสองอันมาตอกนเป็ “+” ดัง
่ ่
แสดงในตัวอยางตอไปนี ้
38
-->x + y
ans =
Piya_Kovintavewat
-->a = 1; b = 2; c = 3; d = 4; ํ ่ ของตัวแปรตางๆ
//กาหนดคา ่
15
่ ้ ได้ในภาคผนวก ก
สามารถดูรายละเอียดวิธีการทํา symbolic triangularization ของตัวอยางนี
39
1. 2.
3. 4.
-->evstr(Y) ่
//ประเมินคาของเมทริ กซ์ Y
ans =
3. 4.
0. 2.
็ ดงั นี้
หรื อสามารถใช้คาํ สัง่ eval แทนคําสัง่ evstr กได้
-->eval(Y)
ans =
3. 4.
0. 2.
2.4 พหนาม
ุ
พหุนาม (polynomial) คือ ผลรวมของจํานวนที่เขียนในรู ปการคูณของคาคงที ่ ่กบตั
ั วแปรตั้ งแต่ 1 ตัว
ํ งของตัวแปรแตละตั
ขึ้ นไป โดยที่เลขชี้ กาลั ่ วมีคา่เป็ นศูนย์หรื อจํานวนเต็มบวก อยางไรกตามหนั
่ ็ งสื อ
่ ้ จะพิจารณาเฉพาะกรณี ที่พหุนามเป็ นฟังกชั์ นของตัวแปรเพียงตัวเดียวเทานั
เลมนี ่ ้ น นัน่ คือโปรแกรม
SCILAB จะรองรับพหุนามที่มีรูปแบบดังนี้
2 n
y = a0 + a1x + a2x + … + an x
16
ศึกษารายละเอียดการใช้งานคําสัง่ coeff ที่ใช้ในการหาคา่สัมประสิ ทธิ์ได้ในหัวข้อที่ 9.4.3.4
17
่
ดีกรี ของพหุนาม (degree of polynomial) คือคาเลขชี ํ งที่มากที่สุดของพหุนามนั้ น
้ กาลั
40
่ ตอไป
โดยใช้คาํ สัง่ coeff(y) และ degree(y) ในสวน ่ นี้ จะอธิบายถึงการสร้างสมการพหุ นาม
และเมทริ กซ์พหุ นาม
2.4.1 สมการพหนาม
ุ
สมการพหุนามสามารถสร้างได้โดยใช้คาํ สัง่ poly ดังนี้
-->d = degree(q)
d =
2. //ดีกรี ของพหุนาม
41
่
นอกจากนี้ยงั สามารสร้างตัวแปรพหุนามได้โดยตรง ด้วยวิธีการตอไปนี
้
⎡1 2⎤
A=
⎢⎣3 4⎥⎦
้ ่
สมการลักษณะเฉพาะของเมทริ กซ์ A หาได้จากการแกสมการตอไปนี
้
det ( A − λI) = 0
42
⎛ ⎡1 2⎤ ⎡1 0⎤ ⎞ ⎛ ⎡1 − λ 2 ⎤ ⎞
det ⎜ −λ ⎟ = det ⎜ ⎟ =0
⎢ ⎥ ⎢ ⎥
⎝ ⎣3 4⎦ ⎣0 1⎦ ⎠ ⎝ ⎢⎣ 3 4 − λ ⎥⎦ ⎠
(1 − λ )(4 − λ ) − (3)(2) = 0
2
λ − 5λ − 2 = 0
-->A = [1 2; 3 4];
็
ถ้าต้องการหารากหรื อคําตอบของสมการลักษณะเฉพาะที่ได้มานี้ กสามารถทํ าได้โดยใช้คาํ สั่ง
roots (ดูรายละเอียดการใช้งานคําสัง่ roots ได้ในหัวข้อที่ 4.1.11) ดังนี้
-->x = roots(y)
x =
- 0.3722813
5.3722813
่ กษณะเฉพาะ18 (eigenvalue)”
คําตอบของสมการลักษณะเฉพาะนี้ โดยทัว่ ไปจะเรี ยกกนัวา่ “คาลั
ของเมทริ กซ์ A นอกจากนี้โปรแกรม SCILAB สามารถคํานวณหาคาลั ่ กษณะเฉพาะของเมทริ กซ์
A ได้โดยตรงจากการใช้คาํ สัง่ spec ดังนี้
-->x = spec(A) ่ ั
//ได้ผลลัพธ์เทากบการใช้
คาํ สัง่ x = roots(y)
x =
5.3722813
- 0.3722813
18
่ กษณะเฉพาะ (eigenvalue) จะพบมากในงานทางด้านวิศวกรรมตางๆ
คาลั ่
43
1 1
----- -
2
1 + s s
2 2 4
1 + s + s 1 + s + s
--------- ---------
2
1 + s s
44
-->[1 2 3] == [2 2 3] ั ่
//นําเวกเตอร์สองเวกเตอร์มาเปรี ยบเทียบกนวา
ans = ่ างที่มีค่าเทากน
//ที่ตาํ แหนงใดบ้ ่ ั
F T T
-->a = 1:5
a =
1. 2. 3. 4. 5.
–1 +1
สัมพันธ์
underflow
min max
overflow
ู ่ 2.1 รู ปแสดงการเปลี่ยนแปลงของข้อมูล เมื่อเกดิ overflow และ underflow
รปที
่ ้ สามารถกาหนดได้
โดยที่รูปแบบของเลขจํานวนเต็มเหลานี ํ โดยคําสั่ง int8, uint8, int16,
่
uint16, int32, และ uint32 ตัวอยางการใช้ ่ ้ เชน่
งานคําสั่งเหลานี
จะเห็นได้วา่เมื่อใช้ตวั เลขที่มีค่าเกนกวาชวงที
ิ ่ ่ ่กาหนดไว้
ํ ่
ในคําสั่งแตละแบบ ิ อผิดพลาด
ก็จะทําให้เกดข้
ของข้อมูลซึ่ งมีอยูส่ องรู ปแบบคือ คามากเกนชวงที
่ ิ ่ ่กาหนด
ํ ่ อยเกนชวงที
(overflow) และคาน้ ิ ่ ่กาหนด
ํ
(underflow) โดยผลลัพธ์ที่ได้น้ น ั ปที่ 2.1
ั จะสอดคล้องกบรู
่ ข้างต้น ถ้าสังเกตจะพบวาไมมี
จากผลลัพธ์ที่ได้จากการใช้คาํ สัง่ ตางๆ ่ ่ จุดทศนิยมตามหลัง
่ ้ น ซึ่ งทางโปรแกรม SCILAB จะหมายถึงคา่เหลา่นั้ นเป็ นเลขจํานวนเต็ม (ถ้ามีจุด
ผลลัพธ์เหลานั
ทศนิยมตามหลังตัวเลขจะถือวา่ตัวเลขนั้ นเป็ นเลขจํานวนจริ ง) ถ้าหากต้องการเปลี่ยนเลขจํานวนเต็ม
่ าเป็ นสองเทา่ (double-precision floating point) กสามารถ
ให้เป็ นเลขจํานวนจริ งที่มีความแมนยํ ็
ทําได้โดยใช้คาํ สัง่ double เชน่
-->double(ans)
ans =
253. 255. 0. 255. 0. 2. //มีจุดทศนิยมตามหลัง
2.7 ลิตซ์
ลิตซ์ (list) คือ กลุม่ ของข้อมูลประเภทตางๆ
่ ที่อยูร่ วมกนในตั
ั วแปรตัวเดียว ตัวแปรประเภทลิตซ์จะ
สามารถอ้างถึงข้อมูลได้หลายประเภทตามที่กาหนด ํ ซึ่ งจะมีประโยชน์มากในการเขียนโปรแกรม
โดยเฉพาะอยางยิ ่ ่งเมื่อต้องการจัดกลุ่มของข้อมูลประเภทตางๆ ่ ให้อยูภ่ ายในชื่อตัวแปรชื่อเดียวกนั
ํ
คําสั่งที่ใช้ในการกาหนดตั วแปรประเภทลิตซ์มีอยูส่ องแบบดังนี้
47
-->L(2) //ดูค่าของสมาชิกตัวที่สองในตัวแปร L
ans =
Piya
ํ ่ ใหม่ให้กบสมาชิ
ถ้าต้องการกาหนดคา ั ็
กบางตัวในตัวแปร L กสามารถทํ
าได้ดังนี้
48
L(2)
Piya
L(3)
1. 2.
3. 4.
ํ
นอกจากนี้ ยงั สามารถกาหนดตั วแปร L ให้ซับซ้อนมากขึ้ นได้โดยการกาห ํ นดให้สมาชิกบางตัวใน
ตัวแปร L เป็ นข้อมูลประเภทลิตซ์ ซึ่ งลิตซ์ลกั ษณะนี้จะถูกเรี ยกวา่ “nested-list” ดังแสดงในตัวอยาง
่
่
ตอไปนี้
-->L
L =
L(1)
L(1)(1)
W
L(1)(2)
1. 2. 3. 4. 5.
L(2)
L(2)(1)
Piya
L(2)(2)
Kovintavewat
L(3)
1. 2.
3. 4.
49
!Car !
! !
!Name !
! !
!Dimensions !
L(2)
Toyota
L(3)
1. 2.
3. 4.
ั ใ้ ช้สามารถที่จะเรี ยกดูสมาชิกแตละตั
ในทํานองเดียวกนผู ่ วได้ดงั นี้
-->L.Dimensions(2,2) ่ ยวกนก
//ได้ผลลัพธ์เชนเดี ั บั การใช้คาํ สัง่ L(3)(2,2)
ans =
4.
-->M(1,3,2) = 8 ํ
//กาหนดให้
สมาชิกในแถวที่หนึ่งและแนวตั้งที่สาม
M = //ของเมทริ กซ์ชุดที่สองมีค่าเทากบ
่ ั 8
(:,:,1) //เมทริ กซ์ชุดที่หนึ่ง
0. 0. 0.
M = hypermat(dims, [entries])
โดยที่พารามิเตอร์
dims คือ เวกเตอร์แสดงขนาดของเมทริ กซ์หลายมิติ
entries ็ ่ สมาชิกแตละ
คือ เวกเตอร์ที่เกบคาของ ่ ตัวในเมทริ กซ์หลายมิติ (คาโดยปริ
่ ยายคือ 0)
่ ั านวน
นอกจากนี้ ผลคูณของขนาดทั้ งหมดของเมทริ กซ์หลายมิติจะต้องเทากบจํ
ของข้อมูลในเวกเตอร์ entries
่ การใช้งานคําสัง่ นี้ เชน่
ตัวอยาง
M =
(:,:,1)
1. 3. 5.
2. 4. 6.
(:,:,2)
7. 9. 11.
8. 10. 12.
t = typeof(object)
-->typeof(3)
ans =
constant
-->typeof(poly(0, 'x'))
ans =
polynomial
-->typeof('Piya Kovintavewat')
ans =
string
-->typeof(1/poly(0, 'x'))
19
ปริ ภูมิสถานะ (state-space) คือ เทคนิคการคํานวณทางคณิ ตศาสตร์แบบหนึ่งซึ่ งใช้มากในทางวิศวกรรม
20
เมทริ กซ์มากเลขศูนย์ (sparse matrix) คือ เมทริ กซ์ที่มีสมาชิกที่มีค่าเทากบคา
่ ั ่ 0 อยูเ่ ป็ นจํานวนมาก
54
ans =
rational
-->typeof(%t)
ans =
boolean
-->typeof(m > m)
ans =
boolean sparse
n = type(object)
-->type(3)
ans =
1.
-->type(poly(0, 'x'))
ans =
2.
-->type([%t %f])
ans =
4.
-->deff('y=f(x)', 'y=2*x');
-->type(f)
ans =
13.
-->type(elemlib)
ans =
14.
-->fx = 2*x - 3
fx =
- 13. - 3. 7.
⎡1 2⎤ ⎡5 6 ⎤ ⎡ −1⎤
A=
⎢⎣3 4⎥⎦ , B = ⎢⎣8 7 ⎥⎦ , และ C = ⎢⎣ 2 ⎥⎦
-->B = [5 6; 7 8];
-->y = (A+B)*C
y =
10.
14.
ํ
ตัวอย่ างที่ 3 กาหนดให้
เมทริ กซ์
⎡1 2 3 ⎤
A = ⎢2 1 2⎥
⎢3 2 1 ⎥
⎣ ⎦
-->A = [1 2 3; 2 1 2; 3 2 1];
58
2.11 สรปุ
ในบทนี้ ได้อธิบายวิธีการสร้างข้อมูลประเภทตางๆ ่ เชน่ คาคงที ่ ่, เมทริ กซ์สาย
่ ่พิเศษ, เมทริ กซ์คาคงที
่
อักขระ, พหุนาม, เมทริ กซ์บูลีน, และลิตซ์ เป็ นต้น พร้อมทั้ งแสดงตัวอยางการใช้โปรแกรม SCILAB
้ ญหาโจทย์ทางคณิ ตศาสตร์ ซึ่ งเมื่อเข้าใจถึงลักษณะของข้อมูลแตละประเภทแล้
ในการแกไขปั ่ ว
็ าให้สามารถสร้างตัวแปรสําหรับจัดเกบ็ข้อมูลแตละประเภทได้
กจะทํ ่ ่ กต้องและตรงกบความ
อยางถู ั
ต้องการในการใช้งาน
60
2.2.2) AB + BC
2.2.3) (A + B)\C
2.2.4) (A + B)/C
2.2.5) (A + B)C
2.2.6) CA + CB
2.2.7) DE
2.2.8) AEDC
ํ
2.3 กาหนดให้
⎡1 2 3 ⎤ ⎡−1 2 1 ⎤ ⎡ 3 1 2⎤
A = ⎢4 5 6⎥ B = ⎢ 2 4 6⎥ C = ⎢ −1 2 1 ⎥
⎢7 8 9 ⎥ ⎢ 5 3 1⎥ ⎢−2 −1 1 ⎥
⎣ ⎦ ⎣ ⎦ ⎣ ⎦
จงพิสูจน์วา่
2.3.1) (AB)C = A(BC)
2.3.2) A(B + C) = AB + AC
61
2.3.7) AB ≠ BA
ํ
2.4 กาหนดให้
⎡5 8 7 ⎤ ⎡−1 2 −3⎤
A = ⎢4 2 6⎥ B = ⎢ 2 −4 5 ⎥
⎢9 8 9 ⎥ ⎢2 3 1⎥
⎣ ⎦ ⎣ ⎦
จงพิสูจน์วา่
2.4.1) det(A) = det(AT) โดยที่ det(.) คือ เครื่ องหมายดีเทอร์มิแนนต์
2.4.2) det(AB) = det(BA)
เมื่อ i = −1 ่ ่
จงคํานวณหาคาตอไปนี
้ พร้อมทั้ งอธิบายผลลัพธ์ที่ได้
62
2.5.4) (AB)H
2.5.5) BHAH
⎡ 1 −5⎤
2.6.2) B=
⎢⎣−2 3 ⎥⎦
⎡1 2 3 ⎤
2.6.3) C = ⎢4 5 6⎥
⎢7 8 9 ⎥
⎣ ⎦
⎡ 2 1 3⎤
2.6.4) D = ⎢−2 0 2⎥
⎢5 ⎥
⎣ 3 1⎦
2.7.2) x = {-3, 0, 2}
2.7.3) x = {2, 1 + i, 1 – i}
่ ่
2.8 จงสร้างข้อมูลประเภท list, tlist, และ mlist พร้อมทั้ งอธิ บายข้อแตกตางระหวาง
่
ข้อมูลแตละประเภท
บทที่ 3
ตัวดําเนินการทางคณิตศาสตร์
่ ่
ตัวดําเนินการ (operator) หมายถึงตัวกระทําที่มีผลตอคาของข้ อมูล ในทางปฏิบตั ิสามารถแบง่ตัว
ดําเนินการที่ใช้สาํ หรับการคํานวณทางคณิ ตศาสตร์ในโปรแกรม SCILAB ได้เป็ นสามประเภท คือ
ตัวดําเนิ นการเลขคณิ ต (arithmetic operator), ตัวดําเนินการสัมพันธ์และตรรกะ (relational and
logical operators), และตัวดําเนิ นการระดับบิต (bit-wise operator) ในบทนี้ จะอธิ บายถึงลักษณะ
่
การทํางานของตัวดําเนิ นการแตละประเภท ่
พร้อมทั้ งแสดงตัวอยางการใช้ งานของตัวดําเนิ นการ
่ ้ ในการคํานวณทางคณิ ตศาสตร์
เหลานี
3.1 ตัวดําเนินการเลขคณิต
การทํางานของตัวดําเนินการจะเรี ยกวา่การดําเนินการ (operation) ในสวนนี
่ ้ จะอธิบายถึงการใช้งาน
่ ดังตอไปนี
ตัวดําเนินการเลขคณิ ต (arithmetic operator) ลักษณะตางๆ ่ ้
b
การหารซ้าย (left division) a \ b
a
a
การหารขวา (right division) a / b
b
ํ ง (exponentiation)
การยกกาลั ab a^b หรื อ a**b
-->a = 3;
-->b = 2;
-->y = 10 + 2 * 3 – 4 + 9 / 3 ^ 2 * 2 – 1
y =
13.
-->y = 10 + (2 * 3) – 4 + (9 / (3 ^ 2)) * 2 – 1
y =
13.
-->y = (10 + 2) * 3 – 4 + 9 / (3 ^ 2) * 2 – 1
y =
33.
3.1.3.1 การบวกและการลบ
็ ่ ่อเมทริ กซ์ท้ งั สองมีขนาดเทากน
การบวก (และการลบ) ของสองเมทริ กซ์จะทําได้กตอเมื ่ ั โดยผลลัพธ์
ิ
ที่ได้จะเกดจากการบวก (และการลบ) ของสมาชิกทีละตัวที่อยู่ ณ ตําแหนงที ่ ่ตรงกนของทั
ั ้ งสอง
่ เชน่
เมทริ กซ์ ตัวอยาง
-->A = [1 2 3; 4 5 6];
-->B = [1 1 1; -1 -1 -1];
-->A + B
ans =
2. 3. 4.
3. 4. 5.
66
-->A – B
ans =
0. 1. 2.
5. 6. 7.
ั
นอกจากนี้ ยงั สามารถทําการบวก (หรื อการลบ) ตัวเลขที่เป็ นสเกลาร์กบเมทริ กซ์ได้ โดยผลลัพธ์ที่ได้
จะมาจากการนําเอาตัวเลขที่เป็ นสเกลาร์ ไปบวก (หรื อลบ) กบัสมาชิ กทุกตัวภายในเมทริ กซ์น้ ัน
่ ่
ตัวอยางเชน
-->3 + B
ans =
4. 4. 4.
2. 2. 2.
67
3.1.3.2 การคณ
ู
การคูณของสองเมทริ กซ์จะทําได้กตอ ็ ่ เมื่อขนาดของสองเมทริ กซ์น้ นั สอดคล้องกบกฎเกณฑ์
ั พ้ืนฐาน
่ ั านวนแถวของตัวคูณ เชน่
ของการคูณของเมทริ กซ์ นัน่ คือจํานวนแนวตั้ งของตัวตั้ งจะต้องเทากบจํ
-->A = [1 2 3; 4 5 6]; ่ ั 3
//จํานวนแนวตั้ งของเมทริ กซ์ A เทากบ
่ ั 2
-->B = [1 1 1; -1 -1 -1]; //จํานวนแถวของเมทริ กซ์ B เทากบ
-->A * B ่ ั านวนแถวของตัวคูณ
//จํานวนแนวตั้ งของตัวตั้ งไม่เทากบจํ
--error 10
inconsistent multiplication
-->A .* B
ans =
1. 2. 3.
– 4. – 5. – 6.
-->2 * B ่ ั
//มีผลเทากบการใช้
คาํ สัง่ 2.*B
ans =
2. 2. 2.
- 2. - 2. - 2.
68
3.1.3.3 การหาร
ในโปรแกรม SCILAB จะมีการหารอยูส่ องรู ปแบบคือ การหารซ้าย “\” และการหารขวา “/”
่
ตัวอยางการใช้
งานของเครื่ องหมายหารทั้ งสองแบบมีดงั นี้
-->A = [1 2; 3 4];
-->B = [1 1; -1 -2];
-->A/B ่
//เมทริ กซ์ A เป็ นตัวตั้ ง สวนเมท ริ กซ์ B เป็ นตัวหาร
ans =
0. - 1.
2. - 1.
-->A*inv(B) ั
//ให้ผลลัพธ์เหมือนกบการใช้
คาํ สัง่ A/B
ans =
0. - 1.
2. - 1.
-->A\B ่
//เมทริ กซ์ B เป็ นตัวตั้ ง สวนเมทริ กซ์ A เป็ นตัวหาร
ans =
- 3. - 4.
2. 2.5
-->inv(A)*B ั
//ให้ผลลัพธ์เหมือนกบการใช้
คาํ สัง่ A\B
ans =
- 3. - 4.
2. 2.5
-->A = [1 2; 3 4];
-->B = [2 1; 6 8];
-->A ./ B
ans =
69
0.5 2.
0.5 0.5
-->A .\ B
ans =
2. 0.5
2. 2.
-->2 ./ A ่ ั
//เทากบการใช้
คาํ สัง่ A .\ 2
ans =
- 4. 2.
3. - 1.
3.1.3.4 การคณและการหาร
ู แบบโครเนคเกอร์
ั
โปรแกรม SCILAB ได้เตรี ยมการคูณและการหารแบบโครเนคเกอร์ ไว้ใช้งานกบเมทริ กซ์ ซึ่ งมี
ประโยชน์มากในการใช้งานทางด้านวิศวกรรม
การคณแบบู โครเนคเกอร์
็
เครื่ องหมายที่ใช้สาํ หรับการคูณแบบโครเนคเกอร์ คือ “.*.” หรื อสามารถใช้คาํ สัง่ kron กได้
่ อถ้าให้เมทริ กซ์ A มีขนาด
โดยผลลัพธ์ที่ได้จะเป็ นผลคูณแบบโครเนคเกอร์ของสองเมทริ กซ์ กลาวคื
m×n โดยที่ A(i,j) คือสมาชิ กของแถวที่ i และแนวตั้ งที่ j และเมทริ กซ์ B มี ขนาด p×q
่ ่ ั
ดังนั้ น A.*.B จะมีคาเทากบ
| A(1,1)B ..... A(1,n)B |
| . . |
A.*.B = kron(A,B) = | . . |
| . . |
| A(m,1)B ..... A(m,n)B |
่ ั (m*p)×(n*q) ตัวอยางเชน
ซึ่ งจะได้เป็ นเมทริ กซ์ใหม่ที่มีขนาดเทากบ ่ ่
70
-->A = [1 2; 3 4];
-->B = [1 1; -1 -1];
-->A.*.B
ans =
1. 1. 2. 2.
- 1. - 1. - 2. - 2.
3. 3. 4. 4.
- 3. - 3. - 4. - 4.
-->kron(A, B) //มีค่าเทากบการใช้
่ ั คาํ สัง่ A.*.B
ans =
1. 1. 2. 2.
- 1. - 1. - 2. - 2.
3. 3. 4. 4.
- 3. - 3. - 4. - 4.
การหารแบบโครเนคเกอร์
นอกจากนี้ ในโปรแกรม SCILAB ยังได้เตรี ยมการหารแบบโครเนคเกอร์ ไว้ซ่ ึ งมีท้ งั แบบการหารซ้าย
“.\.” และแบบการหารขวา “./.” สําหรับผูท ้ ี่สนใจลองศึกษารายละเอียดการใช้งานเครื่ องหมาย
การหารแบบโครเนคเกอร์ดว้ ยตนเองจากโปรแกรม SCILAB
3.1.3.5 การยกกําลัง
ํ งกบเมทริ
การใช้งานเครื่ องหมายยกกาลั ั ่ ตอไปนี
กซ์สามารถทําได้หลายรู ปแบบ ดังแสดงในตัวอยาง ่ ้
-->A = [1 2; 3 4];
-->A^2 //มีค่าเทากบการใช้
่ ั คาํ สัง่ A*A
ans =
7. 10.
15. 22.
-->A**2 //มีค่าเทากบการใ
่ ั ช้คาํ สัง่ A^2
ans =
7. 10.
15. 22.
71
-->2.^A ่ ั
//คําสัง่ นี้ มีผลเทียบเทากบการใช้
คาํ สัง่ 2^A
ans =
2. 4.
8. 16.
-->B = [1 1; -1 -1];
-->A.^B //มีค่าเทากบ
่ ั [1^2, 2^1; 3^(-1), 4^(-1)]
ans =
1. 2.
0.3333333 0.25
3.1.4 การแก้ระบบสมการเชิงเส้ น
่ ้ จะแสดงการประยุกต์ใช้งานเมทริ กซ์ในการแกไขปั
ในสวนนี ้ ญหาระบบสมการเชิงเส้น (linear equation
้
system) ถ้าต้องการแกสมการ ่
สองตัวแปรเพื่อหาคาของตั วแปร x1 และ x2 จาก
2x1 + x2 = 3 (1)
x1 – x2 = 3 (2)
72
้
ถ้าใช้หลักการแกสมการคณิ ้
ตศาสตร์สองตัวแปรทัว่ ไปเพื่อแกสมการที ่ (1) และ (2) จะได้ผลลัพธ์
่ ยวกนผู
คือ x1 = 2 และ x2 = -1 เชนเดี ั ใ้ ช้สามารถแกสมการทั
้ ้ งสองนี้ ได้โดยใช้เมทริ กซ์ดงั นี้
จากสมการที่ (1) และ (2) สามารถเขียนสมการทั้ งสองให้อยูใ่ นรู ปของเมทริ กซ์ได้ คือ
⎡2 1 ⎤ ⎡x1 ⎤ ⎡3⎤
⎢⎣1 −1⎥⎦ ⎢⎣x2 ⎥⎦ = ⎢⎣3⎥⎦ หรื อ Ax = b (3)
⎡2 1 ⎤ ⎡3⎤
โดยที่ A=
⎢⎣1 −1⎥⎦ และ b = ⎢⎣3⎥⎦ การหาผลเฉลยของสมการที่ (3) ทําได้โดยนํา A (อินเวอส์
-1
−1 −1
A Ax = A b
−1
x=A b (4)
-->x = A\b ่ ั
//เทียบเทากบการใช้
คาํ สัง่ x = inv(A)*b
x =
2.
- 1.
Ax + b = 0 (5)
x = linsolve(A, b)
โดยที่พารามิเตอร์ x, A, ั ่กลาวมาแล้
และ b ทําหน้าที่เหมือนกบที ่ ่
วข้างต้น ตัวอยางการใช้
งานของ
คําสัง่ นี้ เชน่
-->A = [2 1; 1 -1];
่
สําหรับการหาคาผลเฉลย x ของสมการที่อยูใ่ นรู ปของ
xA = b (6)
−1 −1
xAA = bA
−1
x = bA (7)
⎡2 1 ⎤
[x1 x2 ]
⎢⎣1 −1⎥⎦ = [3 3] (8)
-->A = [2 1; 1 -1];
-->x = b*inv(A) ่ ั
//เทียบเทากบการใช้
คาํ สัง่ x = b/A
x =
2. - 1.
-->x = b/A
x =
2. - 1. //เป็ นเวกเตอร์แถวขนาด 1×2
2
2 - 3s + s 1 + 2s 0
---------- ---------- -
2
1 + 2s 2 - 3s + s 1
ํ
ถ้ากาหนดให้ตวั แปรที่ใช้ในสมการพหุนามมีค่าเป็ นเลขจํานวนจริ งหรื อเลขจํานวนเชิงซ้อน
ผลลัพธ์ของสมการพหุ นามสามารถหาคา่ได้จากการใช้คาํ สั่ง horner ซึ่ งมีรูปแบบการใช้งาน คือ
horner(P, y)
โดยที่พารามิเตอร์
P คือ สมการพหุ นามที่เป็ นฟั งกชั์ นของตัวแปร x
y คือ คาจํ ่ านวนจริ งของตัวแปร x
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้
ี่ องกบการประมวลผลของ
นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมชุดคําสัง่ อื่นๆ ที่เกยวข้ ั พหุ นาม
่ ้น
ไว้จาํ นวนมาก ลองใช้คาํ สัง่ help polynomial เพื่อดูลกั ษณะการใช้งานของคําสั่งเหลานั
-->x = [1 2 3];
-->x == y ่ แตละ
//เป็ นการเปรี ยบเทียบคาใน ่ สมาชิก
ans =
F T F
-->x < y
ans =
F F T
77
-->x ~= y ั
//เหมือนกบการใช้
คาํ สัง่ x < > y
ans =
T F T
3.2.2 ตัวดําเนินการตรรกะ
่ ่
ตัวดําเนินการตรรกะ (logical operator) เป็ นตัวดําเนินการที่ใช้เชื่อมความสัมพันธ์ระหวางคาของ
ิ ้ นโดยตัวดําเนินการสัมพันธ์ โดยที่
ตัวแปรที่เกดขึ
ั
ถ้าความสัมพันธ์สอดคล้องกนผลลั ็ ค่าเทากบ
พธ์ที่ได้กจะมี ่ ั T (เป็ นจริ ง) หรื อมีค่าทางตรรกะ
่ ั ่ 1
เทากบคา
78
P AND Q
P T F P P
Q Q
T T F
F F F
ู ่ 3.1 ผลลัพธ์ที่ได้จากการดําเนินการของตัวดําเนินการตรรกะ
รปที
่
ถ้าความสัมพันธ์ไมสอดคล้ ั
องกนผลลั ็ คาเทากบ
พธ์ที่ได้กจะมี ่ ่ ั F (เป็ นเท็จ) หรื อมีคาทางตรรกะ
่
่ ั ่ 0
เทากบคา
ตัวดําเนินการตรรกะในโปรแกรม SCILAB มีอยูส่ ามแบบตามตารางที่ 3.5 โดยที่ผลลัพธ์ที่ได้จาก
่ เชน่
การใช้ตวั ดําเนินการตรรกะเป็ นไปตามรู ปที่ 3.1 ตัวอยาง
-->y = 2;
่ ๆ
ตารางที่ 3.6 ลําดับการทํางานของตัวดําเนินการตาง
ลําดับความสํ าคัญ (priority) ตัวดําเนินการ สั ญลักษณ์ ตัวดําเนินการ
1 วงเล็บ ( )
2 ปฏิเสธ ~
3 เลขคณิ ต + – * /
5 ตรรกะ & |
3.3 ตัวดําเนินการระดับบิต
ตัวดําเนินการระดับบิต (bit-wise operator) เป็ นตัวดําเนินการที่ทาํ งานในระดับบิต นัน่คือเป็ นการนํา
ข้อมูลของตัวแปรแตละตั่ วที่เกบอยู็ ใ่ นรู ปของเลขฐานสอง (binary number) มาทําการคํานวณกนั
ในโปรแกรม SCILAB ตัวดําเนินการระดับบิตจะเป็ นตัวเดียวกนกบ ั ั ตัวดําเนินการตรรกะ เพียงแต่
ข้อมูลที่จะนํามาดําเนิ นการในระดับบิตจะต้องเป็ นเลขจํานวนเต็มเทานั ่ ้ น มิฉะนั้ นแล้วโปรแกรม
่
SCILAB จะไมทราบวา ่ ให้นาํ ข้อมูลเหลานั
่ ้ นมาดําเนินการในระดับบิต ให้พิจารณาตัวอยางตอไปนี
่ ่ ้
จะได้เข้าใจถึงหลักการทํางานของตัวดําเนินการระดับบิต
รปที ่
ู ่ 3.2 ตัวอยางการดํ
าเนินการในระดับบิตของตัวแปร x และ y
-->x = 7
x =
7. //ตัวแปร x เป็ นเลขจํานวนจริ ง (สังเกตจาก มีจุดทศนิยมตามหลังตัวเลข)
-->y = 12
y =
12. //ตัวแปร y เป็ นเลขจํานวนจริ ง
่
ผลลัพธ์ที่ได้คือคาแสดงความสั ่ นจริ งหรื อเป็ นเท็จ ทั้ งนี้ เนื่องจากตัวแปร x และ y ไมได้
มพันธ์วาเป็ ่
เป็ นเลขจํานวนเต็ม สาเหตุที่ได้ผลลัพธ์เป็ น [T T F F] เนื่องมาจากโปรแกรม SCILAB จะถือวา่
่ ่ตางๆ
คาคงที ่ ที่นาํ มาใช้ในการทดสอบหาความสัมพันธ์จะมีคา่เป็ นจริ ง (เทากบ ่ ั T) เสมอ เชน่
82
-->x = -1;
3
ตัวอย่ างที่ 1 จงหาคา่ของฟังกชั์ น f ( x) = 3x 2-x + 5x -4 เมื่อ x มีคาเทากบ
่ ่ ั −3i, −3, 0, 3
2x +1
และ 3i โดยที่ i = −1
2 ( −2 ) 2
2
ตัวอย่ างที่ 2 จงหาคา่ของ x = 2 2
( )
+ −2
2
วิธีทาํ ่
คาของ x หาได้จาก
−3 5
⎛
2 ×3 3 ⎞−4 ⎛ 2−3×32 ⎞
่
ตัวอย่ างที่ 3 จงหาคาของ x = ⎜⎜
−2
⎟
⎟
÷ ⎜⎜ ⎟
−1 ⎟
⎝ 2 ×3 ⎠ ⎝ 2×3 ⎠
วิธีทาํ ่
คาของ x หาได้จาก
-->x = num/den
x =
32.
่
ตัวอย่ างที่ 4 จงหาคาของตั
วแปร u และ v จากระบบสมการเชิงเส้น
2u +3v = 16
3u -4v = 41
-->x = inv(A)*b
x =
11.
- 2.
่
ตัวอย่ างที่ 5 จงหาคาของตั
วแปร u, v, และ w จากระบบสมการเชิงเส้น
84
u+v+w = 2
2u - v -2w = -1
-u + 2v +2w = 1
-->x = inv(A)*b
x =
1.
- 1.
2.
ํ
ตัวอย่ างที่ 6 กาหนดให้
พหุ นาม 2
p = x -1 ่
และ q = 2x +3 จงหาคาของเมทริ กซ์
⎡p + q p - q pq ⎤
M= ⎢ p q p -2q ⎥
2
⎢ ⎥
⎣ q p 3p + q ⎦
สําหรับ x = -2 และ x = 1 + i
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ สามารถหาได้จากชุดคําสัง่ ดังนี้
-->p = x^2 - 1;
-->q = 2*x + 3;
85
-->M = [p + q, p - q, p * q; p/q, q/p, (p^2 - 2*q)/(3*p + q)]
M =
2 2 2 3
2 + 2x + x - 4 - 2x + x - 3 - 2x + 3x + 2x
---------- ---------- ----------------
1 1 1
2 2 4
- 1 + x 3 + 2x - 5 - 4x - 2x + x
----- ------ ---------------
2 2
3 + 2x - 1 + x 2x + 3x
3.5 สรปุ
ในบทนี้ ได้อธิบายถึงลักษณะการใช้งานของตัวดําเนินการแบบตางๆ่ ได้แก่ ตัวดําเนินการเลขคณิ ต,
่
ตัวดําเนินการสัมพันธ์, ตัวดําเนินการตรรกะ, และตัวดําเนินการระดับบิต พร้อมทั้ งแสดงตัวอยาง
่ ในการแกไขปั
การใช้งานตัวดําเนินการตางๆ ้ ญหาโจทย์ทางคณิ ตศาสตร์ เมื่อเข้าใจถึงลักษณะการ
ทํางานของตัวดําเนินการเหลานี ็ ชวยทํ
่ ้ แล้ว กจะ ่ าให้สามารถนําตัวดําเนินการเหลานี
่ ้ ไปใช้ในการพัฒนา
่ กต้องตามที่ตอ้ งการ
โปรแกรมที่ซบั ซ้อนได้อยางถู
86
2
2x + 1
3.1.2) f (x) = 2
+ 5x ่ ่ ั −5i, −5, 0, 5 และ 5i โดยที่ i =
เมื่อ x มีคาเทากบ −1
x −3
่
3.2 จงอธิ บายลําดับของการดําเนินการในการคํานวณของสมการตอไปนี
้
3.2.1) y=1+2*3–4
3.2.2) y=1+2–3*4/5
3.2.3) y=1+2–3*4/5\6^7
3.2.4) y = 1 * 2 + 3 ^ 4 \ 5 – 6 / 7 ** 8
3.2.5) y = (1 + 2) * 3 \ 4 – 5 ^ (6 – 2) / 3 ** 4
3.2.6) y = 1 – 2 \ (3 + 4) * 5 / (6 – 1) ** 2 – 2 ^ (3 – 1) * 2
3.3. ํ
กาหนดให้
⎡1 2⎤ ⎡ −1 2⎤
A= B=
⎢⎣3 4⎥⎦ ⎢⎣−2 3⎥⎦
่ ่ ้ พร้อมทั้ งอธิบายผลลัพธ์ที่ได้
จงคํานวณหาคาตอไปนี
3.3.1) 2^A
3.3.2) 2**A
3.3.3) A*A
3.3.4) 2 .^ A
3.3.5) A .^ 2
3.3.6) A .* B
3.3.7) A .*. B
3.3.8) A .\ B
3.3.9) A ./ B
3.3.10) A .^ B
87
3.4. ้
จงแกสมการ ่
เพื่อหาคาของตั
วแปรทั้ งหมดในระบบสมการเชิงเส้น (linear equation system)
่
ตอไปนี้
3.4.1) x+y =5
2x – y = 1
3.4.2) 2x – 3y =5
−6x + 9y = −12
3.4.3) 2x − 3y = −5
−3x + 2y = 1
3.4.4) x+y+z =6
x – 2y + z = 0
3x + y – 2z = −1
3.4.5) 2x – 2y + z =1
–x +y–z = −2
– 2x + y – 2z = −6
3.4.6) x + 2y + 3z = 14
5x + y – 2z = 1
2x – 3y + z = −1
3.5. ํ
กาหนดให้
x = [1 2 3] y = [ −4 2 4]
่ ่ ้ พร้อมทั้ งอธิบายผลลัพธ์ที่ได้
จงคํานวณหาคาตอไปนี
3.5.1) x<y
3.5.2) x + y >= 4
3.5.3) x == y/2
3.5.4) x .^ y < 5
3.6. ํ
กาหนดให้ ่ ่ ้ พร้อมทั้ งอธิบายผลลัพธ์ที่ได้
x = 2 และ y = 3 จงคํานวณหาคาตอไปนี
3.6.1) x*y<2|3
3.6.2) x > 3 & y == 5
3.6.3) (x + 2 * y > 3) & ~ (6 | 3 == 2)
3.6.4) x + 1 >= y – 3 & 2 * x == 2
3.6.5) ~ (x > 2) & (y – 3 == 2) | x * y <= 1
3.7. ํ
กาหนดให้ ่ ่ ้ พร้อมทั้ งอธิบาย
x = 121 และ y = 19 เป็ นเลขจํานวนเต็ม จงคํานวณหาคาตอไปนี
ผลลัพธ์ที่ได้
3.7.1) x|y
3.7.2) x&y
3.7.3) ~x
3.7.4) ~y
3.7.5) x&y|~y
บทที่ 4
ฟังก์ ชันพืน้ ฐานทางคณิตศาสตร์
ในบทนี้ จะอธิบายถึงฟังกชั์ นพื้นฐานทัว่ ไปที่ใช้ในการคํานวณทางคณิ ตศาสตร์ เชน่ ฟังกชั์ นพื้นฐาน
ี่ ั วเลข, ฟังกชั์ นตรี โกณมิติ, ฟังกชั์ นไฮเพอร์โบลิก, ฟังกชั์ นพื้นฐานทางสถิติ รวมทั้ งฟังกชั์ น
ที่เกยวกบตั
สําหรับการสร้างเมทริ กซ์พิเศษ เพื่อให้เข้าใจถึงรู ปแบบการใช้งานของฟังกชั์ นตางๆ่ ที่จาํ เป็ นสําหรับ
การพัฒนาโปรแกรม
x = { x
−x ,x < 0
,x ≥ 0
่ งกชั์ นพื้นฐานที่เกยวกบตั
ตารางที่ 4.1 ตัวอยางฟั ี่ ั วเลข
ฟังก์ ชัน คําอธิบาย
abs(x) ่ มบูรณ์ (absolute value) ของตัวแปร x
หาคาสั
sqrt(x) ่
หาคารากที ่สอง (square root) ของตัวแปร x
int(x) ่ านวนเต็มของตัวแปร x
หาคาจํ
modulo(m,n) ่
หาคาเศษที ่เหลือการหารตัวแปร n ด้วย m
ceil(x) หาคาจํ ่ านวนเต็มที่มีค่าใกล้กบคา ั ่ x ไปทางคา่ ∞ มากที่สุด
floor(x) หาคาจํ ่ านวนเต็มที่มีค่าใกล้กบคา ั ่ x ไปทางคา่ -∞ มากที่สุด
round(x) หาคาจํ ่ านวนเต็มที่มีค่าใกล้กบคา ั ่ x มากที่สุด
fix(x) หาคาจํ ่ านวนเต็มที่มีค่าใกล้กบคา ั ่ x ไปทางคา่ 0 มากที่สุด
rat(x) ประมาณคาจํ ่ านวนจริ งให้อยูใ่ นรู ปของเลขเศษสวน่
sign(x) หาคาเครื ่ ่ องหมายของตัวแปร x
roots(p) หาคา่รากหรื อคําตอบของสมการพหุนาม p
real(x) หาคาจํ ่ านวนจริ งของตัวแปร x
imag(x) หาคาจํ ่ านวนจินตภาพของตัวแปร x
conj(x) หาคา่สังยุคของจํานวนจํานวเชิงซ้อนของตัวแปร x
x = i −x
iθ
x = re
โดยที่ r = 2
a +b
2
เป็ นขนาด (magnitude) และ θ = tan −1 ( ) เป็ นมุมเฟส (phase) ของเลข
b
a
จํานวนเชิงซ้อน จากกฎของออย์เลอร์ (Euler’s formula) จะได้วา่
= cos ( θ ) + isin ( θ )
iθ
e
{
x = r cos (θ) +isin (θ) = a + bi }
⎛θ⎞ ⎛θ⎞
x = re( )
iθ 1/ 2
=r e
1/ 2 iθ/2
= rcos ⎜ ⎟ + i rsin ⎜ ⎟
⎝ 2⎠ ⎝ 2⎠
่ านวณ เชน่
ตัวอยางการคํ
สังเกตจะพบวา่ผลลัพธ์ที่ได้ยงั มีจุดทศนิยมตามหลังผลลัพธ์แตละตั
่ ว ซึ่ งหมายความวาผลลั่ พธ์ที่ได้
่ ่เป็ นจํานวนเต็มของตัวเลขแตละตั
เป็ นสวนที ่ วเทานั
่ ้ น แตยั่ งคงเป็ นคาจํ
่ านวนจริ งที่มีความแมนยํ
่ า
เป็ นสองเทา่
m r
=q+
n n
r = modulo(m,n)
่
หรื อสามารถหาคาเศษที ่ได้จากการหารนี้ จากความสัมพันธ์
r = m – n.*int(m./n)
-->n = [2 2 2 2 2 2 2];
-->modulo(m,n)
93
ans =
- 1. 0. - 1. 0. 1. 0. 1.
fix(x) = sign(x).*floor(abs(x))
่ ชน่
ตัวอยางเ
94
-->x = [-2.9 -1.1 1.5 3.8*%i -5.2*%i]
x =
- 2.9 - 1.1 1.5 3.8i - 5.2i
-->fix(x)
ans =
- 2. - 1. 1. 3.i - 5.i
-->sign(x).*floor(abs(x))
ans =
- 2. - 1. 1. 3.i - 5.i
โดยที่พารามิเตอร์
x คือ เลขจํานวนจริ งใดๆ
tolerance ่
คือ คาความคลาดเคลื ่อนที่ยอมรับได้ โดยที่ค่าโดยปริ ยายมีคาเทากบ
่ ่ ั
1.e-6*norm(x,1)
num และ den คือ เลขจํานวนเต็มซึ่ งเป็ นผลลัพธ์ของฟังกชั์ นนี้ เมื่อ num./den จะมี
่ เคียงกบคา
คาใกล้ ั ่ x มากที่สุดในลักษณะที่วา่ abs(num./den-x)
<= tolerance*abs(x)
่ การใช้งานคําสั่งนี้ เชน่
ตัวอยาง
-->num/den - %pi ่
//คาความคลาดเคลื ่ ั ่กาหนดไว้
่อนเทากบที ํ
ans =
1.611D-12
่ านวนจริ ง ฟังกชั์ น
ถ้าตัวแปร x เป็ นคาจํ ่ งนี้
sign(x) จะมีคาดั
⎧+1 ,x > 0
⎪
sign(x)= ⎨ 0 ,x = 0
⎪⎩−1 ,x < 0
-->roots(y)
ans =
1.
3.
5.
-->[exp(1) %e]
ans =
2.7182818 2.7182818
-->exp(x)
ans =
1. 2.7182818 10. 20.
exp(x)= e
a+ bi a bi
=e e =e
a
{cos ( b) + isin ( b)} = eacos ( b) + ieasin ( b)
่ ่
ตัวอยางเชน
-->exp([1-%i 3+4*%i])
ans =
1.4686939 - 2.2873553i - 13.128783 - 15.200784i
98
่ ยวกนการหาคาฟั
เชนเดี ั ่ งกชั์ นลอการิ ทึมธรรมชาติของเลขจํานวนเชิงซ้อน x = a + bi สามารถทํา
ได้ดงั นี้
log(x)= log re ( iθ
) = log (r) + log (e ) = log (r) + iθ
iθ
โดยที่ r = 2
a +b
2
เป็ นขนาด และ θ = tan −1 ( ) เป็ นมุมของ x ตัวอยางเชน
b
a
่ ่
-->log([1+2*%i, 3-4*%i])
ans =
0.8047190 + 1.1071487i 1.6094379 - 0.9272952i
-->log2([1, 2, 4, 8])
ans =
0. 1. 2. 3.
ู ่ 4.1 สามเหลี่ยมมุมฉาก
รปที
loga ( y )
logx ( y ) =
loga ( x )
่ ั
ซึ่ งให้ผลลัพธ์เทากบ log3 (81) = log3 3( ) = 4 × log (3) = 4 × 1 = 4
4
3
a 1 c
sin ( α ) = cosec ( α ) = =
c sin ( α ) a
b 1 c
cos ( α ) = sec ( α ) = =
c cos ( α ) b
sin ( α ) a 1 b
tan ( α ) = = cot ( α ) = =
cos ( α ) b tan ( α ) a
21
่ ตราสวนระหวาง
คาอั ่ ่ ความยาวสวนโค้
่ ่
งของวงกลมตอความยาวของรั ศมีของวงกลม
101
่ ่ ดท้ายมีคาน้
สังเกตจะพบวาคาสุ ่ อยมากหรื อสามารถประมาณได้เทากบคาศู
่ ั ่ นย์ (ใช้คาํ สัง่ clean ชวย
่
่ ) ซึ่ งจะทําให้สอดคล้องกบหลั
ในการปั ดคาได้ ั กความจริ งที่วา่ sin(180º) = 0 ตามที่ตอ้ งการ
เป็ นฟังกชั์ นที่ใช้ในการหาคา่ arcsine(y) นัน่ คือถ้า y = sin(x) จะได้วา่ x = asin(y) โดยที่ y
่ ร่ ะหวางคา
จะมีคาอยู ่ ่ -1 ถึง 1 และ x คือผลลัพธ์ที่ได้ซ่ ึ งจะเป็ นมุมที่มีคาอยู
่ ร่ ะหวาง
่ –π/2 ถึง π/2
่ ่
เรเดียน ตัวอยางเชน
102
-->y = sin([0, 1, %pi/2, -%pi/2]);
-->x = asin(y)
ans =
0. 1. 1.5707963 - 1.5707963
เป็ นฟั งกชั์ นที่ใช้ในการหาคา่ arccosine(y) นัน่ คือถ้า y = cos(x) จะได้วา่ x = acos(y) โดยที่
y จะมีค่าอยูร่ ะหวางคา ่ ่ -1 ถึง 1 และ x คือผลลัพธ์ที่ได้ซ่ ึ งจะเป็ นมุมที่มีค่าอยูร่ ะหวาง
่ 0 ถึง π
เรเดียน ตัวอยางเช ่ ่น
-->x = acos(y)
ans =
0. 1. 1.5707963 3.1415927
-->x = atan(y)
ans =
0. 1. 1.5707963 - 1.5707963
(
asinh(y) = ln y + y +1
2
)
เมื่อ ln(x) คือฟังกชั์ นลอการิ ทึมธรรมชาติของจํานวน x ตัวอยางเชน
่ ่
-->x = asinh(y)
x =
0. 1. - 1.
(
acosh(y) = ln y + y -1
2
)
โดยที่คา่ y ≥ 1 และผลลัพธ์ที่ได้จะเป็ นคาสั
่ มบูรณ์เสมอ ตัวอยางเชน
่ ่
-->x = acosh(y)
x =
0. 1. 1. ่ มบูรณ์
//ผลลัพธ์ที่ได้จะเป็ นคาสั
่ เชน่
ตัวอยาง
-->y = tanh([0, 1, -1]);
-->x = atanh(y)
x =
0. 1. - 1.
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2]
x =
1. 2. 3. 4.
0. 1. 5. 3.
2. 6. 1. 2.
107
--> x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
1 N
∑ xi = 1 2N
x +x +… +xN
am =
N i=1
่ ่
ตัวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->sort(x, 'r') ่
//เรี ยงลําดับตัวเลขทั้ งหมดในแตละแถวของเมทริ กซ์ x
ans =
2. 6. 5. 4.
1. 2. 3. 3.
0. 1. 1. 2.
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->variance(x)
ans =
3.1818182
114
-->variance(x, 'r')
ans =
1. 7. 4. 1.
-->variance(x, 'c')
ans =
1.6666667
4.9166667
4.9166667
่ ่
ตัวอยางเชน
-->x = [2 4 6];
-->gm = geomean(x)
115
gm =
4.
1 N
hm = N
= N
∑ xi ∑x
1
i
N i=1 i=1
่ ่
ตัวอยางเชน
-->x = [2 4 8];
-->hm = harmean(x)
hm =
3.4285714
-->x = [2 8 0 3 7 6 8 7 9 7]
x =
2. 8. 0. 3. 7. 6. 8. 7. 9. 7.
-->m = nfreq(x)
m =
116
2. 1.
8. 2. ่ เลข 8 อยู่ 2 ตัว
//บอกวามี
0. 1.
3. 1.
7. 3. ่ เลข 7 อยู่ 3 ตัว
//บอกวามี
6. 1.
9. 1.
่
ผลลัพธ์ที่ได้บอกให้ทราบวาเวกเตอร์ x มีเลข 8 อยู่ 2 ตัว, เลข 7 อยู่ 3 ตัว, และตัวเลขที่เหลือมีอยู่
่
อยางละ 1 ตัว
-->statslib
statslib =
Functions files location :SCI\macros\statistics\
center correl cmoment covar ftest ftuneq geomean
harmean iqr mvvacov meanf mvcorrel moment mean
median msd mad nfreq nanmeanf nand2mean
nansum nanmean nancumsum nanstdev nanmin
nanmedian nanmax perctl pca quart regress
strange samplef sample samwr st_deviation stdev
stdevf trimmean thrownan tabul variance variancef
wcenter
-->A = eye(3) ่ ั ่
//สร้างเมทริ กซ์เอกลักษณ์ที่มีขนาดเทากบคาสเกลาร์
1. //นัน
่ คือเมทริ กซ์ขนาด 1×1
-->A = eye(3,3) //สร้างเมทริ กซ์เอกลักษณ์ที่มีขนาด 3×3
A =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->B = [1 2; 3 4];
-->C = eye(B) ่
//สร้างเมทริ กซ์เอกลักษณ์ขนาดเทาเมทริ กซ์ B
C =
1. 0.
0. 1.
rand(X, [key])
โดยที่พารามิเตอร์
mi ํ
คือ เลขจํานวนเต็มบวก (เมื่อ i = 1,2,3,...) ใช้กาหนดขนาดของเมทริ กซ์
สุ่ มที่จะสร้างขึ้ นมา เชน่ rand(m1, m2) หมายถึงสร้างเมทริ กซ์สุ่ มขนาด m1
แนวนอน และ m2 แนวตั้ ง
X คือ เมทริ กซ์ใดๆ (นัน่ คือสัง่ ให้สร้างเมทริ กซ์สุ่ มขนาดเทากบเมทริ
่ ั กซ์ X)
key ํ
เป็ นตัวเลือกที่กาหนดลั กษณะการแจกแจง (distribution) ของจํานวนสุ่ มที่สร้าง
กลาว ่ คือ ถ้า
120
่ งานของคําสั่งนี้ เชน่
ตัวอยางการใช้
rand('seed', n)
ํ
ซึ่ งเป็ นคําสั่งที่ใช้กาหนดสถานะตั ํ ดจํานวนสุ่ มให้มีคาเทากบคา
้ งต้นของตัวกาเนิ ่ ่ ั ่ n (คาโด่ ยปริ ยาย คือ
่
n = 0 สําหรับการเรี ยกใช้คาํ สัง่ rand ครั้ งแรก) หากต้องการทราบวาสถานะ ํ ด
ตั้ งต้นของตัวกาเนิ
จํานวนสุ่ ม ณ ขณะนั้ นมีคาเทาใดก
่ ่ ส็ ามารถตรวจสอบดูได้จากการใช้คาํ สัง่ rand('seed') เชน่
22
่
คาความแปรปรวน มีค่าเทากบคาเบี
่ ั ่ ่ยงเบนมาตรฐานยกกาลั
ํ งสอง
121
-->rand('seed')
ans =
1.473D+09
-->Y = grand(3, 5, 'unf', -0.5, 1.5) //สร้างเมทริ กซ์สุ่ มขนาด 3×5 ของเลขจํานวนจริ งระหวาง
่
Y = //คา่ -0.5 ถึง 1.5 โดยมีลกั ษณะการแจกแจงเอกรู ป
0.4010832 1.325155 1.3266747 0.5063800 0.5766849
0.9409869 - 0.0420461 0.6165375 1.1516339 0.5931839
- 0.3323572 0.5109970 - 0.1952440 0.4249484 1.4922694
diag(vm, [k])
122
่ ่จะแสดงในแนวเส้นทแยงมุม สวนคาพารา
ถ้าพารามิเตอร์ vm เป็ นเวกเตอร์ของคาที ่ ่ มิเตอร์ k
่ นแนวเส้นทแยงมุมไหน นัน่ คือถ้า
จะเป็ นตัวบอกวาเป็
o k < 0 หมายถึง เส้นทแยงมุมลําดับที่ |k| ที่อยูใ่ ต้เส้นทแยงมุมหลัก
o k = 0 ่
หมายถึง เส้นทแยงมุมหลัก (เป็ นคาโดยปริ ยาย)
o k > 0 หมายถึง เส้นทแยงมุมลําดับที่ k ที่อยูเ่ หนือเส้นทแยงมุมหลัก
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้
่ ่อยูใ่ น
ถ้าพารามิเตอร์ vm เป็ นเมทริ กซ์ ผลลัพธ์ที่ได้จะเป็ นเวกเตอร์แนวตั้ งที่มีสมาชิกเป็ นคาที
่
แนวเส้นทแยงมุมลําดับที่ |k| ของเมทริ กซ์ vm ตัวอยางการใช้ งานคําสั่ง เชน่
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A =
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
123
-->y = diag(A)
y =
1.
6.
11.
-->z = diag(A, 2)
z =
3.
8.
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
D = //เส้นทแยงมุมหลักขึ้ นไปหนึ่งลําดับลงมา
0. 0. 0. 0.
5. 0. 0. 0.
9. 10. 0. 0.
-->triu(A)
ans =
1. 2. 3. 4.
0. 6. 7. 8.
0. 0. 11. 12.
-->triu(A, 2)
ans =
0. 0. 3. 4.
0. 0. 0. 8.
0. 0. 0. 0.
-->triu(A, -1)
ans =
1. 2. 3. 4.
5. 6. 7. 8.
0. 10. 11. 12.
testmatrix('matrix_name', n)
-->n = 3;
ตัวอย่ างที่ 1 จงหาคา่ของฟังกชั์ น f ( x) = sin2 (θ) sec (θ) เมื่อ θ = 0, π/8, และ π/4
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ หาได้จากการใช้ชุดคําสั่งดังนี้
-->theta = [0, %pi/8, %pi/4];
่
ตัวอย่ างที่ 2 จงหาคาของ f (x) = (
tan ( x) +log10 cosh ( x) ) เมื่อ x = 0, 0.5, และ 1
วิธีทาํ ่
คาของ x หาได้จาก
ํ
ตัวอย่ างที่ 3 กาหนดให้ sin ( x +20 ) = 0.8 จงหาคาของ
่ cot (70 - x )
o o
วิธีทาํ ํ วา่
จากที่โจทย์กาหนดจะได้
sin
-1
(sin (x + 20 )) = sin
o -1
(0.8)
x = sin
-1
(0.8) −
(20 ) π
o
เรเดียน
o
180
127
ตัวอย่ างที่ 4 จงหาคา่ θ ที่ทาํ ให้สมการ cos3 (θ) - cos2 (θ) -4cos (θ) +4 = 0
ํ
วิธีทาํ กาหนดให้ x = cos (θ) จะได้วา่ ดังนั้ นคําตอบของสมการนี้ หา
3 2
x - x -4x + 4 = 0
ได้จาก
-->x = poly(0, 'x');
-->x = roots(y)
x =
1.
2.
- 2.
ํ
ตัวอย่ างที่ 5 กาหนดให้
คะแนนสอบวิชาการสื่ อสารดิจิทลั ของนักศึกษาจํานวน 30 คนมีดงั นี้ (จาก
คะแนนเต็ม 100 คะแนน)
68 45 93 76 80 85 78 85 88 90
50 55 65 68 70 90 75 82 67 45
88 90 64 78 75 59 60 73 78 65
่ ่
จงหาคาตอไปนี
้
่
1) คาคะแนนตํ ี่ ่ได้คะแนนตํ่าสุ ด
่าสุ ดของนักศึกษาในห้อง และมีนกั ศึกษากคนที
่ ่ยเลขคณิ ต, คาเฉลี
2) คาเฉลี ่ ่ยเรขาคณิ ต, และคาเฉลี
่ ่ยฮาร์มอนิก ของคะแนนในห้อง
3) จงเรี ยงลําดับคะแนนของนักศึกษาในห้องจากคามากไป่ ่ อย
หาคาน้
วิธีทาํ การแกปั้ ญหาโจทย์ขอ้ นี้ให้เริ่ มต้นจากการนําข้อมูลคะแนนสอบของนักศึกษาจํานวน 30 คน
มาจัดให้อยูใ่ นรู ปของเวกเตอร์ดังนี้
-->x = [68 45 93 76 80 85 78 85 88 90 ...
--> 50 55 65 68 70 90 75 82 67 45 ...
--> 88 90 64 78 75 59 60 73 78 65];
-->
็
จากนั้ นกสามารถหาคํ ่
าตอบที่ตอ้ งการได้ดงั ตอไปนี
้
1) คะแนนตํ่าสุ ดและจํานวนนักศึกษาที่ได้คะแนนตํ่าสุ ด สามารถหาได้จาก
-->xmin = min(x) //หาคะแนนตํ่าสุ ด
xmin =
45.
129
่ ่ยเลขคณิ ต, คาเฉลี
2) คาเฉลี ่ ่ยเรขาคณิ ต, และคาเฉลี
่ ่ยฮาร์มอนิก สามารถหาได้จาก
-->am = mean(x)
am =
72.833333
-->gm = geomean(x)
gm =
71.501303
-->hm = harmean(x)
hm =
70.047351
่ ่ยเลขคณิ ตมีคาเทากบ
ผลลัพธ์ที่ได้คือ คาเฉลี ่ ่ ั 72.833333, คาเฉลี
่ ่ยเรขาคณิ ตมีค่าเทากบ
่ ั
71.501303, และคาเฉลี ่ ่ยฮาร์มอนิกมีคาเทากบ
่ ่ ั 70.047351
่
3) จงเรี ยงลําดับคะแนนของนักศึกษาในห้องจากคามากไป ่ อย สามารถหาได้จาก
หาคาน้
-->MaxToMin = sort(x)
MaxToMin =
column 1 to 9
93. 90. 90. 90. 88. 88. 85. 85. 82.
column 10 to 18
80. 78. 78. 78. 76. 75. 75. 73. 70.
column 19 to 27
68. 68. 67. 65. 65. 64. 60. 59. 55.
column 28 to 30
50. 45. 45.
130
4.8 สรปุ
ในบทนี้ ได้อธิ บายถึงฟังกชั์ นพื้นฐานที่ใช้สาํ หรับการคํานวณทางคณิ ตศาสตร์ เชน่ ฟังกชั์ นพื้นฐานที่
ี่ ั วเลข, ฟังกชั์ นตรี โกณมิติ, ฟังกชั์ นไฮเพอร์โบลิก, และฟังกชั์ นพื้นฐานทางสถิติ เป็ นต้น
เกยวกบตั
ซึ่ งเป็ นประโยชน์มากในการแกไขปั ้ ญหาทางวิศวกรรมและวิทยาศาสตร์ โดยเมื่อเข้าใจถึงรู ปแบบ
การใช้งานของฟังกชั์ นตางๆ
่ ็ าให้สามารถพัฒนาโปรแกรมที่มีการคํานวณที่ซบั ซ้อนได้
แล้ว กจะทํ
นอกจากฟังกชั์ นที่กลาวมาในบทนี
่ ้ โปรแกรม SCILAB ยังได้เตรี ยมฟังกชั์ นอื่นๆ อีกจํานวนมากที่
ใช้ในการคํานวณเฉพาะทาง สําหรับผูส้ นใจสามารถศึกษารายละเอียดเพิ่มเติมได้จากคําสัง่ help
log a ( x ) = ylog a ( x )
y
4.2.3)
2tan ( x )
4.3.3) tan ( 2x ) =
1 − tan
2
(x)
131
จํานวนจริ ง และ i = -1
่
4.4 จงหารากหรื อคําตอบของสมการตอไปนี
้
4.4.1) x2 – 2x + 5 = 0
4.4.3) x3 – 4x2 + 6x – 4 = 0
ํ
4.5 กาหนดให้ {x1, x2, …, xn} เป็ นเลขจํานวนจริ งหรื อเลขจํานวนเชิงซ้อน จงพิสูจน์วา่
4.5.1) x 1 + x 2 + … + x n = x1 + x 2 + … + x n เมื่อ x ่ งยุคของ
คือ คาสั x
4.5.2) x1 ⋅ x 2 x n = x1 ⋅ x 2 xn
()
n
4.5.3) n
x = x
2 2 2
4.5.4) x1 + x 2 ≤ x1 + 2 x 1 ⋅ x 2 + x 2
4.5.5) x1 + x 2 ≤ x1 + x 2
132
ํ
4.6 กาหนดให้ คะแนนสอบวิชาการเขียนโปรแกรมภาษา SCILAB ของนักเรี ยนในห้องจํานวน 45
คนมีดงั นี้ (จากคะแนนเต็ม 10 คะแนน)
8.3 7.2 8.9 9.2 9.6 5.1 7.4 7.5 8.1 5.8 6.9 8.4 7.8 9.3 9.5
5.3 5.8 7.3 6.9 8.4 8.1 7.9 7.5 8.5 6.5 5.5 7.8 7.7 9.2 8.5
7.1 9.7 7.8 8.2 7.2 9.1 8.7 8.2 7.4 8.3 7.6 8.9 8.7 8.4 7.6
่ ่
จงหาคาตอไปนี
้
่
4.6.1) คาคะแนนตํ ี่ ่ได้คะแนนตํ่าสุ ด
่าสุ ดของนักเรี ยนในห้อง และมีนกั เรี ยนกคนที
่
4.6.2) คาคะแนนสู ี่ ่ได้คะแนนสูงสุ ด
งสุ ดของนักเรี ยนในห้อง และมีนกั เรี ยนกคนที
่ ่ยของคะแนนในห้องคาเฉลี
4.6.3) คาเฉลี ่ ่ยเลขคณิ ตและคาเฉลี
่ ่ยเรขาคณิ ตของคะแนนในห้อง
่ ธยฐานของคะแนนในห้อง
4.6.4) คามั
่ ่ยงเบนมาตรฐานของคะแนนในห้อง
4.6.5) คาเบี
4.6.6) จงวาดรู ปฮิสโตแกรมเพื่อดูการแจกแจงของคะแนนสําหรับนักเรี ยนในห้องนี้
่ ไปหาคาน้
4.6.7) จงเรี ยงลําดับคะแนนของนักเรี ยนในห้องจากคามาก ่ อย
บทที่ 5
การเขียนโปรแกรมด้ วย SCILAB
instruction_n;
end
134
-->x = [];
-->for i = 1:L
--> x(i) = i;
-->end
่ ่
ลองศึกษาตัวอยางตอไปนี
้ สาํ หรับการประยุกต์การใช้งานคําสั่ง for
y = 1 + 3 + 5 + … + ( 2N − 1)
N elements
-->N = 10;
-->y = 0;
-->for i = 1:N
--> y = y + (2*i - 1);
-->end
135
-->y
y =
100.
คําสั่ง while มีลกั ษณะการทํางานคล้ายกบคํ ั าสั่ง for เพียงแตคํ่ าสั่ง while จะมีการทดสอบ
เงื่อนไขที่ผเู ้ ขียนโปรแกรมกาหนด ํ ไว้ในนิพจน์ทุกๆ รอบของการวนซํ้ า กลาวคื ่ อถ้าผลการทดสอ
่
ให้คาตรรกะเป็ นคา่ 1 (เป็ นจริ ง) โปรแกรมกจะทํ็ าซํ้ าชุดคําสั่งภายในลูปนั้ นตออี
่ กหนึ่งรอบ แตถ้่ าผ
การทดสอบให้คาตรรกะเป็่ นคา่ 0 (เป็ นเท็จ) โปรแกรมกจะ ็ ยกเลิกการทํางานชุดคําสั่งภายในลูปนั้ น
ทันที คําสัง่ while มีรูปแบบการใช้งาน ดังนี้
while expression
instruction_1;
instruction_n;
end
่
ตัวอยางการใช้
งานคําสั่งการวนซํ้ า while มีดงั นี้
-->L = 5;
-->x = [];
-->i = 1;
-->while i <= L
--> x(i) = i;
--> i = i + 1;
-->end
136
่ ดคําสั่งนี้ คล้ายกบตั
สังเกตจะพบวาชุ ั วอยางของการใช้
่ ่
คาํ สั่ง for แตการใช้คาํ สั่ง while นั้นจะต้อง
ํ ่ ่ มต้นของตัวแปร i กอน
กาหนดคาเริ ่ เพื่อที่จะได้นาํ คา่ i ไปทําการเปรี ยบเทียบกบคา ั ่ L ตามเงื่อนไข
ํ
ที่กาหนด ผลลัพธ์ของการประมวลผลชุดคําสั่งนี้ คือ
-->x'
ans =
1. 2. 3. 4. 5.
่ ่ ั ั
ซึ่ งมีคาเทากนกบผลลั ่ าสั่ง while และคําสัง่ for
พธ์ที่ได้จากการใช้คาํ สั่ง for ดังนั้ นจะเห็นได้วาคํ
ั
มีความคล้ายกนมาก เพียงแตคํ่ าสั่ง while จะมีการทดสอบเงื่อนไขกอนที ่ ่จะตัดสิ นใจวาจะสั
่ ่งให้
โปรแกรมทํางานชุดคําสั่งภายในลูปหรื อไม่
5.2.1 คําสั่ ง if
if expression then
instruction_1;
instruction_n;
end
137
if expression then
instructions_set1;
else
instructions_set2;
end
if expression_1 then
instructions_set1;
elseif expression_2 then
instructions_set2;
else
instructions_set3;
end
138
-->N = 3;
-->A = [];
-->for i = 1:N
--> for j = 1:N
--> if i < j then
--> A(i, j) = 3;
--> elseif i == j then
--> A(i, j) = 2;
--> else
--> A(i, j) = 1;
--> end
--> end
-->end
-->A
A =
2. 3. 3.
1. 2. 3.
1. 1. 2.
139
่ ั
การทดสอบเงื่อนไขความสัมพันธ์สามารถทําได้อีกรู ปแบบหนึ่ งคือ การใช้คาํ สั่ง select รวมกบ
case โดยมีรูปแบบการใช้งาน ดังนี้
select expression
else instruction_m;
end
-->N = 7;
-->x = [];
-->for i = 1:N
--> select i
--> case 1 then x(1) = 2;
--> case 2 then x(2) = 3;
--> case 3 then x(3) = 4;
--> else x(i) = 5;
--> end
-->end
23
ในการใช้ คําสัง่ select คําว่า “then” จะต้ องอยู่ในบรรทัดเดียวกันกับคําว่า “case” เสมอ
140
โดยผลลัพธ์ที่ได้จากการประมวลผลชุดคําสั่งนี้ คือ
-->x'
ans =
2. 3. 4. 5. 5. 5. 5.
5.3.1.1 ไฟล์สคริปต์
่ ที่ตอ้ งการให้โปรแกรม SCILAB
ไฟล์สคริ ปต์เป็ นไฟล์ขอ้ มูล (text file) ที่รวบรวมคําสั่งตางๆ
ทํางานบรรจุไว้ในไฟล์เดียว เพื่อที่จะได้สะดวกตอ่การทํางานที่ตอ้ งการแบงแยกสวนของขั
่ ่ ้ นตอน
การทํางานแตละขั่ ้ นตอนให้ชดั เจน จะได้ง่ายตอการตรวจสอบ
่ ้ ้ นตอนการทํางาน
ปรับปรุ ง และแกไขขั
่
นั้ นๆ ดังนั้ นไฟล์สคริ ปต์จึงชวยหลี ิ ้ นได้ ถ้านําเอาชุดคําสัง่
กเลี่ยงปัญหาความผิดพลาดที่อาจจะเกดขึ
ทั้ งหมดมารวมไว้ในโปรแกรมหลักที่เดียว นอกจากนี้ การตรวจสอบและการแกไข ้ ข้อมูลตางๆ
่ ใน
ไฟล์สคริ ปต์กส็ ามารถทําได้ง่าย โดยการใช้โปรแกรมเอดิเตอร์ทว่ั ไป เชน่ โปรแกรม Notepad,
WordPad, หรื ออาจจะใช้โปรแกรมเอดิเตอร์ ของ SCILAB เองที่เรี ยกวา่ “Scipad” กได้ ็
ในทางปฏิบตั ิไฟล์สคริ ปต์จะเป็ นไฟล์ที่ปิดท้ายด้วย .sce และสามารถใช้คาํ สัง่ exec
ในการประมวลผลไฟล์สคริ ปต์ การทํางานของไฟล์สคริ ปต์จะเทียบเทากบการป้ ่ ั ่
อนคําสั่งผานโปรแกรม
SCILAB โดยตรงตามปรกติทีละคําสัง่ตามลําดับที่ปรากฎอยูใ่ นไฟล์สคริ ปต์ ดังนั้ นตัวแปรทั้ งหมด
่ น ตัวแปรโกลบอล (global variable) ซึ่ งหมายความวา่ ถ้าตัวแปร
ที่ใช้ในไฟล์สคริ ปต์จึงถือวาเป็
่
ตางๆ ที่ใช้ในหน้าตางคํ ่
่ าสั่งกอนการเรี ั วแปรที่อยูใ่ นไฟล์สคริ ปต
ยกใช้งานไฟล์สคริ ปต์มีชื่อซํ้ากบตั
่
แล้ว คาของตั ่ ้ นกสามารถที
วแปรเหลานั ็ ่จะถูกเปลี่ยนไปได้ตามคําสัง่ที่อยูใ่ นไฟล์สคริ ปต์
141
5.3.2 รปแบบและข้
ู อกําหนดในการเขียนไฟล์ ฟังก์ ชัน
โปรแกรม SCILAB มีฟังกชั์ นสําเร็ จรู ปที่สามารถนํามาใช้งานมากมาย แต่ในกรณี ที่ผใู้ ช้ตอ้ งการ
สร้างฟังกชั์ นใหมๆ่ ขึ้ นมาใช้งานเฉพาะทาง กสามารถทํ
็ ่ ั
าได้เชนกนโดยใช้ โปรแกรมเอดิเตอร์ ทว่ั ไป
ในการเขียนไฟล์ฟังกชั์ น แตโครงสร้
่ างของฟังกชั์ นต้องสอดคล้องกบรู
ั ปแบบของโปรแกรม SCILAB
่ นี้
ดังตอไป
142
instruction_1;
instruction_n;
endfunction
ํ
ข้อกาหนดในการเขี ยนไฟล์ฟังกชั์ นมีดงั นี้
ไฟล์ฟั ง กชั ์ นที่ ส ร้ างขึ้ นมาจะต้องเริ่ ม ต้นด้วยคําวา่ “function” เสมอ สวนคํ่ าปิ ดท้าย
“endfunction” จะมี หรื อไมมี ่ ก็ได้
ชื่อของไฟล์ฟังกชั์ น “function_name” จะต้องเหมือนกบชื ั ่อของ SCI-file ทุกประการ
(นัน่ คือ ชื่อไฟล์จะต้องเป็ น “function_name.sci” เทานั ่ ้ น)
พารามิเตอร์ y1 ถึง yn จะเรี ยกวา่ เอาต์พุตอาร์ กิวเมนต์ (output argument) ซึ่ งจะทําหน้าที่
่ ่ พธ์ที่ได้จากการคํานวณภายในไฟล์ฟังกชั์ นออกไปภายนอกไฟล์ฟังกชั์ น
ในการสงคาผลลั
พารามิ เตอร์ x1 ถึ ง xm จะเรี ยกวา่ อิ นพุตอาร์ กิ วเมนต์ (input argument) ซึ่ งจะทําหน้าที่
ในการรับคาตั ่ วแปรจากภายนอกไฟล์ฟังกชั์ นเข้ามาใช้ในการคํานวณภายในไฟล์ฟังกชั์ น
จํานวนคําสัง่ (instruction) ที่ใช้ในไฟล์ฟังกชั์ นจะมีจํานวนเทาใดกได้ ่ ็
ตัวอยางเชน ่ ่
่ ่ ถ้าต้องการสร้างฟั งกชั์ นเพื่อคํานวณหาผลรวมของเลขจํานวนคี่ต้ งั แตคา x1 ถึงคา่ x2
ก็สามารถเขียนไฟล์ฟังกชั์ นในโปรแกรม SCILAB เพื่อทําหน้าที่น้ ีได้ดงั นี้
--> y = MySum(1,10)
!--error 4
undefined variable : MySum ่ งไมสามารถใช้
//หมายความวายั ่ งานฟั งกชั์ น MySum ได้
-->exists('MySum') ่ ตวั แปรชื่อ MySum ในพื้นที่ใช้งานหรื อไม่
//ตรวจสอบดูวามี
ans =
0. //คา่ 0 หมายถึงไมมี่ตัวแปรชื่อ MySum ในพื้นที่ใช้งาน
-->exec('MySum.sci'); ่ ั
//เทียบเทากบการใช้
คาํ สัง่ getf('MySum.sci')
-->exists('MySum')
ans =
1. //คา่ 1 หมายถึงมีตวั แปรชื่อ MySum ในพื้นที่ใช้งาน
24
เมื่อทําการโหลดไฟล์ฟังกชั์ นแล้ว โปรแกรม SCILAB จะถือวาชื
่ ่อไฟล์ฟังกชั์ นนั้ นเป็ นเสมือนตัวแปรตัวหนึ่ ง
ภายในโปรแกรม SCILAB
144
่ ็ ามีการกาหนดคาของตั
อยางไรกตามถ้ ํ ่ ั ั ่อของอินพุตพารามิเตอร์ของ
วแปรที่มีชื่อซํ้ ากนกบชื
่ ่จะมีการเรี ยกใช้งานไฟล์ฟังกชั์ น ไฟล์ฟังกชั์ นนั้ นกจะนํ
ไฟล์ฟังกชั์ นกอนที ็ าคาของตั
่ วแปรที่มีชื่อซํ้ ากนั
ั ่อของอินพุตพารามิเตอร์มาใช้ในการประมวลผลภายในตัวฟังกช์ นั อยาง
กบชื ่ อัตโนมัติโดยไมจํ่ าเป็ น
่ ่
ต้องมีการป้ อนอินพุตพารามิเตอร์น้ นั ดังแสดงในตัวอยางตอไปนี ้
-->x2 = 10
x2 =
10.
-->y = MySum(1) ํ
//กาหนดให้ x2 = 10 อัตโนมัติ
y =
25.
-->x2
!--error 4
undefined variable : x2 //ไมมี่ ชื่อตัวแปร x2 ในพื้นที่ใช้งาน
-->exists('MySum')
ans =
0. //ไมมี่ ชื่อไฟล์ฟังกชั์ น MySum ในพื้นที่ใช้งาน
โดยที่พารามิเตอร์
lhs เป็ นเลขจํานวนเต็มบวกที่แสดงถึงจํานวนเอาต์พุตอาร์ กิวเมนต์ของไฟล์ฟังกชั์ น
rhs เป็ นเลขจํานวนเต็มบวกที่แสดงถึงจํานวนอินพุตอาร์ กิวเมนต์ของไฟล์ฟังกชั์ น
if modulo(x1, 2) == 1 then
StartOddNumber = x1;
StartEvenNumber = x1 + 1;
else
StartOddNumber = x1 + 1;
StartEvenNumber = x1;
end
OddSum = 0;
i = StartOddNumber;
while i <= x2
OddSum = OddSum + i;
i = i + 2;
end
if lhs == 2 then
EvenSum = 0;
i = StartEvenNumber;
while i <= x2
EvenSum = EvenSum + i;
i = i + 2;
end
end
endfunction
-->getf('MySum2.sci')
5.3.4 การเขียนฟังก์ชันแบบอินไลน์
การพัฒนาฟั งกชั์ นรู ปแบบใหม่ข้ ึนมาใช้งานสามารถทําได้ตามที่อธิ บายไว้ขา้ งต้น เชน่ ถ้าต้องการ
สร้างฟังกชั์ นเพื่อหาค่าสูงสุ ดของเลขสองจํานวน ก็สามารถเขียนฟังกชั์ นในโปรแกรม SCILAB ได้
ดังนี้
148
if x1 >= x2 then
y = x1
else
y = x2;
end
endfunction
ั ั ่อของฟังกชั์ น
จากนั้ นให้ทาํ การบันทึกฟังกชั์ นนี้ ลงในไฟล์ โดยที่ชื่อไฟล์จะต้องเป็ นชื่อเดียวกนกบชื
นัน่ คือชื่อไฟล์ MyMax.sci นอกจากนี้ ก่อนจะใช้งานฟั งกชั์ นนี้ ได้ก็จะต้องทําการโหลดฟั งกชั์ น
โดยใช้คาํ สัง่ exec หรื อ getf กอน ่
สังเกตจะพบวา่วิธีการสร้างฟังกชั์ นข้างต้นคอนข้
่ างจะเสี ยเวลาเนื่องจากมีการทํางานหลาย
ขั้ นตอน ในกรณี ที่ฟังกชั์ นที่พัฒนาขึ้ นมามีขนาดเล็กและถูกใช้งานเฉพาะภายในโปรแกรมหลักเพียง
โปรแกรมเดียว โปรแกรม SCILAB อนุญาตให้มีการกาหนดฟั ํ งกชั์ นแบบอินไลน์ (in-line function)
่ าสัง่ ได้โดยตรง ดังแสดงในตัวอยางตอไปนี
ที่หน้าตางคํ ่ ่ ้ (ยังคงเริ่ มต้นฟังกชั์ นด้วยคําวา่ function
และจะต้ องลงท้ายด้วยคําวา่ endfunction เสมอ)
-->y = MyMax(1, 5)
y =
5.
deff('[เอาต์พต
ุ ] = function_name(อินพุต)', 'ชุดคําสัง่')
149
-->y = MyMax(1,5)
y =
5.
่
จะเห็นได้วาการสร้ างฟังกชั์ นใหมขึ่ ้ นมาใช้งานในโปรแกรม SCILAB สามารถทําได้หลายลักษณะ
่
ทําให้สะดวกตอการใช้ งานตามที่ตอ้ งการ
diary('output_filename')
่
โดยพารามิเตอร์ output_filename คือ ชื่อไฟล์ที่จะทําการบันทึกข้อมูลลงไป ตัวอยางการใช้
งานคําสั่งนี้ เชน่
-->diary('mydiary.txt')
-->x = [1 2 3 4];
-->y = [5 6 7 8];
-->z = x+y
z =
6. 8. 10. 12.
-->z.^2
ans =
36. 64. 100. 144.
-->diary(0)
150
ู ่ 5.1 รายละเอียดของข้อมูลภายในไฟล์
รปที mydiary.txt โดยใช้โปรแกรมเอดิเตอร์ WordPad
-->x = [2 4 6 8];
-->disp("Piya Kovintavewat")
Piya Kovintavewat
pause) ้
คําสั่งนี้ มีประโยชน์มากสําหรับการตรวจสอบและแกไขโปรแกรม (debugging program)
่ ่ (ศึกษารายละเอียดเพิ่มเติมได้ในหัวข้อที่ 8.1.3)
ตัวอยางเชน
-->pause //หยุดจังหวะการประมวลผลของโปรแกรม
-1->pause //ระดับที่หนึ่งของการหยุดจังหวะ
-2->pause //ระดับที่สองของการหยุดจังหวะ
-3-> //ระดับที่สามของการหยุดจังหวะ
-1->pause
-2->pause
-3->abort //ทําการขัดจังหวะการประมวลผลของโปรแกรม
่ าสั่งของโปรแกรม
เป็ นคําสั่งที่ใช้ในการหยุดการทํางานของโปรแกรม SCILAB นัน่ คือหน้าตางคํ
็
SCILAB กจะหายไปด้ วย
154
-->pause
-1->pause
-2->pause
-3->quit //ลดระดับของการหยุดจังหวะลงสองระดับ
-1->quit
-->
-->y = fsum(2000000)
y =
100.
ฟั งกชั์ น f (i) =
3i + 2i-1
2
่ วแปร i ตั้ งแตค่ ่า 1 ถึงคา่ 200000 นัน่ คือการหาคา่
สําหรับคาตั
5i
ของตัวแปร y จาก
200000
⎛ 3i2 +2i-1 ⎞
y= ∑ ⎜
5i2
⎟
i=1 ⎝ ⎠
-->y = 0;
-->for i=1:200000
--> y = y + (3*i^2 + 2*i - 1)/(5*i^2);
-->end
-->y
y =
120004.78
่ ็
ชุดคําสัง่ นี้ มีการใช้คาํ สัง่วนซํ้าทําให้ใช้เวลาในการประมวลผลรวมทั้ งสิ้ น 2.937 วินาที อยางไรกตาม
ผูใ้ ช้สามารถที่จะพัฒนาชุดคําสัง่ใหมให้ ่ มีผลลัพธ์เทาเดิ
่ ม แตใช้
่ ความเร็ วในการประมวลผลน้อยลงได้
โดยใช้ประโยชน์จากโครงสร้างของเมทริ กซ์ ดังตอไปนี ่ ้
156
-->tic
-->i = 1:200000;
-->toc
ans =
0.234
-->y
y =
120004.78
y = MinToMax(a, b, c)
่ อยไปหาคามาก
เมื่อ a, b, และ c คือเลขจํานวนเต็ม และ y คือเวกเตอร์ที่มีสมาชิกเรี ยงลําดับจากคาน้ ่
วิธีทาํ โปรแกรมนี้ สามารถสร้างได้ดงั นี้
function y = MinToMax(a, b, c)
x = [a, b, c];
m1 = min(x);
x(find(x == m1)) = [];
m2 = min(x);
157
x(find(x == m2)) = [];
m3 = x;
y = [m1, m2, m3];
endfunction
-->getf('MinToMax.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->y = MinToMax(3, -3, 1)
y =
- 3. 1. 3.
่ ดสองจุดในระบบ
ตัวอย่ างที่ 3 จงเขียนโปรแกรมเพื่อคํานวณหาระยะทางที่ส้ ันที่สุด d ระหวางจุ
พิกดัคาร์ทีเซี ยน นัน่ คือ P1(x1, y1) และ P2(x2, y2) โดยมีรูปแบบการเรี ยกใช้งาน คือ
d = FindDistance(x1, y1, x2, y2)
d = sqrt((x1-x2)^2 + (y1-y2)^2)
endfunction
-->getf('FindDistance.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->d = FindDistance(2, 3, 5, 7)
d =
5.
-->d = FindDistance(0, 0, 5, 0)
d =
5.
-->d = FindDistance(0, 0, 1, 1)
d =
1.4142136
x = n1:n2;
temp = modulo(x, m);
index = find(temp == 0);
y = sum(x(index))
endfunction
-->getf('MySumMod.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->y = MySumMod(1, 9, 2)
y =
20.
159
-->y = MySumMod(1, 13, 3)
y =
30.
่ ฟังกชั์ น
ตัวอย่ างที่ 5 จงเขียนโปรแกรมเพื่อหาคาของ
⎧ 2x2 - 3cos( x ) ,x ≥ 2
⎪
(
f ( x ) = ⎨ cosh2(x) + 1 ) ,− 2 < x < 2
⎪
⎩ log10 ( x ) + e ,x ≤ −2
x
ํ
เมื่อ x เป็ นเลขจํานวนจริ ง โดยกาหนดให้
มีรูปแบบการเรี ยกใช้งานดังนี้
fx = MyFx(x)
function fx = MyFx(x)
if (x >= 2) then
fx = 2*x^2 - 3*cos(x);
elseif (x <= 2) then
fx = sqrt(cosh(x)^2 + 1)
else
fx = log10(x) + exp(x);
end
endfunction
-->getf('MyFx.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->fx = MyFx(-3)
fx =
10.117204
-->fx = MyFx(0.3)
fx =
1.446628
-->fx = MyFx(2.2)
fx =
11.445503
N
่ ฟังกชั์ น f ( N ) = ∑ ( i2 -3i ) เมื่อ N เป็ นเลขจํานวน
ตัวอย่ างที่ 6 จงเขียนโปรแกรมเพื่อหาคาของ
i =0
ํ
เต็มบวก โดยกาหนดให้
มีรูปแบบการเรี ยกใช้งานดังนี้
fn = MyFN(N)
function fn = MyFN(N)
fn = 0;
for i = 0:N
fn = fn + (i^2 - 3*i);
end
endfunction
-->getf('MyFN.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->fn = MyFN(3)
fn =
- 4.
161
-->fn = MyFN(20)
fn =
2240.
fn2 = 0;
i = 0;
while i <= N
fn2 = fn2 + (i^2 - 3*i);
i = i + 1;
end
endfunction
-->getf('MyFN2.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->fn2 = MyFN2(3)
fn2 =
- 4.
-->fn2 = MyFN2(20)
fn2 =
2240.
่ ั ั
ซึ่ งให้ผลลัพธ์เทากนกบโปรแกรมที ่คาํ สั่ง for
5.7 สรปุ
่ ที่ใช้เป็ นองค์ประกอบในการพัฒนาโปรแกรม ได้แก่ คําสั่งวนซํ้ า
ในบทนี้ ได้อธิบายถึงคําสั่งตางๆ
(for และ while) ซึ่ งเป็ นตัวสั่งให้โปรแกรมทําซํ้ าชุดคําสั่งเดิมภายในลูปเป็ นจํานวนรอบตามที
ํ
กาหนด และคําสัง่ ทดสอบเงื่อนไข (if-then-end, if-then-else-end, if-then-
162
N
5.1.2) ∑ i 2 = 12 + 22 + 32 + … + N 2
i =1
N
5.1.3) ∑ i3 = 13 + 23 + 33 + … + N 3
i =1
i =1 ⎝2 ⎠
N 1 N
5.4.4) ∑ =
i =1 i ( i + 1) N +1
163
่ อย (least common
5.5 จงเขียนโปรแกรมเพื่อคํานวณหาตัวคูณรวมน้ multiple) ของเลขจํานวน
เต็มบวกใดๆ พร้อมทั้ งตรวจคําตอบได้ที่โดยใช้คาํ สั่ง lcm
่
5.6 จงเขียนโปรแกรมเพื่อคํานวณหาตัวหารรวมมาก (greastest common divisor) ของเลขจํานวน
เต็มบวกใดๆ พร้อมทั้ งตรวจคําตอบได้ที่โดยใช้คาํ สั่ง gcd
่
5.7 จากสมการอนุกรมตอไปนี
้
⎛ 1 1 1 1 ⎞
π = 4 ⎜1 − + − + + …⎟
⎝ 3 5 7 9 ⎠
จงเขียนโปรแกรมเพื่อหาวาจะต้่ องใช้สมการข้างต้นจํานวนกี่พจน์สาํ หรับหาคาของ
่ π เพื่อให้ได้
คา่ที่ถกู ต้องถึงทศนิยม 5 ตําแหนง่ นัน่ คือ π = 3.14159
่
5.8 จงเขียนโปรแกรมสําหรับข้อความตอไปนี
้ โดยใช้คาํ สั่ง if
5.8.1) ถ้ารากที่สองของคา่ x มีคามากกวาคา
่ ่ ่ 0 ให้แสดงคา่ x ออกทางหน้าตางคํ
่ าสัง่
5.8.2) ถ้า x ≥ 0 ให้แสดงคา่ x ออกทางหน้าตางคํ ่ าสั่ง แตถ้่ า x < 0 ให้แสดงผลออกทาง
่ าสั่งวา่ “The value of x is less than 0”
หน้าตางคํ
5.8.3) ถ้า x ≥ 1 ให้แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “x = 1” แตถ้่ า x ≤ −1 ให้แสดงผล
ออกทางหน้าตางคํ ่ าสั่งวา่ “x = −1” สําหรับคา่ x อื่นๆ ให้แสดงผลออกทางหน้าตาง่
คําสัง่วา่ “x = 0”
5.8.4) ถ้า x ≥ 80 ให้แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “You got A” แตถ้่ า 70 ≤ x < 80 ให้
แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “You got B” แตถ้่ า 60 ≤ x < 70 ให้แสดงผลออก
่ าสั่งวา่ “You got C” แตถ้่ า x < 60 ให้แสดงผลออกทางหน้าต่างคําสัง่
ทางหน้าตางคํ
วา่ “You got F”
่
5.9 จงเขียนโปรแกรมสําหรับข้อความตอไปนี
้ โดยใช้คาํ สั่ง select-case
5.9.1) ถ้า x = 'A' (อินพุตอาร์ กิวเมนต์เป็ นตัวอักขระ) ให้แสดงผลออกทางหน้าตางคํ ่ าสั่ง
วา่ “x = A” ถ้า x = 'B' ให้แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “x = B” ถ้า x = 'C'
ให้แสดงผลออกทางหน้าตางคํ่ าสั่งวา่ “x = C” สําหรับคา่ x คาอื
่ ่นๆ ให้โปรแกรมหยุด
164
รปที ่
ู ่ 6.1 ตัวอยางหน้ ่
าตางกราฟที ่ใช้แสดงผลรู ปภาพของโปรแกรม SCILAB
่ นในหน้าตางกราฟ
ู ่ 6.2 รายละเอียดของเมนูหลักแตละอั
รปที ่
Figure properties ่
เปิ ดหน้าตางเอดิ เตอร์ เพื่อใช้ในการจัดรู ปแบบการแสดงผล
ของรู ปกราฟเมนูยอย ่ นี้ จะมีประโยชน์มาก โดยเฉพาะในกรณี
่
ที่ ผูใ้ ช้ไมสามารถจดจํ าคา่ พารามิ เตอร์ ต่างๆ ที่ ใช้ในคําสั่ง
สําหรับจัดรู ปแบบการแสดงผลของรู ปกราฟ
Current axes properties เปิ ดหน้าตางเอดิ ่ เตอร์ เพื่อแสดงสถานะของเส้นแกน (axes)
ที่ใช้อยูใ่ นหน้าตางกราฟ
่
Start entity picker เริ่ มต้นการเลือกตําแหนงของรู่ ปกราฟเพื่อทําการแกไข ้
Stop entity picker หยุดการเลือกตําแหนงของรู ่ ปกราฟเพื่อทําการแกไข ้
6.2 การวาดกราฟสองมิติ
่ ้ จะอธิบายถึงพื้นฐานในการวาดกราฟสองมิติ และคําสัง่ตางๆ
ในสวนนี ่ ที่ใช้ในการวาดกราฟสองมิติ
พร้อมทั้ งแสดงตัวอยา่ งการวาดกราฟสองมิติแบบตางๆ
่
plot(y)
169
่
ซึ่ งในกรณี น้ ีโปรแกรม SCILAB จะสมมติวาพารามิ ่ ่ ั ่
เตอร์ x มีคาเทากบคา 1 ถึงจํานวนสมาชิก
ทั้ งหมดของเวกเตอร์ y นัน่คือ x = 1:length(y) โดยอัตโนมัติ
-->t = 0:0.01:2;
-->f = 1;
-->y = sin(2*%pi*f*t);
-->plot(t, y)
ํ
คําสัง่ แรกเป็ นการกาหนดให้ ่ ร่ ะหวาง
ตวั แปร t ให้มีคาอยู ่ 0 ถึง 2 โดยที่สมาชิกแตละตั
่ วที่อยูต่ ิดกนั
่ ่ ั
จะมีคาหางกนคงที ่ ั 0.01 (ขนาดของตัวแปร t คือ 1×201) จากนั้ นกกาหนดคาความถี
่เทากบ ็ ํ ่ ่f
่ ั ่ ง แล้วกหาคาของสั
ให้เทากบหนึ ็ ่ ญญาณ y โดยคา่ y ที่หามาได้จะมีขนาดเทากบตั่ ั วแปร t จากนั้ น
กสั็ ่งให้วาดกราฟขึ้ นมาซึ่ งผลลัพธ์ที่ได้จะเป็ นกราฟตามรู ปที่ 6.3 สวนคํ
่ าสัง่ xtitle เป็ นคําสัง่ ที่
ํ
ใช้ในการกาหนดชื ่อของกราฟ, ชื่อของเส้นแกน x, และชื่อของเส้นแกน y
่
ในกรณี ที่พารามิเตอร์ y เป็ นเมทริ กซ์ สมาชิกทั้ งหมดในแตละแนวตั
้ งของเมทริ กซ์ y จะ
่ น ดังตัวอยาง
ถูกนํามาใช้วาดกราฟแตละเส้ ่ ตอไปนี
่ ้
-->clf; t = 0:0.01:2; ่
//คําสัง่ clf ทําหน้าที่ลบรู ปกราฟในหน้าตางกราฟ
-->f = 1;
-->plot(t, y) ั
//วาดกราฟสองเส้นพร้อมกน
plot2di([x], y, [options])
ํ ่
ซึ่ งมีท้ งั หมด 4 รู ปแบบตามที่กาหนดโดยคาพารามิ เตอร์ i ดังนี้
1) ไม่มี i วาดกราฟเชิงเส้นโดยใช้สเกลแบบธรรมดาหรื อสเกลแบบลอการิ ทึม
(logarithm scale)
2) i = 2 วาดกราฟขั้ นบันได (step function)
3) i = 3 วาดกราฟแทง่ (vertical bar)
4) i = 4 วาดกราฟเชิงเส้นโดยใช้ลกู ศร (arrow) แสดงทิศทางของเส้นโค้ง (curve)
่ ่
ตัวอยางเชน
-->clf; t = (1:0.2:7)';
-->subplot(2, 2, 3); ่ าย
//รู ป 6.5 ด้านลางซ้
-->plot2d3(t, [1.5+0.2*sin(t) 2+cos(t)])
-->xtitle('Plot2d3 - Vertical bar plot')
-->subplot(2, 2, 4); ่
//รู ป 6.5 ด้านลางขวา
-->plot2d4(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d4 – Arrow-style plot')
่ ปกราฟแบบตางๆ
ู ่ 6.5 ตัวอยางรู
รปที ่ ที่ได้จากการใช้คาํ สัง่ plot2di
่ าตางกราฟออกเป็
จะทําหน้าที่ในการแบงหน้ ่ นเมทริ กซ์ขนาด m×n (m แถว และ n แนวตั้ ง) สําหรับ
่ กราฟยอยแตละอั
หน้าตาง ่ ่ น โดยหน้าต่างกราฟยอยอั
่ นที่ i (เมื่อ i = 1, 2, ..., m*n) จะเป็ น
่ กราฟยอยที
หน้าตาง ่ ่ถกู เรี ยกใช้งาน
ํ
พารามิเตอร์ x ในคําสัง่ plot2di คือ ตัวแปรอิสระที่กาหนดคาในเส้่ นแกน x ซึ่ งจะมี
หรื อไมมี่ กได้
็ ในขณะที่พารามิเตอร์ y จะต้องอยูใ่ นรู ปของเมทริ กซ์ที่มีขนาด nc×nl เมื่อ nc คือ
่ นกราฟซึ่ งจะต้องมีคาเทากบจํ
จํานวนจุดที่จะวาดกราฟในแตละเส้ ่ ่ ั านวนสมาชิกของพารามิเตอร์ x และ
ํ
nl คือจํานวนเส้นกราฟที่จะวาด ในกรณี ที่เป็ นการวาดกราฟเพียงหนึ่ งเส้นก็สามารถที่จะกาหนดให้
็ ซึ่ งจะให้ผลลัพธ์ออกมาเทากน
พารามิเตอร์ x และ y เป็ นเวกเตอร์แถวหรื อเวกเตอร์แนวตั้ งกได้ ่ ั เชน่
คําสัง่ plot(t, cos(t)), plot(t', cos(t)'), หรื อ plot(t, cos(t)') จะให้
ผลลัพธ์เหมือนกนั
173
ํ
ตารางที่ 6.1 การกาหนดลั
กษณะของจุดบนเส้นกราฟ
style = [j] ลักษณะของจดุ คําอธิบาย
j = 0 . จุด (point)
j = -1 + บวก (plus)
j = -2 × กากบาท (x-mark)
j = -3 วงกลมบวก (plus-circle)
j = -4 ♦ สี่ เหลี่ยมรู ปเพชรแบบทึบ (black diamond)
j = -5 สี่ เหลี่ยมรู ปเพชรแบบธรรมดา (diamond)
j = -6 Δ สามเหลี่ยมชี้ ข้ ึน (triangle up)
j = -7 สามเหลี่ยมชี้ ลง (triangle down)
j = -8 สี่ เหลี่ยมรู ปเพชรบวก (plus-diamond)
j = -9 ○ วงกลม (circle)
่
สวนพารามิ เตอร์ options จะมีหรื อไมมี่ กได้
็ แตถ้่ ามีการเรี ยกใช้งาน options จะมี
ลักษณะการใช้งานดังนี้
โดยที่
style ่
มีลกั ษณะการใช้งานคือ style = [j] เมื่อคาของพารามิ ํ
เตอร์ j จะเป็ นตัวกาหนด
รู ปแบบของเส้นกราฟแบบตางๆ่ ดังแสดงในตารางที่ 6.1 ตัวอยางการใช้
่ งานเชน่
่
ตารางที่ 6.2 ตัวอยางการกาหนดลัํ กษณะของสี เส้นกราฟ
style = [j] สี ของเส้ นกราฟ
j = 1 สี ดาํ (black)
j = 2 สี น้ าํ เงิน (blue)
j = 3 สี เขียว (green)
j = 4 สี ไซแอ็น (cyan) เขียวผสมนํ้ าเงิน
j = 5 สี แดง (red)
j = 6 สี ม่วงแดงเข้ม (magenta)
j = 7 สี เหลือง (yellow)
j = 8 สี ขาว (white)
ํ
ตารางที่ 6.3 การกาหนดลั ่
กษณะของเส้นแกนในหน้าตางกราฟ
axesflag = [j] คําอธิบาย
j = 0 ไมต้่ องแสดงเส้นแกน (ทั้ งเส้นแกน x และเส้นแกน y)
แสดงเส้นแกนพร้อมข้อมูลของเส้นแกน โดยที่เส้นแกน y จะแสดงอยูท่ างด้านซ้าย
j = 1
่
(คาโดยปริ ยาย)
j = 2 แสดงเส้นแกน แตไมต้ ่ ่ องแสดงข้อมูลของเส้นแกน
j = 3 แสดงเส้นแกนพร้อมข้อมูลของเส้นแกน โดยที่เส้นแกน y จะแสดงอยูท่ างด้านขวา
j = 4 ่ ่ึ
แสดงเส้นแกน ณ ตําแหนงกงกลางของกรอบ (frame) รู ปภาพ
ํ
เป็ นการกาหนดให้ เส้นแกน x และเส้นแกน y จะต้องตัดกนที ั ่จุด (0,0)
j = 5
ถ้าจุด (0,0) ไมได้ ่ อยูใ่ นกรอบรู ปภาพ เส้นแกนจะไมแสดงออกมา
่
-->clf; x = 0:0.2:5;
-->y = [1.4+sin(x); 1.8+sin(x)]';
-->subplot(1,2,1); plot2d(x, y, style=[1,-4], axesflag=[0])
-->subplot(1,2,2); plot2d(x, y, style=[1,-4], axesflag=[2])
logflag ํ
ใช้ในการกาหนดลั กษณะของเส้นแกน x และเส้นแกน y วาจะให้ ่ เป็ นสเกลแบบ
่ ่เป็ นได้ของ logflag มีท้ งั หมดสี่ แบบ
ธรรมดาหรื อสเกลแบบลอการิ ทึม (logarithm) โดยคาที
คือ "nn", "nl", "ln" และ "ll" เมื่อ n หมายถึงให้ใช้สเกลแบบธรรมดา และ l หมายถึง
ให้ใช้สเกลแบบลอการิ ทึม (พารามิเตอร์ ตวั แรกจะอ้างอิงถึงเส้นแกน x และพารามิเตอร์ ตวั ที่
่
สองจะอ้างถึงเส้นแกน y) ตัวอยางการใช้งานพารามิเตอร์ logflag มีดงั นี้
-->clf; x = 0:0.2:5;
-->subplot(1, 2, 1);
-->subplot(1, 2, 2);
-->clf; x = 0:0.2:5;
-->subplot(1, 2, 1);
-->subplot(1, 2, 2);
ํ
ตารางที่ 6.4 การกาหนดลั กษณะขอบเขตของเส้นแกนในหน้าตางกราฟ ่
frameflag = [j] คําอธิบาย
ใช้สเกลเดิม (previous scale) ที่ใช้ในการวาดรู ปกราฟกอนหน้ ่ านี้
j = 0
ในการวาดกราฟรู ปใหม่ (เป็ นคาโดยปริ ่ ยาย)
j = 1 ขอบเขต (range) ของหน้าตางกราฟ ่ ํ
จะถูกกาหนดโดย พารามิเตอร์ rect
่
ขอบเขตของหน้าตางกราฟ ํ
จะถูกกาหนดโดยคาตํ ่ ่าสุ ดและคาสู
่ งสุ ดของข้อมูล
j = 2
ที่ใช้ในตัวแปร x และ y
j = 3 เหมือนกบั j = 1 แตใช้ ่ สเกลแบบสมมิติ (isometric scale)
j = 4 เหมือนกบั j = 2 แตใช้ ่ สเกลแบบสมมิติ
เหมือนกบั j = 1 แตอาณาเขตของหน้
่ ่
าตางกราฟจะมี ขนาดขึ้ นเพือ่ ให้ป้ าย
j = 5
ของเส้นแกนสวยงาม (pretty axes)
เหมือนกบั j = 2 แตอาณาเขตของหน้
่ ่
าตางกราฟจะมี ขนาดขึ้ นเพือ่ ให้ป้ าย
j = 6
ของเส้นแกนสวยงาม
j = 7 เหมือนกบั j = 5 แตสเกลของกราฟใหมจะไปทั
่ ่ บซ้อนสเกลของเดิม
j = 8 เหมือนกบั j = 6 แตสเกลของกราฟใหมจะไปทั
่ ่ บซ้อนสเกลของเดิม
-->clf; x = 0:0.2:5;
่ ว คือ
โดยที่ความหมายของพารามิเตอร์แตละตั
rect ํ
เป็ นเวกเตอร์ [xmin, ymin, xmax, ymax] ที่ใช้กาหนดคาตํ ่ ่าสุ ดและ
่ งสุ ดของเส้นแกน x และ y
คาสู
tics เป็ นเวกเตอร์ [nx, Nx, ny, Ny] โดยที่ Nx และ Ny คือจํานวนขีดหลัก
่ เส้นแกน x และ y ในขณะที่ nx และ ny คือจํานวน
(main tics) ที่จะแบงบน
่ (subtics) ที่จะแบงใน
ขีดยอย ่ แตละชองของ
่ ่ Nx และ Ny
options มีรูปแบบการใช้งานอยูส่ ามแบบ คือ
183
o flags เป็ นเวกเตอร์ ของตัวแปรบูลีน (%t หรื อ %f) ขนาด 1×2 ประกอบไปด้วย
[wantgrids, findbounds] โดยที่ wantgrids หมายถึงต้องการให้ใสเส้ ่ นกริ ด
เข้าไปในรู ปกราฟหรื อไม่ และ findbounds หมายถึงต้องการให้มีการปรับคาขอบเขต ่
ของกรอบรู ปภาพที่กาหนดใน ํ rect โดยอัตโนมัติหรื อไม่
o captions เป็ นเวกเตอร์ ขนาด 1×3 ประกอบด้วย [title, x-leg, y-leg] ใช้
ํ
กาหนดชื ่อเรื่ อง, ชื่อเส้นแกน x, และชื่อเส้นแกน y ของรู ปกราฟ โดยจะทําหน้าที่เทียบเทา่
กบัการใช้คาํ สัง่ xtitle
o subwins เป็ นเวกเตอร์ ขนาด 1×4 ประกอบด้วย [x, y, w, h] ใช้ในการกาหนด ํ
่
หน้าตางกราฟยอย ่ (sub-window) โดยที่ พารามิเตอร์ x และ y แสดงตําแหนง่จุดพิกดั
่
ของหน้าตางกราฟยอย ่ w แสดงขนาดความกว้าง (width) และ h แสดงขนาดความสู ง
่
(height) ของหน้าตางกราฟยอย ่
่ ่
ตัวอยางตอไปนี
้ แสดงลักษณะการใช้งานของคําสั่ง plotframe
-->clf; x = [0:0.2:9];
-->y = rand(x);
-->plotframe(rect, tics, [%t, %t], ["My plot with grids and ...
-->automatic bounds", "x", "y"], [0, 0.5, 0.5, 0.5])
-->plot2d(x, y, 4, "000") ่ าย
//รู ปที่ 6.14 ด้านลางซ้
-->plot2d(x, y, 5, "000") ่
//รู ปที่ 6.14 ด้านลางขวา
184
โดยที่พารามิเตอร์
185
-->clf;
-->xset("font", 1, 3) //เปลี่ยนขนาดของตัวอักษร
ํ
เป็ นคําสั่งที่ใช้กาหนดหน้ ่
าตางกราฟหมายเลข ่
j ให้เป็ นหน้าตางกรา ฟที่จะทํางาน (active graphic
window) โดยที่ j เป็ นเลขจํานวนเต็มบวก แตถ้ ่ าหน้าตางหมายเลขนั
่ ้ นยังไมมี่ หรื อไมมี่ การกาหนด
ํ
คา่พารามิเตอร์ j) โปรแกรม SCILAB กจะสร้ ็ ่
างหน้าตางกราฟหมายเลข j ขึ้ นมาใหม่ คําสั่ง
่ ั
scf(j) จะทําหน้าที่เทียบเทากบการใช้ คาํ สัง่ xset("window", j)
186
(x, y )
r
θ
x
6.2.3 กราฟเชิงขั้ว
ั
นอกจากการวาดกราฟสองมิติแบบทัว่ ไปในระบบพิกดฉาก ่
x-y ตามที่อธิ บายไว้ในหัวข้อที่ผาน
ั งขั้ ว (polar coordinates)
มาแล้ว โปรแกรม SCILAB ยังสามารถที่จะวาดกราฟในระบบพิกดเชิ
่
ได้ดงั แสดงตอไปนี
้
โดยทัว่ ไปจุด (x, y) ที่แสดงถึงตําแหนง่ (location) บนรู ปกราฟในระบบพิกดฉากสามารถ
ั
ที่จะเปลี่ยนให้อยูใ่ นรู ปของจุด (r, θ) ในระบบพิกดัเชิงขั้ วได้ โดยที่ r คือขนาด และ θ คือมุมเรเดียน
ั
(เทียบกบแกน x ในทิศทวนเข็มนาฬิกา) โดยอาศัยกฎของตรี โกณมิติ นัน่ คือจากรู ปที่ 6.16 จะได้วา่
−1 ⎛ y ⎞
r= x +y
2 2
และ θ = tan ⎜ ⎟
⎝x⎠
polarplot(theta, r, [options])
่ ม θ (มีหนวยเป็
เมื่อพารามิเตอร์ theta คือคามุ ่ นเรเดียน), พารามิเตอร์ r คือคาความยาวของรั
่ ศมี,
และพารามิเตอร์ options มีรูปแบบการใช้งานคือ
โดยที่
style, leg, ่ แล้วในหัวข้อที่ผานมา
และ rect มีลกั ษณะการใช้งานตามที่ได้กลาวไว้ ่
strf = ่
"xy0" (คาโดยปริ ยายคือ strf = "030") โดยที่
o x ่ งนี้
เป็ นตัวควบคุมการแสดงผลของคําอธิบายในรู ปกราฟ (caption) มีคาดั
x = 0 ไมต้ ่ องมีคําอธิ บายในรู ปกราฟ
ํ
x = 1 แสดงคําอธิ บายในรู ปกราฟ ที่กาหนดโดยพารามิ เตอร์ leg
o y มีลกั ษณะการใช้งานเหมือนพารามิเตอร์ frameflag ตามที่ได้กลาวไว้ ่ แล้ว
่
ในหัวข้อที่ผานมา
่ งานคําสั่ง polarplot เชน่
ตัวอยางการใช้
-->clf; t = 0:0.01:2*%pi;
-->polarplot(sin(7*t), cos(8*t))
6.3 การวาดกราฟสามมิติ
นอกจากการวาดกราฟสองมิติแล้ว โปรแกรม SCILAB ยังได้เตรี ยมคําสัง่จํานวนมากสําหรับการ
่ นี้ จะอธิบายถึงพื้นฐานในการวาดกราฟสามมิติ คําสัง่ ที่ใช้ในการ
วาดกราฟสามมิติ ดังนั้ นในสวน
่
วาดกราฟสามมิติ พร้อมทั้ งแสดงตัวอยางการวาดกราฟสามมิ ่
ติแบบตางๆ
่ ปกราฟแสดงผลลัพธ์จากการใช้ชุดคําสัง่ สําหรับวาดกราฟสองมิติที่ใช้งานเฉพาะด้าน
ู ่ 6.18 ตัวอยางรู
รปที
plot3d(x, y, z, [options])
α y
θ
ั
ู ่ 6.19 รู ปกราฟแสดงมุมยกและมุมกวาดในพิกดทรงกลม
รปที
เมื่อพารามิเตอร์
alpha ํ
และ theta คือเลขจํานวนจริ งที่ใช้ในการกาหนดมุ ํ งถูกพิจารณา
มองศาของจุดที่กาลั
ั
(observation point) ในระบบพิกดทรงกล ม (spherical coordinate)
ตามแสดงในรู ปที่ 6.19 เมื่อ
o alpha แสดงมุมยก (elevation angle) โดยคา่ alpha ที่เป็ นบวก หมายถึงมุมที่
ยกขึ้ น และคา่ alpha ที่เป็ นลบ หมายถึงมุมที่ยกลง (คาโดยปริ
่ ยายคือ alpha = 35)
o theta แสดงมุมกวาด (azimuth angle) โดยคา่ theta ที่เป็ นบวก หมายถึงมุมที่
ทวนเข็มนาฬิกา และคา่ theta ที่เป็ นลบ หมายถึงมุมที่ตามเข็มนาฬิกา (คาโดยปริ
่ ยาย
คือ theta = 45)
leg เป็ นพารามิเตอร์ ที่ใช้ในการใสข้่ อความอธิบายเส้นกราฟแตละเส้
่ น ตามที่กลาว
่
่
ไว้แล้วในหัวข้อที่ผานมา
flag เป็ นเวกเตอร์ที่ประกอบไปด้วยพารามิเตอร์สามตัว คือ
flag = [mode, type, box]
โดยที่
193
o mode ํ
เป็ นเลขจํานวนเต็มที่ใช้กาหนดสี ของพื้นผิวในรู ปกราฟ เมื่อ
mode > 0 พื้นผิวในรู ปกราฟจะเป็ นสี ตามหมายเลขของ mode ตามตารางที่ 6.2
mode = 0 พื้นผิวในรู ปกราฟจะไมมี่ สีหรื อโปรงแส
่ ง (transparent)
mode < 0 พื้นผิวในรู ปกราฟจะเป็ นสี ตามหมายเลขของ |mode| แตเส้่ นแสดง
ขอบเขตของรู ปกราฟจะไมถู่ กแสดง
o type ํ
เป็ นเลขจํานวนเต็มที่ใช้กาหนดสเกลของรู ปกราฟ เมื่อ
type = 0 สเกลที่ใช้วาดกราฟสามมิติเป็ นแบบธรรมดา
type = 1 สเกลแบบอัต โนมัติ โดยเส้ น แสดงขอบเขตจะถูก กาหนดโดยํ คา่
พารามิเตอร์ ebox
type = 2 ํ
สเกลแบบอัตโนมัติ โดยเส้นแสดงขอบเขตจะถูกกาหนดจาก ข้อมูลที่
่
ใช้ในการวาดกราฟ (เป็ นคาโดยปริ ยาย)
type = 3 สเกลแบบสมมิ ติ โดยเส้ น แสดงขอบเขตจะถู ก กาหนดโดยํ คา่
พารามิเตอร์ ebox (คล้าย type = 1)
type=4 ํ
สเกลแบบสมมิติ โดยเส้นแสดงขอบเขตจะถูกกาหนดจากข้ อมูลที่ใช้
ในการวาดกราฟ (คล้าย type = 2)
type = 5 ความหมายเหมือนกบั type = 3 แต่จะมีขนาดใหญกวา ่ ่
type = 6 ความหมายเหมือนกบั type = 4 แต่จะมีขนาดใหญกวา ่ ่
o box ํ
เป็ นเลขจํานวนเต็มที่ใช้กาหนด ลักษณะของกรอบรู ปภาพ เมื่อ
box = 0 ไมต้่ องแสดงเส้นแกนของรู ปกราฟ
box = 1 เหมือนกบั box = 0
box = 2 เฉพาะเส้นแกนที่อยูห่ ลังพื้นผิวของรู ปกราฟจะถูกแสดงออกมา
box = 3 ่ ้ นมาครอบรู ปกราฟ พร้อมทั้ งใสชื่ ่อของเส้นแกน
มีการสร้างกลองขึ
(x, y, และ z) ลงไป
box = 4 ่ ้ นมาครอบรู ปกราฟ พร้อมทั้ งใสชื่ ่อและสเกลของ
มีการสร้างกลองขึ
่
เส้นแกนลงไป (เป็ นคาโดยปริ ยาย)
ebox เป็ นเวกเตอร์ที่ประกอบไปด้วยพารามิเตอร์หกตัวดังนี้
ebox = [xmin, xmax, ymin, ymax, zmin, zmax]
194
ํ
ซึ่ งจะถูกใช้เพื่อกาหนดขอบเขตของรู ปกราฟ เมื่อ
o xmin และ xmax ่ ่าสุ ดและคาสู
คือ คาตํ ่ งสุ ดของเส้นแกน x
o ymin และ ymax คือ คาตํ่ ่าสุ ดและคาสู
่ งสุ ดของเส้นแกน y
o zmin และ zmax ่ ่าสุ ดและคาสู
คือ คาตํ ่ งสุ ดของเส้นแกน z
ํ
โดยทัว่ ไปแล้ว ebox มักใช้ในกรณี ที่ flag ถูกกาหนดให้ ่ น
มีคาเป็ 1, 3, และ 5 ถ้าไมมี่
การใช้ flag ในคําสัง่ plot3d พารามิเตอร์ ebox จะถูกเพิกเฉย
ํ
ตัวอย่ างที่ 2 กาหนดให้ ตัวแปร x และ y มีค่าระหวาง
่ 0 ถึง 1 จงวาดกราฟสามมิติจากสมการ
-->subplot(1, 2, 1); plot3d(x, y, z, flag = [4, 2, 4]); //รู ปที่ 6.20 ด้านซ้าย
่
จากรู ปที่ 6.20 ด้านซ้าย ถ้าต้องการให้มีการไลโทนสี ่
ตามขนาดของคาในแกน z ็
กสามารถทํ
าได้
โดยการใช้คาํ สัง่ plot3d1 ดังนี้
-->clf; plot3d1(x, y, z, theta = 35, alpha = 25, flag = [0, 2, 4]);
25
รู ปที่ 6.20 ด้านขวามีรูปรางลั ่ กษณะเหมือนกบรู
ั ปพื้นผิวรางแห
่ (mesh surface plot) ดังนั้ นผูใ้ ช้สามารถวาดรู ป
่
พื้นผิวรางแหได้ ่ ั
จากคําสัง่ นี้ เชนกน
195
โดยที่พารามิเตอร์
umin เป็ นเลขจํานวนจริ งของคาตํ่ ่าสุ ดของขนาดของคาในแกน
่ z
umax ่ งสุ ดของขนาดของคาในแกน
เป็ นเลขจํานวนจริ งของคาสู ่ z
colminmax เป็ นตัวเลือกที่มีรูปแบบการใช้งาน คือ
colminmax = [1 nb_colors]
-->zmax = max(z);
่ ต่างๆ กบขนาดของคา
ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.22 ซึ่ งจะมีแถบสี แสดงความสัมพันธ์ระหวางสี ั ่
ในแกน z
นอกจากนี้โปรแกรม SCILAB ยังมีคาํ สัง่ ที่ใช้ในการวาดภาพสามมิติแบบอื่นอีกมากมาย
่
ตามที่แสดงในตารางที่ 6.6 ตัวอยางการใช้ ่ ้ เชน่
งานคําสัง่ เหลานี
-->subplot(2, 2, 1);
่ าสัง่ ในการวาดกราฟสามมิติแบบทัว่ ไป
ตารางที่ 6.6 ตัวอยางคํ
คําสั่ ง คําอธิบาย
plot3d2 วาดกราฟพื้นผิวแบบมีสี
plot3d3 วาดกราฟพื้นผิวรางแห่ (mesh surface plot)
surf วาดกราฟพื้นผิวรางแห ่ ่
โดยมีการไลโทนสี ่
ตามขนาดของคาในแกน z
fplot3d ํ
วาดกราฟพื้นผิวที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์
ํ
วาดกราฟพื้นผิวที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์ โดยมีการไลโทนสี
่ ตาม
fplot3d1
่
ขนาดของคาในแกน z
-->subplot(2, 2, 2);
-->subplot(2, 2, 3);
-->x = -3:0.2:3;
198
่ ปกราฟสามมิติแบบทัว่ ไป
ู ่ 6.23 ตัวอยางรู
รปที
-->y = x;
-->subplot(2, 2, 4);
-->xtitle('fplot3d');
6.3.2 กราฟคอนทัวร์
ิ
กราฟคอนทัวร์ (contour plot) หรื อกราฟเส้นชั้ นความสู ง เป็ นกราฟที่เกดจากการเฉื อนรู ปกราฟ
สามมิติแล้วมองจากด้านบนลงมาจะได้ออกมาเป็ นเส้นชั้ นความสู ง โดยแตละเส้ ่ นชั้ นความสูงที่มีสี
199
ั
เดียวกนจะแสดงถึ ่ ั ปกราฟสามมิติ การวาดรู ปกราฟคอนทัวร์ในโปรแกรม
งระดับความสูงที่เทากนในรู
SCILAB สามารถทําได้โดยการใช้คาํ สัง่
่
โดยที่พารามิเตอร์ x, y, และ z แสดงคาในเส้ นแกน x, เส้นแกน y, และเส้นแกน z ตามลําดับ
่ พารามิเตอร์ nz เป็ นเลขจํานวนเต็มบวกที่ใช้กาหนดจํ
สวน ํ านวนระดับความสูง (หรื อจํานวนเส้น)
ที่ตอ้ งการให้แสดงในรู ปกราฟคอนทัวร์ และพารามิเตอร์ options จะมีรูปแบบการใช้งานคือ
เมื่อ
theta, alpha, leg, flag, ebox ั ่กลาวมาแล้
มีรูปแบบเหมือนกบที ่ วข้างต้น
zlev ่ เส้นแกน z กลาวคื
เป็ นเลขจํานวนจริ งที่ใช้ในการปรับขนาดคาของ ่ อคาของ่ สมาชิก
ทุกสมาชิกในตัวแปรของเส้นแกน z จะถูกนําไปบวกรวมกบคา ่ ่จะนําคา่
ั ่ zlev กอนที
ํ
ของผลลัพธ์ที่ได้ไปใช้กาหนดขนาดคาของ ่ เส้นแกน z ในการแสดงผลของรู ปกราฟ
่ ่ ถ้าต้องการวาดรู ปคอนทัวร์ของกราฟสามมิติในรู ปที่ 6.21 ก็สามารถทําได้โดยการใช้
ตัวอยางเชน
่
คําสั่งตอไปนี
้
-->z = abs(0.5*cos(2*%pi*x)'*cos(2*%pi*y));
-->contour(x, y, z, 4)
่ ่ ่นูนขึ้ นมาแตละอั
ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.24 สังเกตจะพบวาสวนที ่ นในรู ปที่ 6.21 จะแสดงด้วย
่ นสี จะแสดงคาระดั
เส้นสี สี่เส้น (เนื่องจาก nz = 4) โดยที่แตละเส้ ่ บความสูง (หรื อขนาดของคาใน
่
แกน z) ที่เทากน่ ั
200
่ าสัง่ วาดกราฟสามมิติแบบพิเศษสําหรับการใช้งานเฉพาะด้าน
ตารางที่ 6.7 ตัวอยางคํ
คําสั่ ง คําอธิบาย
param3d วาดเส้นโค้งแบบอิงพารามิเตอร์ (parametric curve) หนึ่งเส้น
param3d1 วาดเส้นโค้งแบบอิงพารามิเตอร์หลายๆ เส้นในรู ปกราฟเดียวกนั
hist3d วาดกราฟฮีสโตแกรมแบบสามมิติ (3D histogram)
fcontour ํ
วาดกราฟคอนทัวร์ที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์
-->clf; t = [0:0.1:5*%pi]';
-->subplot(2, 2, 1);
201
-->param3d(sin(t), cos(t), t/10, 35, 45, "X@Y@Z", [2,3]);
-->subplot(2, 2, 2);
-->subplot(2, 2, 3);
-->hist3d(6*rand(6,6));
-->xtitle('hist3d'); ่ ซ้าย
//รู ปที่ 6.25 ด้านลาง
-->t = %pi*[-10:10]/10;
-->subplot(2, 2, 4);
-->xtitle('fcontour'); ่
//รู ปที่ 6.25 ด้านลางขวา
6.4 การวาดกราฟแบบผสม
ในการวาดกราฟบางครั้ งมีความจําเป็ นต้องวาดกราฟสองแบบผสมกนั เพื่อที่จะได้สามารถอธิ บาย
ความหมายของรู ปกราฟนั้ นได้ครบถ้วน โปรแกรม SCILAB สามารถที่จะวาดกราฟลักษณะนี้ ได้
โดยการวาดกราฟทีละรู ปลงไปทับซ้อนกนั ดังแสดงในตัวอยางตอไปนี
่ ่ ้
-->z = 2*abs(cos(2*%pi*x)'*cos(2*%pi*y));
่ ปกราฟแสดงผลลัพธ์จากการใช้ชุดคําสัง่ สําหรับวาดกราฟสามมิติที่ใช้งานเฉพาะด้าน
ู ่ 6.25 ตัวอยางรู
รปที
่
ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.26 ซึ่ งจะเห็นได้วาการวาดกราฟแบบผสมนี ้ ไมยุ่ ง่ ยาก ดังนั้ นผูใ้ ช้สามารถ
ที่จะวาดกราฟแบบผสมใดๆ กได้ ็ โดยใช้คาํ สัง่ วาดกราฟตางๆ
่ ตามที่ได้อธิบายไว้ขา้ งต้น เพื่อที่จะได้
รู ปกราฟในแบบที่ตอ้ งการ
รปที ่
ู ่ 6.26 ตัวอยางการวาดรู ปกราฟแบบผสม
ตัวอย่ างที่ 3 ในเรื่ องการสื่ อสารดิจิทลั (digital communication) ฟังกชั์ นของรู ปสัญญาณที่พบบอย
่
คือฟังกชั์ นซิ งก์ (sinc function) ซึ่ งมีรูปแบบตามสมการ
sin ( x )
y=
x
่
เมื่อ x เป็ นระยะหางจากจุ ํ ด (origin point) ถ้ากาหนดให้
ดกาเนิ ํ –20 < x < 20 จงวาดรู ปกราฟของ
ฟังกชั์ นซิ งกน์ ้ ี
วิธีทาํ กราฟของฟังกชั์ นซิ งกสามารถที
์ ่จะวาดโดยใช้โปรแกรม SCILAB ได้ ดังนี้
-->clf;
-->x = -20:0.1:20;
-->y = sin(x)./x;
่
ในชุดคําสั่งบรรทัดที่สาม คําสัง่ find จะทําหน้าที่หาตําแหนงของตั ่ นศูนย์วาอยู
วแปร x ที่มีคาเป็ ่ ่
ตําแหนง่ไหน จากนั้ นกเปลี
็ ่ยนคาของตั
่ ่ นศูนย์ให้มีคาเทากบ
วแปร x ที่มีคาเป็ ่ ่ ั %eps แทน เพื่อ
ั
ป้ องกนการหารด้ วยคา่ 0 ของฟังกชั์ น y ผลลัพธ์ที่ได้จากชุดคําสัง่ นี้ แสดงในรู ปที่ 6.27
sin ( d )
y= และ d= x +y
2 2
ั
โดยที่ d คือระยะทางจากจุดศูนย์กลางไปยังจุดใดๆ ในพิกดทรงกลม (ดูรูปที่ 6.19) จงวาดรู ปกราฟ
ของฟังกชั์ นซิ งก์แบบสามมิติ ถ้ากาหนดให้
ํ –6 < x < 6 และ –6 < y <6 และต้องการให้รูปกราฟที่
่
ได้มีการไลโทนสี ่ ต่างๆ กบขนาดของคาใน
และมีแถบสี แสดงความสัมพันธ์ระหวางสี ั ่ เส้นแกน z
วิธีทาํ รู ปกราฟของฟังกชั์นซิ งกแบบสามมิ
์ ติสามารถที่จะวาดโดยใช้โปรแกรม SCILAB ได้ดงั นี้
205
-->clf; x = -6:0.5:6;
-->y = -6:0.5:6;
-->ZZ = sin(d) ./ d;
-->zmin = min(ZZ);
-->zmax = max(ZZ);
(x, y, z )
φρ
y
θ
ั
ู ่ 6.29 รู ปแสดงพิกดทรงกลม
รปที
ั
โดยที่ (x, y, z) คือจุดพิกดในระบบพิ ั ทีเซี ยน หากต้องการแปลงสมการของทรงกลมบน
กดคาร์
ั ทีเซี ยนให้อยูใ่ นระบบพิกดทรงกลม
ระบบพิกดคาร์ ั ็
กสามารถทําได้ดงั นี้ จากรู ปที่ 6.29 จะได้วา่
x = ρcos ( θ ) sin (φ )
y = ρsin ( θ ) sin (φ )
z = ρcos (φ )
ั
โดยที่ ρ คือความยาวรัศมีของทรงกลม, θ คือมุมกวาด (azimuth) หรื อมุมที่เทียบกบแกน x มีคา่
ระหวาง่ 0 ถึง 2π, และ φ คือมุมยก (elevation) หรื อมุมที่เทียบกบแกน
ั z มีค่าระหวาง
่ 0 ถึง π
207
่ ปกราฟทรงกลม
ู ่ 6.30 ตัวอยางรู
รปที
่ ระบบพิกดคาร์
ดังนั้ นเมื่อเข้าใจถึงความสัมพันธ์ระหวาง ั ทีเซี ยนและระบบพิกดทรงกลมแล้
ั ว
ก็จะทําให้สามารถวาดรู ปทรงกลมที่มีความยาวรัศมีเทาก ่ บั 1 หนวยได้
่ โดยใช้ชุดคําสั่งของโปรแกรม
SCILAB ดังนี้
-->clf;
-->rho = 1;
-->plot3d2(X,Y,Z,alpha=60)
่
ตัวอย่ างที่ 6 จงวาดรู ปกราฟพื้นผิวแบบมีสีของรู ปทรงหวงยาง (torus) ที่มีลก ั
ั ษณะเหมือนกบขนม
โดนัตบนระบบพิกดคาร์ ั ทีเซี ยน โดยกาหนดให้
ํ ่
มีความยาวรัศมีของรู ปทรงหวงยาง ในระนาบ x–y
เท่ากบั 1.4 หนวย ่ และในแนวแกน z เทากบ ่ ั 0.5 หนวย่ และจุดศูนย์กลางของรู ปทรงหวงยาง่ อยูท่ ี่
จุดพิกดั (x, y, z) = (0, 0, 0)
่ ่นให้พิจารณาสมการของรู ปทรงหวงยาง
วิธีทาํ กอนอื ่ ั ทีเซี ยน ดังนี้
บนระบบพิกดคาร์
(c − ) +z
2
2 2 2 2
x +y =a
ั
เมื่อ (x, y, z) คือจุดพิกดในระบบพิ ั าร์ทีเซี ยน, a คือความยาวรัศมีของรู ปทรงหวงยาง
กดค ่ ในระนาบ
x–y, และ c คือความยาวรัศมีของวงกลมในแนวแกน z เนื่ องจากการเตรี ยมข้อมูลเพื่อวาดรู ปทรง
่
หวงยาง ในระบบพิกดอื ั ่นจะงายกวาการเตรี
่ ่ ั ทีเซี ยน ดังนั้ นข้อมูล
ยมข้อมูลเพื่อวาดรู ปในระบบพิกดคาร์
ของตัวแปร x, y, และ z ควรที่จะต้องถูกแปลงให้อยูใ่ นรู ปของตัวแปรใหมที่ ่เหมาะสมดังนี้
( )
x = a + ccos (φ ) cos ( θ )
( )
y = a + ccos (φ ) sin ( θ )
z = csin (φ )
่ ร่ ะหวาง
โดยที่ตวั แปร θ และ φ จะมีคาอยู ่ 0 ถึง 2π การแปลงสมการแบบนี้จะเรี ยกวา่ สมการอิง
็
พารามิเตอร์ (parametric equation) จากนั้ นกสามารถวาดรู ่
ปทรงหวงยาง ตามที่โจทย์ตอ้ งการได้
โดยใช้ชุดคําสั่งของโปรแกรม SCILAB ดังนี้
-->clf; phi = linspace(0, 2*%pi, 21);
-->a = 1.4;
-->c = 0.5;
่ ปกราฟทรงหวงยาง
ู ่ 6.31 ตัวอยางรู
รปที ่
-->Z = c * sin(PHI);
f ( x ) = (2+ cos ( x ) ) e
-sin( x )
ํ
ตัวอย่ างที่ 7 กาหนดให้ เมื่อ 0 ≤ x ≤ 4π จงวาดกราฟเชิงเส้น
และกราฟลอการิ ทึม (ทั้ งในแนวแกน x และแกน y)
วิธีทาํ กราฟเชิงเส้นและกราฟลอการิ ทึมสามารถหาได้จากชุดคําสัง่ ดังนี้
-->clf; x = 0:0.1:4*%pi;
-->y = (2 + cos(x)).*exp(-sin(x));
ํ
ตัวอย่ างที่ 8 วาดกราฟเส้นโค้งกลีบกุหลาบ (rose curve) ที่กาหนดโดยสมการ r = 5cos ( 4θ ) เมื่อ
ั งขั้ ว
0 ≤ θ ≤ 2π ในระบบพิกดเชิ
-->theta = 0:0.01:2*%pi;
-->r = 5*cos(4*theta);
-->polarplot(theta, r)
6.6 สรปุ
่ ที่ใช้ในการวาดกราฟสองมิติ (เชน่ คําสัง่ plot, plot2d,
ในบทนี้ ได้อธิบายถึงการใช้คาํ สัง่ ตางๆ
polarplot, contour2d, และ plzr เป็ นต้น) และกราฟสามมิติ (เชน ่ คําสั่ง plot3d,
countour, และ hist3d) พร้อมทั้ งกลาวถึ ่ งพารามิเตอร์ ต่างๆ ที่ใช้ในคําสั่งเหลานี
่ ้ เพื่อให้
สามารถนําไปประยุกต์ใช้งานได้อยางถู ่ กต้องและตรงตามความต้องการ
่
ดังนั้ นจะเห็นได้วาโปรแกรม ่ ง่
SCILAB สามารถวาดกราฟได้หลายรู ปแบบจึงเหมาะอยางยิ
สําหรับการนํามาใช้ในการวาดรู ปกราฟ เพื่อใช้ในการนําเสนอผลงานวิจยั และผลงานทางวิชาการ
่ ง่ งานทางด้านวิศวกรรมและวิทยาศาสตร์
โดยเฉพาะอยางยิ
6.1.1) กราฟเชิงเส้น
212
6.2.1) วาดกราฟเชิงเส้น
6.2.2) วาดกราฟลอการิ ทึมทั้ งในแนวแกน x และแกน y
่
6.2.3) เปรี ยบเทียบข้อแตกตางของกราฟที ่ได้ท้ งั สองรู ป
ํ
6.3 กาหนดให้ y = (ex − e-x)/2 โดยที่ −10 ≤ x ≤ 10
6.3.1) วาดกราฟเชิงเส้น
6.3.2) วาดกราฟลอการิ ทึมทั้ งในแนวแกน x และแกน y
่
6.3.3) เปรี ยบเทียบข้อแตกตางของกราฟที ่ได้ท้ งั สองรู ป
่
6.4 จงวาดกราฟของภาพตัดกรวยจากสมการตอไปนี
้
6.4.1) x2 + y2 – 9 = 0
6.4.2) x2 + y2 – 8x + 10y + 5 = 0
6.4.3) x2 – 4x – 2y + 10 = 0
6.4.4) y2 – 2y – 8x + 9 = 0
6.4.5) y2 + 4y + 20x + 4 = 0
6.4.6) x2 + 4y2 – 64 = 0
6.4.7) 9x2 + y2 – 18 = 0
6.4.8) 4x2 + y2 + 8x – 4y – 8 = 0
6.4.9) 5x2 – 2y2 – 10 = 0
6.4.10) 9x2 – 16y2 – 90x + 64y + 17 = 0
6.4.11) 7y2 – 9x2 – 70y – 54x + 31 = 0
6.4.12) 17x2 + 12xy + 8y2 – 20 = 0
6.4.13) 3x2 – xy + 4y2 – 16x – 3y = 0
6.4.14) 153x2 – 192xy + 97y2 – 30x - 40y – 200 = 0
213
ํ
6.5 เส้นโค้งลิมาคอน (Limacons) ถูกกาหนดโดยสมกา ร r = a ± b sin (θ ) และ r = a ± b cos (θ )
เมื่อ a และ b เป็ นเลขจํานวนจริ ง และ 0 ≤ θ ≤ 2π จงวาดกราฟของสมการตอไปนี ่ ้ ในระบบ
ั งขั้ ว
พิกดเชิ
6.5.1) r = 2 + 2sin ( θ )
6.5.2) r = 4 + 2sin ( θ )
6.5.3) r = 2 + 4sin ( θ )
6.5.6) r = 4 − 2cos ( θ )
6.5.7) r = 2 − 4cos ( θ )
6.6.2) r = 3sin ( 3θ )
6.6.3) r = 3sin ( 4θ )
6.6.4) r = 3cos ( 3θ )
6.6.5) r = 3cos ( 4θ )
6.7.2) r = 9sin ( 2θ )
2
214
6.7.3) r = 4cos ( 2θ )
2
6.7.4) r = 9cos ( 2θ )
2
่
เลขจํานวนจริ ง และ 0 ≤ θ ≤ 2π จงวาดกราฟของสมการตอไปนี ั งขั้ ว
้ ในระบบพิกดเชิ
6.8.1) r = 2θ
6.8.2) log e ( r ) = 2θ
6.8.3) rθ = 2
่
6.9 จงแปลงสมการตอไปนี
้ ให้เป็ นสมการระบบเชิงขั้ ว พร้อมทั้ งวาดกราฟเชิงขั้ ว
6.9.1) x2 – 6x + y2 + 4y = 0
6.9.2) x2 + y2 – 2x + 2y = 0
6.9.3) y2 + 4x – 4 = 0
6.9.4) x2 + 2y2 – 8 = 0
6.9.5) x +y
2 2
( 2 2
)
x + y − 2 − 2y = 0
(x )
2
6.9.6) 2
+y
2 2 3
− 6x y + 2y = 0
่
6.10 จงวาดพื้นระนาบจากสมการตอไปนี
้
6.10.1) x + 2y + 3z = 4
6.10.2) 2x + 3y – 4z = 5
6.10.3) 3x – 4y + 5z = 6
6.10.4) –2x + 3y – 2z = 1
ํ
6.11 กาหนดให้ ์ นตอไปนี
0 ≤ x ≤ 1 และ 0 ≤ y ≤ 1 จงวาดกราฟสามมิติของฟั งกชั ่ ้
6.11.1) z = sin ( 2πx ) cos ( 3πy )
่
6.12 ทําซํ้ าข้อ 6.11 แตวาดกราฟแ บบคอนทัวร์ (contour plot)
่
6.13 ทําซํ้ าข้อ 6.11 แตวาดกราฟแบบพื ่
้นผิวรางแห (mesh surface plot)
่
6.14 ทําซํ้ าข้อ 6.11 แตวาดกราฟแบบผสม ่
โดยผสมระหวางกราฟพื
้นผิวและกราฟคอนทัวร์
บทที่ 7
พืน้ ฐานระบบอินพตและเอาต์
ุ พตุ
ี่ องกบการอาน
ระบบอินพุต (input) และเอาต์พตุ (output) หรื อระบบ I/O เป็ นระบบที่เกยวข้ ั ่ และ
่
เขียนข้อมูลระหวางโปรแกรม ั ่ องคอมพิวเตอร์ การอานข้
SCILAB กบเครื ่ อมูลหมายถึงการอาน ่
่
ข้อมูลจากคียบ์ อร์ ดหรื อจากไฟล์ สวนการเขี ยนข้อมูลหมายถึงการพิมพ์ขอ้ มูลเพื่อแสดงออกทาง
็ ในไฟล์กไ็ ด้ ในบทนี้ จะอธิบายถึงคําสั่ง
จอภาพของคอมพิวเตอร์ หรื อเป็ นการเขียนข้อมูลลงไปเกบไว้
และหลักการในการเขียนโปรแกรม เพื่อใช้ในการอาน ่ และเขียนข้อมูลระหวางโปรแกรม
่ SCILAB
ั ่ องคอมพิวเตอร์ ซึ่ งจะชวยทํ
กบเครื ่ าให้สามารถพัฒนาฟังกชั์ นแบบใหมๆ่ ได้
่ ่
เป็ นคําสัง่ ที่ใช้ในการอานคาจากคี ็ ในตัวแปร เพื่อนําไปประมวลผลในโปรแกรม
ยบ์ อร์ดเข้ามาเกบไว้
SCILAB รู ปแบบการใช้งานคําสั่งนี้ คือ
โดยที่พารามิเตอร์
message คือ สายอักขระ (character string) ที่ตอ้ งการให้แสดงผลออกทางหน้าตางคํ ่ าสั่ง
"string" ํ
(หรื อ "s") เป็ นตัวกาหนดวา ่ ข้อมูลที่พารามิเตอร์ x จะเกบไว้ ็ เป็ นสายอักขระ
x คือ ผลลัพธ์ที่ได้จากคียบ์ อร์ด ซึ่ งเป็ นได้ท้ งั เลขจํานวนจริ งหรื อสายอักขระ
่ งานคําสัง่ นี้ เชน่
ตัวอยางการใช้
เป็ นคําสัง่ ที่ใช้ในการเปิ ดหรื อปิ ดแฟ้ มข้อมูลหรื อไฟล์ โดยมีรูปแบบการใช้งานทัว่ ไปดังนี้
โดยที่พารามิเตอร์
'open' เป็ นการบอกโปรแกรมให้เปิ ดไฟล์ filename ขึ้ นมาใช้งาน
filename เป็ นชื่อไฟล์ขอ้ มูลที่ตอ้ งการจะเรี ยกขึ้ นมาใช้งาน
ํ
status เป็ นการกาหนดสถา นะของไฟล์ที่เปิ ดขึ้ นมาใช้งาน ซึ่ งมีอยู่ 4 รู ปแบบคือ
o "new" ่ อยูใ่ นสารบบทํางาน
หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะต้องไมเคยมี
o "old" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะต้องมีอยูแ่ ล้วในสารบบทํางาน
o "unknown" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะมีอยูห ่ รื อไมมี่ อยูใ่ นสารบบทํางานกได้
็
o "scratch" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะถูกลบทิ้งหลังจากเสร็ จสิ้ นการทํางาน
unit เป็ นเลขจํานวนเต็มที่โปรแกรมใช้อา้ งถึงชื่อไฟล์ filename นั้ น
217
file('close', unit)
่
เป็ นคําสั่งที่ใช้ในการพิมพ์คาของตั ่ าสั่ง ซึ่ งมีรูปแบบการใช้งานดังนี้
วแปรออกมาที่หน้าตางคํ
โดยที่พารามิเตอร์
format ่ าสั่ง
คือ สายอักขระที่ตอ้ งการให้แสดงผลออกทางหน้าตางคํ
value_i ํ ่
เป็ นตัวกาหนดวาจะให้ ่ าสั่ง
ขอ้ มูลใดแสดงผลออกมาที่หน้าตางคํ
่ งานคําสัง่ นี้ เชน่
ตัวอยางการใช้
function [] = MyASCIITable()
printf("Generating an ASCII table:\n");
printf("===============================================\n");
for j = 19:9:255
printf('%3d %s %3d %s %3d %s %3d %s %3d %s %3d %s ' + ...
'%3d %s %3d %s %3d %s %3d %s\n',...
j,ascii(j),j+1,ascii(j+1),j+2,ascii(j+2),j+3,ascii(j+3),...
j+4,ascii(j+4),j+5,ascii(j+5),j+6,ascii(j+6),...
j+7,ascii(j+7),j+8,ascii(j+8),j+9,ascii(j+9))
end
printf("===============================================\n");
endfunction
-->getf('MyASCIITable.sci')
-->MyASCIITable
Generating an ASCII table:
===========================================================
19 20 21 22 23 24 25 26 27 28
28 29 30 - 31 32 33 34 " 35 # 36 $ 37 %
37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 .
46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7
55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @
64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I
73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R
82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [
91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d
100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m
109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v
118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127
127 128 € 129 130 ‚ 131 ƒ 132 „ 133 … 134 † 135 ‡ 136 ˆ
136 ˆ 137 ‰ 138 Š 139 ‹ 140 Œ 141 • 142 Ž 143 • 144 • 145 ‘
145 ‘ 146 ’ 147 “ 148 ” 149 • 150 – 151 — 152 ˜ 153 ™ 154 š
220
154 š 155 › 156 œ 157 • 158 ž 159 Ÿ 160 161 ¡ 162 ¢ 163 £
163 £ 164 ¤ 165 ¥ 166 ¦ 167 § 168 ¨ 169 © 170 ª 171 « 172 ¬
172 ¬ 173 - 174 ® 175 ¯ 176 ° 177 ± 178 ² 179 ³ 180 ´ 181 µ
181 µ 182 ¶ 183 · 184 ¸ 185 ¹ 186 º 187 » 188 ¼ 189 ½ 190 ¾
190 ¾ 191 ¿ 192 À 193 Á 194 Â 195 Ã 196 Ä 197 Å 198 Æ 199 Ç
199 Ç 200 È 201 É 202 Ê 203 Ë 204 Ì 205 Í 206 Î 207 Ï 208 Ð
208 Ð 209 Ñ 210 Ò 211 Ó 212 Ô 213 Õ 214 Ö 215 × 216 Ø 217 Ù
217 Ù 218 Ú 219 Û 220 Ü 221 Ý 222 Þ 223 ß 224 à 225 á 226 â
226 â 227 ã 228 ä 229 å 230 æ 231 ç 232 è 233 é 234 ê 235 ë
235 ë 236 ì 237 í 238 î 239 ï 240 ð 241 ñ 242 ò 243 ó 244 ô
244 ô 245 õ 246 ö 247 ÷ 248 ø 249 ù 250 ú 251 û 252 ü 253 ý
253 ý 254 þ 255 ÿ 256 257 258 259 260 261 262
===========================================================
-->ascii(91)
ans =
[
-->ascii('[')
ans =
91.
โดยที่พารามิเตอร์
file ็ ่
เป็ นชื่อของไฟล์ที่ตอ้ งการจะให้เกบคาของตัวแปร value_i
format และ value_i ทําหน้าที่เหมือนกนกบที ั ั ่ใช้ในคําสั่ง printf
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้
221
-->for t = 0:%pi/10:%pi
--> fprintf(u, 'time = %6.3f value = %6.3f\n', t, cos(t));
-->end
-->file('close', u);
่
เป็ นคําสัง่ ที่ใช้ในการรับคาจากคี ็ ในตัวแปร ซึ่ งมีรูปแบบการใช้งานดังนี้
ยบ์ อร์ดมาเกบไว้
-->printf('Enter x and y in the same line: X Y\n');
Enter x and y in the same line: X Y
222
-->2.3 -3.3 ่
//เว้นวรรคหนึ่ งชองไฟ ่ อมูลแตละตั
ระหวางข้ ่ ว
y =
- 3.3
x =
2.3
่ ่
เป็ นคําสั่งที่ ใช้ในการอานคาจากไฟล์ ็ ในตัวแปร โดยมี รูปแบบการใช้งานตามตัวอยาง
ไปเกบไว้ ่
ที่จะแสดงตอไปนี่ ็ อมูลตัวเลข
้ เริ่ มต้นให้ทาํ การสร้างไฟล์ MyData.txt ในสารบบ c:\ เพื่อเกบข้
1 ถึง 6 ตามที่แสดงในรู ปที่ 7.2 โดยใช้ชุดคําสัง่ ดังนี้
-->file('close', u);
-->for j = 1:2
--> [a b c] = fscanf(w, '%f %f %f');
--> aa = [aa; a];
--> bb = [bb; b];
--> cc = [cc; c];
-->end
-->file('close', w);
-->[aa bb cc]
ans =
1. 2. 3.
4. 5. 6.
โดยที่พารามิเตอร์
file_desc ่ อมูล
คือ ตัวแปรที่ใช้อา้ งอิงถึงชื่อของไฟล์ที่ตอ้ งการจะอานข้
m คือ จํานวนแถวของข้อมูลในไฟล์ที่ตอ้ งการจะอานข้ ่ อมูล (ใช้ m = -1
่ อมูลทุกแถว)
ถ้าต้องการให้อานข้
n คือ จํานวนแนวตั้ งของข้อมูลในไฟล์ที่ตอ้ งการจะอานข้ ่ อมูล
format ํ
เป็ นตัวเลือกที่กาหนดลั ่ อมูลจากไฟล์ตามรู ปแบบของ
กษณะการอานข้
ภาษาฟอร์แทรน (FORTRAN) โดยมีรูปแบบดังนี้
o iw โดยที่ i สําหรับเลขจํานวนเต็ม และ w คือจํานวนของตัวอักขระที่ยอมให้มีได้
224
write(file_desc, a, [format])
โดยที่พารามิเตอร์
file_desc คือ ตัวแปรที่อา้ งอิงถึงชื่อของไฟล์ที่ตอ้ งการจะเขียนข้อมูล
a คือ เวกเตอร์หรื อเมทริ กซ์ของสายอักขระที่จะนําไปบันทึกไว้ในไฟล์
format ํ
เป็ นตัวกาหนดลั กษณะการเขียนข้อมูลลงไปในไฟล์ตามรู ปแบบของ
ภาษาฟอร์แทรนเหมือนกบพารามิ ั เตอร์ format ที่ใช้ในคําสั่ง read
่ ่ ถ้าใช้ 'f10.3' จะหมายถึงให้เขียนเป็ นเลขจํานวน
ยกตัวอยางเชน
จริ งสิ บหลัก โดยมีเลขที่ตามหลังจุดทศนิยมเป็ นจํานวนสามหลัก
่
สําหรับตัวอยางการใช้
งานคําสัง่ write สามารถดูได้ในหัวข้อที่ 7.2.2
function [] = MyArea()
disp("=============================")
disp(" Area calculation")
disp("=============================")
disp("Select an option:")
disp(" 1 - Rectangular")
disp(" 2 - Triangular")
disp(" 3 - Circular")
disp("=============================")
itype = input("")
select itype
case 1 then
id = "rectangular";
w = input("Enter the width:")
h = input("Enter the height:")
A = w*h;
case 2 then
id = "triangular";
b = input("Enter the width:")
h = input("Enter the height:")
A = b*h/2;
case 3 then
id = "circular";
r = input("Enter the radius:")
A = %pi*r^2;
else
error("Must choose only 1, 2 or 3 ")
end
endfunction
226
-->MyArea
=============================
Area calculation
=============================
Select an option:
1 - Rectangular
2 - Triangular
3 - Circular
=============================
-->2
Enter the width:-->10
Enter the height:-->5
The area for a triangular cross-section is 25.000000 .
-->MyArea
=============================
Area calculation
=============================
Select an option:
1 - Rectangular
2 - Triangular
3 - Circular
=============================
-->4
!--error 10000
Must choose only 1, 2 or 3
at line 27 of function MyArea called by :
MyArea
่ ตอไปนี
พิจารณาตัวอยาง ่ ้ ซ่ ึ งเป็ นฟังกชั์ นสําหรับการสร้างตารางข้อมูล เพื่อที่จะได้เข้าใจถึง
่
ลักษณะการเขียนโปรแกรมเพื่อติดตอระบบอิ นพุตและเอาต์พตุ มากยิง่ ขึ้ น
227
function [] = MyTable()
printf("==============================================\n");
printf(" a b c d \n");
printf("==============================================\n");
for j = 1:8
a = sin(2*j);
b = cos(2*j);
c = a + b;
d = a - b;
printf("%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
end
printf("==============================================\n");
endfunction
-->MyTable
================================================
a b c d
================================================
+0.90930 -0.41615 +4.93151e-001 +1.32544e+000
-0.75680 -0.65364 -1.41045e+000 -1.03159e-001
-0.27942 +0.96017 +6.80755e-001 -1.23959e+000
+0.98936 -0.14550 +8.43858e-001 +1.13486e+000
-0.54402 -0.83907 -1.38309e+000 +2.95050e-001
-0.53657 +0.84385 +3.07281e-001 -1.38043e+000
+0.99061 +0.13674 +1.12734e+000 +8.53870e-001
-0.28790 -0.95766 -1.24556e+000 +6.69756e-001
================================================
่
สังเกตจะพบวาในฟั งกชั์ น MyTable มีการใช้รหัสบังคับการพิมพ์ %+6.5f เพื่อเป็ นการบอกวา่
่ หัสบังคับการพิมพ์ %+6.5e หมายถึงให้
ให้แสดงเครื่ องหมายบวกหรื อลบหน้าผลลัพธ์ดว้ ย สวนร
แสดงผลลัพธ์ในรู ปแบบของเลขยกกาลัํ ง
228
ู ่ 7.3 ข้อมูลภายในไฟล์
รปที table1.txt
-->getf('MyReadTable1.sci')
-->'c:\table1.txt'
There are 4 columns in the table
x4 =
4.
8.
12.
x3 =
3.
7.
11.
x2 =
2.
6.
10.
x1 =
1.
5.
9.
-->getf('MyReadTable2.sci')
function [] = MyWriteToFile1()
//|---------------------------------------------|
//| This function write the data into a file. |
//|---------------------------------------------|
printf("Printing to a file\n");
printf("=======================\n");
filename = input("Enter file to write to (between quotes):\n");
u = file('open', filename, 'new');
write(u, "==================================");
for j = 1:5
write(u, [j j*j j^3], '(f10.2, f10.2, f10.2)');
end
endfunction
232
ู ่ 7.4 ข้อมูลภายในไฟล์
รปที temp1.txt
-->getf('MyWriteToFile1.sci')
-->MyWriteToFile1
Printing to a file
==================
Enter file to write to (between quotes):
-->'c:\temp1.txt'
-->
function [] = MyWriteToFile2()
//|---------------------------------------------|
//| This function write the data into a file. |
//|---------------------------------------------|
printf("Printing to a file\n");
printf("==================\n");
filname = input("Enter file to write (between quotes):\n");
u = file('open', filname, 'new');
printf("=====================================\n");
fprintf(u, "=====================================\n");
printf(" a b c d \n");
fprintf(u, " a b c d \n");
printf("=====================================\n");
fprintf(u, "=====================================\n");
for j = 1:10
a = sin(2*j);
b = cos(2*j);
c = a + b;
d = a - b;
printf("%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
fprintf(u,"%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
end
printf("=====================================\n");
fprintf(u, "=====================================\n");
file('close', u)
endfunction
-->MyWriteToFile2
234
ู ่ 7.5 ข้อมูลภายในไฟล์
รปที temp2.txt
Printing to a file
==================
Enter file to write (between quotes):
-->'c:\temp2.txt'
================================================
a b c d
================================================
+0.90930 -0.41615 +4.93151e-001 +1.32544e+000
-0.75680 -0.65364 -1.41045e+000 -1.03159e-001
-0.27942 +0.96017 +6.80755e-001 -1.23959e+000
+0.98936 -0.14550 +8.43858e-001 +1.13486e+000
-0.54402 -0.83907 -1.38309e+000 +2.95050e-001
-0.53657 +0.84385 +3.07281e-001 -1.38043e+000
+0.99061 +0.13674 +1.12734e+000 +8.53870e-001
-0.28790 -0.95766 -1.24556e+000 +6.69756e-001
-0.75099 +0.66032 -9.06705e-002 -1.41130e+000
+0.91295 +0.40808 +1.32103e+000 +5.04863e-001
================================================
7.3 สรปุ
่ เชน่ คําสัง่ input, file, read, write,
ในบทนี้ ได้อธิบายถึงรู ปแบบการใช้งานคําสั่งตางๆ
printf, และ scanf เป็ นต้น เพื่อใช้ในการติดตอระบบอิ ่ นพุตและเอาต์พุตซึ่ งเป็ นระบบที่
ี่ องกบการอาน
เกยวข้ ั ่ และเขียนข้อมูลระหวางโปรแกรม
่ ั ่ องคอมพิวเตอร์ กลาวคื
SCILAB กบเครื ่ อ
่ อมูลจากไฟล์มาเกบไว้
ผูใ้ ช้สามารถที่จะอานข้ ็ ในตัวแปรที่ใช้ภายในโปรแกรม SCILAB หรื อเขียน
ข้อมูลคา่ของตัวแปรจากโปรแกรม SCILAB เข้าไปเกบไว้ ็ ในไฟล์กได้็ ดังนั้ นเมื่อเข้าใจถึงลักษณะ
่ ที่ใช้ในการติดตอ่ระบบอินพุตและเอาต์พุตของโปรแกรม SCILAB แล้ว ก็
การใช้งานคําสัง่ ตางๆ
จะทําให้สามารถออกแบบและพัฒนาฟังกชั์ นใหมๆ่ ให้มีความสามารถในการโต้ตอบกนัระหวางตั ่ ว
โปรแกรม SCILAB กบผู ั พ้ ฒั นาโปรแกรมได้
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
่ อมูลจากไฟล์น้ ีมาเกบไว้
7.3.1) จงเขียนโปรแกรมเพื่ออานข้ ็ ตวั แปร x โดยใช้คาํ สัง่ read
แล้วสั่งให้แสดงผลลัพธ์คา่ของตัวแปร x ออกทางหน้าตางคํ
่ าสั่ง
ั อ 7.3.1 แตให้
7.3.2) ทําเหมือนกบข้ ่ อานข้
่ อมูลจากไฟล์โดยใช้คาํ สั่ง fscanf
7.3.3) เปรี ยบเทียบผลลัพธ์ที่ได้จากข้อ 7.3.1 และ 7.3.2
236
ํ
7.4 กาหนดให้
ตวั แปร t = -5:0.2:5
7.4.1) จงเขียนโปรแกรมเพื่อคํานวณหาคา่ y = sin(t)/t โดยให้แสดงผลลัพธ์ของคา่ y
่ าสั่ง พร้อมทั้ งเขียนข้อมูลคา่ของตัวแปร y เข้าไปเกบไว้
ออกทางหน้าตางคํ ็ ในไฟล์ชื่อ
test2.txt โดยใช้คาํ สัง่ write
ั อ 7.4.1 แตให้
7.4.2) ทําเหมือนกบข้ ่ เขียนข้อมูลเข้าไปเกบในไฟล์
็ ชื่อ test3.txt โดยใช้
คําสัง่ fprintf
7.4.3) เปรี ยบเทียบผลลัพธ์ที่ได้จากข้อ 7.4.1 และ 7.4.2
่
7.5 จงเปรี ยบเทียบข้อแตกตางของคํ
าสั่ง scanf, fscanf, และ read
่
7.6 จงเปรี ยบเทียบข้อแตกตางของคํ
าสัง่ printf, fprintf, และ write
บทที่ 8
การตรวจสอบหาข้ อผิดพลาดของโปรแกรม
-->getf('MyRoot.sci');
-->a = 1; b = -3; c = 2;
่ ่ เห็ นได้ชัดระหวางคํ
ข้อแตกตางที ่ าสั่ง setbpt และ pause คือคําสั่ง setbpt จะไมไป ่
เปลี่ยนแปลงตัวโปรแกรมที่พฒั นาขึ้ นมา ในขณะที่คาํ สั่ง pause จะไปเปลี่ยนแปลงตัวโปรแกรม
เนื่องจากคําสัง่ pause จะต้องถูกใสเข้ ่
่ าไปในตัวโปรแกรมนั้ นกอนจะทําการประมวลผล
ํ
คําสั่ง setbpt เป็ นคําสั่งที่ใช้ในการกาหนดตํ ่
าแหนงของ ่
จุดพัก26 (breakpoint) วาจะให้ อยู่ที่
่
บรรทัดใดในตัวโปรแกรมเพื่อที่วาเวลาประมวลผลโปรแกรมนั ้ นแล้ว ตัวโปรแกรมจะมาหยุดแบบ
่
ชัว่ คราว ณ บรรทัดที่มีจุดพัก เพื่อให้ผใู้ ช้สามารถเปลี่ยนแปลงคาพารามิ เตอร์ หรื อตรวจสอบความ
่
ถูกต้องของตัวโปรแกรมตั้ งแตบรรทั ดแรก (หรื อบรรทัดที่มีจุดพักกอนหน้ ่ านี้ ) จนถึงบรรทัดก่อนที่
่
จะมีจุดพักนั้ นได้ ให้พิจารณาชุดคําสัง่ตอไปนี ้ จะได้เข้าใจถึงหลักการใช้งานคําสั่ง setbpt
-->clear;
-->getf('MyRoot.sci');
-->a = 1; b = -3; c = 2;
26
คําสัง่ ในบรรทัดที่มีจุดพัก จะยังไมถู่ กนําไปประมวลผล
240
-1->[x1 x2]
[x1 x2]
--error 4
undefined variable : x1 //ตัวแปร x1 อยูใ่ นคําสัง่บรรทัดที่หา้ ซึ่ งยังไมได้
่ ถูกนําไปประมวลผล
27
ในหนึ่ งโปรแกรมสามารถมีระดับของการขัดจังหวะ (level of interruption) ได้หลายระดับ ถ้าภายในตัว
่ ่ งจุด นอกจากนี้ผใู้ ช้ยงั สามารถเรี ยกดูค่าของพารามิเตอร์ต่างๆ ที่อยู่
โปรแกรมนั้ นมีจุดพัก (breakpoint) มากกวาหนึ
่ ท้ งั หมด
ในระดับของการขัดจังหวะที่ระดับตํ่ากวาได้
หมายเหตุ ขณะที่อยูท่ ี่ระดับของการขัดจังหวะ ณ ระดับหนึ่ง การทํางานโดยใช้คาํ สัง่ ตางๆ
่ ที่ระดับของการขัดจังหวะนี้
จะไมมี่ ผลกระทบตอคาของตั
่ ่ วแปรใดๆ ที่อยูใ่ นระดับของการขัดจังหวะที่ระดับตํ่ากวา่
28
ในกรณี ที่โปรแกรมมีระดับของการขัดจังหวะหลายๆ ระดับ คําสัง่ resume จะทําหน้าที่ในการลดระดับของ
่ ั
การขัดจังหวะได้เชนกน
241
-1->resume
x2 = //นัน
่ คือ x2 = num2/den
1.
x1 = //นัน
่ คือ x1 = num1/den
2.
่
ผลลัพธ์ที่ได้คือคาของตั
วแปร x1 และ x2 เป็ นคําตอบของสมการ x2 -3x +2 = 0 ตามที่ตอ้ งการ
นอกจากนี้ในขณะที่อยู่ ณ ระดับของการขัดจังหวะใดๆ ผูใ้ ช้ยงั สามารถที่จะเปลี่ยนแปลง
่ ตัวแปรตางๆ
คาของ ่ ได้ โดยที่หลังจากกาหนดคาใหมให้
ํ ่ ่ กบตัั วแปรแล้ว ถ้าใช้คาํ สัง่ resume ใน
็ าให้ได้ผลลัพธ์เหมือนเดิม ดังแสดงในตัวอยาง
ลักษณะเดิมกจะทํ ่ ตอไปนี
่ ้
-->setbpt('MyRoot', 5)
-1->num1 = 3; num2 = 1;
ั ั
คําสัง่ pause มีผลลัพธ์แบบเดียวกนกบการใช้ คําสัง่ setbpt เพียงแต่จะต้องนําคําสัง่ pause
ไปใสไว้ ่ ในตัวโปรแกรมก่อนบรรทัดที่มีการกาหนด
ํ ่ ่ ถ้า
จุดพักด้วยคําสัง่ setbpt ยกตัวอยางเชน
ใช้คาํ สัง่
-->setbpt('MyRoot', 5)
่ ยวกนกบการนํ
จะมีผลลัพธ์เชนเดี ั ั ่ าสัง่ ใน
่ ในตัวโปรแกรม MyRoot กอนคํ
าคําสัง่ pause ไปใสไว้
บรรทัดที่หา้ ในรู ปที่ 8.1
-->setbpt('MyRoot', 5)
-->dispbpt
breakpoints of function :MyRoot
5
243
-->delbpt('MyRoot', 5)
-->dispbpt
-->
-->exec('MyRoot2.sci');
-->a = 1; b = -3; c = 2;
244
-->[x1, x2] = MyRoot2(a, b, c)
-1->
่
จะพบวาโปรแกรม MyRoot2 ถูกขัดจังหวะการประมวลผลแต่ไมรู่ ้วา่ ถูกขัดจังหวะ ณ บรรทัดใด
ในกรณี น้ ีถา้ ต้องการทราบวา่โปรแกรม MyRoot2 ถูกขัดจังหวะที่บรรทัดใดก็สามารถทําได้โดยใช้
คําสัง่ whereami ดังแสดงตอไปนี่ ้
-1->whereami
whereami called under pause
pause called at line 6 of macro MyRoot2
-1->[x1 x2]
[x1 x2]
!--error 4
undefined variable : x1
่
ผลลัพธ์ที่ได้แสดงให้ทราบวาโปรแกรม MyRoot2 ถูกขัดจังหวะโดยคําสัง่ pause เมื่อประมวลผล
มาจนถึงบรรทัดที่หก (คําสัง่ บรรทัดที่หกยังไมถู่ กนําไปประมวลผล) ดังนั้ นจึงสามารถเรี ยกดูค่าของ
่ ่
ตัวแปร num1, num2, และ den ได้ แตไมสามารถเรี ยกดูค่าของตัวแปร x1 และ x2
่ าสัง่ พื้นฐานสําหรับจัดการข้อผิดพลาด
ตารางที่ 8.1 ตัวอยางคํ
ฟังก์ ชัน คําอธิบาย
error แสดงข้อความออกทางหน้าตางคํ ่ าสัง่ แล้วหยุดการประมวลผลโปรแกรม
่ างาน เมื่อเกดิ ประเภทของข้อผิดพลาด
สัง่ ให้การกระทํา (action) บางอยางทํ
errcatch
ํ
(error type) ตามที่กาหนดในระหวาง ่ ที่กาลั
ํ งทําการประมวลผลโปรแกรม
iserror ตรวจสอบวามี ่ ขอ้ ผิดพลาดตามที่กาหนดเกดขึ
ํ ิ ้ นภายในโปรแกรมหรื อไม่
errclear ํ
ยกเลิกการกระทําที่เป็ นผลมาจากประเภทของข้อผิดพลาดที่กาหนดไว้
8.2 สรปุ
่
ในบทนี้ ได้อธิ บายถึงขั้ นตอนการตรวจสอบหาข้อผิดพลาดและรู ปแบบการเรี ยกใช้งานคําสั่งตางๆ
ได้แก่ คําสั่ง pause, setbpt, และ resume เป็ นต้น เพื่อใช้เป็ นแนวทางในการตรวจสอบ
หาข้อผิดพลาดภายในตัวโปรแกรม ซึ่ งจะชวย ่ ทําให้ผพู้ ฒั นาโปรแกรมสามารถค้นหาข้อผิดพลาดที่
ิ ้ นภายในตัวโปรแกรมได้โดยงาย
เกดขึ ่ เพื่อจะได้ดาํ เนินการแกไข้ ข้อผิดพลาดเหลานั
่ ้ นตอไป
่
่
ในบทนี้ จะแสดงตัวอยางการใช้ โปรแกรม SCILAB ในการแกไขปั ้ ญหาทางคณิ ตศาสตร์ลกั ษณะตาง
่ ๆ
เชน่ การใช้งานเวกเตอร์และเมทริ กซ์ตรรกะ, การดําเนินการเชิงสัญลักษณ์, การหาตัวคูณรวมน้ ่ อย
่
และตัวหารรวมมาก , การแยกตัวประกอบของพหุนาม, การลดรู ปพหุ นาม, การหาปริ พนั ธ์จาํ กดเขต ั ,
้
และการแกสมการอนุ พนั ธ์อนั ดับหนึ่ง เป็ นต้น เพื่อให้ผอู้ ่านทราบถึงความสามารถของโปรแกรม
SCILAB ในการที่ จะนํามาประยุกต์ใช้ในการเรี ยนการสอน (ทั้ งในระดับมัธยมศึกษาและระดับ
อุดมศึกษา) และการทํางานวิจยั โดยเฉพาะงานทางด้านวิศวกรรมและวิทยาศาสตร์
-->2*x
ans =
0. 2. 0. 2. 0. 2.
-->2*[0 1 0 1 0 1]
ans =
0. 2. 0. 2. 0. 2.
ั
เมื่อเข้าใจถึงหลักการพื้นฐานในการดําเนิ นการทางคณิ ตศาสตร์ กบเวกเตอร์ และเมทริ กซ์
ตรรกะของโปรแกรม SCILAB แล้ว ก็จะชวยทํ ่ าให้สามารถนําเวกเตอร์ และเมทริ กซ์ตรรกะมา
ประยุกต์ใช้งานในลักษณะตางๆ ่ ได้อยางถู
่ กต้อง ตัวอยาง
่ เชน่
-->v .* [1 2 3 4 5 6]
ans =
0. 2. 0. 4. 0. 6.
-->A + B
ans =
2. 2.
3. 5.
-->A .* B
ans =
1. 0.
0. 4.
-->x = -3*%pi/2:%pi/100:3*%pi/2;
-->y = tan(x);
-->plot(x, y)
ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.1 ซึ่ งจะพบว่ารู ปกราฟที่ได้จะมีสไปค์ (spike) เกดิขึ้ นมา ณ ตําแหนงที
่ ่
คา่ x = ±π และ x = ±3π/2 เนื่องจากตัวแปร y มีคาสู ่ งมาก (คาเข้
่ าใกล้ค่าอนันต์) ทําให้รูปกราฟที่
่
ได้ไมสามารถแสดงรายละเอี ยดได้ครบถ้วน วิธีการแกไขปั้ ญหานี้ สามารถทําได้โดยใช้คุณสมบัติของ
เวกเตอร์ตรรกะโดยการปรับคาของ ่ ตัวแปร y ดังนี้
-->x = -3*%pi/2:%pi/100:3*%pi/2;
-->y = tan(x);
251
-->plot(x, y)
่
คําสั่งบรรทัดที่สามเป็ นการปรับคาของตั ่ มบูรณ์ของตัวแปร y มีคาน้
วแปร y โดยที่ถา้ คาสั ่ อยกวา่ คา่
็ บให้ตวั แปร y มีคาเทากบคาศู
10 กจะปรั
10
่ ่ ั ่ นย์ ผลลัพธ์ที่ได้จากการใช้ชุดคําสั่งนี้ แสดงในรู ปที่ 9.2
ซึ่ งจะแสดงรายละเอียดของกราฟได้ครบถ้วนตามที่ตอ้ งการ
-->x = [-15:0.1:15];
-->y = sin(x)./x;
--error 27
division by zero...
-->clf; x = [-15:0.1:15];
-->y = sin(x);
-->plot(x, y)
-->clf; x = [-15:0.1:15];
-->y = sin(x);
-->plot(x, y)
-->clf; x = [-15:0.01:15];
-->y = sin(x);
255
-->x = [-15:0.01:15];
-->y = sin(x);
-->plot(x, y)
่ หนึ่งคือ
ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.6 หรื ออีกตัวอยาง
-->clf; x = [-15:0.01:15];
-->y = sin(x);
-->plot(x,y)
z = cmb_lin(a, x, b, y)
ผลลัพธ์ที่ได้คือ ่ เชน่
z = a*x – b*y เมื่อพารามิเตอร์ z, a, x, b, และ y เป็ นสายอักขระ ตัวอยาง
- 195. //ผลลัพธ์ที่ได้คือ ( )
2 × 3 × 32 −1 − ( 2×3+3) × 3 = 6 × 8 − 9 × 27 = 48 − 243 = −195
3
-->eval(y)
ans =
3 4
- 2x - x - 2x //ตัวแปร y ถูกเปลี่ยนเป็ นสมการพหุนาม
-->evstr(y) ่ ั
//มีผลลัพธ์เทากบการใช้
คาํ สัง่ eval
ans =
3 4
- 2x - x - 2x
-->x = 4;
-->evstr(y) ่ ั
//มีผลลัพธ์เทากบการใช้
คาํ สัง่ eval
ans =
- 584.
259
-->B = trianfml(A)
B =
!a21 a22 !
! !
!0 a21*a12-a11*a22 !
-->evstr(A)
ans =
1. 2.
3. 4.
-->evstr(B)
ans =
3. 4.
0. 2.
-->x = solve(A, b)
x =
!a11\(b1-a12*(a22\b2)) !
! !
!a22\b2 !
-->evstr(x)
ans =
- 0.5
2.5
จากตัวอยาง ่ ที่แสดงข้างต้นพบวาโปรแกรม
่ ั อมูลเชิ งสัญลักษณ์ได้
SCILAB สามารถทํางานกบข้
่ ประสิ ทธิภาพ ซึ่ งจะชวยทํ
อยางมี ่ าให้นกั พัฒนาโปรแกรมสามารถที่จะพัฒนาโปรแกรมแบบใหมๆ่
่ ประสิ ทธิภาพ
ขึ้ นมาใช้งานได้อยางมี
9.3 ตัวคณร่
ู วมน้ อยและตัวหารร่ วมมาก
่ ้ จะแสดงการใช้งานคําสั่งของโปรแกรม SCILAB สําหรับการหาคา่ตัวคูณรวมน้
ในสวนนี ่ อย (least
่ มาก (great common divisor) ซึ่ งจะเป็ นประโยชน์มากในการ
common multiple) และตัวหารรวม
้ ญหาทางคณิ ตศาสตร์
แกไขปั
261
9.3.1 ตัวคณร่
ู วมน้ อย
่ อย (ค.ร.น.) คือเลขจํานวนเต็มบวกที่มีคาน้
ตัวคูณรวมน้ ่ อยที่สุด ซึ่ งเมื่อนําเลขจํานวนเต็มบวกอื่นๆ
ํ
ที่กาหนดให้ ่ อยนี้ แล้วจะได้ผลลัพธ์ลงตัวพอดี (หรื อสามารถหารลงตัว
ทุกจํานวนมาหารตัวคูณรวมน้
่ อยในโปรแกรม SCILAB สามารถทําได้โดยใช้คาํ สัง่ lcm ซึ่ งมี
ได้ทุกจํานวน) การหาตัวคูณรวมน้
รู ปแบบการใช้งานคือ
pp = lcm(p)
p =
12 15 30
-->pp = lcm(p)
pp =
60 ่ จุดทศนิยมตามหลังตัวเลขแสดงวาเป็
//ไมมี ่ นเลขจํานวนเต็ม
่ อยของพหุนามได้ ดังแสดงในตัวอยาง
นอกจากนี้ คาํ สั่ง lcm ยังสามารถใช้หาตัวคูณรวมน้ ่
่
ตอไปนี
้
่ อยของพหุ นาม
ตัวอย่ างที่ 2 จงหาตัวคูณรวมน้ x , x + x , และ x − x
2 2
วิธีทาํ ่ อยของ x ,
เนื่องจาก x 2 + x = x ( x+1) และ x 2 − x = x ( x −1) เพราะฉะนั้ นตัวคูณรวมน้
x + x , และ x − x มีคาเทากบ
2 2
่ ่ ั x ( x+1) ( x −1) = x 3 − x ซึ่ งผูใ้ ช้สามารถตรวจคําตอบได้จากการ
ใช้ชุดคําสัง่ดังนี้
-->x = poly(0,'x'); ํ
//กาหนดให้ x เป็ นตัวแปรพหุ นาม
-->pp = lcm(p)
pp =
3
- x + x
่ ั
ซึ่ งให้ผลลัพธ์เทากน
่ มากของ
เมื่อ q คือเวกเตอร์ของเลขจํานวนเต็มบวกหรื อเวกเตอร์ของพหุ นาม และ qq คือตัวหารรวม
สมาชิกทั้ งหมดที่อยูใ่ นเวกเตอร์ q
่ มากของ 18 และ 84
ตัวอย่ างที่ 3 จงหาตัวหารรวม
่ มากของ 18 และ 84
วิธีทาํ เนื่องจาก 18 = 2 × 3 × 3 และ 84 = 2 × 2 × 3 × 7 ดังนั้ นตัวหารรวม
่
คือ 2 × 3 = 6 ผูใ้ ช้สามารถตรวจคําตอบได้จากการใช้ชุดคําสั่งตอไปนี ้
q =
18 84
-->qq = gcd(q)
qq =
6 ่ จุดทศนิยมตามหลังตัวเลขแสดงวาเป็
//ไมมี ่ นเลขจํานวนเต็ม
-->qq = gcd(q)
qq =
่ อยและตัวหารรวม
ตัวอย่ างที่ 4 จงหาตัวคูณรวมน้ ่ มากของพหุ นาม x 2 − 5x − 14 และ x 2 − 12x + 35
วิธีทาํ เนื่องจาก x 2 − 5x − 14 = ( x −7 ) ( x + 2) และ x 2 − 12x + 35 = ( x −7 ) ( x −5) ดังนั้ นจะ
ได้วา่ตัวคูณรวมน้
่ อยมีค่าเทากบ ่ มาก
่ ั ( x −7 ) ( x +2) ( x −5) = x 3 − 10x 2 + 11x + 70 และตัวหารรวม
่ ่ ั ( x −7 ) ซึ่ งผูใ้ ช้สามารถตรวจคําตอบได้จากการใช้ชุดคําสั่งตอไปนี
มีคาเทากบ ่ ้
-->lcm(p)
ans =
2 3
70 + 11x - 10x + x
-->gcd(p)
ans =
- 7 + x
9.4 พหนาม
ุ
่ ้ จะยกตัวอยางการใช้
ในสวนนี ่ ่ ของโปรแกรม SCILAB สําหรับการจัดการกบพหุ
งานคําสั่งตางๆ ั นาม
เชน่ การแยกตัวประกอบของพหุนามให้อยูใ่ นรู ปการคูณของพหุนามที่มีดีกรี 29 ตํ่ากวา่ และการลดรู
พหุนาม เป็ นต้น
29
่ กรี ของพหุนาม (degree of polynomial) ได้จากคําสัง่ degree
โปรแกรม SCILAB สามารถคํานวณหาคาดี
265
9.4.1 การแยกตัวประกอบของพหนาม
ุ
การแยกตัวประกอบของพหุนาม (polynomial factorization) คือ การเขียนพหุ นามให้อยูใ่ นรู ปการ
คูณของพหุนามที่มีดีกรี ต่าํ กวา่ ตัวอยางเชน
่ ่ พหุ นาม x 2 − 3x + 2 สามารถที่จะแยกตัวประกอบได้
เป็ น ( x −1) ( x −2) นัน่ คือ x 2 − 3x + 2 = ( x −1) ( x −2 ) ในโปรแกรม SCILAB การแยกตัวประกอบ
ของพหุนามสามารถทําได้โดยใช้คาํ สัง่ factors ซึ่ งมีรูปแบบการใช้งานดังนี้
[F, g] = factors(y)
y = g × f1 × f2 × f3 × … × fN
่ ่
ตัวอยางเชน
//ผลลัพธ์ที่ได้คือ x − 3x + 2 = 1 × ( x −1) × ( x − 2 )
2
-->[F, g] = factors(y)
g =
1.
F =
F(1)
- 1 + x
F(2)
- 2 + x
-->F = polfact(y) ่ ั
//มีผลลัพธ์เทียบเทากบการใช้
คาํ สัง่ factors
266
F =
1 - 2 + x - 1 + x
P = polfact(y)
y = p0 × p1 × p2 × … × pN
่ ่
ตัวอยางเชน
-->[F, g] = factors(y)
g =
//ผลลัพธ์ที่ได้คือ 3x − 9x + 6 = 3 × ( x −1) × ( x − 2 )
2
3.
F =
F(1)
- 1 + x
F(2)
- 2 + x
-->P = polfact(y) ่ ั
//มีผลลัพธ์เทียบเทากบการใช้
คาํ สัง่ factors
P =
3 - 2 + x - 1 + x
⎛ n1 ×n2 ×…×nk ⎞
Q = g×⎜ ⎟
⎝ d1 ×d2 ×…×d m ⎠
่ ่
ตัวอยางเชน
-->x = poly(0, 'x');
-->[N, D, g] = factors(Q)
g =
3.
D = //ผลลัพธ์ที่ได้คือ
3x2-9x+6
= 3×
( x -1) × (x - 2)
2
x +3x+2 (x +1) × (x + 2)
D(1)
1 + x
D(2)
2 + x
N =
N(1)
- 1 + x
N(2)
- 2 + x
268
9.4.2 การลดรปูพหนุาม
่ อยูใ่ นรู ปแบบที่ง่าย (simple form)
โปรแกรม SCILAB ยังทําการลดรู ปของพหุนามที่เป็ นเศษสวนให้
โดยใช้คาํ สัง่ simp ซึ่ งมีรูปแบบการใช้งานคือ
่
เมื่อ Num และ Den คือตัวเศษและตัวสวนของพหุ นามที่ตอ้ งการจะลดรู ป ในขณะที่ n และ d คือ
่ เชน่
ตัวเศษและตัวส่ วนของพหุ นามที่ลดรู ปเสร็ จแล้ว ตัวอยาง
( ) ( )
2 2
9x3-21x2+16x-4 x -1 × 3x - 2 9x -12x +4
n = //ผลลัพธ์ที่ได้คือ = =
x-1 ( )
x -1 1
2
4 - 12x + 9x
่ ่ตอ้ งการจะหาตัวสวนรวม
เมื่อ N และ D คือเวกเตอร์พหุ นามของตัวเศษและตัวสวนที ่ ่ ในขณะที่ n
่ ที่มีตวั สวนรวมเหมื
และ d คือเวกเตอร์ พหุ นามของตัวเศษและตัวสวน ่ ่ ั กพจน์ ตัวอยางเชน
อนกนทุ ่ ่
พิจารณาผลบวกของพหุนาม
( x -1) + ( x +2)
( x -3) ( x +3)
่
ในโปรแกรม SCILAB สามารถหาผลเฉลยนี้ ได้โดยใช้ชุดคําสัง่ ตอไปนี
้
-->N = [x – 1, x + 2]
N =
- 1 + x 2 + x
-->D = [x – 3, x + 3]
D =
- 3 + x 3 + x
-->[n, d] = cmndred(N, D)
d =
2
- 9 + x
n =
2 2
- 3 + 2x + x - 6 - x + x
270
-->[n, d] = cmndred([x – 1, x + 2], [x - 3 x - 3])
d =
- 3 + x
n =
- 1 + x 2 + x
n =
2 2 2
- 2 + x + x - 6 - x + x - 6 - x + x
่ ่
เมื่อ r คือผลลัพธ์ที่ได้จากการหาร และ q คือเศษที่ได้จากการหาร ตัวอยางเชน
-->p2 = x - 1
p2 =
- 1 + x
่ ่
ตัวอยางเชน
-->x = poly(0, 'x');
2
x - 1 + x
-->[MI, d] = coffg(M)
d =
- 2x
MI =
2 2
- 1 + x - 1 - x
- x x
272
0 - 2
- -
1 - 2
C = coeff(M, [deg])
2 3 4
9 - 2x + 4x - 6x + 8x
2 2 3
3 - x x + 2x + 3x
-->C = coeff(M)
C =
1. - 5. 2. 0. 4. 3. 6. 0.
3. 0. 0. 1. - 1. 2. 0. 3.
ี่ องกบการจั
นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมคําสั่งอื่นๆ ที่เกยวข้ ั ดการพหุ นาม
่ ได้จากคําสัง่ help polynomial
ซึ่ งผูส้ นใจสามารถศึกษารายละเอียดเพิ่มเติมของคําสั่งตางๆ
เมื่อ y คือผลลัพธ์ที่ได้จากการหาปริ พนั ธ์, fx คือฟังกชั์ นที่ตอ้ งการหาปริ พนั ธ์, x คือตัวแปรของ
่ ่ มต้นและคาสุ
การหาปริ พนั ธ์, x0 และ x1 คือคาเริ ่ ดท้ายของตัวแปร x ที่ใช้หาปริ พนั ธ์
30
ั จะมีช่วงของการหาปริ พนั ธ์กาหนด
ปริ พนั ธ์จาํ กดเขต ํ มาไว้ให้
274
I = intg(a, b, f)
่ ่ มต้นและคาสุ
เมื่อ I คือผลลัพธ์ที่ได้จากการหาปริ พนั ธ์, a และ b คือคาเริ ่ ดท้ายของการหาปริ พนั ธ์,
และ f คือฟังกชั์ นแบบตัวแปรเดียวที่ตอ้ งการหาปริ พนั ธ์ พิจารณาตัวอยางตอไปนี
่ ่ ้ จะได้เข้าใจลักษณะ
การใช้งานของคําสัง่ integrate และ intg มากขึ้ น
y
f ( x) = 2x +1
7
1
( 3)(1 + 7 ) = 12
1 2
x
0 3
วิธีทาํ จากโจทย์จะได้วา่
3 3
∫ f ( x ) dx = ∫ ( 2 x + 1) dx
x =0 x =0
( ) ( )
3
= x2 + x = 3 + 3 − ( 0 − 0 ) = 12
2
x =0
-->I = intg(0, 3, f)
I =
12. ่ ั
//ให้ผลลัพธ์เทากบการใช้
คาํ สัง่ integrate
่ ั
ซึ่ งให้ผลลัพธ์เทากน
วิธีทาํ จากโจทย์จะได้วา่
3
3
⎛ x3 ⎞ ⎛ ( 3) ⎞⎟ − 0 − 0 = 12 − 9 = 3
3
∫0 ( 4 −2
x )dx = ⎜ 4 x − ⎟ = ⎜
3 ⎠ 0 ⎜⎝
4 ( 3 ) −
3 ⎟⎠
( )
⎝
-->I = intg(0, 3, f)
I =
3. ่ ั
//ให้ผลลัพธ์เทากบการใช้
คาํ สัง่ integrate
่ ั
ซึ่ งให้ผลลัพธ์เทากน
276
9
ตัวอย่ างที่ 7 จงหาคา่ของฟังกชั์ น ∫ cosh ⎛⎜ 1 x − 1⎞⎟ dx
⎝4
x =5 ⎠
วิธีทาํ ํ
ถ้ากาหนด ให้ u = 1 x − 1 จะได้วา่ du = 1 dx และ dx = 4du
4 4
ั
ลิมิตของปริ พนั ธ์จาํ กดเขตเป็ นลิมิตของ x โดยที่ u = 1 x − 1
4
เพราะฉะนั้ นจะต้องเปลี่ยนลิมิตเป็ นดังนี้
่
ลิมิตลาง ่
เปลี่ยนเป็ นลิมิตลาง 1 1
x=5 u= (5) − 1 =
4 4
-->I = intg(5, 9, f)
I =
5.3972271 ่ ั
//ให้ผลลัพธ์เทากบการใช้
คาํ สัง่ integrate
่ ั
ซึ่ งให้ผลลัพธ์เทากน
277
y = ode(y0, x0, x, f)
y ( x ) = x -3x +1 (1)
2
ydot =
dy
dx
= 2x -3 (2)
้
ถ้าต้องการแกสมการอนุ ็
พนั ธ์อนั ดับหนึ่งของสมการ (2) เพื่อให้ได้ผลลัพธ์เป็ นสมการ (1) กสามารถ
ทําได้โดยใช้ชุดคําสัง่ ดังนี้
-->y0 = 1; x0 = 0; x = 0:0.1:4;
-->plot(yx, z, 'r+'); //วาดรู ปกราฟของสมการ (1) เป็ นเครื่ องหมาย '+' สี แดง
-->xtitle('y(x) = x^2 - 3*x + 1', 'x', 'y');
278
dy
ตัวอย่ างที่ 8 จงหาคําตอบของสมการ +y = x (เงื่อนไขเริ่ มต้นคือ x = 0 และ y = 1)
dx
สําหรับ x = 0.2, 0.4, 0.6, 0.8, และ 1
วิธีทาํ ้
จากการแกสมการอนุ ํ
พนั ธ์ที่กาหนดให้
มานี้ จะได้ผลลัพธ์ คือ
-x
y = x + 2e −1
279
่ พธ์ที่ได้จากการแกสมการอนุ
จะเห็นได้วาผลลั ้ พนั ธ์ดว้ ยคําสั่ง ode มีค่าเทากบ
่ ั ผลลัพธ์จากการสมการ
ผลเฉลย y = x +2e-x − 1
่
ตัวอย่ างที่ 9 พิจารณาวงจรไฟฟ้ า RL ตอไปนี
้
ํ
เมื่อกาหนดให้ ่ ่
ค่าการเหนี่ ยวนําตนเอง L = 5 H, ความต้านทาน R = 10 โอห์ม, และแหลงจายไฟ
่ ่จะมีการเชื่อมตอสวิ
E = 15 โวลต์ โดยกอนที ่ ทซ์จะไมมี่ กระแสไฟฟ้ าไหลในวงจร จงคํานวณหา
่
คากระแสไฟฟ้ ่ ทซ์
า I(t) เมื่อเวลา t = 0.5, 1, 2, และ 4 วินาที หลังจากทําการเชื่อมตอสวิ
วิธีทาํ จากกฏของเคอร์ชอฟจะได้สมการแรงดันไฟฟ้ าดังนี้
dI
L + RI = E
dt
280
้
โดยที่ I = 0 เมื่อ t = 0 จากการแกสมการอนุ พนั ธ์น้ ีจะได้ผลลัพธ์ คือ
I=
E
R
(1-e -Rt/L
)
ดังนั้ นกระแสไฟฟ้ าเมื่อเวลา t = 0.5, 1, 2, และ 4 วินาที สามารถหาได้จากการใช้ชุดคําสัง่ ดังนี้
จะเห็นได้วา่ ผลลัพธ์ที่ได้จากการแกสมการอนุ
้ พนั ธ์ดว้ ยคําสั่ง ode มีค่าเทากบ
่ ั ผลลัพธ์จากการสมการ
ผลเฉลย I =
E
R
(1-e -Rt/L
)
9.6 สรปุ
่
บทนี้ ได้แสดงให้เห็นวาโปรแกรม SCILAB สามารถนํามาประยุกต์ใช้งานในการแกไขปั ้ ญหาทาง
คณิ ตศาสตร์ได้หลายอยาง ่ เชน่ การหาตัวคูณรวมน้
่ อยและตัวหารรวมมาก
่ , การแยกตัวประกอบของ
ั , และการแกสมการอนุ
พหุนาม, การลดรู ปพหุนาม, การหาปริ พนั ธ์จาํ กดเขต ้ พนั ธ์อนั ดับหนึ่ ง เป็ นต้น
เพื่อเป็ นแนวทางให้ผอู้ ่านได้เห็นถึงความสามารถของโปรแกรม SCILAB และสามารถนําไปประยุกต์
ใช้ในการเรี ยนการสอนและในงานวิจยั ได้อยางมี ่ ประสิ ทธิ ภาพ
281
่
นอกจากที่กลาวมาในบทนี ้ แล้ว โปรแกรม SCILAB ยังสามารถนําไปประยุกต์ใช้งานใน
ลักษณะอื่นๆ ได้อีก เชน่ การประมาณคาในชวง ่ ่ (interpolation) และการแทนกลุม่ ข้อมูลด้วยสมการ
เส้นที่เหมาะสม (data fitting), การวิเคราะห์ดา้ นการประมวลผลสัญญาณ (signal processing
analysis), การวิเคราะห์ดา้ นระบบควบคุม (control system analysis), และการวิเคราะห์ดา้ นการ
สื่ อสารดิจิทลั (digital communication analysis) เป็ นต้น ผูส้ นใจสามารถศึกษารายละเอียด
่
เพิม่ เติมของกลองเครื ั ่ ้ ได้จาก http://www.scilab.org
่ องมือ (toolbox) ที่ใช้กบงานเฉพาะทางเหลานี
่
โดยผูเ้ ขียนหวังวาจะได้ ี่ ั การประยุกต์ใช้งานเหลานี
มีโอกาสเขียนหนังสื อเกยวกบ ่ ้ ในอนาคต
9.4.2) 4x2 – 4x + 1
่ ่
9.5 จงคํานวณหาคาตอไปนี
้
9.5.1) 2y3 + 5y2 + y – 2 หารด้วย y+1
9.5.2) y2 – 5y + 10 หารด้วย y2 – 4
9.5.3) y3 – 27 หารด้วย y2 – 9
9.6.2) y=x
2
สําหรับ –3 ≤ x ≤ 3
ั
9.7 จงหาปริ พนั ธ์จาํ กดเขตดั ่
งตอไปนี
้
2
9.7.1) ∫ (2 x + 5)dx
1
3
9.7.2) ∫ (4 + x )dx
3
0
1
9.7.3) ∫(x )
2
+ x dx
0
π
9.7.4) ∫ sin ( x ) dx
0
π 2
9.7.5) ∫ (8 y 2 + sin y )dy
− π 2
1
9.7.6) ∫ ( x + 1) dx
2
−1
π /2
9.7.7) ∫ 0
cos ( x ) sin ( x ) dx
dy
ํ
9.8 กาหนดให้
สมการอนุพนั ธ์ = y 2 − y sin ( t ) + cos ( t ) จงหาคา่ y(t) ที่เวลา t = π/4, π/2,
dt
ํ
และ π เมื่อกาหนดเงื ่อนไขเริ่ มต้น y(0) = 0
ภาคผนวก ก
่
ตัวอยางการทํ
า symbolic triangularization
ในสวนนี่ ้ จะยกตัวอยางการคํ
่ านวณเชิงสัญลักษณ์สําหรับการทําสามเหลี่ยมบนของเมทริ กซ์สายอักขระ
ั ่ “symbolic triangularization” ตามที่ได้ยกตัวอยางไว้
หรื อที่เรี ยกกนวา ่ ในหัวข้อที่ 2.3 กลาว ่ คือ
ํ
ถ้ากาหนดใ ่ ่ ั
ห้เมทริ กซ์ X มีคาเทากบ
⎡a b ⎤
X=
⎢⎣ c d ⎥⎦ (ก1)
่ ่ใดๆ และเมื่อทํา
โดยที่ a, b, c, และ d คือตัวแปรคาคงที symbolic triangularization ของ
เมทริ กซ์ X โดยใช้คาํ สัง่ trianfml(X) จะได้ผลลัพธ์เป็ น
⎡c d ⎤
Y=
⎢⎣0 cb − ad ⎥⎦ (ก2)
่
ขั้ นตอนตอไปจะอธิ บายการทํา symbolic triangularization เพื่อเปลี่ยนเมทริ กซ์ X ให้
เป็ นเมทริ กซ์ Y โดยใช้เทคนิคการดําเนินการตามแถวขั้ นมูลฐาน (elementary row operation)
ดังนี้ จากสมการ (ก1) สามารถที่จะสมมติได้วา่ เมทริ กซ์ X ประกอบไปด้วย 2 สมการ คือ
ํ
โดยที่ตวั แปร Z1 และ Z2 เป็ นตัวแปรชัว่ คราวที่ถูกกาหนดขึ
้ นเพื่อใช้ในการสร้างสมการสองตัวแปร
จากคุณสมบัติการดําเนินการตามแถวขั้ นมูลฐาน สมการ (ก4) สามารถที่จะแทนได้ดว้ ยสมการที่เป็ น
่ ่ c คูณกบัสมการ (ก4) แล้วลบด้วยผลลัพธ์ที่ได้จากการนําตัวแปร
ผลลัพธ์จากการนําตัวแปรคาคงที
่ ่ a คูณกบัสมการ (ก3) นัน่ คือ
คาคงที
c (ก4) – a (ก3) = 0
c ( aZ1 + bZ 2 ) − a ( cZ1 + dZ 2 ) = 0
่ มประสิ ทธิ์ ของสมการ (ก3) และ (ก5) มาจัดรู ปให้อยูใ่ นรู ปของเมทริ กซ์
เพราะฉะนั้ นเมื่อนําคาสั
็ ดงั นี้
กจะได้
⎡c d ⎤ ⎡ Z1 ⎤ ⎡0 ⎤
⎢⎣0 cb − ad ⎥⎦ ⎢⎣ Z 2 ⎥⎦ = ⎢⎣0⎥⎦
Y
ั
ซึ่ งกคื็ อเมทริ กซ์ Y ที่สอดคล้องกบสมการ (ก2) ตามที่ตอ้ งการ
ภาคผนวก ข
รหัสข้อผิดพลาด
เลขรหัส คําอธิบาย
1 incorrect assignment
2 invalid factor
3 waiting for right parenthesis
4 undefined variable : %s
5 inconsistent column/row dimensions
6 inconsistent row/column dimensions
7 dot cannot be used as modifier for this operator
8 inconsistent addition
9 inconsistent subtraction
10 inconsistent multiplication
11 inconsistent right division
12 inconsistent left division
13 redefining permanent variable
14 eye variable undefined in this context
15 submatrix incorrectly defined
16 incorrect command!
17 stack size exceeded! (Use stacksize function to increase it)
18 too many variables!
19 Problem is singular
20 %dth argument must be square matrix
21 invalid index
22 recursion problems. Sorry....
23 Matrix norms available are 1, 2, inf, and fro
24 convergence problem...
25 bad call to primitive :%s
286
เลขรหัส คําอธิบาย
26 too complex recursion! (recursion tables are full)
27 division by zero...
28 empty function...
29 matrix is not positive definite
30 invalid exponent
31 incorrect string
32 singularity of log or tan function
33 too many "":""
34 incorrect control intruction syntax
35 Syntax error in an if,a while or a select instruction
36 %dth argument is incorrect here
37 incorrect function at line %d
38 file name incorrect
39 incorrect number of arguments
40 waiting for end of command
41 incompatible LHS
42 incompatible RHS
43 not implemented in scilab....
44 %dth argument is incorrect
45 null matrix (argument # %d)
46 incorrect syntax
47 end or else is missing...
48 input line longer than buffer size %d
49 incorrect file or format
50 subroutine not found : %s
52 %dth argument must be a real matrix
53 %dth input is invalid (waiting for real or complex matrix)
54 %dth argument type must be polynomial
55 %dth argument type must be character string
56 %dth argument must be a list
57 problem with comparison symbol...
58 incorrect number of arguments in function call...
59 incorrect # of outputs in the function
60 argument with incompatible dimensions
61 direct acces file : give format
62 end of file at line %d
63 %d graphic terminal?
64 integration fails
65 %d: logical unit already used
66 no more logical units available!
67 unknown file format
69 floating point exception
70 too many arguments in fort (max 30)
71 this variable is not valid in fort
287
เลขรหัส คําอธิบาย
72 %s is not valid in this context
73 error while linking
74 Leading coefficient is zero
75 Too high degree (max 100)
76 for x = val with type(val) = %d is not implemented in Scilab
77 %s : wrong number of rhs arguments
78 %s : wrong number of lhs arguments
80 incorrect function (argument n:%s)
81 Argument %d of %s: wrong type argument, expecting a real or complex matrix
82 Argument %d of %s: wrong type argument, expecting a real matrix
83 Argument %d of %s: wrong type argument, expecting a real vector
84 Argument %d of %s: wrong type argument, expecting a scalar
85 host does not answer...
86 uncontrollable system
87 unobservable system
88 sfact : singular or assymetric problem
89 %dth argument has incorrect dimensions
90 %dth argument must be a transfer matrix
91 %dth argument must be in state space form
92 %dth argument must be a rational matrix
93 %dth argument must be in continuous time
94 %dth argument must be in discrete time
95 %dth argument must be SISO
96 time domain of %dth argument is not defined
97 %dth argument must be a system in state space or transfer matrix form
98 variable returned by scilab argument function is incorrect
99 elements of %dth argument must be in increasing order!
100 the elements of %dth argument are not in (strictly) decreasing order
101 last element of %dth argument is not equal to the first
102 variable or function %s is not in file %s
103 variable %s is not a valid rational function
104 variable %s is not a valid state space representation
105 undefined fonction
106 function name already used
107 too many functions are defined (maximum #:%d)
108 too complex for scilab, may be a too long control instruction
109 too large, can't be displayed
110 %s was a function when compiled but is now a primitive!
111 trying to re-define function %s
112 Cannot allocate more memory
113 too large string
114 too many linked entry points
115 Stack problem detected within a loop
116 %dth argument has incorrect value
288
เลขรหัส คําอธิบาย
117 list element number %d is Undefined
118 %dth argument must be a named variable not an expression
119 indices for non-zero elements must be given by a 2 column matrix
121 incompatible indices for non-zero elements
122 logical unit number should be larger than %d
123 fonction not bounded from below
124 problem may be unbounded :too high distance between two consecutive iterations
126 Inconsistent constraints
127 no feasible solution
128 degenerate starting point
129 no feasible point has been found
130 optimization fails: back to initial point
131 optim: stop requested by simulator (ind=0)
132 optim: incorrect input parameters
133 too small memory
134 optim: problem with initial constants in simul
135 optim : bounds and initial guess are incompatible
136 optim : this method is NOT implemented
137 NO hot restart available in this method
138 optim : incorrect stopping parameters
139 optim : incorrect bounds
141 incorrect function (argument n:%d)
142 hot restart : dimension of working table (argument n:%d)
143 optim : df0 must be positive !
144 Undefined operation for the given operands check or define function %s for overloading
201 Argument %d of %s: wrong type argument, expecting a real or complex matrix
202 Argument %d of %s: wrong type argument, expecting a real matrix
203 Argument %d of %s : wrong type argument, expecting a real vector
204 Argument %d, wrong type argument: expecting a scalar
205 Argument %d of %s: wrong matrix size (%d) expected
206 Argument %d of %s: wrong vector size (%d) expected
207 Argument %d of %s: wrong type argument, expecting a matrix of strings
208 Argument %d of %s: wrong type argument, expecting a booleen matrix
209 Argument %d of %s: wrong type argument, expecting a matrix
210 Argument %d of %s: wrong type argument, expecting a list
Argument %d of %s: wrong type argument, expecting a function or string (external
211 function)
212 Argument %d of %s: wrong type argument, expecting a polynomial matrix
213 Argument %d of %s: wrong type argument, expecting a working integer matrix
214 Argument %d of %s: wrong type argument, expecting a vector
215 %dth argument type must be boolean
216 %dth argument type must be boolean or scalar
217 %dth argument must be a sparse matrix of scalars
218 %dth argument must be a handle to sparse lu factors
289
เลขรหัส คําอธิบาย
219 %dth argument must be a sparse or full scalar matrix
220 null variable cannot be used here
221 A sparse matrix entry is defined with two differents values
222 lusolve not yet implemented for full RHS
223 It is not possible to redefine the %s primitive this way (see clearfun).
224 Type data base is full
225 This data type is already defined
226 Inequality comparison with empty matrix
227 Missing index
228 reference to the cleared global variable %s
230 semidef fails
231 First argument must be a single string
232 Entry name not found
233 Maximum number of dynamic interfaces reached
234 link: expecting more than one argument
235 link: problem with one of the entry point
236 link: the shared archive was not loaded
237 link: Only one entry point allowed On this operating system
238 link: First argument cannot be a number
239 You cannot link more functions, maxentry reached
240 File %s already exists or directory write access denied
241 File %s does not exist or read access denied
242 binary direct acces files must be opened by ""file""
243 C file logical unit not allowed here
244 Fortran file logical unit not allowed here
245 No input file associated to logical unit %d
246 function not defined for given argument type(s)
248 %dth argument is not a valid variable name
249 %dth argument must not be an empty string
250 Recursive extraction is not valid in this context
251 bvode: ipar dimensioned at least 11
252 bvode: ltol must be of size ipar(4)
253 bvode: fixpnt must be of size ipar(11)
254 bvode: ncomp must be less than 20
255 bvode: m must be of size ncomp
256 bvode: sum(m) must be less than 40
257 bvode: sum(m) must be less than 40
258 bvode: input data error
259 bvode: no. of subintervals exceeds storage
260 bvode: Th colocation matrix is singular
261 Interface property table is full
262 too many global variables!,max number is %d
263 Error while writing in file,(disk full or deleted file)
264 %dth argument must not contain NaN or Inf
290
เลขรหัส คําอธิบาย
265 A and B must have equal number of rows
266 A and B must have equal number of columns
267 A and B must have equal dimensions
268 invalid return value for function passed in argument %d
269 %dth argument eigenvalues must have negative real parts
270 %dth argument eigenvalues modulus must be less than one
271 Size varying argument aeye(), (arg %d) not allowed here
272 endfunction is missing
273 Instruction left hand side: waiting for a dot or a left parenthesis
274 Instruction left hand side: waiting for a name
275 varargout keyword cannot be used here
276 Missing operator, comma, or semicolon
277 Too many commands defined
บรรณานกรม
ุ
[1] Stephen J. Chapman, MATLAB Programming for Engineers, 2nd Edition, Thomson-
Engineering, 2001.
[2] Gilberto E. Urroz, Elementary Mathematical Functions in SCILAB, September
2002.
[3] Gilberto E. Urroz, Programming with SCILAB, September 2002.
[4] Gilberto E. Urroz, Input/Output and File Handling Functions in SCILAB,
September 2001.
[5] Gilberto E. Urroz, SCILAB: A Free Software for Scientific Calculations Part V:
Breakpoints and Debugging in SCILAB, September 2002.
[6] Gilberto E. Urroz, Some Symbolic Operations in SCILAB, September 2002.
[7] Introduction to Scilab, Scilab Group, 1994
[8] Retrieved from http://www.scilab.org
[9] Retrieved from http://www.engineering.usu.edu/cee/faculty/gurro/Scilab.html
การศึกษา
ี ตินิยม) Thammasat University, Bangkok, Thailand
พ.ศ. 2537 ปริ ญญาตรี (เกยร
พ.ศ. 2541 ปริ ญญาโท Chalmers University of Technology, Göteborg, Sweden
พ.ศ. 2547 ปริ ญญาเอก Georgia Institute of Technology, Atlanta, GA, USA
ผลงานทางวิชาการ
วารสารตีพิมพ์นานาชาติ 18 ฉบับ
สิ ทธิบตั ร:
P. Kovintavewat, J. R. Barry, F. M. Erden, and E. M. Kurtas, “Method and
Apparatus for Providing Iterative Timing Recovery,” invention disclosure filed by
Seagate Technology, patent pending, September 2004.
294
หนังสื อ
o ปิ ยะ โควินท์ทวีวฒั น์, การประมวลผลสั ญญาณสําหรั บการจัดเก็บข้ อมูลดิจิทัล เล่ ม 1 :
่
พืน้ ฐานช่ องสั ญญาณอ่ าน-เขียน, ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แหงชาติ
(เนคเทค), พ.ศ. 2550.
o ปิ ยะ โควินท์ทวีวฒั น์, การประมวลผลสั ญญาณสําหรั บการจัดเก็บข้ อมูลดิจิทัล เล่ ม 2 :
่
การออกแบบวงจรภาครั บ, ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แหงชาติ (เนคเทค),
พ.ศ. 2550.
o ปิ ยะ โควินท์ทวีวฒั น์, คู่มือโปรแกรมภาษา SCILAB สําหรั บผู้เริ่ มต้ น (พิมพ์ครั้ งที่ 2), ศูนย์
ผลิตตําราเรี ยน, สถาบันเทคโนโลยีพระจอมเกล้าพระนครเหนือ, พ.ศ. 2549.
o B. Vasic and E. M. Kurtas, Coding and Signal Processing for Recording
Systems, Book Chapter: Interpolated timing recovery, CRC press, pp. 27-1 – 27-
16, 2005.
งานสํ าคัญ
ผูช้ ่วยอธิการบดีฝ่ายวิจยั
ประธานโปรแกรมวิศวกรรมโทรคมนาคม
บรรณาธิการ วารสารวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยราชภัฏนครปฐม
งานวิจัย
ระบบการประมวลผลสัญญาณสําหรับการจัดเกบข้ ็ อมูลดิจิทลั
้ อผิดพลาดของชองสั
เทคโนโลยีการเข้า-ถอดรหัสแกไขข้ ่ ญญาณ
เทคโนโลยีการตรวจหาแบบวนซํ้ า (iterative detection)
เทคโนโลยีสมาร์ตการด์ (smart card)
เทคโนโลยี RFID (radio frequency identification)