You are on page 1of 312

คู่มอื โปรแกรมภาษา SCILAB

สํ าหรับผ้ ูเริ่มต้ น
(ฉบับปรับปรุ งใหม่)

ผศ.ดร.ปิ ยะ โควินท์ทวีวฒั น์
โปรแกรมวิศวกรรมโทรคมนาคม
มหาวิทยาลัยราชภัฏนครปฐม
คู่มอื โปรแกรมภาษา 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

1.1 ประวัตคิ วามเป็ นมาของโปรแกรม SCILAB


SCILAB ่ อกนระหวาง
เป็ นโปรแกรมภาษาขั้ นสูงที่ถูกพัฒนาขึ้ นโดยความรวมมื ั ่ นักวิจยั จากสถาบัน
Institut National De Recherche En Informatique Et En Automatique (INRIA) และ École
nationale des ponts et chausses (ENPC) ประเทศฝรั่งเศส ตั้ งแตปี่ ค.ศ. 1990 โดยมีจุดมุ่งหมาย
เพื่อใช้ในการคํานวณเชิงตัวเลขและแสดงผลกราฟริ กที่ซบั ซ้อน ดังนั้ นโปรแกรม SCILAB จึงเหมาะ
สําหรั บการใช้งานทางด้านวิศวกรรมและวิทยาศาสตร์ นอกจากนี้ โปรแกรม SCILAB ยังเป็ น
โปรแกรมที่ให้ฟรี (ไมต้่ องเสี ยเงินคาลิ
่ ขสิ ทธิ์ ซอฟต์แวร์ ) และอนุ ญาตให้ผใู้ ช้สามารถนําไปพัฒนา
ตอ่ยอดได้ ผูส้ นใจสามารถที่จะดาวน์โหลดตัวโปรแกรม SCILAB และข้อมูลที่เกยวข้ ี่ องตางๆ่ ได้
จากเว็บไซต์ http://home.npru.ac.th/~t3058/Scilab.htm หรื อ http://www.scilab.org
สิ่ งที่สาํ คัญอีกประการหนึ่ งของโปรแกรม SCILAB กคื็ อความสามารถในการทํางานที่

ใกล้เคียงกบโปรแกรม MATLAB1 ซึ่ งเป็ นโปรแกรมที่นิยมมากสําหรับผูใ้ ช้งานทางด้านวิศวกรรม
และวิทยาศาสตร์ แตคาลิ ่ ่ ขสิ ทธิ์ ซอฟต์แวร์ของโปรแกรม MATLAB นั้ นมีราคาแพงมาก ดังนั้ นใน
ปั จจุบนั นี้ หลายๆ หนวยงานทั ่ ้ งภาคอุตสาหกรรมและภาคการศึกษาทั้ งในและนอกประเทศได้เริ่ มนํา
โปรแกรม SCILAB มาชวยในการทํ ่ ่
างานและชวยในการเรี ยนการสอน ทั้ งนี้ เนื่ องจากโปรแกรม
1
ดูรายละเอียดของโปรแกรมภาษา MATLAB ได้จากเว็บไซต์ http://www.mathworks.org
2

SCILAB เป็ นโปรแกรมที่สามารถทํางานได้อยางมี ่ ประสิ ทธิ ภาพ และไมต้่ องเสี ยเงิ น


่ ขสิ ทธิ์ ซอฟต์แวร์ 2 โดยทัว่ ไปข้อดีของโปรแกรม SCILAB สามารถสรุ ปได้ดงั นี้
คาลิ
่ ่
ƒ งายตอการเรี ยนรู้และทําความเข้าใจ
ƒ ขั้ นตอนการเขียนโปรแกรมไมยุ่ ง่ ยาก
ƒ มีฟังกชั์ น (function) สําหรับการคํานวณทางคณิ ตศาสตร์ จาํ นวนมากพร้อมใช้งาน
ƒ มีกลองเครื่ ่ องมือ (toolbox) จํานวนมากที่ประกอบด้วยฟั งกชั์ นตางๆ ่ ที่จาํ เป็ นสําหรับการแกไข

ปั ญหาทางด้านวิศวกรรมและวิทยาศาสตร์ เชน่ กลองเครื ่ ่ องมือทางด้านการควบคุมทนทาน
(robust control), กลองเครื ่ ่ องมือทางด้านการประมวลผลสัญญาณ (signal processing), และ

กลองเครื ่ องมือทางด้านการหาคาเหมาะที ่ ่สุด (optimization) เป็ นต้น
ƒ สามารถประมวลผลข้อมูลที่ อยู่ในรู ปเชิ งสัญลักษณ์ (symbolic) และข้อมูลที่ อยู่ในรู ปของ
เมทริ กซ์ (matrix) ได้อยางรวดเร็ ่ วและมีประสิ ทธิภาพ
ƒ สามารถพัฒนาฟั งกชั์ นใหมๆ่ ขึ้ นมาใช้งานรวมกบโปรแกรม ่ ั SCILAB ได้โดยงาย ่
ƒ สามารถใช้งานรวม ่ กบโปรแกรมภาษาฟอร์
ั แทรน (FORTRAN), ภาษาซี (C) และภาษา
MATLAB ได้
ƒ สามารถใช้งานรวมกบโปรแกรม ่ ั ่ ั ปกรณ์ฮาร์ดแวร์ได้
LabVIEW เพื่อทําการเชื่อมตอกบอุ
ƒ สามารถสร้ างโปรแกรมสําเร็ จรู ปสําหรั บการจําลองระบบ (system simulation) ได้โดยใช้
เครื่ องมือของโปรแกรม SCILAB ที่เรี ยกวา่ “scicos”
ƒ สามารถนําไปพัฒนาตอยอดได้ ่ เนื่องจากมีรหัสต้นฉบับ (source code) และคู่มือการใช้งานให้
ซึ่ งสามารถดาวน์โหลดได้จากเว็บไซต์ http://www.scilab.org

จากที่กลาวมาข้ ่
างต้นนี้ จะเห็นได้วาโปรแกรม SCILAB สามารถทํางานได้มากมายหลายรู ปแบบ

อยางไรกตาม ็ หนังสื อเลมนี
่ ้ จะอธิบายเฉพาะพื้นฐานการใช้งานทัว่ ไปของโปรแกรม SCILAB เพื่อให้
่ าไปใช้งานได้อย่างถูกต้องและรวดเร็ ว พร้อมทั้ งเป็ นแนวทางให้ผอู้ ่านนําโปรแกรมนี้
ผูอ้ านสามารถนํ
่ ถ้ามีโอกาสผูเ้ ขียนกหวั
ไปประยุกต์ใช้งานขั้ นสู งตอไป ็ งวาจะได้
่ ี่ ั
เขียนหนังสื อเกยวกบการใช้ งานขั้ นสูง
ของโปรแกรม SCILAB เชน่ วิธี การใช้งานรวมกบโปรแกรม
่ ั ่ ั
ภาษาซี , วิธี การใช้งานรวมกบ

2

นอกจากนี้ ยงั มีโปรแกรมอื่นๆ อีกที่ให้ฟรี (freeware) และทํางานคล้ายกบโปรแกรม SCILAB เชน ่ โปรแกรม
่ ่ขา้ พเจ้า
Octave (http://www.octave.org) และโปรแกรม Rlab (http://rlab.sourceforge.net) เป็ นต้น แตจากที
ได้ศึกษาค้นคว้าข้อมูลของโปรแกรมเหลานี ่
่ ้ ดูพบวา่ โปรแกรมภาษา SCILAB สามารถทํางานได้อยางรวดเร็ วและมี
ประสิ ทธิภาพมากที่สุด
3

โปรแกรม LabVIEW, วิธีการใช้งาน scicos, และการประยุกต์ใช้โปรแกรม SCILAB ใน


การแกไขปั ้ ญหาทางด้านวิศวกรรม เป็ นต้น
สําหรับโปรแกรม SCILAB ที่ทางสถาบัน INRIA และ ENPC พัฒนาขึ้ นมานี้ สามารถ
นําไปใช้งานได้ในหลายระบบปฏิบตั ิการ ได้แก่ ระบบปฏิบตั ิการลีนุกซ์ (GNU/Linux), ระบบ
ปฏิบตั ิการวินโดวส์ (Windows2000/XP/VISTA), ระบบปฏิบตั ิการ HP-UX, และระบบปฏิบตั ิการ
Mac OS X เป็ นต้น โดยหนังสื อเลมนี ่ ้ จะอ้างอิงถึงโปรแกรม SCILAB เวอร์ชนั 4.1.1 (เริ่ มต้นใช้งาน
เมื่อวันที่ 9 พฤษภาคม พ.ศ. 2550) ที่ทาํ งานบนระบบปฏิบตั ิการวินโดวส์ อยางไรกตาม ่ ็ สําหรับ
ผูใ้ ช้งานโปรแกรม SCILAB เวอร์ ชนั อื่นหรื อที่ทาํ งานบนระบบปฏิบตั ิการอื่น กยั็ งสามารถใช้หนังสื อ
เลมนี่ ้ ในการศึกษาและทําความเข้าใจถึงลักษณะการใช้งานของโปรแกรม SCILAB ด้วยตนเองได้
่ รวมถึงหลักการเขียนโปรแกรม SCILAB ยังคงมี
ทั้ งนี้ เนื่องจากรู ปแบบการใช้งานของคําสัง่ ตางๆ
ลักษณะเหมือนกนในทุ ั กเวอร์ ชนั และทุกระบบปฏิบตั ิการ3

1.2 เริ่มต้ นการใช้ งานโปรแกรม SCILAB


การเรี ยกใช้งานโปรแกรม SCILAB ให้เรี ยกจากไฟล์ที่ชื่อวา่ “WScilex.exe” ซึ่ งอยู่ในสารบบ
(directory) “SCIDIR\bin\WScilex.exe” โดยการกดดับเบิลคลิกที่ชื่อไฟล์น้ ี เมื่อ SCIDIR คือชื่อ
สารบบที่ติดตั้ งโปรแกรม SCILAB โดยหน้าตางแรกที ่ ่จะถูกแสดงขึ้ นมาก็คือ “หน้าตางคํ่ าสั่ง
(command window)” ตามรู ปที่ 1.1 หน้าตางนี ่ ้ จะเป็ นสวนที ่ ลงไป
่ ่ผใู้ ช้จะทําการป้ อนคําสัง่ ตางๆ
เพื่อทําการคํานวณ และเป็ นสวนที ่ ่แสดงผลลัพธ์ออกทางหน้าตางคํ ่ าสั่ง โดยที่เครื่ องหมาย
SCILAB prompt “-->” เป็ นตัวบอกวาโปรแ ่ กรม SCILAB พร้อมที่จะรอรับคําสัง่ ณ จุดนี้
จากรู ปที่ 1.1 พบวา่โปรแกรม SCILAB ได้เตรี ยมแถบเครื่ องมือ (toolbar) ที่รวมฟังกชั์ น
่ ที่หน้าตางคํ
ที่ใช้งานบอยไว้ ่ าสั่งในรู ปของสัญรู ป (icon) ตามที่แสดงในรู ปที่ 1.1 ข้างใต้แถบเมนู
(menu bar) นัน่ คือ ่ นมีความหมาย
โดยสัญรู ปแตละอั
่ นี้
ดังตอไป
(New Scilab) ่ าสั่งขึ้ นมาใหมอี่ กหน้าตางหนึ
สร้างหน้าตางคํ ่ ่ง
(Open Scipad) เรี ยกใช้งานโปรแกรมเอดิเตอร์ (editor) ที่ชื่อวา่ “SciPad” ขึ้ นมาตาม

รู ปที่ 1.2 เพื่อใช้สาํ หรับเขียนหรื อแกไขโปรแกรม
3
่ ได้จาก http://www.scilab.org
ผูใ้ ช้สามารถดาวน์โหลดตัวโปรแกรม SCILAB สําหรับระบบปฏิบตั ิการตางๆ
4

่ าสัง่ ของโปรแกรม SCILAB


ู ่ 1.1 หน้าตางคํ
รปที

่ เอดิเตอร์ที่ชื่อ “SciPad” ของโปรแกรม SCILAB


ู ่ 1.2 หน้าตาง
รปที

(Open file) เรี ยกไฟล์ที่มีอยูใ่ นสารบบขึ้ นมาใช้งาน


(Copy) ่ ่ผใู้ ช้เลือกในหน้าตางคํ
สําเนาข้อมูลในสวนที ่ าสั่ง
(Paste) ่ คําสัง่
นําข้อมูลที่สาํ เนาไว้มาวางในหน้าตาง
5

(Change Directory) ํ งทํางาน4 (working directory)


เปลี่ยนสารบบที่กาลั
(Scilab Output) ่ ่ชื่อวา่ “Console scilab” ขึ้ นมาใช้งาน
เรี ยกหน้าตางที
(Choose Font …) ่ าสัง่
เลือกลักษณะของตัวอักษรที่จะใช้ในหน้าตางคํ
(Print) ่ าสั่งออกทางเครื่ องพิมพ์ (printer)
พิมพ์ขอ้ มูลในหน้าตางคํ
(Scilab Help) ่ ความชวยเหลื
เรี ยกหน้าตางให้ ่ อที่ชื่อวา่ “Scilab Browse Help” ขึ้ นมา
่ ยวกบการป้
ใช้งานเพื่อค้นหาข้อมูล (มีผลลัพธ์เชนเดี ั อนคําสั่ง help
่ าสั่ง)
ในหน้าตางคํ

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

ƒ เมนู Edit ประกอบไปด้วย


Select All เลือกข้อมูลทั้ งหมดในหน้าตางคํ ่ าสั่ง
Copy สําเนาข้อมูลในสวนที ่ ่ผใู้ ช้เลือกในหน้าตางคํ
่ าสั่ง
Paste นําข้อมูลที่สาํ เนาไว้มาวางในหน้าตางคํ ่ าสั่ง
Empty Clipboard ลบข้อมูลที่สาํ เนาไว้
History ่ าสั่งขึ้ นมาใช้งานใหม่
เรี ยกคําสัง่ ที่เคยใช้ในหน้าตางคํ
ƒ เมนู Preferences ประกอบไปด้วย
Language เลือกภาษาที่จะใช้ในหน้าตางคํ่ าสั่ง (อังกฤษหรื อฝรั่งเศส)
Color เลือกสี ของตัวอักษร (text) และสี ของพื้นหลัง (background) ที่ตอ้ งการ
่ าสั่ง
ใช้ในหน้าตางคํ
Toolbar เปิ ดหรื อปิ ดแถบเครื่ องมือ
่ าสั่ง
ที่แสดงในหน้าตางคํ
Files Association ํ
กาหนด ประเภทของไฟล์ที่จะใช้ในหน้าต่างคําสั่ง
Choose Font เลือกลักษณะของตัวอักษรที่ตอ้ งการจะใช้ในหน้าตางคํ ่ าสั่ง
Clear History ลบคําสั่งตางๆ่ ที่เคยใช้ในหน้าตาง ่ คําสัง่ ทําให้ไมสามารถ
่ เรี ยกใช้งาน
่ ้ นโดยใช้เมนูยอย
คําสั่งเหลานั ่ History และแป้ นลัด (hot key) ได้
Clear Command Window ลบข้อความทั้ งหมดที่ปรากฎในหน้าตางคํ ่ าสัง่ แล้วให้เครื่ องหมาย
SCILAB prompt “-->” ไปปรากฎอยูท ่ ี่บรรทัดแรกสุ ดของ
่ าสั่ง
หน้าตางคํ
Console เรี ยกหน้าตาง ่ Console scilab ขึ้ นมาใช้งาน
ƒ เมนู Control ประกอบไปด้วย
Resume เรี ยกใช้คาํ สัง่ resume ของโปรแกรม SCILAB
Abort เรี ยกใช้คาํ สัง่ abort ของโปรแกรม SCILAB
Interrupt Ctrl+C ่ ั การกดปุ่ ม Ctrl+C)
หยุดการประมวลผลชัว่ คราว (เทียบเทากบ
ƒ เมนู Editor

เป็ นการเรี ยกใช้คาํ สัง่ scipad เพื่อทําการเรี ยกหน้าตางเอดิ เตอร์ SciPad ขึ้ นมา (ตามรู ปที่ 1.2)

เพื่อใช้ในการเขียนหรื อแกไขโปรแกรม
7

ƒ เมนู Applications ประกอบไปด้วย


Scicos เรี ยกใช้คาํ สัง่ scicos ของโปรแกรม SCILAB
EditGraph ็ มาทําการปรับปรุ งหรื อแกไข
เรี ยกรู ปกราฟที่เกบไว้ ้
m2sci เรี ยกใช้คาํ สัง่ mfile2sci เพื่อทําการแปลง M-file (ไฟล์ฟังกชั์ น5
ของโปรแกรม MATLAB) ให้เป็ นไฟล์ฟังกชั์ นของโปรแกรม SCILAB
ที่เรี ยกวา่ “SCI-file”
Browser Variables เรี ยกใช้คาํ สั่ง browsevar ของโปรแกรม SCILAB เพื่อดูวา่ ณ
ตอนนี้มีตวั แปรอะไรบ้างที่ได้มีการสร้างขึ้ น หรื อมีการเรี ยกใช้งานใน
หน้าตางคํ่ าสั่งที่กาลั
ํ งใช้งานอยู่
ƒ เมนู ? ประกอบไปด้วย
Scilab Help F1 เรี ยกหน้าตาง ่ Scilab Browse Help ขึ้ นมาใช้งาน
Configure ํ
กาหนดรู ปแบบของหน้าตาง ่ Scilab Browse Help ที่ตอ้ งการจะใช้งาน
ในโปรแกรม SCILAB
Scilab Demos ่
เรี ยกดูตวั อยางการใช้ ่ ที่โปรแกรม SCILAB ได้จดั
งานชุดคําสัง่ ตางๆ
เตรี ยมไว้ให้
Web Links ี่ องกบโปรแกรม
เปิ ดใช้งานเว็บไซต์ที่เกยวข้ ั SCILAB
About เรี ยกดูขอ้ มูลทัว่ ไปของโปรแกรม SCILAB เชน่ เวอร์ชนั ของโปรแกรม
SCILAB ที่ กาลั ํ งใช้งานอยู่ (เทียบเทากบการป้
่ ั อนคําสั่ง about ที่
่ าสัง่ )
หน้าตางคํ

1.3 คําสั่ งพืน้ ฐานสํ าหรับการเริ่มต้ นใช้ งานโปรแกรม SCILAB


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

การใช้ตวั อยางประกอบคํ ่
าอธิบายเป็ นหลัก เพื่อให้ผอู้ านสามารถเข้ ่
าใจลักษณะการใช้งานคําสั่งตางๆ

ได้อยางรวดเร็ วและมีประสิ ทธิผล

5
ี่ ั ฟังกชั์ น (file function) ได้ในหัวข้อที่ 5.3
ศึกษารายละเอียดเกยวกบไฟล์
8

่ ้ จะอธิ บายถึงคําสั่งพื้นฐานสําหรับการเริ่ มต้นใช้งานโปรแกรม SCILAB เพื่อเป็ น


ในสวนนี
แนวทางสําหรับการเรี ยนรู้ ในบทตอ่ไป เริ่ มต้นจะขอแสดงการกาหนดคาคงที
ํ ่ ่ให้กบตั
ั วแปร เช่น

ถ้าต้องการกาหนดให้ ่ ่ ั ่ 5 จะต้องป้ อนคําสัง่ ลงในหน้าตางคํ
ตวั แปร x มีคาเทากบคา ่ าสัง่ ดังนี้

-->x = 5

่ าสัง่ จะแสดงผลลัพธ์เป็ น
เมื่อกดปุ่ ม Enter หน้าตางคํ

x =
5.
-->

่ าสั่ง พร้อมทั้ งแสดง


นัน่ คือโปรแกรม SCILAB จะแสดงผลลัพธ์ x = 5 ออกมาที่หน้าตางคํ

เครื่ องหมาย SCILAB prompt “-->” เพื่อรอรับคําสัง่ ตอไป
ในกรณี ที่ไมต้่ องการให้โปรแกรม SCILAB แสดงผลลัพธ์ออกทางหน้าตางคํ ่ าสั่ง กให้
็ ใส่

เครื่ องหมายเซมิโคลอน (semi-colon) “;” ปิ ดท้ายคําสั่งนั้ น กอนกดปุ่ ม Enter เชน่ ถ้าต้องการ

กาหนดให้ ่ ่ ั ่ 3 โดยไมต้่ องแสดงผลลัพธ์ออกทางหน้าตางคํ
ตวั แปร y มีคาเทากบคา ่ าสั่ง กสามารถทํ
็ า
ได้โดยป้ อนคําสั่งดังนี้
-->y = 3;
-->

็ ่
เมื่อกดปุ่ ม Enter โปรแกรม SCILAB กจะไมแสดงผลลั ่ าสั่ง แตจะปรากฎ
พธ์ออกทางหน้าตางคํ ่
เครื่ องหมาย SCILAB prompt “-->” แทน


หมายเหตุ ข้อควรระวังในการกาหนดชื ่อของตัวแปรมีดงั นี้
ƒ โปรแกรม SCILAB จะพิจารณาถึงความแตกตางของ ่ ตัวอักษรตัวพิมพ์ใหญ่ (capital letter)
กบัอักษรตัวพิมพ์เล็ก ซึ่ งโปรแกรม SCILAB จะถือวาตั่ วแปรที่มีชื่อเหมือนกนั แต่ใช้ตวั อักษร
่ ั จะเป็ นตัวแปรคนละตัวกนั ดังนั้ นควรหลีกเลี่ยงการกาหนด
ตางกน ํ ชื่อตัวแปรที่เหมือนกนั
่ ิน 24 ตัวอักษร ทั้ งนี้ อาจจะ
ƒ ชื่อของตัวแปรจะต้องเริ่ มด้วยตัวอักษรและมีความยาวได้ท้ งั หมดไมเก

ใช้ตวั เลขหรื อสัญลักษณ์ underline “_” (สัญลักษณ์อื่นห้ามใช้) ชวยในการกาหนดชื ํ ่ อของ
ตัวแปรกได้็
9

break abort pause exit error quit


if then else for while end
return resume function who whos help
sin cos tan atan exp log
min max median stdev det eye

่ ่อที่เป็ นคําสําคัญในโปรแกรม SCILAB


ู ่ 1.3 ตัวอยางชื
รปที

ƒ ํ
ชื่อของตัวแปรที่กาหนดขึ ้ นมาจะต้องไมซํ่ ้ ากบชื
ั ่อเฉพาะหรื อคําสําคัญ (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
ไมทํ่ าการประมวลผลตอคํ่ าสั่งหรื อข้อความที่อยูหลั่ งเครื่ องหมายคอมเมนต์น้ ี ประโยชน์ของ
็ ่อเป็ นการเขียนคําอธิบายตางๆ
เครื่ องหมายคอมเมนต์กเพื ่ ภายในตัวโปรแกรมที่พฒั นาขึ้ นมาเพื่อ
เป็ นการเตือนความจําของผูเ้ ขียนถึงขั้ นตอนการทํางานของตัวโปรแกรม ซึ่ งจะทําให้ง่ายตอ่การ

เข้าใจและแกไขโปรแกรมในภายหลั ่ ยวกนกบผู
ง เชนเดี ั ั ที้ ่นาํ โปรแกรมที่พฒั นาขึ้ นมานี้ ไปใช้งาน

กสามารถเข้ าใจถึงตัวโปรแกรมได้โดยงาย ่

ในกรณี ที่ตอ้ งการทราบวา่ ณ ขณะนี้ มีตวั แปรอะไรบ้างที่ได้มีการสร้างขึ้ นหรื อที่ได้มีการ


่ าสัง่ ที่ใช้งานอยูห่ รื อที่เรี ยกวา่ “พื้นที่ใช้งาน (workspace)” สามารถทําได้
เรี ยกใช้งานในหน้าตางคํ
โดยการใช้คาํ สัง่ who หรื อ whos โดยที่เมื่อใช้คาํ สัง่ who จะได้ผลลัพธ์เป็ น
10

-->who
your variables are...

x scipad y scicos_pal %scicos_menu


%scicos_short %scicos_help %scicos_display_mode
modelica_libs scicos_pal_libs %helps WSCI home
SCIHOME PWD TMPDIR MSDOS SCI guilib
sparselib xdesslib percentlib polylib intlib
elemlib utillib statslib alglib siglib optlib autolib
roblib soundlib metalib armalib tkscilib tdcslib s2flib
mtlblib %F %T %z %s %nan %inf
COMPILER %gtk %gui %pvm %tk $ %t
%f %eps %io %i %e
using 16563 elements out of 5000000.
and 58 variables out of 9231

your global variables are...

LANGUAGE %helps demolist %browsehelp LCC


%toolboxes %toolboxes_dir TMPDIR
using 1185 elements out of 11000.
and 8 variables out of 767

ซึ่ งจะพบวามี ํ
่ ตวั แปร 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 ) ?]

นอกจากนี้ ยงั สามารถที่จะตรวจสอบดูได้วา่ ข้อมูลแตละตั


่ วที่ใช้เป็ นข้อมูลประเภทใดโดยใช้คาํ สั่ง
typeof (ดูรายละเอียดการใช้งานคําสัง่ นี้ ได้ในหัวข้อที่ 2.9)
12

่ ตัวแปรอะไรบ้างที่ได้ถกู สร้างขึ้ นมาโดยผูใ้ ช้ กสามารถทํ


ถ้าต้องการที่จะทราบเพียงวามี ็ าได้
โดยการใช้คาํ สั่ง who_user ซึ่ งจะให้ผลลัพธ์ดงั นี้

-->who_user
User variables are:
whos x scipad y modelica_libs
using 2925 elements out of 4984207

ผลลัพธ์ที่แสดงออกมามีตวั แปร x, y, scipad, และ whos ปรากฎอยูด่ ว้ ยเนื่องจากมีการกาหนด ํ


่ วแปร x และ y และมีการเรี ยกใช้คาํ สัง่ scipad และ whos กอนที
คาตั ่ ่จะทําการเรี ยกใช้คาํ สั่ง
who_user สวนคํ่ าสั่ง who ที่ได้มีการเรี ยกใช้ก่อนหน้านี้ โปรแกรม SCILAB ไมถื่ อวาเป็
่ นตัวแปร
ในทํานองเดียวกนัตัวแปร modelica_libs ถือวา่เป็ นคาเริ ่ ่ มต้นของโปรแกรม SCILAB
ในกรณี ที่ตอ้ งการทราบวา่คําสั่งแตละคํ่ าสั่งทําหน้าที่อะไร และมีลกั ษณะการเรี ยกใช้งาน

อยางไร ็
กสามารถทํ าได้โดยการใช้คาํ สัง่ help เชน่ ถ้าต้องการทราบวาคํ
่ าสั่ง who มีหน้าที่อะไร
็ ป้อนคําสัง่ ดังนี้
กให้

-->help who


เมื่อกดปุ่ ม Enter กจะปรากฎหน้ าตาง ่ Scilab Browse Help ขึ้ นมาตามรู ปที่ 1.4 ซึ่ งจะแสดง
ข้อความอธิบายรู ปแบบการใช้งานของคําสัง่ who จะเห็นได้วา่คําสัง่ help มีประโยชน์มากสําหรับ
การเขียนโปรแกรม เพราะวา่คําสัง่ แตละคํ ่ าสังมี ่ ั นอกจากนี้ คาํ สัง่ หนึ่ ง
่ ลกั ษณะการเรี ยกใช้งานที่ตางกน
คําสั่งอาจจะมีรูปแบบการใช้งานหลายแบบกได้ ็ ดังนั้ นผูใ้ ช้จะต้องศึกษาลักษณะการใช้งานคําสัง่ตางๆ่
่ ้ นมาใช้งานได้อยาง
ให้เข้าใจเพื่อที่จะได้สามารถนําคําสั่งเหลานั ่ ถูกต้อง และตรงตามความต้องการของ
ํ งพัฒนา
งานประยุกต์ (application) ที่กาลั

หากต้องการทราบวาโปรแกรม SCILAB ได้เตรี ยมฟั งกชั ์ นอะไรไว้ให้บา้ งในแตละไลบรารี


กสามารถทํ าได้โดยการพิมพ์ชื่อไลบรารี นั้ นลงที่หน้าต่างคําสัง่ แล้วกด Enter เชน่ ถ้าต้องการทราบวา่
ไลบรารี สาํ หรับฟังกชั์ นพื้นฐาน (elementary function) มีฟังกชั์ นอะไรบ้าง กให้ ็ ป้อนคําสัง่ ดังนี้
13

่ Scilab Browse Help ของโปรแกรม SCILAB


ู ่ 1.4 หน้าตาง
รปที

-->elemlib
elemlib =

Functions files location :SCI\macros\elem\

asinh asinhm acosh acosm acoshm atanm asinm


atanhm atanh binomial convertindex cellstr cell2mat
cosh cothm cosm coshm cotg coth cat
complex erf erfc erfcx fix factor
factorial GLoad isempty intersect interpln
inttrap integrate intsplin isnan isinf intc
intl ind2sub isvector iscellstr interp1 logm
log10 lex_sort log2 modulo meshgrid null nextpow2
num2cell pertrans pmodulo permute perms primes
squarewave sqrtm spzeros speye smooth signm
setdiff sinc sub2ind sinh sinhm sinm sprand
toeplitz tanm tanhm tanh union unique
vectorfind

หรื อถ้าต้องการทราบวา่ไลบรารี สาํ หรับการประมวลผลสัญญาณ (signal processing) มีฟังกชั์ น


็ ป้อนคําสั่งดังนี้
อะไรบ้าง กให้
14
-->siglib
siglib =

Functions files location :SCI\macros\signal\

%asn analpf bilt buttmag casc cepstrum cheb1mag


cheb2mag chepol convol cspect czt dft detrend
ell1mag eqfir eqiir faurre findm find_freq
frfit frmag fsfirlin ffilt fftshift fft2 group
hank hilb iir iirgroup iirlp iirmod intdec
ifft jmat %k kalm lattn lev levin
lgfft lindquist mese mfft mrfit phc
pspect remezb %sn system sskf sincd srfaur
srkf trans wigner wiener wfir window yulewalk
zpch1 zpbutt zpell zpch2

ผลลัพธ์ที่ได้จะบอกวา่ไลบรารี น้ ีอยูท่ ี่สารบบใด (เมื่อ SCI คือสารบบที่เกบโปรแกรม


็ SCILAB ไว้)
พร้อมทั้ งแสดงฟังกชั์ นทั้ งหมดที่มีอยูใ่ นสารบบนี้ ในทางกลับกนถ้ั าหากต้องการทราบวา่ ฟั งกชั์ นนี้
อยูใ่ นไลบรารี ใด ก็สามารถทําได้โดยใช้คาํ สัง่ whereis ตามตัวอยางตอไปนี
่ ่ ้

-->whereis('log10')
ans =
elemlib

-->whereis('convol')
ans =
siglib

่ เข้าไปเกบ็ไว้ในไฟล์ กสามารถทํ
ในกรณี ที่ตอ้ งการจะบันทึกข้อมูลของตัวแปรตางๆ ็ าได้
โดยการใช้คาํ สัง่ save ซึ่ งมีรูปแบบการใช้งาน คือ

save('filename', [list_of_variables])

เมื่ออินพุตอาร์ กิวเมนต์ (input argument) หรื อตัวแปรสงผาน


่ ่ filename คือชื่ อไฟล์ที่ใช้ใน
การเกบ็ข้อมูลของตัวแปรซึ่ งจะต้องเขียนให้อยูภ่ ายในเครื่ องหมาย single quote “'...'” หรื อ
เครื่ องหมาย double quote “"..."” โดยจะต้องระบุเส้นทาง (path) ของไฟล์ที่จะบันทึกข้อมูลให้
15

่ เส้นทางที่จะบันทึกไฟล์ โปรแกรม SCILAB กจะทํ


ชัดเจนด้วย7 ถ้าหากไมระบุ ็ าการบันทึกไฟล์น้ ี
ไว้ในสารบบที่กาลัํ งทํางานอยู่ ณ ขณะนั้ นโดยอัตโนมัติ สวนอิ
่ นพุตอาร์กิวเมนต์ที่อยูใ่ นเครื่ องหมาย
วงเล็บเหลี่ยม (square brackets) “[]” คือพารามิเตอร์ ที่เป็ นตัวเลือก8 (option) ของคําสั่งนั้ น
โดยในที่น้ ีคือ list_of_variables ซึ่ งจะเป็ นชื่อของตัวแปรที่ตอ้ งการจะบันทึกข้อมูลเข้าไป
็ ในไฟล์ ถ้าไมได้
เกบไว้ ่ ระบุพารามิเตอร์ list_of_variables โปรแกรม SCILAB จะทําการ
่ าสั่งเข้าไปเกบไว้
บันทึกข้อมูลของตัวแปรทุกตัวที่ใช้ในหน้าตางคํ ็ ในไฟล์ ตัวอยางการใช้
่ งานคําสั่ง
save เชน ่
-->x = 5; y = 3; ํ ่ วแปร x
//กาหนดคาตั = 5 และ y = 3

-->save('test.dat',x); //บันทึกข้อมูลเฉพาะของตัวแปร x ลงไปในไฟล์ชื่อ test.dat


-->clear; //ลบตัวแปรทั้งหมดที่เคยสร้างขึ้ นมา
-->x
--error 4
undefined variable : x ่ ่ ขอ้ มูลของตัวแปร x อยูใ่ นโปรแกรม SCILAB
//บอกวาไมมี

ชุดคําสั่งนี้ จะทําการบันทึกข้อมูลของตัวแปร x ลงไปในไฟล์ชื่อ test.dat แล้วเกบไว้็ ในสารบบ


ํ งทํางาน จากนั้ นกทํ็ าการลบตัวแปรทั้ งหมดที่เคยสร้างขึ้ นออกจากหนวยความ
ที่กาลั ่ จําของโปรแกรม
SCILAB โดยใช้คาํ สัง่ clear ดังนั้ นเมื่อทําการตรวจสอบดูวา่ ณ ขณะนี้ ตัวแปร x มีคาเป็
9
่ น

อะไร กจะพบวาไมมี ่ ่ ขอ้ มูลของตัวแปร x ปรากฎอยูใ่ นโปรแกรม SCILAB
ถ้าต้องการทราบวา่ ณ ตอนนี้ โปรแกรม SCILAB ทํางานอยูบ่ นระบบ MSDOS (เช่น
ระบบปฏิบตั ิการวินโดวส์) หรื อไม่ กส็ ามารถตรวจสอบได้โดยใช้คาํ สัง่ MSDOS ดังนี้

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

ผลลัพธ์ที่ได้บอกให้ทราบวา่สารบบที่กาลั ํ งทํางานคือ “C:\Documents and Settings\User”


ซึ่ งหมายความวา่เมื่อใช้คาํ สั่ง save('test.dat') ตามตัวอยางที ่ ่ผานมา
่ ไฟล์ test.dat
็ กนําไปเกบไว้
กจะถู ็ ในสารบบนี้ ในกรณี ที่ตอ้ งการเปลี่ยนสารบบที่กาลั ํ งทํางานให้เป็ นสารบบอื่น

กสามารถทํ าได้โดยการใช้คาํ สั่ง chdir เชน่ ถ้าต้องการเปลี่ยนสารบบที่กาลั
ํ งทํางานให้เป็ นสารบบ

“C:\” ก็ทาํ ได้โดยใช้คาํ สั่งตอไปนี ้

-->chdir('C:\'); ํ งทํางานให้เป็ นสารบบ “C:\”


//เปลี่ยนสารบบที่กาลั
-->pwd
ans =
C:\

ํ งทํางานเป็ น “C:\Documents and Settings\User”


ขอให้ยอ้ นกลับมาที่สารบบที่กาลั
เนื่องจากไฟล์ test.dat อยูท่ ี่สารบบนี้ ดังนั้ นถ้าต้องการเรี ยกตัวแปรที่เกบไว้
็ ในไฟล์ test.dat

กลับมาใช้งาน กสามารถทํ าได้โดยการใช้คาํ สั่ง load ซึ่ งมีรูปแบบการใช้งาน คือ

load('filename')

โดยพารามิเตอร์ filename คือชื่อไฟล์ (จะต้องระบุเส้นทางของไฟล์ที่ตอ้ งการเรี ยกมาใช้งานให้


่ ่
ถูกต้องครบถ้วน) ภายในเครื่ องหมาย '…' หรื อเครื่ องหมาย "…" ตัวอยางเชน
17

-->load('test.dat'); ็ ในไฟล์ test.dat ในสารบบที่กาลั


//เรี ยกตัวแปรที่เกบไว้ ํ ง
-->x //ทํางานกลับมาใช้งาน
x =
5.

-->y
--error 4
undefined variable : y

หลังจากใช้คาํ สั่ง load แล้วจะพบวา่ คราวนี้ ผใู้ ช้สามารถนําคาของตั


่ วแปร x มาใช้งานได้แล้ว
่ ่
แตไมสามารถนํ ่
าคาของตั
วแปร y มาใช้งานได้ เนื่องจากไฟล์ test.dat ไมได้ ่ เกบข้
็ อมูลของ
ตัวแปร y ไว้
หากต้องการลบคําสั่งและข้อความทั้ งหมดที่ปรากฎบนหน้าตางคํ ่ าสั่ง แล้วให้เครื่ องหมาย
SCILAB prompt “-->” ไปปรากฎอยูท ่ ี่บรรทัดแรกสุ ดของหน้าตางคํ
่ าสั่ง กสามารถทํ
็ าได้โดยใช้

คําสัง่ clc ซึ่ งยอมาจากคํ าวา่ “Clear Command Window” (แตคา ่ ่ ของตัวแปรตางๆ
่ ที่ผใู ้ ช้

กาหนดไว้ ยงั สามารถเรี ยกใช้งานได้) และในกรณี ที่ตอ้ งการเลิกใช้งานโปรแกรม SCILAB กให้ ็ ทาํ
่ าสัง่ โดยการใช้คาํ สั่ง quit หรื อ exit
การปิ ดหน้าตางคํ
่ งเครื่ องหมายขึ้ นบรรทัดใหม่ “...” ซึ่ งมีลกั ษณะเป็ นจุดที่เรี ยงตอ่
สุ ดท้ายนี้ จะขอกลาวถึ

กนสามจุ ด เครื่ องหมายนี้ มีประโยชน์มากในการเขียนโปรแกรมโดยเฉพาะอยางยิ ่ ง่ เมื่อคําสั่งที่ใช้มี
ความยาวมาก เครื่ องหมายนี้เอาไว้ใช้ต่อท้ายคําสั่งเพื่อบอกโปรแกรม SCILAB วาคํ ่ าสั่งในบรรทัด
นั้ นยังไมสิ่ ้ นสุ ด ดังนั้ นถึงแม้วาจะ
่ กดปุ่ ม Enter หลังเครื่ องหมายจุดสามจุดนี้ โปรแกรม SCILAB
็ งไมนํ่ าคําสั่งนั้ นไปประมวลผล แตจะรอรั
กจะยั ่ ่ ่เหลือที่จะเขียนตอไปในบรรทั
บข้อมูลสวนที ่ ดใหม่
จนกระทัง่ หมดคําสั่งแล้วกดปุ่ ม Enter อีกครั้ ง จากนั้ นโปรแกรม SCILAB จึงจะเอาข้อความ
ทั้ งหมดมารวมกนเป็ ั นประโยคคําสัง่ เดียวแล้วคอย ่ นําเอาไปประมวลผล ให้พิจารณาตัวอยางตอไป ่ ่ นี้
จะได้เข้าใจถึงลักษณะการทํางานของเครื่ องหมายขึ้ นบรรทัดใหม่

-->x = 5;

-->y = 3;

-->z = x + y ั วแปร y
//หาผลบวกของตัวแปร x กบตั
z = ่ ่ชื่อตัวแปร z
//แล้วนําผลลัพธ์ที่ได้ไปบรรจุไว้ในตัวแปรใหมที
8.
18

-->z = x + ... //หมายถึงยังไมสิ่ ้ นสุ ดคําสัง่ โปรแกรม SCILAB จะยังไมนํ


่ าข้อมูลนี้ ไปประมวลผล
-->y //เมื่อกดปุ่ ม Enter กถื็ อวาเป็ ่
่ นการสิ้ นสุ ดคําสัง่ ที่ป้อนจากบรรทัดกอนหน้
านี้
z = //โปรแกรม SCILAB จะนําคําสัง่ ทั้ งหมดคือ z = x + y ไปประมวลผล
8.

่ พธ์ที่ได้มีคาเทากน
จะเห็นได้วาผลลั ่ ่ ั

1.4 สรปุ
่ งประวัติความเป็ นมาและการใช้งานคําสั่งพื้นฐานทัว่ ไปของโปรแกรม SCILAB
ในบทนี้ได้กลาวถึ
เพื่อเป็ นแนวทางเบื้องต้นในการเรี ยนรู้ในบทตอๆ ่ ไป เนื่องจากโปรแกรม SCILAB เป็ นโปรแกรม
ที่ให้ฟรีและอนุญาตให้ผใู้ ช้สามารถนําไปพัฒนาตอ่ยอดได้ ดังนั้ นโปรแกรม SCILAB จึงถือได้วา่

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

อยางรวดเร็ วและมีประสิ ทธิภาพ เชนเดี ่ ยวกนกบโปรแกรม
ั ั MATLAB

1.5 แบบฝึ กหัดท้ ายบท


1.1 จงอธิบายคุณสมบัติของโปรแกรม SCILAB
่ ่
1.2 จงเปรี ยบเทียบข้อแตกตางระหวางโปรแกรม SCILAB และโปรแกรม MATLAB

่ ่ าสั่ง who และคําสัง่ whos


1.3 จงเปรี ยบเทียบข้อแตกตางระหวางคํ
1.4 จงอธิบายหน้าที่การทํางานของคําสัง่ who_users
1.5 จงทดสอบการใช้งานคําสัง่ save และคําสัง่ load
1.6 จงอธิบายหน้าที่การทํางานของคําสัง่ clear
บทที่ 2
ประเภทของข้ อมลู

ในบทนี้ จะอธิบายถึงประเภทของข้อมูลประเภทตางๆ ่ ที่สามารถใช้งานได้ในโปรแกรม SCILAB


เชน่ คาคงที
่ ่พิเศษ (special constant), เมทริ กซ์คาคงที
่ ่ (constant matrix), เมทริ กซ์ของสายอักขระ
(matrix of character strings), พหุ นาม (polynomial), และเมทริ กซ์บูลีน (Boolean matrix)

เพื่อที่ผใู้ ช้จะได้สามารถนําข้อมูลแตละประเภท มาใช้ในการพัฒนาโปรแกรมได้อยางถู่ กต้อง

2.1 ค่ าคงทีพ่ เิ ศษ
่ ่พิเศษ (special constant) เป็ นคาคงที
คาคงที ่ ่ที่ติดตั้ งมาพร้อมกบตั
ั วโปรแกรม SCILAB (built-in

constant) ไมสามารถลบทิ ้งได้10 เชน่ %i, %pi, %e, %inf, %nan, %eps, และ ans เป็ นต้น
จะเห็นได้วา่คาคงที
่ ่พิเศษเหลานี่ ้ จะเริ่ มต้นด้วยเครื่ องหมายเปอร์ เซ็นต์ “%” แล้วตามด้วยตัวอักขระ
่ นี้ จะขอสรุ ปการใช้งานของคาคงที
ในสวน ่ ่พิเศษตางๆ่ ตามตารางที่ 2.1 ดังตอไป ่ นี้

2.1.1 ค่ าคงทีพ่ เิ ศษ %i

ค่าคงที่พิเศษ ่ ่ที่ใช้ในการแสดงตัวเลขเชิงซ้อน โดยจะมีคาเทากบ


คือ คาคงที
%i ่ ่ ั คา่หนวยจิ
่ นตภาพ
(imaginary unit) นัน ่ คือ i = −1 เชน่ ถ้าต้องการกาหนดให้
ํ ่ ่ ั วเลข เชิงซ้อน
ตวั แปร a มีคาเทากบตั
็ ํ
2 + 3i กสามารถกาหนดคาตั ่ วแปร a ในโปรแกรม SCILAB ได้ดงั นี้

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

-->a = 2 + 3*%i ่ ่ องหมายคูณ * หน้าคาคงที


//ต้องใสเครื ่ ่พิเศษ %i ด้วย
a =
2. + 3.i

2.1.2 ค่ าคงทีพ่ เิ ศษ %pi

่ ่พิเศษ %pi คือ คาอั


คาคงที ่ ตราสวน่ ระหวางความยาวเส้
่ ั นผานศู
นรอบวงกบเส้ ่ นย์กลางของวงกลม
่ ่ ั π = 3.1415927... ในโปรแกรม SCILAB คา่ %pi จะมีคาดั
ซึ่ งมีคาเทากบ ่ งนี้

-->%pi
%pi =
3.1415927
21

2.1.3 ค่ าคงทีพ่ เิ ศษ %e

่ ่พิเศษ %e คือ คาคงที


คาคงที ่ ่ตรี โกณมิติ (trigonometric constant) มีคาเทากบ
่ ่ ั e = 2.7182818...
ในโปรแกรม SCILAB คา่ %e จะมีคาดั
่ งนี้

-->%e
%e =
2.7182818

2.1.4 ค่ าคงทีพ่ เิ ศษ %inf

่ ่พิเศษ %inf มาจากคําวา่ “infinity” ใช้แทนตัวเลขที่มีค่าเป็ นอนันต์ นัน่ คือ %inf =


คาคงที ่
∞ เชน
่ านวนจริ งด้วยคาศู
ผลลัพธ์ที่ได้จากการหารคาจํ ่ นย์ (เชน่ 1/0) ในโปรแกรม SCILAB คา่ %inf
่ งนี้
จะมีคาดั

-->%inf
%inf =
Inf

-->1/%inf
ans =
0.

2.1.5 ค่ าคงทีพ่ เิ ศษ %nan

่ ่พิเศษ %nan มาจากคําวา่ “Not-A-Number” หมายถึงคาคงที


คาคงที ่ ่น้ นั ไมสามารถแสดงให้
่ อยู่
ในรู ปของตัวเลขได้ ในโปรแกรม SCILAB คา่ %nan จะมีคาดั
่ งนี้

-->%nan
%nan =
Nan

2.1.6 ค่ าคงทีพ่ เิ ศษ %eps

่ ่พิเศษ
คาคงที %eps มาจากคําวา่ “epsilon” คือ คาหนวยยอยขนาดเล็
่ ่ ่ กที่สุดที่โปรแกรม SCILAB
22

่ ่ ั e ≈ 2.22*10-16 นัน่ คือคาจํ


สามารถรองรับได้ โดยจะมีคาเทากบ ่ านวนจริ งที่มีคาน้
่ อยกวาคา
่ ่
%eps โปรแกรม SCILAB จะถือวาเป็ ่ นคาศู
่ นย์ หรื ออาจจะกลาวได้
่ วา่ %eps เป็ นคาที ่ ่มากที่สุดที่
่ ่
ทําให้ x + %eps = x เมื่อ x > 0 ตัวอยางเชน

-->%eps
%eps =

2.220D-16 ั
//ตัวแปร D-16 หมายถึงให้คูณกบเลขสิ ํ งลบสิ บหก นัน่ คือ 2.22*10-16
บยกกาลั
-->2 + %eps
ans =
2.

-->0 + %eps
ans =
2.220D-16

่ ่พิเศษ %eps มีประโยชน์ในการหลีกเลี่ยงปัญหาที่เกดขึ


คาคงที ิ ้ นจากการหารด้วยตัวเลขที่
มีคา่เป็ นศูนย์ เชน่ ในกรณี ที่ตอ้ งการวาดกราฟของรู ปสัญญาณ y = sin(t)/t ซึ่ งเป็ นสัญญาณที่
พบมากในระบบสื่ อสารดิจิทลั (digital communication) ตัวอยางเชน่ ่

-->t = -1:0.5:1 ํ ตัวแปร t มีค่าตั้ งแตคา


//กาหนดให้ ่ ่ -1 เพิ่มขึ้ นทีละ +0.5 จนถึงคา่ +1
t =
- 1. - 0.5 0. 0.5 1.

-->sin(t)./t
--error 27

division by zero... ่ ่ t = 0 จะได้วา่ sin(0)/0


//เนื่องจาก ณ ตําแหนงที

-->t(3) = %eps ํ สมาชิกตัวที่สามของตัวแปร t มีค่าเป็ น %eps


//กาหนดให้
t =
- 1. - 0.5 2.220D-16 0.5 1.

-->y = sin(t)./t //ตามนิยามจะได้วา่ sin(0)/0 = 1


y =
0.8414710 0.9588511 1. 0.9588511 0.8414710
23

่ วเลขที่มีคามากๆ
สังเกตจะพบวาตั ่ หรื อน้อยๆ สามารถที่จะเขียนให้อยูใ่ นรู ปของเลขยกกาลั
ํ งได้โดย
่ ดังตัวอยางตอไปนี
ใช้พารามิเตอร์ d, e, D, หรื อ E เข้าชวย ่ ่ ้

-->y = [1e - 2 1d - 3 1D - 5 1E - 6 10e - 4]


y =
0.01 0.001 0.00001 0.000001 0.001

-->z = [1e + 2 1d + 3 1D + 5 1E + 6 10e + 4]


z =
100. 1000. 100000. 1000000. 100000.

2.1.7 ค่ าคงทีพ่ เิ ศษ ans

่ ่พิเศษ ans คือ ตัวแปรชัว่ คราว (temporary variable) ของโปรแกรม SCILAB ที่ใช้ในการ
คาคงที

เกบผลลั ่ าสัง่ ในหน้าตางคํ
พธ์ที่ได้จากการคํานวณของคําสัง่ แตละคํ ่ าสั่ง โดยตัวแปร ans จะถูกนํามาใช้
อัตโนมัติในกรณี ที่ไมมี่ การระบุตวั แปรรับคาของผลลั
่ พธ์ เชน่

-->3 + 2

ans = ่ ่พเิ ศษ ans ถูกนํามาใช้โดยอัตโนมัติ เนื่องจากไมมี่ การกาหนดตั


//คาคงที ํ ่ พธ์
วแปรรับคาผลลั
5.

2.1.8 ค่ าคงทีพ่ เิ ศษ %t, %T, %f, และ %F

่ ่พิเศษ %t หรื อ %T คือ คาคงที


คาคงที ่ ่บูลีน (Boolean constant) ที่บอกวาความสั
่ มพันธ์เป็ นจริ ง
(True) หรื อมีค่าทางตรรกะเป็ นคา่ 1 สวนคาคงที
่ ่ ่พิเศษ %f หรื อ %F คือคาคงที
่ ่บูลีนที่บอกวา่

ความสัมพันธ์เป็ นเท็จ (False) หรื อมีคาทางตรรกะเป็ นคา่ 0 ตัวอยาง
่ เชน่

-->[%t, %T, %f, %F, ~%t, ~%f]


ans =
T T F F F T

โดยที่เครื่ องหมายทิวด้า (tilda) “~” เป็ นตัวดําเนิ นการตรรกะ (logical operator) ที่แสดงถึงการ
ปฏิเสธ นัน่ คือ ~%t = F และ ~%f = T (ดูรายละเอียดในหัวข้อที่ 3.2.2)
24

2.1.9 ค่ าคงทีพ่ เิ ศษ %s และ %z

่ ่ พิเศษ %s และ %z คือ ตัวแปรที่ใช้ในการกาหนดสมการ


คาคงที ํ พหุ นาม มีค่าเทากบการใช้
่ ั คาํ สั่ง
s = poly(0, 's') หรื อ z = poly(0, 'z') ในโปรแกรม SCILAB (ดูรายละเอียดของ
การใช้งานคําสัง่ poly ได้ในหัวข้อที่ 2.4.1) เชน่

-->%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

2.1.10 ค่ าคงทีพ่ เิ ศษ %io

่ าสัง่ ถือวา่เป็ นอุปกรณ์อินพุตและเอาต์พตุ มาตรฐาน (standard input and output device)


หน้าตางคํ
ของโปรแกรม SCILAB ที่ทาํ หน้าที่ในการรับและสง่ข้อมูลกบัเครื่ องคอมพิวเตอร์ ในโปรแกรม
SCILAB จะถือวาเครื ่ ่ องมืออินพุตและเอาต์พตุ เป็ นหนวยเชิ
่ งตรรกะ (logical unit) ซึ่ งกาํหนดโดย
ตัวเลขจํานวนเต็ม กลาวคื ่ อหนวยเชิ
่ งตรรกะหมายเลข 5 หมายถึงเมื่อใช้งานหน้าตางคํ ่ าสั่งสําหรับ
เป็ นอินพุต และหนวยเชิ่ งตรรกะหมายเลข 6 หมายถึงเมื่อใช้งานหน้าตางคํ ่ าสั่งสําหรับเป็ นเอาต์พตุ
คา่หนวยเชิ
่ งตรรกะทั้ งสองนี้ จะถูกเกบไว้็ ในคาคงที
่ ่พิเศษ %io ซึ่ งมีประโยชน์มากในการทํางานกบั
ระบบอินพุตและเอาต์พตุ ของโปรแกรม SCILAB ตัวอยางการใช้ ่ งานของคําสั่งนี้ เชน่
25
-->%io
%io =
5. 6. //เวกเตอร์ขนาด 1×2 คา่ 5 สําหรับอินพุต และคา่ 6 สําหรับเอาต์พตุ

-->%io(1) //คา่ 5 สําหรับอินพุต


ans =
5.

-->%io(2) //คา่ 6 สําหรับเอาต์พตุ


ans =
6.

่ ่พิเศษทั้ งหมดที่กลาวมานี
นอกจากคาคงที ่ ํ ่ ่พิเศษอื่นๆ ขึ้ นมาใหม่
้ แล้ว ผูใ้ ช้ยงั สามารถที่จะกาหนดคาคงที
ได้โดยใช้คาํ สัง่ predef ในโปรแกรม SCILAB สําหรับผูส้ นใจลองใช้คาํ สัง่ help เพื่อศึกษา
รู ปแบบการใช้งานของคําสั่ง predef

2.2 เมทริกซ์ ค่าคงที่


่ ่ (constant matrix) คือ เมทริ กซ์ที่มีสมาชิกแตละ
เมทริ กซ์คาคงที ่ ตัวเป็ นเลขจํานวนจริ ง (real number)
หรื อเลขจํานวนเชิ งซ้อน (complex number) โดยทัว่ ไปแล้วคา่สเกลาร์ (scalar) และเวกเตอร์
(vector) กถื็ อวาเป็
่ นเมทริ กซ์แบบหนึ่ ง ดังนั้ นในสวนนี
่ ้ จะขออธิ บายถึงการสร้างตัวแปรสเกลาร์
เวกเตอร์ และเมทริ กซ์ ดังนี้

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.

ผลลัพธ์ที่ได้หมายความวา่ตัวแปร a และ b มีขนาด 1×1 (หรื อขนาด 1 แถว และ 1 แนวตั้ ง)

2.2.2 เวกเตอร์
เวกเตอร์ คือ เมทริ กซ์ขนาดหนึ่ งแถวหรื อเมทริ กซ์ขนาดหนึ่ งแนวตั้ ง เวกเตอร์ แถว (row vector)
สามารถสร้างได้โดยการใช้เครื่ องหมายคอมมา่ (comma) “,” หรื อชองวาง ่ ่ (space) เป็ นตัวแยก
สมาชิกแตละ่ สมาชิกในเวกเตอร์ แถว เชน่

-->v = [1, 2, -3]


v =
1. 2. - 3.

-->v = [1 2 -3]
v =
1. 2. - 3.
27

ผลลัพธ์ที่ได้คือเวกเตอร์แถว v ที่มีสมาชิกอยูส่ ามตัว (หรื อมีขนาดเทากบ


่ ั 1×3) มีคาเทากบ
่ ่ ั 1, 2,
และ -3 ตามลําดับ เชนเดี ่ ยวกนถ้
ั าต้องการทราบวาเวกเตอร์
่ ่ ็
v มีขนาดเทาใดกสามารถทําได้โดย
การใช้คาํ สัง่ size ดังนี้

-->size(v)
ans =
1. 3.

ซึ่ งบอกวา่เวกเตอร์ v มีขนาดเทากบ


่ ั 1×3 (หรื อ 1 แถว และ 3 แนวตั้ ง) และถ้าต้องการทราบวา่

เวกเตอร์ v มีความยาวเทาใดหรื ่ กสามารถทํ
อมีจาํ นวนสมาชิกทั้ งหมดเทาใด ็ าได้โดยการใช้คาํ สั่ง
length ดังนี้

-->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.

่ อถ้าเครื่ องหมายบวก (หรื อเครื่ องหมายลบ) อยูต่ ิดกบตั


กลาวคื ั วเลข โปรแกรม SCILAB จะถือวา่

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

ในขณะที่เวกเตอร์ แนวตั้ ง (column vector) สามารถสร้างได้โดยการหาทรานส์โพส11


(transpose) ของเวกเตอร์ แถวโดยใช้เครื่ องหมาย single quote “ ' ” ตามหลังตัวแปรเวกเตอร์ แถว
่ โดยตรงโดยการใช้เครื่ องหมายเซมิโคลอนเป็
หรื อสามารถสร้างเวกเตอร์ แนวตั้ งขึ้ นใหมได้ ่ นตัวแยก
่ สมาชิกในเวกเตอร์ แนวตั้ ง เชน่
สมาชิกแตละ

-->v = [1 2 3]; //สร้างเวกเตอร์แถว v

-->v' ั
//ใช้ทรานส์โพสกบเวกเตอร์ แถวเพื่อให้ได้เป็ นเวกเตอร์แนวตั้ ง
ans =
1.
2.
3.

-->w = [1; 2; -3] ่


//สร้างเวกเตอร์แนวตั้ งขึ้นมาโดยใช้เครื่ องหมายเซมิโคลอน
w =
1.
2.
- 3.


นอกจากการกาหนดคาโด ่ ยตรงให้กบเวกเตอร์
ั ํ ่
แล้ว ผูใ้ ช้ยงั สามารถกาหนดคาของเวกเตอร์
ให้มีค่าเพิ่มขึ้ นหรื อลดลงแบบอัตโนมัติได้ โดยการใช้เครื่ องหมายโคลอน ่ (colon) “ : ” เข้าชวย

ซึ่ งมีรูปแบบการใช้งานดังนี้

่ ่ มต้น : คาที
ชื่อตัวแปร = คาเริ ่ ่เพิ่มขึ้ น (หรื อคาที
่ ่ลดลง) : คาสุ
่ ดท้าย

ในกรณี ที่ไมมี่ การกาหนดคาที


ํ ่ ่เพิ่มขึ้ น (หรื อคาที
่ ่ลดลง) โปรแกรม SCILAB จะกาหนดให้
ํ ่ ่
เป็ นคาที
่ ั +1 โดยอัตโนมัติ (คาโดยปริ
เพิม่ ขึ้ นเทากบ ่ ่ ่
ยาย) ตัวอยางเชน

-->z = 1:2:10 //เริ่ มต้นที่ค่า 1 แล้วเพิ่มขึ้ นทีละ +2 จนกระทัง่ ถึงคาที


่ ่มากที่สุดที่ไมเกน
่ ิ 10
z =
1. 3. 5. 7. 9.

11
ทรานส์โพสของเวกเตอร์ เป็ นการเปลี่ยนเวกเตอร์แนวตั้ งให้เป็ นเวกเตอร์แถว หรื อการเปลี่ยนเวกเตอร์แถวให้เป็ น
เวกเตอร์แนวตั้ง (ดูรายละเอียดของการทรานส์โพสเพิ่มเติมในหัวข้อที่ 2.2.3.1)
29

-->z = 10:-2.5:0 //เริ่ มต้นที่ค่า 10 แล้วลดลงทีละ -2.5 จนกระทัง่ ถึงคาที


่ ่นอ้ ยที่สุดที่ไมเกน
่ ิ 0
z =
10. 7.5 5. 2.5 0.

-->z = 0:5 //เริ่ มต้นที่ค่า 0 แล้วคาเพิ


่ ่มขึ้ นทีละ +1 จนกระทัง่ ถึง 5
z =
0. 1. 2. 3. 4. 5.

-->z = 5:0 ่ ่ มต้นที่ 5ไมสามารถเพิ


//คาเริ ่ ่มขึ้ นทีละ +1 จนถึง 0 ได้ ดังนั้ นผลลัพธ์ที่ได้จึงเป็ น
z = ่ (empty matrix) นัน่ คือมีจาํ นวนแถวกบจํ
//เมทริ กซ์วาง ั านวนแนวตั้ งเทากบศู
่ ั นย์
[]

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.

ซึ่ งบอกวา่เมทริ กซ์ A มีขนาด 2×3 (หรื อ 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(:, 2) //แสดงข้อมูลทุกแถวเฉพาะในแนวตั้ งที่สอง


ans =
2.
5.

-->A(1:2, 2:3) //แสดงข้อมูลเฉพาะในแถวที่หนึ่งถึงแถวที่สอง


ans = //และแนวตั้ งที่สองถึงแนวตั้ งที่สาม
2. 3.
5. 10.

-->A(:, [1 3 3]) //แสดงข้อมูลทุกแถวเฉพาะในแนวตั้ งที่หนึ่ง แนวตั้ งที่สาม


ans = //และแนวตั้ งที่สามซํ้ าอีกครั้ ง
1. 3. 3.
4. 10. 10.
31

-->A(:, 3) = [] //ทําการลบข้อมูลทุกแถวเฉพาะในแนวตั้ งที่สาม


A =
1. 2.
4. 5.

สังเกตจะพบวา่ ณ ตอนนี้ เมทริ กซ์ A จะมีจาํ นวนแถวและแนวตั้ งเทากน ่ ั นัน่ คือเป็ นเมทริ กซ์ขนาด
่ นเมทริ กซ์จตั ุรัส12 (square matrix) ถ้าต้องการอ้างถึง
2×2 ในกรณี น้ ี เมทริ กซ์ A จะถูกเรี ยกวาเป็

สมาชิกตัวท้ายสุ ดในแตละแถว ่ แนวตั้ ง) ก็สามารถทําได้โดยการให้ใช้เครื่ องหมาย “$”
(หรื อแตละ
่ เชน่
ตัวอยาง

-->A(1, $) //แสดงข้อมูลในแถวที่หนึ่งและแนวตั้ งสุ ดท้าย


ans =
2.

-->A($, 2) //แสดงข้อมูลในแถวสุ ดท้ายและแนวตั้ งที่สอง


ans =
5.

นอกจากนี้โปรแกรม SCILAB ยังอนุญาตให้นาํ เมทริ กซ์หลายๆ เมทริ กซ์มาประกอบกนั


่ เชน่
เป็ นเมทริ กซ์ขนาดใหญได้

-->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

2.2.4 การหาทรานส์ โพสเมทริกซ์


ทรานส์โพสเมทริ กซ์ (matrix transpose) เป็ นการเปลี่ยนแนวตั้ งให้เป็ นแถว และเปลี่ยนแถวให้เป็ น
แนวตั้ ง โปรแกรม SCILAB สามารถทําการทรานส์โพสเมทริ กซ์ได้ 2 รู ปแบบ คือ
1) ทรานส์โพสแบบสังยุค (conjugate transpose) จะใช้เครื่ องหมาย “ ' ” เป็ นตัวดําเนินการ
โดยทําหน้าที่สร้างทรานส์โพสเมทริ กซ์ พร้อมทั้ งทําการสังยุคของตัวเลขเชิงซ้อนด้วย
2) ทรานส์โพสแบบธรรมดา (transpose) จะใช้เครื่ องหมาย “ .' ” เป็ นตัวดําเนิ นการ โดยจะ
่ ้น
สร้างเฉพาะทรานส์โพสเมทริ กซ์เทานั
ตัวอยา่งการใช้งานเชน่

-->A = [1 + 2*%i; 3; 2 - %i] //สร้างเวกเตอร์แนวตั้ ง


A =
1. + 2.i
3.
2. - i

-->A' //ใช้ทรานส์โพสแบบสังยุค
ans =
1. - 2.i 3. 2. + i //ทําการสังยุคของตัวเลขเชิงซ้อนด้วย

-->A.' //ใช้ทรานส์โพสแบบธรรมดา
ans =
1. + 2.i 3. 2. - i

2.2.5 การหาดีเทอร์ มิแนนต์


่ ้ นที่สามารถจะคํานวณหาคา่ดีเทอร์มิแนนต์ (determinant) ได้ ในที่น้ ีจะยกตัวอยาง
เมทริ กซ์จตั ุรัสเทานั ่
การหาดีเทอร์มิแนนต์ของเมทริ กซ์แบบงายๆ ่ ดังนี้

ถ้ากาหนดให้ ่ ่ ั
เมทริ กซ์ A มีคาเทากบ

⎡a b⎤
A=
⎢⎣c d ⎥⎦
33

ั ่ ดีเทอร์ มิแนนต์ของเมทริ กซ์ A มีค่าเท่ากบั a*d – c*b ในโปรแกรม SCILAB


เป็ นที่ทราบกนวา
การหาดีเทอร์มิแนนต์ของเมทริ กซ์ A สามารถทําได้โดยการใช้คาํ สัง่ det(A) ดังนี้

-->A = [1 2; 3 4]; //การหาคา่ดีเทอร์มิแนนต์ของเมทริ กซ์ขนาด 2×2

-->det(A) //det(A) = 1*4 – 3*2 = 4 – 6 = -2


ans =
- 2.

-->B = [1 2 3; 2 -1 4; -3 1 2];

-->det(B) //หาคา่ดีเทอร์มิแนนต์ของเมทริ กซ์ขนาด 3×3


ans =
- 41.

2.2.6 การหาอินเวอร์ สการคณของเมทริ


ู กซ์

อินเวอร์ สการคูณของเมทริ กซ์มีประโยชน์มากในการแกสมการคณิ ตศาสตร์ เฉพาะเมทริ กซ์จตั ุรัส
่ ้ นที่สามารถหาอินเวอร์สการคูณของเมทริ กซ์ได้ เพราะฉะนั้ นถ้าให้ A เป็ นเมทริ กซ์จตั ุรัสใดๆ
เทานั
อินเวอร์ สการคูณของเมทริ กซ์ A คือ A-1 โดยที่ AA-1 = I และ I เป็ นเมทริ กซ์เอกลักษณ์13
่ การหาอินเวอร์สการคูณของเมทริ กซ์ขนาด 2×2
(identity matrix) แบบจัตุรัส ในที่น้ ี จะยกตัวอยาง

ดังตอไปนี ้
ํ เมทริ กซ์ A มีค่าเทากบ
ถ้ากาหนดให้ ่ ั

⎡a b⎤
A=
⎢⎣c d ⎥⎦

่ นเวอร์ สการคูณของเมทริ กซ์ A มีคาเทากบ


จากการคํานวณทางคณิ ตศาสตร์จะได้วาอิ ่ ่ ั

−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⎥⎦

่ ่แสดงข้างต้นจะพบวา่ เมทริ กซ์ใดที่มีคา่ดีเทอร์มิแนนต์ไมเทากบคา


จากตัวอยางที ่ ่ ั ่ 0 กจะ ็
สามารถหาคาอิ ่ นเวอร์ สการคูณของเมทริ กซ์ได้ ซึ่ งโดยทัว่ ไปจะเรี ยกเมทริ กซ์ลกั ษณะนี้ วา่ “นอนซิ ง
่ เมทริ กซ์ (nonsingular matrix)” สวนเมทริ
กูลาร์ ่ ่
กซ์ที่ไมสามารถหาค ่าอินเวอร์ สของตัวมันเองได้
่ คือ มีคา่ดีเทอร์มิแนนต์เทากบคา
(กลาว ่ ั ่ 0) จะเรี ยกวา่ “ซิ งกูลาร์
่ เมทริ กซ์ (singular matrix)” ใน
โปรแกรม SCILAB การหาอินเวอร์ สการคูณของเมทริ กซ์ A สามารถทําได้โดยการใช้คาํ สั่ง
inv(A) เชน ่

-->A = [1 2; 3 4]; //สร้างเมทริ กซ์ A

-->inv(A) //หาอินเวอร์สการคูณของเมทริ กซ์ A


ans =
- 2. 1.
1.5 - 0.5

-->A\1 //เป็ นการหาอินเวอร์สการคูณของเมทริ กซ์ A อีกรู ปแบบหนึ่ง


ans =
- 2. 1.
1.5 - 0.5

-->1/A ่ ั
//เทียบเทากบการใช้
คาํ สัง่ A\1
ans =
- 2. 1.
1.5 - 0.5


จะเห็นได้วาการห าอินเวอร์สการคูณของเมทริ กซ์ นอกจากจะใช้คาํ สัง่ inv(x) แล้ว ยังสามารถที่
จะใช้เครื่ องหมายหารในการหาอินเวอร์สการคูณของเมทริ กซ์ได้เชนกน่ ั สวนการจะใช้
่ เครื่ องหมาย
หารซ้าย “\” หรื อเครื่ องหมายหารขวา “/” จะขึ้ นอยูก่ บตํ
ั าแหนงของเมทริ
่ ่ ด่ า้ นไหน
กซ์ A วาอยู
35

่ างต้น) การใช้เครื่ องหมายหารในการหาอินเวอร์ ส


ของเครื่ องหมายหาร (ตามที่แสดงในตัวอยางข้
่ าให้โปรแกรมมีความกะทัดรัด
การคูณของเมทริ กซ์มีประโยชน์มากในการเขียนโปรแกรม เพราะชวยทํ
และประมวลผลได้เร็ วขึ้ น
่ อยมาก
การหาอินเวอร์สการคูณของเมทริ กซ์บางครั้ งผลลัพธ์ที่ได้ของสมาชิกบางตัวที่มีคาน้
ดังนั้ นโปรแกรม SCILAB จึงได้เตรี ยมคําสั่ง clean เพื่อทําหน้าที่ปรับคาที ่ ่นอ้ ยมากเหลานั
่ ้น
่ มบูรณ์นอ้ ยกวาคา
(ถ้าคาสั ่ ่ 10−10) ให้มีคาเป็
่ นคา่ 0 ดังแสดงในตัวอยางตอไปนี
่ ่ ้
-->A = [1 2 1; 2 3 2; 1 4 2];

-->X = A*inv(A) //จากคุณสมบัติอินเวอร์สการคูณของเมทริ กซ์จะได้วา่ AA-1 = I


X =
1. 2.220D-16 0.
0. 1. 0.
0. 0. 1.

-->Y = clean(X)
Y =
1. 0. 0.
0. 1. 0.
0. 0. 1.

2.2.7 การสลับตําแหน่ งสมาชิกภายในเมทริกซ์



การทํางานกบเมทริ กซ์บางครั้ งมีความจําเป็ นที่จะต้องสลับตําแหนง่สมาชิกภายในเมทริ กซ์ (หรื อ

เปลี่ยนรู ปรางของเมทริ กซ์) ให้อยูใ่ นรู ปแบบที่ตอ้ งการเพื่อนําไปใช้งานเฉพาะด้าน คําสัง่ ที่ทาํ หน้าที่
ในลักษณะนี้ได้แก่

2.2.7.1 คําสั่ ง mtlb_fliplr



เป็ นคําสัง่ ที่ใช้ในการสลับตําแหนงของสมาชิ ่ าสั่งนี้ จะ
กในเมทริ กซ์จากซ้ายไปขวา สังเกตจะพบวาคํ
เริ่ มต้นด้วยคําวา่ “mtlb” ซึ่ งเป็ นตัวที่บอกวาคํ
่ าสั่งนี้ มาจากโปรแกรม MATLAB14 (ในกรณี น้ ีมา
จากคําสัง่ ในโปรแกรม MATLAB ที่ชื่อวา่ fliplr) ตัวอยางเชน ่ ่

14
โปรแกรม SCILAB มีฟังกชั์ นในการแปลงโปรแกรมที่เขียนโดยภาษา MATLAB ให้อยูใ่ นรู ปของโปรแกรมที่

สามารถนํามาใช้งานในโปรแกรม SCILAB ได้ตามข้อกาหนดของโปรแกรม SCILAB (ดูรายละเอียดเพิ่มเติมที่
36
-->A = [1 2 3 4; 5 6 7 8]
A =
1. 2. 3. 4.
5. 6. 7. 8.

-->B = mtlb_fliplr(A) //เมทริ กซ์ B กคื็ อเมทริ กซ์ A ที่สลับตําแหนงของ


่ สมาชิก
B = ่
//ในแตละแถว จากซ้ายไปขวา
4. 3. 2. 1.
8. 7. 6. 5.

2.2.7.2 คําสั่ ง matrix


่ ยังคงเทากบ
เป็ นคําสั่งที่ใช้ในการเปลี่ยนขนาดของเมทริ กซ์ โดยจํานวนสมาชิกของเมทริ กซ์ใหมจะ ่ ั
จํานวนสมาชิกของเมทริ กซ์เดิม รู ปแบบการใช้งานของคําสั่งนี้ คือ

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 กจะดึ ็ งข้อมูลที่
็ ในรู ปของเวกเตอร์ ชัว่ คราวทีละตัวจากซ้ายไปขวามาสร้างเป็ นเมทริ กซ์ใหม่ ให้พิจารณา
จัดเกบไว้
่ ่
ตัวอยางตอไปนี ้ จะได้เข้าใจถึงการใช้งานคําสั่งนี้ มากขึ้ น

เมนูหลัก Applications และเมนูยอย ่ m2sci ในแถบเมนูของหน้าตางคํ ่ าสัง่ ) นอกจากนี้ในโปรแกรม SCILAB


จะมีคาํ สัง่ ที่ข้ ึนต้นด้วย mtlb หลายคําสัง่ (ศึกษารายละเอียดเพิ่มเติมได้จากการใช้คาํ สัง่ help mtlb)
37
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6. ็ ในเวกเตอร์ชวั่ คราว คือ [1 4 2 5 3 6]
//ข้อมูลที่ถูกจัดเกบไว้

-->B = matrix(A, 1, 6) //สร้างเมทริ กซ์ B ขนาดหนึ่งแถวและหกแนวตั้ ง จากเมทริ กซ์ A


B =
1. 4. 2. 5. 3. 6.

-->C = matrix(A, 3, 3) ่ ่ ั
//จํานวนสมาชิกของเมทริ กซ์ C ไมเทากบของ เมทริ กซ์ A
!--error 60
argument with incompatible dimensions

-->D = matrix(A, 3, 2) //สร้างเมทริ กซ์ D ขนาดสามแถวและสองแนวตั้ ง จากเมทริ กซ์ A


D =
1. 5.
4. 3.
2. 6.


คําสั่งสุ ดท้ายจะเป็ นการนําเอาข้อมูลในเวกเตอร์ ชวั่ คราวมาสร้างเป็ นเมทริ กซ์ใหมขนาด 3×2 โดย
่ กเรี ยงจากบนลงลางแล
ข้อมูลที่นาํ มาใช้ในเมทริ กซ์ใหมจะถู ่ ะจากซ้ายไปขวา

2.3 เมทริกซ์ ของสายอักขระ


สายอักขระ (character string) สามารถสร้างได้โดยการเขียนตัวอักขระภายในเครื่ องหมาย single

quote '…' หรื อเครื่ องหมาย double quote "…" เชน

--> x = 'Piya'
x =
Piya

-->y = "_Kovintavewat"
y =
_Kovintavewat

่ ั นอันเดียวได้โดยการใช้เครื่ องหมายบวก
ผูใ้ ช้สามารถที่จะนําสายอักขระสองอันมาตอกนเป็ “+” ดัง
่ ่
แสดงในตัวอยางตอไปนี ้
38
-->x + y
ans =
Piya_Kovintavewat

การสร้างเมทริ กซ์ของสายอักขระ (matrix of character strings) กสามารถทํ็ าได้โดย


ั ั
วิธีการเดียวกนกบการสร้ ่
างเมทริ กซ์ทวั่ ไปตามที่อธิบายไว้ในหัวข้อที่ผานมา เชน่

-->X = ['a' "b"; "c" 'd'] //สร้างเมทริ กซ์ของสายอักขระ X ขนาด 2×2


X =
!a b !
! !
!c d !

ข้อดีของโปรแกรม SCILAB อีกประการหนึ่งกคื็ อ ความสามารถในการนําเมทริ กซ์ของสายอักขระ


มาทําการประมวลผลได้ เชน่ โปรแกรม SCILAB สามารถทํา symbolic triangularization ของ
เมทริ กซ์ X โดยใช้คาํ สัง่ trianfml(X) นัน่ คือการทําให้สมาชิกของเมทริ กซ์ X ที่อยูใ่ ต้เส้น
ทแยงมุมหลัก (main diagonal) มีค่าเป็ นคา่ศูนย์ โดยใช้เทคนิ คทางคณิ ตศาสตร์ ที่เรี ยกวา่ “การ
่ ่
ดําเนินการตามแถวขั้ นมูลฐาน (elementary row-operation)” ตัวอยางเชน

-->Y = trianfml(X) //ผลลัพธ์จากการทํา symbolic triangularization ของเมทริ กซ์ X15


Y =
!c d !
! !
!0 c*b-a*d !

ถ้าต้องการทราบวา่เมทริ กซ์ X และ Y จะมีคาเทากบเทาใด


่ ่ ั ่ หากมีการกาหนดคาของตั
ํ ่ วแปร a, b,
็ ารถทําได้โดยการใช้คาํ สัง่ evstr เชน่
c, และ d กสาม

-->a = 1; b = 2; c = 3; d = 4; ํ ่ ของตัวแปรตางๆ
//กาหนดคา ่

-->evstr(X) //ประเมินคา่ (evaluate) ของเมทริ กซ์ X ตามคาของตั


่ ํ
วแปรที่กาหนด ให้
ans =

15
่ ้ ได้ในภาคผนวก ก
สามารถดูรายละเอียดวิธีการทํา symbolic triangularization ของตัวอยางนี
39
1. 2.
3. 4.

-->evstr(Y) ่
//ประเมินคาของเมทริ กซ์ Y
ans =
3. 4.
0. 2.

็ ดงั นี้
หรื อสามารถใช้คาํ สัง่ eval แทนคําสัง่ evstr กได้

-->eval(X) ่ ั าสัง่ evstr


//ให้ผลลัพธ์เทียบเทากบคํ
ans =
1. 2.
3. 4.

-->eval(Y)
ans =
3. 4.
0. 2.

2.4 พหนาม

พหุนาม (polynomial) คือ ผลรวมของจํานวนที่เขียนในรู ปการคูณของคาคงที ่ ่กบตั
ั วแปรตั้ งแต่ 1 ตัว
ํ งของตัวแปรแตละตั
ขึ้ นไป โดยที่เลขชี้ กาลั ่ วมีคา่เป็ นศูนย์หรื อจํานวนเต็มบวก อยางไรกตามหนั
่ ็ งสื อ
่ ้ จะพิจารณาเฉพาะกรณี ที่พหุนามเป็ นฟังกชั์ นของตัวแปรเพียงตัวเดียวเทานั
เลมนี ่ ้ น นัน่ คือโปรแกรม
SCILAB จะรองรับพหุนามที่มีรูปแบบดังนี้

2 n
y = a0 + a1x + a2x + … + an x

เมื่อพารามิเตอร์ x คือตัวแปรพหุ นาม, a = [a0 a1 a2 ... an] คือเวกเตอร์ ที่มีสมาชิกแตละ ่ ตัว


เป็ นคา่สัมประสิ ทธิ์16 (coefficient) ของพหุนาม, n คือดีกรี 17 (degree) ของพหุนาม, และ y คือ
สมการพหุ นาม ในโปรแกรม SCILAB คาสั ่ มประสิ ทธิ์ และดีกรี ของสมการพหุนามนี้สามารถหาได้

16
ศึกษารายละเอียดการใช้งานคําสัง่ coeff ที่ใช้ในการหาคา่สัมประสิ ทธิ์ได้ในหัวข้อที่ 9.4.3.4
17

ดีกรี ของพหุนาม (degree of polynomial) คือคาเลขชี ํ งที่มากที่สุดของพหุนามนั้ น
้ กาลั
40

่ ตอไป
โดยใช้คาํ สัง่ coeff(y) และ degree(y) ในสวน ่ นี้ จะอธิบายถึงการสร้างสมการพหุ นาม
และเมทริ กซ์พหุ นาม

2.4.1 สมการพหนาม

สมการพหุนามสามารถสร้างได้โดยใช้คาํ สัง่ poly ดังนี้

y = poly(a, "x", [flag])

ซึ่ งมีรูปแบบการใช้งานอยู่ 2 แบบ คือ



1) ถ้าพารามิเตอร์ a เป็ นเวกเตอร์ ผลลัพธ์ที่ได้คือ สมการพหุ นาม y ที่ถกู กาหนดโดยพารามิ เตอร์ x
และ flag เมื่อ x คือตัวแปรพหุ นาม และ flag เป็ นตัวเลือกที่มีการเรี ยกใช้งานดังนี้
flag = "coeff" ให้สร้างสมการพหุ นามจากคาสั ่ มประสิ ทธิ์ ที่กาหํ นดโดย a
flag = "roots" (คาโดยปริ ่ ยาย) หมายถึงให้สร้างสมการพหุนามจากรากหรื อคําตอบ

ของสมการพหุนามที่กาหนดโดย a

่ งานคําสั่ง poly ในกรณี น้ ี เชน่


ตัวอยางการใช้

-->p = poly([1 2], "s") //สร้างสมการพหุ นามจากคําตอบของสมการพหุนาม


p =
2
2 - 3s + s //นัน
่ คือ s = 1 และ s = 2 เป็ นคําตอบของ s2 − 3s + 2 = 0

-->q = poly([1 2 3], "x", "coeff") ่ มประสิ ทธิ์


//สร้างสมการพหุ นามจากคาสั
q =
2
1 + 2x + 3x

-->c = coeff(q) ่ มประสิ ทธิ์ ของพหุนามจะเรี ยงจากดีกรี นอ้ ยไปหาดีกรี มาก


//คาสั
c =
1. 2. 3.

-->d = degree(q)
d =
2. //ดีกรี ของพหุนาม
41


นอกจากนี้ยงั สามารสร้างตัวแปรพหุนามได้โดยตรง ด้วยวิธีการตอไปนี

-->x = poly(0, "s") ํ


//กาหนด ให้ x เป็ นตัวแปรพหุนาม
x =
s

-->y = 2 – 3*x + x^2


y =
2
2 - 3s + s

่ ่พิเศษ %s หรื อ %z ได้ดงั นี้


หรื อสามารถสร้างพหุ นามโดยใช้คาคงที
-->y = 2 – 3*%s + %s^2
y =
2
2 - 3s + s

-->y = 2 - 3*%z + %z^2


y =
2
2 - 3z + z

2) ถ้าพารามิเตอร์ a เป็ นเมทริ กซ์ ผลลัพธ์ที่ได้คือ สมการลักษณะเฉพาะ (characteristic equation)


ของเมทริ กซ์ a กอน่ ที่จะแสดงตัวอยางการใช้
่ งานคําสั่ง poly สําหรับกรณี น้ ีจะขออธิบายถึง
วิธีการหาสมการลักษณะเฉพาะของเมทริ กซ์ A ดังตอไป ่ นี้
สมการลักษณะเฉพาะของเมทริ กซ์ A สามารถหาได้จากการหาคา่ดีเทอร์ มิแนนต์ของ
เมทริ กซ์ (A – λI) แล้วให้ผลลัพธ์ที่ได้มีค่าเป็ นคา่ 0 กลาวคื
่ อหาคา่ det(A – λI) = 0 โดยที่
่ ่ใดๆ และ I คือเมทริ กซ์เอกลักษณ์ที่มีขนาดกบัเมทริ กซ์ A เชน่ ถ้ากาหนดให้
λ คือคาคงที ํ
่ ่ ั
เมทริ กซ์ A มีคาเทากบ

⎡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 คือสมการ λ2 − 5λ − 2 = 0 ในโปรแกรม SCILAB


สามารถหาสมการลักษณะเฉพาะของเมทริ กซ์ A ได้โดยใช้คาํ สัง่ poly ดังนี้

-->A = [1 2; 3 4];

-->y = poly(A, "x")


y =
2
- 2 - 5x + x ่ ั ั
//ผลลัพธ์เทากนกบสมการ λ − 5λ − 2 เมื่อแทนคา่ x = λ
2


ถ้าต้องการหารากหรื อคําตอบของสมการลักษณะเฉพาะที่ได้มานี้ กสามารถทํ าได้โดยใช้คาํ สั่ง
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

2.4.2 เมทริกซ์ พหนุาม


เมทริ กซ์พหุ นาม (polynomial matrix) คือ เมทริ กซ์ที่มีสมาชิกเป็ นพหุ นาม โปรแกรม SCILAB
อนุญาตให้มีการนําตัวแปรพหุ นามมาจัดให้อยูใ่ นรู ปของเมทริ กซ์ได้เชนเดี
่ ยวกนกบคา
ั ั ่ สเกลาร์ ซึ่ งมี
ประโยชน์มากสําหรับการใช้งานทางด้านวิศวกรรม โดยวิธีการสร้างเมทริ กซ์พหุ นามก็จะเหมือนกบั
่ ่ ดังแสดงในตัวอยางตอไปนี
การสร้างเมทริ กซ์คาคงที ่ ่ ้

-->s = poly(0, 's');

-->A = [1, s; s, 1 + s^2]


A =
1 s
2
s 1 + s

-->B = [1/s, 1/(1+s); 1/(1+s), 1/s^2]


B =
1 1
- -----
s 1 + s

1 1
----- -
2
1 + s s

นอกจากนี้ยงั สามารถนําสมการพหุนามมาดําเนินการทางคณิ ตศาสตร์ เชน่ นํามาบวก ลบ คูณ และ


หารได้ เชน่ (ศึกษารายละเอียดเพิ่มเติมได้ในหัวข้อที่ 3.1.4)
-->C = A + B
C =
2
1 + s 1 + s + s
----- ---------
s 1 + s

2 2 4
1 + s + s 1 + s + s
--------- ---------
2
1 + s s
44

2.5 เมทริกซ์ บูลีน


่ ่พิเศษ %t และ %f สามารถนํามาสร้างเป็ นเมทริ กซ์บูลีน (Boolean matrix) ได้ดงั แสดงใน
คาคงที
่ ่
ตัวอยางตอไปนี

-->B = [%t, %T, %f, %F; ~%t, ~%T, ~%f, ~%F]


B =
T T F F
F F T T

-->[1 2 3] == [2 2 3] ั ่
//นําเวกเตอร์สองเวกเตอร์มาเปรี ยบเทียบกนวา
ans = ่ างที่มีค่าเทากน
//ที่ตาํ แหนงใดบ้ ่ ั
F T T

-->a = 1:5
a =
1. 2. 3. 4. 5.

-->a > 2 //ตรวจสอบดูวา่สมาชิกใดของเวกเตอร์ a ที่มีค่ามากกวาคา


่ ่ 2
ans =
F F T T T

-->a(ans) ่ สมาชิกในเวกเตอร์ a ที่มีค่ามากกวาคา


//แสดงคาของ ่ ่ 2
ans =
3. 4. 5.

จากผลลัพธ์ที่ได้พบวา่ มีการนําเอาตัวดําเนินการสัมพันธ์ (relational operator) ได้แก่ เครื่ องหมาย


่ ั “==” และเครื่ องหมายมากกวา่ “>” เป็ นต้น มาใช้ในการสร้างเมทริ กซ์บูลีน (ดูรายละเอียด
เทากบ
การใช้งานตัวดําเนินการสัมพันธ์ได้ในหัวข้อที่ 3.2.1)

2.6 เมทริกซ์ เลขจํานวนเต็ม


โปรแกรม SCILAB รองรับข้อมูลที่เป็ นตัวเลขจํานวนเต็ม (integer number) ซึ่ งมีอยูด่ ว้ ยกนทั
ั ้ งหมด
6 แบบ ดังนี้
่ ้ งแต่ -128 ถึง 127 (-27 ถึง 27 - 1)
1) เลขจํานวนเต็มขนาด 8 บิต มีคาตั
45

–1 +1

สัมพันธ์
underflow
min max
overflow
ู ่ 2.1 รู ปแสดงการเปลี่ยนแปลงของข้อมูล เมื่อเกดิ overflow และ underflow
รปที

2) เลขจํานวนเต็มขนาด 8 บิต แบบไมคิ่ ดเครื่ องหมาย มีคาตั


่ ้ งแต่ 0 ถึง 255 (0 ถึง 28 - 1)
3) ่ ้ งแต่ -32768 ถึง 32767 (-215 ถึง 215 - 1)
เลขจํานวนเต็มขนาด 16 บิต มีคาตั
4) เลขจํานวนเต็มขนาด 16 บิต แบบไมคิ่ ดเครื่ องหมาย มีคาตั
่ ้ งแต่ 0 ถึง 65535 (0 ถึง 216 - 1)
5) ่ ้ งแต่ – 2147483648 ถึง 2147483647
เลขจํานวนเต็มขนาด 32 บิต มีคาตั
(-231 ถึง 231 - 1)
6) เลขจํานวนเต็มขนาด 32 บิต แบบไมคิ่ ดเครื่ องหมาย มีคาตั
่ ้ งแต่ 0 ถึง 4294967295
(0 ถึง 2 - 1)
32

่ ้ สามารถกาหนดได้
โดยที่รูปแบบของเลขจํานวนเต็มเหลานี ํ โดยคําสั่ง int8, uint8, int16,

uint16, int32, และ uint32 ตัวอยางการใช้ ่ ้ เชน่
งานคําสั่งเหลานี

-->int8([-131 -129 -128 0 127 128 130])


ans =
125 127 -128 0 127 -128 -126

-->uint8([-3 -1 0 255 256 258])


ans =
253 255 0 255 0 2

-->int16([-32770 -32768 0 32767 32768 32770])


ans =
32766 -32768 0 32767 -32768 -32766
46
-->uint16([-3 -1 0 65535 65536 65538])
ans =
65533 65535 0 65535 0 2

-->int32([-2147483648 0 2147483647 2147483648 2147483649])


ans =
-2147483648 0 2147483647 -2147483648 -2147483648

-->uint32([-3 -1 0 4294967295 4294967296 4294967298])


ans =
4294967293 4294967295 0 4294967295 0 2

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

(underflow) โดยผลลัพธ์ที่ได้น้ น ั ปที่ 2.1
ั จะสอดคล้องกบรู
่ ข้างต้น ถ้าสังเกตจะพบวาไมมี
จากผลลัพธ์ที่ได้จากการใช้คาํ สัง่ ตางๆ ่ ่ จุดทศนิยมตามหลัง
่ ้ น ซึ่ งทางโปรแกรม SCILAB จะหมายถึงคา่เหลา่นั้ นเป็ นเลขจํานวนเต็ม (ถ้ามีจุด
ผลลัพธ์เหลานั
ทศนิยมตามหลังตัวเลขจะถือวา่ตัวเลขนั้ นเป็ นเลขจํานวนจริ ง) ถ้าหากต้องการเปลี่ยนเลขจํานวนเต็ม
่ าเป็ นสองเทา่ (double-precision floating point) กสามารถ
ให้เป็ นเลขจํานวนจริ งที่มีความแมนยํ ็
ทําได้โดยใช้คาํ สัง่ double เชน่

-->uint8([-3 -1 0 255 256 258])


ans =
253 255 0 255 0 2

-->double(ans)
ans =
253. 255. 0. 255. 0. 2. //มีจุดทศนิยมตามหลัง

2.7 ลิตซ์
ลิตซ์ (list) คือ กลุม่ ของข้อมูลประเภทตางๆ
่ ที่อยูร่ วมกนในตั
ั วแปรตัวเดียว ตัวแปรประเภทลิตซ์จะ
สามารถอ้างถึงข้อมูลได้หลายประเภทตามที่กาหนด ํ ซึ่ งจะมีประโยชน์มากในการเขียนโปรแกรม
โดยเฉพาะอยางยิ ่ ่งเมื่อต้องการจัดกลุ่มของข้อมูลประเภทตางๆ ่ ให้อยูภ่ ายในชื่อตัวแปรชื่อเดียวกนั

คําสั่งที่ใช้ในการกาหนดตั วแปรประเภทลิตซ์มีอยูส่ องแบบดังนี้
47

2.7.1 ลิตซ์ แบบธรรมดา



ลิตซ์แบบธรรมดา (ordinary list) สามารถกาหนดให้ สมาชิกตัวแรกของตัวแปรประเภทลิตซ์เป็ น
็ การกาหนดลิ
ข้อมูลประเภทไหนกได้ ํ ตซ์แบบนี้ จะใช้คาํ สั่ง list ซึ่ งมีลกั ษณะการใช้งาน คือ

list(a1, ..., an)

โดยที่พารามิเตอร์ ai (สําหรับ i = 1,2,3,...,n) คือ ข้อมูลประเภทตางๆ ่ ที่สามารถใช้ได้


ในโปรแกรม SCILAB พิจารณาตัวอยาง ่ ตอไปนี
่ ้ จะได้เข้าใจลักษณะการทํางานของลิตซ์แบบนี้

-->L = list(1, 'Piya', [1 2; 3 4])


L =

L(1) //เป็ นข้อมูลสเกลาร์


1.

L(2) //เป็ นข้อมูลสายอักขระ


Piya

L(3) //เป็ นข้อมูลเมทริ กซ์


1. 2.
3. 4.

่ วแปร L ประกอบไปด้วยสมาชิกสามตัว โดยที่สมาชิกแตละตั


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

-->L(2) //ดูค่าของสมาชิกตัวที่สองในตัวแปร L
ans =
Piya

-->L(3)(1,2) //ดูค่าของสมาชิกในแถวที่หนึ่งแนวตั้ งที่สองของสมาชิกตัวที่สามในตัวแปร L


ans =
2.

ํ ่ ใหม่ให้กบสมาชิ
ถ้าต้องการกาหนดคา ั ็
กบางตัวในตัวแปร L กสามารถทํ
าได้ดังนี้
48

-->L(1) = 1 + 2*%s - 3*%s^2; ํ


//กาหนดให้
สมาชิกตัวที่หนึ่งเป็ นพหุนาม
-->L
L =
L(1)
2
1 + 2s - 3s

L(2)
Piya

L(3)
1. 2.
3. 4.


นอกจากนี้ ยงั สามารถกาหนดตั วแปร L ให้ซับซ้อนมากขึ้ นได้โดยการกาห ํ นดให้สมาชิกบางตัวใน
ตัวแปร L เป็ นข้อมูลประเภทลิตซ์ ซึ่ งลิตซ์ลกั ษณะนี้จะถูกเรี ยกวา่ “nested-list” ดังแสดงในตัวอยาง


ตอไปนี้

-->L(1) = list('W', [1 2 3 4 5]);

-->L(2) = list('Piya', 'Kovintavewat');

-->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

2.7.2 ไทพ์ ลติ ซ์


ไทพ์ลิตซ์ (typed-list) เป็ นลิตซ์ที่สมาชิกตัวแรกจะต้องเป็ นสายอักขระหรื อเวกเตอร์ของสายอักขระ
่ ้ น สวน
เทานั ่ สมาชิกตัวอื่นจะเป็ นข้อมูลประเภทใดกได้็ พิจารณาตัวอยางการใช้
่ งานของลิตซ์แบบนี้
จะได้เข้าใจมากขึ้ น
-->L = tlist(['Car'; 'Name'; 'Dimensions'], 'Toyota', [1 2; 3 4])
L =
L(1)

!Car !
! !
!Name !
! !
!Dimensions !

L(2)
Toyota

L(3)
1. 2.
3. 4.

ั ใ้ ช้สามารถที่จะเรี ยกดูสมาชิกแตละตั
ในทํานองเดียวกนผู ่ วได้ดงั นี้

-->L(1) //เรี ยกดูค่าของสมาชิกตัวที่หนึ่งในตัวแปร L


ans =
!Car !
! !
!Name !
! !
!Dimensions !

-->L(2) //เรี ยกดูค่าของสมาชิกตัวที่สองในตัวแปร L


ans =
Toyota

-->L.Name //สามารถเรี ยกดูค่าของสมาชิกตัวที่สองในตัวแปร L ลักษณะนี้ ได้เชนกน


่ ั
ans =
Toyota
50
-->L(3)(2,2)
ans =
4.

-->L.Dimensions(2,2) ่ ยวกนก
//ได้ผลลัพธ์เชนเดี ั บั การใช้คาํ สัง่ L(3)(2,2)
ans =
4.

2.8 อาร์ เรย์ หลายมิติ



ในการทํางานที่ซับซ้อนบางครั้ ง อาจมีความจําเป็ นที่จะต้องกาหนดรู ปแบบของข้อมูลให้เป็ นแบบ
อาร์เรย์หลายมิติ (N-dimension array) ซึ่ งโดยทัว่ ไปแล้วการสร้างอาร์เรย์หลายมิติมีลกั ษณะคล้าย

กบการสร้ ่ ่
างเมทริ กซ์ทวั่ ไป ดังแสดงในตัวอยางตอไปนี ้

-->M(1,3,2) = 8 ํ
//กาหนดให้
สมาชิกในแถวที่หนึ่งและแนวตั้งที่สาม
M = //ของเมทริ กซ์ชุดที่สองมีค่าเทากบ
่ ั 8
(:,:,1) //เมทริ กซ์ชุดที่หนึ่ง
0. 0. 0.

(:,:,2) //เมทริ กซ์ชุดที่สอง


0. 0. 8.

-->M(:, :, 1) = [4 5 6] ํ ดให้เมทริ กซ์ชุดที่หนึ่งมีค่าเทากบ


//กาหน ่ ั [4 5 6]
M =
(:,:,1)
4. 5. 6.
(:,:,2)
0. 0. 8.

-->M(1, 3, :) //แสดงข้อมูลในแถวที่หนึ่งและแนวตั้ งที่สามของเมทริ กซ์ท้ งั สองชุด


ans =
(:,:,1)
6.
(:,:,2)
8.
51
-->size(M)
ans =
1. 3. 2.

นอกจากนี้ ยงั สามารถสร้างเมทริ กซ์หลายมิติได้โดยใช้คาํ สั่ง hypermat ซึ่ งมีรูปแบบ


การเรี ยกใช้งาน คือ

M = hypermat(dims, [entries])

โดยที่พารามิเตอร์
ƒ dims คือ เวกเตอร์แสดงขนาดของเมทริ กซ์หลายมิติ
ƒ entries ็ ่ สมาชิกแตละ
คือ เวกเตอร์ที่เกบคาของ ่ ตัวในเมทริ กซ์หลายมิติ (คาโดยปริ
่ ยายคือ 0)
่ ั านวน
นอกจากนี้ ผลคูณของขนาดทั้ งหมดของเมทริ กซ์หลายมิติจะต้องเทากบจํ
ของข้อมูลในเวกเตอร์ entries
่ การใช้งานคําสัง่ นี้ เชน่
ตัวอยาง

-->M = hypermat([2 3 2], 1:12) //ผลคูณของขนาด 2*3*2 = 12

M =

(:,:,1)
1. 3. 5.
2. 4. 6.

(:,:,2)
7. 9. 11.
8. 10. 12.

ในโปรแกรม SCILAB เมทริ กซ์หลายมิติจะถูกเข้ารหัสเป็ นข้อมูลประเภท mlists โดย


ที่มีตวั อ้างอิงแบบอัตโนมัติอยูส่ องตัว คือ dims ซึ่ งเป็ นพารามิเตอร์ ท่ีใช้แสดงขนาดของเมทริ กซ์
หลายมิติ และ entries ซึ่ งเป็ นพารามิเตอร์ ที่ใช้แสดงข้อมูลทั้ งหมดที่อยู่ในเมทริ กซ์หลายมิติ
ตัวอยาง ่ เชน่

-->M = hypermat([2 3 2], 1:12);

-->M.dims //แสดงขนาด (dimension) ของเมทริ กซ์ M


52
ans =
2 3 2

-->M.entries //แสดงข้อมูลทั้ งหมดภายในเมทริ กซ์ M


ans =
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

2.9 การตรวจสอบประเภทของข้ อมลู



จากที่กลาวมาในบทนี ่
้ จะพบวาโปรแกรม SCILAB สามารถทํางานกบข้ ั อมูลได้หลายประเภท เชน่
่ ่, เมทริ กซ์พหุนาม, เมทริ กซ์บูลีน, และลิตซ์ เป็ นต้น โดยทัว่ ไปผูใ้ ช้สามารถที่จะตรวจสอบดู
คาคงที
่ วแปรแตละตั
ได้วาตั ่ วเป็ นข้อมูลประเภทใด โดยใช้คาํ สัง่ typeof ซึ่ งมีลกั ษณะการใช้งานดังนี้

t = typeof(object)

โดยที่พารามิเตอร์ object คือ ตัวแปรที่ตอ้ งการจะตรวจสอบวาเป็่ นประเภทใด ส่ วนเอาต์พุต


อาร์กิวเมนต์ (output argument) t จะแสดงประเภทของตัวแปร ซึ่ งคาที
่ ่เป็ นไปได้มีดงั นี้
1) "constant" ่ ่ (จํานวนจริ งหรื อจํานวนเชิงซ้อน)
ถ้า object เป็ นเมทริ กซ์คาคงที
2) "polynomial" ถ้า object เป็ นเมทริ กซ์พหุนาม
3) "function" ถ้า object เป็ นฟังกชั์ น
4) "handle" ถ้า object เป็ นตัวควบคุมระบบอินพุตและเอาต์พตุ
5) "string" ถ้า object เป็ นเมทริ กซ์สายอักขระ
53

6) "boolean" ถ้า object เป็ นเมทริ กซ์บูลีน


7) "list" ถ้า object เป็ นข้อมูลประเภทลิตซ์ (ถ้าหาก object เป็ นข้อมูล
แบบ tlist คาพารามิ ่ เตอร์ t ที่ได้จะเป็ นตัวอักขระตัวแรกของ
สมาชิกตัวแรกในลิตซ์น้ นั )
8) "hypermat" ถ้า object เป็ นข้อมูลประเภท mlist
9) "rational" ถ้า object เป็ นเมทริ กซ์ตรรกยะ (rational matrix) โดยทัว่ ไปมักจะ
ใช้แสดงถึงฟังกชั์ นถายโอน
่ ั
(transfer function) ซึ่ งใช้งานกนมากใน
ทางวิศวกรรมระบบควบคุม
10) "state-space" ถ้า object เป็ นข้อมูลประเภทปริ ภมู ิสถานะ19
11) "sparse" ถ้า object เป็ นเมทริ กซ์มากเลขศูนย์20
12) "boolean sparse" ถ้า object เป็ นเมทริ กซ์ Boolean sparse

ตัวอยางการใช้
งานคําสั่ง typeof มีดงั นี้

-->typeof(3)
ans =
constant

-->typeof(poly(0, 'x'))
ans =
polynomial

-->deff('y=f(x)', 'y=2*x') ์ นขึ้ นมาใช้งาน (ดูรายละเอียดในหัวข้อที่ 5.3.4)


//นิยามฟังกชั
-->typeof(f)
ans =
function

-->typeof('Piya Kovintavewat')
ans =
string

-->typeof(1/poly(0, 'x'))

19
ปริ ภูมิสถานะ (state-space) คือ เทคนิคการคํานวณทางคณิ ตศาสตร์แบบหนึ่งซึ่ งใช้มากในทางวิศวกรรม
20
เมทริ กซ์มากเลขศูนย์ (sparse matrix) คือ เมทริ กซ์ที่มีสมาชิกที่มีค่าเทากบคา
่ ั ่ 0 อยูเ่ ป็ นจํานวนมาก
54
ans =
rational

-->typeof(%t)
ans =
boolean

-->m = sprand(50, 50, 0.001); //สร้างเมทริ กซ์มากเลขศูนย์แบบสุ่ มขนาด 50×50


-->typeof(m)
ans =
sparse

-->typeof(m > m)
ans =
boolean sparse

-->L = tlist(['V', 'A', 'B'], 10, 'Piya');


-->typeof(L)
ans =
V //แสดงอักขระตัวแรกของสมาชิกตัวแรกใน tlist

-->M = hypermat([2 3 2], 1:12);


-->typeof(M)
ans =
hypermat

ั าสั่ง typeof นัน่ คือ คําสัง่ type ซึ่ งมีรูปแบบ


นอกจากนี้ ยงั มีคาํ สั่งที่ทาํ หน้าที่คล้ายกบคํ
การใช้งานดังนี้

n = type(object)

โดยผลลัพธ์ที่ได้จะเป็ นเลขจํานวนเต็ม n ที่แสดงถึงประเภทของข้อมูล ตามที่โปรแกรม SCILAB



กาหนดไว้ดงั นี้
ƒ n = 1 ่ ่ (จํานวนจริ งหรื อจํานวนเชิงซ้อน)
ถ้า object เป็ นเมทริ กซ์คาคงที
ƒ n = 2 ถ้า object เป็ นเมทริ กซ์พหุนาม (polynomial matrix)
ƒ n = 4 ถ้า object เป็ นเมทริ กซ์บูลีน (Boolean matrix)
55

ƒ n = 5 ถ้า object เป็ นเมทริ กซ์มากเลขศูนย์ (sparse matrix)


ƒ n = 6 ถ้า object เป็ นเมทริ กซ์ Boolean sparse
ƒ n = 8 ่
ถ้า object เป็ นเมทริ กซ์ของเลขจํานวนเต็มที่ใช้พ้ืนที่ของหนวยความจํ
าใน
็ อมูลเทากบ
การเกบข้ ่ ั 1, 2, หรื อ 4 ไบต์
ƒ n = 9 ถ้า object เป็ นเมทริ กซ์ของตัวควบคุมกราฟริ ก (graphic handles)
ƒ n = 10 ถ้า object เป็ นเมทริ กซ์สายอักขระ
ƒ n = 11 ถ้า object เป็ นฟังกชั์ นที่ยงั ไมได้
่ แปลโปรแกรม (un-compiled function)
ƒ n = 13 ถ้า object เป็ นฟังกชั์ นที่ถูกแปลโปรแกรมแล้ว (compiled function)
ƒ n = 14 ถ้า object เป็ นฟังกชั์ นไลบรารี (library function)
ƒ n = 15 ถ้า object เป็ นข้อมูลประเภท list
ƒ n = 16 ถ้า object เป็ นข้อมูลประเภท tlist
ƒ n = 17 ถ้า object เป็ นข้อมูลประเภท mlist
ƒ n = 128 ถ้า object เป็ นตัวชี้ หรื อพอยต์เตอร์ (pointer)
่ งานคําสัง่ type เชน่
ตัวอยางการใช้

-->type(3)
ans =
1.

-->type(poly(0, 'x'))
ans =
2.

-->type([%t %f])
ans =
4.

-->m = sprand(50, 50, 0.001);


-->type(m)
ans =
5.
-->type(m>m)
ans =
6.
56
-->type('Piya Kovintavewat')
ans =
10.

-->deff('y=f(x)', 'y=2*x');
-->type(f)
ans =
13.

-->type(elemlib)
ans =
14.

-->L = tlist(['V', 'A', 'B'], 10, 'Piya');


-->type(L)
ans =
16.

-->type(hypermat([2 3 2], 1:12))


ans =
17.

2.10 ตัวอย่ างการคํานวณ


่ ้ จะยกตัวอยางการแกไข
ในสวนนี ่ ้ ปัญหาโจทย์ทางคณิ ตศาสตร์โดยใช้โปรแกรม SCILAB ดังตอไปนี
่ ้

ตัวอย่ างที่ 1 จงหาคา่ของฟังกชั์ น f ( x) = 2x -3 เมื่อ x มีคาเทากบ


่ ่ ั −5, 0, และ 5
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ หาได้จากการใช้ชุดคําสั่งดังนี้
-->x = [-5 0 5];

-->fx = 2*x - 3
fx =
- 13. - 3. 7.

่ ่ ั -13, -3, และ 7 เมื่อ x มีคาเทากบ


นัน่ คือ f(x) มีคาเทากบ ่ ่ ั −5, 0, และ 5 ตามลําดับ
57

ตัวอย่ างที่ 2 จงพิสูจน์คุณสมบัติของเมทริ กซ์วา่ (A + B)C = AC + BC เมื่อ

⎡1 2⎤ ⎡5 6 ⎤ ⎡ −1⎤
A=
⎢⎣3 4⎥⎦ , B = ⎢⎣8 7 ⎥⎦ , และ C = ⎢⎣ 2 ⎥⎦

วิธีทาํ ผูใ้ ช้สามารถพิสูจน์คุณสมบัติของเมทริ กซ์น้ ีได้จากการใช้ชุดคําสัง่ ดังนี้


-->A = [1 2; 3 4];

-->B = [5 6; 7 8];

-->C = [-1; 2];

-->y = (A+B)*C
y =
10.
14.

-->z = A*C + B*C


z =
10.
14.

่ ั ดังนั้ นจึงสรุ ปได้วาเมทริ


ซึ่ งจะได้ผลลัพธ์เทากน ่ กซ์ (A + B)C = AC + BC


ตัวอย่ างที่ 3 กาหนดให้
เมทริ กซ์

⎡1 2 3 ⎤
A = ⎢2 1 2⎥
⎢3 2 1 ⎥
⎣ ⎦

จงหาคา่ดีเทอร์มิแนนต์, อินเวอร์ สการคูณ, สมการลักษณะเฉพาะ, และคําตอบของสมการลักษณะ


เฉพาะที่ได้
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ สามารถหาได้จากการใช้ชุดคําสัง่ ดังนี้

-->A = [1 2 3; 2 1 2; 3 2 1];
58

-->d = det(A) //หาดีเทอร์มิแนนต์


d =
8.

-->Ai = inv(A) //หาอินเวอร์สการคูณของเมทริ กซ์ A


Ai =
- 0.375 0.5 0.125
0.5 - 1. 0.5
0.125 0.5 - 0.375

-->I = clean(A*Ai) //ตรวจคําตอบอินเวอร์สการคูณของเมทริ กซ์


I =
1. 0. 0.
0. 1. 0.
0. 0. 1.

-->y = poly(A, 'x') //หาสมการลักษณะเฉพาะ


y =
2 3
- 8 - 14x - 3x + x

-->z = roots(y) //หาคําตอบของสมการลักษณะเฉพาะ


z =
- 0.7015621
- 2.
5.7015621

-->z2 = spec(A) //หาคําตอบของสมการลักษณะเฉพาะโดยใช้คาํ สัง่ spec


z2 =
- 2.
- 0.7015621
5.7015621

ตัวอย่ างที่ 4 จงหาคําตอบของสมการพหุนาม x4 – 10x3 + 35x2 – 50x + 24 = 0

วิธีทาํ คําตอบของสมการพหุนามนี้ หาได้จากการใช้ชุดคําสัง่ ดังนี้


-->x = poly(0, 'x');
59

-->y = x^4 - 10*x^3 + 35*x^2 - 50*x + 24; ํ ง


// “^ ” คือเครื่ องหมายเลขชี้ กาลั
-->z = roots(y)
z =
1.
2.
3.
4.

ดังนั้ นคําตอบของสมการพหุ นามนี้คือ x = 1, 2, 3, และ 4

ตัวอย่ างที่ 5 จงหาสร้างสมการพหุนามให้อยูใ่ นรู ปของตัวแปร x โดยให้คาํ ตอบของสมการนี้ มีค่า


่ ั x = {2, -2, 1 + i, 1 – i} เมื่อ i = -1
เทากบ
วิธีทาํ ํ
สมการพหุนามที่มีคาํ ตอบตามที่โจทย์กาหนด สามารถหาได้ดงั นี้
-->x = [2, -2, 1 + %i, 1 - %i]
x =
2. - 2. 1. + i 1. - i

-->y = poly(x, 'x')


y =
2 3 4
- 8 + 8x - 2x - 2x + x

นัน่ คือ x = {2, -2, 1 + i, 1 – i} คือ คําตอบของสมการ x4 – 2x3 - 2x2 + 8x - 8 = 0

2.11 สรปุ
ในบทนี้ ได้อธิบายวิธีการสร้างข้อมูลประเภทตางๆ ่ เชน่ คาคงที ่ ่, เมทริ กซ์สาย
่ ่พิเศษ, เมทริ กซ์คาคงที

อักขระ, พหุนาม, เมทริ กซ์บูลีน, และลิตซ์ เป็ นต้น พร้อมทั้ งแสดงตัวอยางการใช้โปรแกรม SCILAB
้ ญหาโจทย์ทางคณิ ตศาสตร์ ซึ่ งเมื่อเข้าใจถึงลักษณะของข้อมูลแตละประเภทแล้
ในการแกไขปั ่ ว
็ าให้สามารถสร้างตัวแปรสําหรับจัดเกบ็ข้อมูลแตละประเภทได้
กจะทํ ่ ่ กต้องและตรงกบความ
อยางถู ั
ต้องการในการใช้งาน
60

2.12 แบบฝึ กหัดท้ ายบท



2.1 จงคํานวณหาคาของฟั งกชั์ น f ( x ) = − 5x + 3 เมื่อ x มีคาเทากบ
่ ่ ั −10, −5, 0, 5, และ 10

2.2 กาหนดให้
⎡5 8 7 ⎤ ⎡−1 2 −3⎤ ⎡ 3 1 2⎤
A = ⎢4 2 6⎥ , B = ⎢ 2 −4 5 ⎥ , C = ⎢ −1 2 1 ⎥
⎢9 8 9 ⎥ ⎢2 3 1⎥ ⎢ −2 −1 1 ⎥
⎣ ⎦ ⎣ ⎦ ⎣ ⎦
⎡−2⎤
D = [1 2 3] , และ E= ⎢0⎥
⎢2⎥
⎣ ⎦
่ ่
จงหาคาตอไปนี

2.2.1) A+B–C

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.3) (AT)T = A โดยที่ (.)T คือ เครื่ องหมายทรานส์โพสของเมทริ กซ์


2.3.4) (kA)T = kAT ่ ่ใดๆ
โดยที่ k คือ คาคงที
2.3.5) (A + B)T = AT + BT

2.3.6) (AB)T = BTAT

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)

2.4.3) det(AB) = det(A)det(B)

2.4.4) det(A\B) = det(A)\det(B)

2.4.5) det(A/B) = det(A)/det(B)

2.4.6) det(A + B) ≠ det(A) + det(B)

2.4.7) (A−1)−1 = A โดยที่ (.)-1 คือ เครื่ องหมายอินเวอร์สการคูณ


2.4.8) (AB)−1 = B−1A−1

2.4.9) A/B = AB−1

2.4.10) A\B = A−1B



2.5 กาหนดให้
⎡ 1 1 − 2i ⎤ ⎡ i 2i ⎤
A= B=
⎢⎣1 + 2i 1 ⎥⎦ ⎢⎣3i 4i ⎥⎦

เมื่อ i = −1 ่ ่
จงคํานวณหาคาตอไปนี
้ พร้อมทั้ งอธิบายผลลัพธ์ที่ได้
62

2.5.1) AT โดยที่ (.)T คือ ทรานส์โพสเมทริ กซ์แบบธรรมดา


2.5.2) AH โดยที่ (.)H คือ ทรานส์โพสเมทริ กซ์แบบสังยุค
2.5.3) AT + BH

2.5.4) (AB)H

2.5.5) BHAH

2.6 จงหาสมการลักษณะเฉพาะของเมทริ กซ์ต่อไปนี้ พร้อมทั้ งหาคําตอบของสมการลักษณะเฉพาะ


ที่ได้
⎡ 2 3⎤
2.6.1) A=
⎢⎣ 4 5⎥⎦

⎡ 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 จงหาสร้างสมการพหุนามในรู ปของตัวแปร x ที่มีรากหรื อคําตอบของสมการดังนี้


2.7.1) x = {1, 2, 3}

2.7.2) x = {-3, 0, 2}

2.7.3) x = {2, 1 + i, 1 – i}

2.7.4) x = {−5, −3, −1, 0, 1, 3, 5 }

2.7.5) x = {−3, 0, 3, −1 + 3i, −1 – 3i, 2 – 4i, 2 + 4i }

่ ่
2.8 จงสร้างข้อมูลประเภท list, tlist, และ mlist พร้อมทั้ งอธิ บายข้อแตกตางระหวาง

ข้อมูลแตละประเภท
บทที่ 3
ตัวดําเนินการทางคณิตศาสตร์
่ ่
ตัวดําเนินการ (operator) หมายถึงตัวกระทําที่มีผลตอคาของข้ อมูล ในทางปฏิบตั ิสามารถแบง่ตัว
ดําเนินการที่ใช้สาํ หรับการคํานวณทางคณิ ตศาสตร์ในโปรแกรม SCILAB ได้เป็ นสามประเภท คือ
ตัวดําเนิ นการเลขคณิ ต (arithmetic operator), ตัวดําเนินการสัมพันธ์และตรรกะ (relational and
logical operators), และตัวดําเนิ นการระดับบิต (bit-wise operator) ในบทนี้ จะอธิ บายถึงลักษณะ

การทํางานของตัวดําเนิ นการแตละประเภท ่
พร้อมทั้ งแสดงตัวอยางการใช้ งานของตัวดําเนิ นการ
่ ้ ในการคํานวณทางคณิ ตศาสตร์
เหลานี

3.1 ตัวดําเนินการเลขคณิต
การทํางานของตัวดําเนินการจะเรี ยกวา่การดําเนินการ (operation) ในสวนนี
่ ้ จะอธิบายถึงการใช้งาน
่ ดังตอไปนี
ตัวดําเนินการเลขคณิ ต (arithmetic operator) ลักษณะตางๆ ่ ้

3.1.1 การดําเนินการทางคณิตศาสตร์ ทเี่ กีย่ วข้ องกับค่ าคงที่


ในการคํานวณทางคณิ ตศาสตร์ระหวางคา ่ ่ สเกลาร์กบคา ั ่ สเกลาร์ เครื่ องหมายที่ใช้ในการคํานวณกบั
เครื่ องหมายที่ใช้ในโปรแกรม SCILAB จะตางกนเล็ ่ ั กน้อย ดังที่แสดงในตารางที่ 3.1 ตัวอยางเชน ่ ่
ถ้าป้ อนคําสัง่ y = a + b ลงในหน้าตางคํ ่ าสั่ง โปรแกรม SCILAB จะพิจารณาประโยคคําสัง่
ทางด้านขวามือของเครื่ องหมายเทากบ ่ ั “=” กอน ่ แล้วจึงคอยเอาผลลั
่ พธ์ที่ได้ไปบรรจุไว้ในตัวแปร
ที่อยูท่ างด้านซ้ายมือของเครื่ องหมายเทากบ ่ ั “=” ซึ่ งในที่น้ ีหมายความวาให้
่ นําคา่ a มาบวกรวมกบั
คา่ b แล้วเอาผลลัพธ์ที่ได้ไปบรรจุไว้ในตัวแปร y สําหรับตัวอยางการ ่ คํานวณทางคณิ ตศาสตร์
ระหวางคา ่ ่ สเกลาร์กบค
ั ่าสเกลาร์ มีดงั นี้
64

ตารางที่ 3.1 การดําเนินการที่ใช้ในการคํานวณทางคณิ ตศาสตร์ของคา่สเกลาร์


การดําเนินการ รปแบบพี
ู ชคณิต รปแบบของ
ู SCILAB

การบวก (addition) a+b a + b

การลบ (subtraction) a–b a – b

การคูณ (multiplication) a×b a * b

b
การหารซ้าย (left division) a \ b
a
a
การหารขวา (right division) a / b
b
ํ ง (exponentiation)
การยกกาลั ab a^b หรื อ a**b

-->a = 3;

-->b = 2;

-->M = [a + b, a - b, a * b; a \b, a /b, a^b]


M =
5. 1. 6.
0.6666667 1.5 9.

-->y = [a^b, b^a, a**b, b**a]


y =
9. 8. 9. 8.

3.1.2 ลําดับความสํ าคัญของการดําเนินการทางคณิตศาสตร์


่ ่แสดงข้างต้นจะพบวา่ การทํางานของตัวดําเนิ นการจะเรี ยงจากซ้ายไปขวาเสมอ เชน่
จากตัวอยางที
y = 3 – 2 จะมีผลลัพธ์เป็ นคา่ 1 (ไมใชเป็
่ ่ นการนําคา่ 3 มาลบออกจากคา่ 2 ซึ่ งจะให้ผลลัพธ์เป็ น -1)
่ ็
อยางไรกตามในกรณี ที่ประโยคคําสั่งมีตัวดําเนิ นการหลายตัว การคํานวณทางคณิ ตศาสตร์ จะต้อง
เป็ นไปตามลําดับการทํางานของตัวดําเนินการ โดยจะต้องเป็ นไปตามกฎการทํากอน ่ (precedence

rule) เมื่อเข้าใจถึงลําดับของการดําเนิ นการแล้ว กสามารถที ่จะเขียนคําสั่งบรรทัดเดียวเพื่อทําการ
คํานวณสมการคณิ ตศาสตร์ ที่มีตวั ดําเนินการหลายๆ ตัวได้ ตารางที่ 3.2 แสดงถึงลําดับการทํางาน
ของตัวดําเนินการในโปรแกรม SCILAB ตัวอยางเชน ่ ่
65

ตารางที่ 3.2 ลําดับการทํางานของตัวดําเนินการ


ลําดับความสํ าคัญ (priority) ตัวดําเนินการ
1 วงเล็บ ( )
2 ํ ง ^ หรื อ ** และเรี ยงจากซ้ายไปขวา
เลขยกกาลั
3 การคูณและการหาร และเรี ยงจากซ้ายไปขวา
4 การบวกและการลบ และเรี ยงจากซ้ายไปขวา

-->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 การดําเนินการทางคณิตศาสตร์ ทเี่ กีย่ วข้ องกับเมทริกซ์


ตัวดําเนินการที่ใช้ในการคํานวณทางคณิ ตศาสตร์สาํ หรับเมทริ กซ์ แสดงในตารางที่ 3.3

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

ตารางที่ 3.3 ตัวดําเนินการที่ใช้ในการคํานวณทางคณิ ตศาสตร์ของเมทริ กซ์


ตัวดําเนินการ คําอธิบาย
+ การบวก (addition)
– การลบ (subtraction)
* การคูณ (multiplication)
.* การคูณในระดับสมาชิก (element-wise multiplication)
.*. การคูณแบบโครเนคเกอร์ (Kronecker product)
\ การหารซ้าย (left division)
.\ การหารซ้ายในระดับสมาชิก (element-wise left division)
.\. การหารซ้ายแบบโครเนคเกอร์ (Kronecker left division)
/ การหารขวา (right division)
./ การหารขวาในระดับสมาชิก (element-wise right division)
./. การหารขวาแบบโครเนคเกอร์ (Kronecker right division)
^ หรื อ ** ํ ง (exponentiation)
การยกกาลั
.^ ํ งในระดับสมาชิก (element-wise exponentiation)
การยกกาลั

-->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' //โดยที่ B' คือทรานส์โพสของเมทริ กซ์ B


ans =
6. - 6.
15. - 15.

เครื่ องหมายการคูณอีกรู ปแบบหนึ่งที่น่าสนใจคือ “.*” ซึ่ งจะเรี ยกวา่ “การคูณในระดับ


สมาชิก (element-wise 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 //เอาคา่ 2 ไปหารทุกสมาชิกในเมทริ กซ์ A


ans =
0.5 1.
1.5 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

-->A.^2 ํ งในระดับสมาชิก มีค่าเทากบ


//การยกกาลั ่ ั
ans = //[1^2 2^2; 3^2 4^2]
1. 4.
9. 16.

่ าสั่ง A^2 คือการนําเอาเมทริ กซ์ A มาคูณกนสองครั


สังเกตวาคํ ั ้ ง นัน่ คือ A*A ดังนั้ นการใช้
ํ งกบเมทริ
เครื่ องหมายยกกาลั ั ั
กซ์จึงใช้ได้กบเมทริ ่ ้ น ในขณะที่คาํ สัง่ A.^2 คือการยก
กซ์จตั ุรัสเทานั
ํ งในระดับสมาชิกกบคา
กาลั ั ่ สเกลาร์ ซึ่ งในที่น้ ีหมายถึงให้ทาํ การยกกาลั ํ งสองให้กบั สมาชิกแตละตั
่ ว
ในเมทริ กซ์ A ฉะนั้ นการยกกาลัํ งในระดับสมาชิกกบคา ั ่ สเกลาร์ สามารถใช้กบเมทริ ั ็
กซ์ขนาดใดกได้
ํ งกบเมทริ
นอกจากนี้ เครื่ องหมายยกกาลั ั กซ์ยงั สามารถใช้งานในรู ปแบบอื่นได้อีก เชน่

-->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

-->A^B ํ งเมทริ กซ์ B ไมสื่ ่ อความหมายใดๆ


//การนําเอาเมทริ กซ์ A มายกกาลั
--error 43
not implemented in scilab....
at line 60 of function %s_pow called by :
A^B

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

การคูณของเมทริ กซ์ A) คูณเข้าไปทั้ งสองข้างของสมการที่ (3) ซึ่ งจะได้ผลลัพธ์เป็ น

−1 −1
A Ax = A b
−1
x=A b (4)

เนื่องจาก A −1A = I คือเมทริ กซ์เอกลักษณ์ (identity matrix) ถ้าใช้โปรแกรม SCILAB ในการหาผล


เฉลยของสมการที่ (1) และ (2) ก็สามารถทําได้โดยใช้ชุดคําสัง่ดังนี้

-->A = [2 1; 1 -1]; //เมทริ กซ์ขนาด 2×2

-->b = [3; 3]; //เวกเตอร์แนวตั้ งขนาด 2×1

-->x = inv(A)*b //คําตอบของสมการสองตัวแปร


x = //เป็ นเวกเตอร์แนวตั้ งขนาด 2×1
2.
- 1.

-->x = A\b ่ ั
//เทียบเทากบการใช้
คาํ สัง่ x = inv(A)*b
x =
2.
- 1.

่ ่ องหมายหารซ้าย “\” สามารถนํามา


ผลลัพธ์ที่ได้คือ x1 = 2 และ x2 = -1 ดังนั้ นจะเห็นได้วาเครื
ใช้ในการหาผลเฉลยของสมการที่อยูใ่ นรู ป Ax = b ได้
73

นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมคําสั่งสําหรับการแกปั้ ญหาระบบสมการเชิง


เส้นแบบหลายตัวแปรไว้แล้ว นัน่ คือคําสั่ง linsolve ซึ่ งใช้ในการหาคําตอบของสมการหลายตัว
แปรที่สามารถจัดให้อยูใ่ นรู ปของเมทริ กซ์

Ax + b = 0 (5)

รู ปแบบการใช้งานของคําสั่ง linsolve คือ

x = linsolve(A, b)

โดยที่พารามิเตอร์ x, A, ั ่กลาวมาแล้
และ b ทําหน้าที่เหมือนกบที ่ ่
วข้างต้น ตัวอยางการใช้
งานของ
คําสัง่ นี้ เชน่

-->A = [2 1; 1 -1];

-->b = [3; 3];

-->x = linsolve(A, -b) ่ ั


//เทากบการใช้
คาํ สัง่ x = inv(A)*b หรื อ x = A\b
x =
2.
- 1.


สําหรับการหาคาผลเฉลย x ของสมการที่อยูใ่ นรู ปของ

xA = b (6)

สามารถทําได้โดยการนํา A-1 คูณเข้าไปทั้ งสองข้างของสมการที่ (6) ซึ่ งจะได้ผลลัพธ์เป็ น

−1 −1
xAA = bA
−1
x = bA (7)

่ ่ จากสมการที่ (1) และ (2) สามารถเขียนความสัมพันธ์ของเมทริ กซ์ในอีกรู ปแบบหนึ่งที่


ตัวอยางเชน

แตกตางจากสมการที ่ (3) ได้คือ
74

⎡2 1 ⎤
[x1 x2 ]
⎢⎣1 −1⎥⎦ = [3 3] (8)

ดังนั้ นผลเฉลยของสมการที่ (8) สามารถหาได้โดยการใช้ชุดคําสั่งในโปรแกรม SCILAB ดังนี้

-->A = [2 1; 1 -1];

-->b = [3 3]; //เวกเตอร์แถวขนาด 1×2

-->x = b*inv(A) ่ ั
//เทียบเทากบการใช้
คาํ สัง่ x = b/A
x =
2. - 1.

-->x = b/A
x =
2. - 1. //เป็ นเวกเตอร์แถวขนาด 1×2

ผลลัพธ์ที่ได้คือ x1 = 2 และ x2 = -1 ดังนั้ นเครื่ องหมายหารขวา “/” สามารถนํามาใช้ในการหา


ผลเฉลยของสมการที่อยูใ่ นรู ป xA = b ได้

3.1.5 การดําเนินการทางคณิตศาสตร์ ทเี่ กีย่ วข้ องกับพหนาม



โปรแกรม SCILAB สามารถที่จะทําการดําเนิ นการทางคณิ ตศาสตร์ กบัพหุ นามโดยตรงได้ทนั ที
่ ง่ ทางด้านวิศวกรรมระบบ
ซึ่ งเป็ นประโยชน์มากในการใช้งานทางด้านวิศวกรรม (โดยเฉพาะอยางยิ
ควบคุม) ตัวอยาง ่ การดําเนินการตางๆ
่ มีดงั ตอไปนี
่ ้

-->p = poly([1 2], 's') //สร้างสมการพหุ นามจากคําตอบของสมการพหุนาม


p = //นัน
่ คือคําตอบของสมการพหุนาม p คือ s = 1 และ s = 2
2
2 - 3s + s

-->q = poly([1 2], 's', 'c') ่ มประสิ ทธิ์


//สร้างสมการพหุ นามจากคาสั
q =
1 + 2s

-->X = [p+q, p-q, p*q; p/q, p\q, 0]


75
X =
2 2 2 3
3 - s + s 1 - 5s + s 2 + s - 5s + 2s
--------- ---------- ---------------
1 1 1

2
2 - 3s + s 1 + 2s 0
---------- ---------- -
2
1 + 2s 2 - 3s + s 1


ถ้ากาหนดให้ตวั แปรที่ใช้ในสมการพหุนามมีค่าเป็ นเลขจํานวนจริ งหรื อเลขจํานวนเชิงซ้อน
ผลลัพธ์ของสมการพหุ นามสามารถหาคา่ได้จากการใช้คาํ สั่ง horner ซึ่ งมีรูปแบบการใช้งาน คือ

horner(P, y)

โดยที่พารามิเตอร์
ƒ P คือ สมการพหุ นามที่เป็ นฟั งกชั์ นของตัวแปร x
ƒ y คือ คาจํ ่ านวนจริ งของตัวแปร x
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้

-->s = poly(0, 's');

-->A = [1, s; -s, 1 + s^2]


A =
1 s
2
- s 1 + s

-->B = horner(A, 2) //แทนคา่ s = 2 ลงในเมทริ กซ์ A กจะได้


็ ผลลัพธ์เป็ นเมทริ กซ์ B
B =
1. 2.
- 2. 5.

-->C = horner(A, 3 + 4*%i)


76
C =
1. 3. + 4.i
- 3. - 4.i - 6. + 24.i

ี่ องกบการประมวลผลของ
นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมชุดคําสัง่ อื่นๆ ที่เกยวข้ ั พหุ นาม
่ ้น
ไว้จาํ นวนมาก ลองใช้คาํ สัง่ help polynomial เพื่อดูลกั ษณะการใช้งานของคําสั่งเหลานั

3.2 ตัวดําเนินการสั มพันธ์ และตรรกะ


ตัวดําเนิ นการสัมพันธ์และตรรกะ (relational and logical operator) จะใช้ในการเปรี ยบเทียบ

ความสัมพันธ์ของคาของตั วแปรทั้ งที่เป็ นสเกลาร์และเมทริ กซ์ โดยตัวแปรทั้ งสองที่ใช้ในการเปรี ยบเทียบ
่ ั ในกรณี ที่ตวั แปรที่ตอ้ งการเปรี ยบเทียบเป็ นเมทริ กซ์ การเปรี ยบเทียบ
จะต้องมีขนาด (หรื อมิติ) เทากน
จะกระทําในระดับสมาชิกแบบหนึ่งตอหนึ ่ ่ง

3.2.1 ตัวดําเนินการสั มพันธ์


ตัวดําเนินการสัมพันธ์ (relational operator) เป็ นตัวดําเนินการที่ใช้ในการตรวจสอบความสัมพันธ์
ระหวาง ่ คาของตั
่ วแปร โดยที่
ƒ ่ ่ ั T (True) หรื อมีคาทางตรรกะเทากบคา
ถ้าความสัมพันธ์เป็ นจริ ง ผลลัพธ์ที่ได้จะมีคาเทากบ ่ ่ ั ่ 1
่ ่ ั F (False) หรื อมีคาทางตรรกะเทากบคา
ƒ ถ้าความสัมพันธ์เป็ นเท็จ ผลลัพธ์ที่ได้จะมีคาเทากบ ่ ่ ั ่ 0
โปรแกรม SCILAB ได้เตรี ยมตัวดําเนินการที่ใช้ตรวจสอบความสัมพันธ์ไว้ท้ งั หมดหกแบบ ตามที่
่ งาน เชน่
แสดงในตารางที่ 3.4 ตัวอยางการใช้

-->x = [1 2 3];

-->y = [-1 2 5];

-->x == y ่ แตละ
//เป็ นการเปรี ยบเทียบคาใน ่ สมาชิก
ans =
F T F

-->x < y
ans =
F F T
77

ตารางที่ 3.4 ตัวดําเนินการสัมพันธ์ (relational operator)


ตัวดําเนินการสั มพันธ์ คําอธิบาย
== ่ ั (equal to)
เครื่ องหมายเทากบ
< เครื่ องหมายน้อยกวา่ (less than)
> เครื่ องหมายมากกวา่ (greater than)
<= ่ อเทากบ
เครื่ องหมายน้อยกวาหรื ่ ั (less than or equal to)
>= ่ อเทากบ
เครื่ องหมายมากกวาหรื ่ ั (greater than or equal to)
<> หรื อ ~= ่ ่ ั (not equal to)
เครื่ องหมายไมเทากบ

-->x + y > 5 //เนื่องจาก x + y = [0 4 8]


ans =
F F T

-->x .* y <= 4 //เนื่องจาก x.*y = [-1 4 15]


ans =
T T F

-->x >= y/2 //เนื่องจาก y/2 = [-0.5 1 2.5]


ans =
T T T

-->x ~= y ั
//เหมือนกบการใช้
คาํ สัง่ x < > y
ans =
T F T

3.2.2 ตัวดําเนินการตรรกะ
่ ่
ตัวดําเนินการตรรกะ (logical operator) เป็ นตัวดําเนินการที่ใช้เชื่อมความสัมพันธ์ระหวางคาของ
ิ ้ นโดยตัวดําเนินการสัมพันธ์ โดยที่
ตัวแปรที่เกดขึ
ƒ ั
ถ้าความสัมพันธ์สอดคล้องกนผลลั ็ ค่าเทากบ
พธ์ที่ได้กจะมี ่ ั T (เป็ นจริ ง) หรื อมีค่าทางตรรกะ
่ ั ่ 1
เทากบคา
78

ตารางที่ 3.5 ตัวดําเนินการตรรกะ (logical operator)


ตัวดําเนินการตรรกะ คําอธิบาย
& และ (AND)
| หรื อ (OR)
~ ไม่ (NOT)

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 ตัวอยาง

-->P = [%t %t %f %f] ํ


//กาหนดให้ P เป็ นเวกเตอร์ ตรรกะ (logical vector)
P =
T T F F

-->Q = [%t %f %t %f] ํ


//กาหนดให้ Q เป็ นเวกเตอร์ ตรรกะ
Q =
T F T F

-->P & Q //ได้ผลลัพธ์เหมือนตาราง P AND Q ในรู ปที่ 3.1


ans =
T F F F
79

-->P | Q //ได้ผลลัพธ์เหมือนตาราง P OR Q ในรู ปที่ 3.1


ans =
T T T F

-->~P //ได้ผลลัพธ์เหมือนตาราง NOT P ในรู ปที่ 3.1


ans =
F F T T

-->P + 1 //เวกเตอร์ P เปรี ยบเสมือนมีค่าเทากบ


่ ั P = [1 1 0 0]
ans =
2. 2. 1. 1.

-->2 * Q //เวกเตอร์ Q เปรี ยบเสมือนมีค่าเทากบ


่ ั Q = [1 0 1 0]
ans =
2. 0. 2. 0.

-->P + Q //ตัวแปรบูลีน T จะเปรี ยบเสมือนมีค่าเทากบคา


่ ั ่ 1
ans = //และตัวแปรบูลีน F จะเปรี ยบเสมือนมีค่าเทากบคา
่ ั ่ 0
2. 1. 1. 0.

่ ่อนําเวกเตอร์ตรรกะมาดําเนินการทางคณิ ตศาสตร์ (เชน่ การบวก, การลบ, การคูณ,


จะเห็นได้วาเมื
และการหาร) กบคาั ่ สเกลาร์แล้ว เวกเตอร์ ตรรกะสามารถที่จะแทนได้ดว้ ยเวกเตอร์ของคา่สเกลาร์ ที่มี
สมาชิกเป็ นคา่ 0 กบคา
ั ่ 1 โดยที่คา่ 0 จะใช้แทนข้อความ (statement) ที่เป็ นเท็จ และคา่ 1 จะใช้

แทนข้อความที่เป็ นจริ ง (ศึกษาตัวอยางการประยุกต์ใช้งานเวกเตอร์ตรรกะเพิ่มเติมได้ในบทที่ 9)
นอกจากนี้ตวั ดําเนินการตรรกะยังสามารถนํามาใช้เชื่อมรวมการทดสอบความสัมพันธ์ทาง
ั โดยผลลัพธ์ที่ได้จะเป็ นไปตามลําดับความสําคัญของตัวดําเนินการ
ตรรกะหลายๆ เงื่อนไขเข้าด้วยกนได้
่ ตามที่แสดงในตารางที่ 3.6 ตัวอยาง
ตางๆ ่ เชน่
-->x = 1;

-->y = 2;

-->(x + 2 * y < 1) & (4 / 2 == 1)


ans =
F

-->x > 5 & y == 10 ั


//เหมือนกบการใช้ (x > 5) & (y ==10)
ans =
F
80

่ ๆ
ตารางที่ 3.6 ลําดับการทํางานของตัวดําเนินการตาง
ลําดับความสํ าคัญ (priority) ตัวดําเนินการ สั ญลักษณ์ ตัวดําเนินการ

1 วงเล็บ ( )

2 ปฏิเสธ ~

3 เลขคณิ ต + – * /

4 สัมพันธ์ == < > <= >= ~=

5 ตรรกะ & |

-->y * x < 1 | 2 + y > 5 ั


//เหมือนกบการใช้ ((y*x)<1) | ((2+y)>5)
ans =
F

-->x + 1 >= y – 2 & 2 * x == 1


ans = ั
//เหมือนกบการใช้ ((x+1)>=(y–2))&((2*x)==1)
F

3.3 ตัวดําเนินการระดับบิต
ตัวดําเนินการระดับบิต (bit-wise operator) เป็ นตัวดําเนินการที่ทาํ งานในระดับบิต นัน่คือเป็ นการนํา
ข้อมูลของตัวแปรแตละตั่ วที่เกบอยู็ ใ่ นรู ปของเลขฐานสอง (binary number) มาทําการคํานวณกนั
ในโปรแกรม SCILAB ตัวดําเนินการระดับบิตจะเป็ นตัวเดียวกนกบ ั ั ตัวดําเนินการตรรกะ เพียงแต่
ข้อมูลที่จะนํามาดําเนิ นการในระดับบิตจะต้องเป็ นเลขจํานวนเต็มเทานั ่ ้ น มิฉะนั้ นแล้วโปรแกรม

SCILAB จะไมทราบวา ่ ให้นาํ ข้อมูลเหลานั
่ ้ นมาดําเนินการในระดับบิต ให้พิจารณาตัวอยางตอไปนี
่ ่ ้
จะได้เข้าใจถึงหลักการทํางานของตัวดําเนินการระดับบิต

-->x = uint8(7) ํ ตวั แปร x เป็ นเลขจํานวนเต็มขนาด 8 บิต ที่มีค่าเทากบคา


//กาหนดให้ ่ ั ่ 7
x =
7 //ไมมี่ จุดทศนิยมตามหลังตัวเลข แสดงวาเป็
่ นเลขจํานวนเต็ม
-->y = uint8(12) ํ ตวั แปร y เป็ นเลขจํานวนเต็มขนาด 8 บิตที่มีค่าเทากบคา
//กาหนดให้ ่ ั ่ 12
y =
12
81

รปที ่
ู ่ 3.2 ตัวอยางการดํ
าเนินการในระดับบิตของตัวแปร x และ y

-->[x|y, x&y, ~x, ~y]


ans =
15 4 248 243

่ วแปร x และ y มาดําเนินการในระดับบิต ตามที่แสดงในรู ปที่ 3.2


ผลลัพธ์ที่ได้คือการนําคาตั
่ เป็ นเลขจํานวนเต็ม ผลลัพธ์ที่ได้จะเปรี ยบเสมือนกบการใช้
หมายเหตุ ถ้าตัวแปร x และ y ไมได้ ั
่ เชน่
ตัวดําเนินการตรรกะ ตัวอยาง

-->x = 7
x =
7. //ตัวแปร x เป็ นเลขจํานวนจริ ง (สังเกตจาก มีจุดทศนิยมตามหลังตัวเลข)

-->y = 12
y =
12. //ตัวแปร y เป็ นเลขจํานวนจริ ง

-->[x|y, x&y, ~x, ~y]


ans =
T T F F


ผลลัพธ์ที่ได้คือคาแสดงความสั ่ นจริ งหรื อเป็ นเท็จ ทั้ งนี้ เนื่องจากตัวแปร x และ y ไมได้
มพันธ์วาเป็ ่
เป็ นเลขจํานวนเต็ม สาเหตุที่ได้ผลลัพธ์เป็ น [T T F F] เนื่องมาจากโปรแกรม SCILAB จะถือวา่
่ ่ตางๆ
คาคงที ่ ที่นาํ มาใช้ในการทดสอบหาความสัมพันธ์จะมีคา่เป็ นจริ ง (เทากบ ่ ั T) เสมอ เชน่
82
-->x = -1;

-->[x|2, x&3, ~4, ~x]


ans =
T T F F

3.4 ตัวอย่ างการคํานวณ


่ ้ จะยกตัวอยางการแกไขปั
ในสวนนี ่ ้ ญหาโจทย์ทางคณิ ตศาสตร์โดยใช้โปรแกรม SCILAB ดังตอไปนี
่ ้

3
ตัวอย่ างที่ 1 จงหาคา่ของฟังกชั์ น f ( x) = 3x 2-x + 5x -4 เมื่อ x มีคาเทากบ
่ ่ ั −3i, −3, 0, 3
2x +1
และ 3i โดยที่ i = −1

วิธีทาํ คําตอบของโจทย์ขอ้ นี้ หาได้จากการใช้ชุดคําสั่งดังนี้


-->x = [-3*%i, -3, 0, 3, 3*%i];

-->fx = (3*x^3-x)/(2*x^2+1) + 5*x - 4


fx =
- 4. - 15.i - 19. - 4. 11. - 4. + 15.i

่ ่ ั -4-15i, -19, -4, 11, และ -4+15i เมื่อ x มีคาเทากบ


นัน่ คือ f(x) มีคาเทากบ ่ ่ ั −3i, −3, 0,
3 และ 3i

2 ( −2 ) 2
2
ตัวอย่ างที่ 2 จงหาคา่ของ x = 2 2
( )
+ −2
2

วิธีทาํ ่
คาของ x หาได้จาก

-->x = 2^2^2^2 + (-2)^(2)^(-2)^(2)


x =
131072.
83

−3 5

2 ×3 3 ⎞−4 ⎛ 2−3×32 ⎞

ตัวอย่ างที่ 3 จงหาคาของ x = ⎜⎜
−2


÷ ⎜⎜ ⎟
−1 ⎟
⎝ 2 ×3 ⎠ ⎝ 2×3 ⎠

วิธีทาํ ่
คาของ x หาได้จาก

-->num = ((2^3 * 3^(-4))/(2^(-2) * 3))^(-3);

-->den = ((2^(-3) * 3^2)/(2 * 3^(-1)))^5;

-->x = num/den
x =
32.


ตัวอย่ างที่ 4 จงหาคาของตั
วแปร u และ v จากระบบสมการเชิงเส้น
2u +3v = 16
3u -4v = 41

วิธีทาํ จัดรู ปสมการทั้ งสองให้อยูใ่ นรู ปของเมทริ กซ์ Ax = b จากนั้ นกจะได้


็ วาคํ ่ าตอบของระบบ
สมการเชิงเส้นนี้ คือ x = A-1b ในโปรแกรม SCILAB สามารถแกสมการได้ ้ ดงั นี้
-->A = [2, 3; 3, -4];

-->b = [16; 41];

-->x = inv(A)*b
x =
11.
- 2.

ผลลัพธ์ที่ได้คือ u = 11 และ v = -2 เป็ นคําตอบของระบบสมการเชิงเส้นนี้


ตัวอย่ างที่ 5 จงหาคาของตั
วแปร u, v, และ w จากระบบสมการเชิงเส้น
84

u+v+w = 2
2u - v -2w = -1
-u + 2v +2w = 1

วิธีทาํ จัดรู ปสมการทั้ งสองให้อยูใ่ นรู ปของเมทริ กซ์ Ax = b จากนั้ นกจะได้


็ วาคํ ่ าตอบของระบบ
สมการเชิงเส้นนี้ คือ x = A-1b ในโปรแกรม SCILAB สามารถแกสมการได้ ้ ดงั นี้

-->A = [1, 1, 1; 2, -1, -2; -1, 2, 2];

-->b = [2; -1; 1];

-->x = inv(A)*b
x =
1.
- 1.
2.

ผลลัพธ์ที่ได้คือ u = 1, v = -1, และ w = 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
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ สามารถหาได้จากชุดคําสัง่ ดังนี้

-->x = poly(0, 'x');

-->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

-->y = horner(M, -2)


y =
2. 4. - 3.
- 3. - 0.3333333 1.375

-->y = horner(M, 1 + %i)


y =
4. + 4.i - 6. - 9. + 8.i
- 0.0344828 + 0.4137931i - 0.2 - 2.4i - 1.3235294 + 1.2941176i

3.5 สรปุ
ในบทนี้ ได้อธิบายถึงลักษณะการใช้งานของตัวดําเนินการแบบตางๆ่ ได้แก่ ตัวดําเนินการเลขคณิ ต,

ตัวดําเนินการสัมพันธ์, ตัวดําเนินการตรรกะ, และตัวดําเนินการระดับบิต พร้อมทั้ งแสดงตัวอยาง
่ ในการแกไขปั
การใช้งานตัวดําเนินการตางๆ ้ ญหาโจทย์ทางคณิ ตศาสตร์ เมื่อเข้าใจถึงลักษณะการ
ทํางานของตัวดําเนินการเหลานี ็ ชวยทํ
่ ้ แล้ว กจะ ่ าให้สามารถนําตัวดําเนินการเหลานี
่ ้ ไปใช้ในการพัฒนา
่ กต้องตามที่ตอ้ งการ
โปรแกรมที่ซบั ซ้อนได้อยางถู
86

3.6 แบบฝึ กหัดท้ ายบท



3.1 จงคํานวณหาคาของฟั งกชั์ นตอไปนี
่ ้
3.1.1) f ( x ) =3x +2x +1 ่ ่ ั −10, −5, 5, และ 10
เมื่อ x มีคาเทากบ
3 2

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.5.5) x Ty < 5 โดยที่ (.)T คือ ทรานส์โพสของเมทริ กซ์แบบธรรมดา


88

3.5.6) xTy <> yTx

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
ฟังก์ ชันพืน้ ฐานทางคณิตศาสตร์
ในบทนี้ จะอธิบายถึงฟังกชั์ นพื้นฐานทัว่ ไปที่ใช้ในการคํานวณทางคณิ ตศาสตร์ เชน่ ฟังกชั์ นพื้นฐาน
ี่ ั วเลข, ฟังกชั์ นตรี โกณมิติ, ฟังกชั์ นไฮเพอร์โบลิก, ฟังกชั์ นพื้นฐานทางสถิติ รวมทั้ งฟังกชั์ น
ที่เกยวกบตั
สําหรับการสร้างเมทริ กซ์พิเศษ เพื่อให้เข้าใจถึงรู ปแบบการใช้งานของฟังกชั์ นตางๆ่ ที่จาํ เป็ นสําหรับ
การพัฒนาโปรแกรม

4.1 ฟังก์ ชันพืน้ ฐานทีเ่ กีย่ วกับตัวเลข


่ ้ จะกลาวถึ
ในสวนนี ่ งฟังกชั์ นพื้นฐานที่เกยวกบตั
ี่ ั วเลข (elementary number function) ที่พบมากใน

โปรแกรม SCILAB ตามที่แสดงในตารางที่ 4.1 ซึ่ งมีลกั ษณะการใช้งานดังตอไปนี

4.1.1 ฟังก์ชัน abs(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาสั


่ มบูรณ์ (absolute value) ของตัวแปร x ซึ่ งแบงได้
่ เป็ น 2 กรณี คือ
่ มบูรณ์ของตัวแปร x จะมีคาเทา
1) ถ้าตัวแปร x เป็ นเลขจํานวนจริ ง คาสั ่ ่ กบั

x = { x
−x ,x < 0
,x ≥ 0

2) ถ้าตัวแปร x เป็ นเลขจํานวนเชิ งซ้อนที่สามารถเขียนให้อยู่ในรู ปของ x = a + bi โดยที่


่ นตภาพ ดังนั้ นคาสั
ตัวแปร a และ b เป็ นเลขจํานวนจริ ง และ i = −1 เป็ นหนวยจิ ่ มบูรณ์ของ
่ ่ ั
ตัวแปร x จะมีคาเทากบ
2 2
x = a +b
90

่ งกชั์ นพื้นฐานที่เกยวกบตั
ตารางที่ 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

่ งานคําสัง่ นี้ เชน่


ตัวอยางการใช้

-->abs([1, %i, -2, -2*%i, 3 + 4*%i]) //หาคา่สัมบูรณ์ของแตละ


่ สมาชิกในเวกเตอร์
ans =
1. 1. 2. 2. 5.

4.1.2 ฟังก์ ชัน sqrt(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่รากที่สองของตัวแปร x เชน่ ถ้า x = y * y โดยที่ y เป็ นเลขจํานวน


จริ ง ดังนั้ น sqrt(x) = |y| ในกรณี ที่ตวั แปร x < 0 จะได้วา่

x = i −x

โดยที่ i = −1 ่ งานฟังกชั์ นนี้ เชน่


ตัวอยางการใช้
91

-->sqrt([2, 4, -1, -4]) //หาคา่รากที่สองของแตละ


่ สมาชิกในเวกเตอร์
ans =
1.4142136 2. i 2.i

สําหรับการหาคา่รากที่สองของจํานวนเชิงซ้อน ให้แทนเลขจํานวนเชิงซ้อนด้วยคาเชิ ่ งขั้ ว


่ อถ้าตัวแปร x = a + bi เป็ นคาจํ
(polar representation) กลาวคื ่ านวนเชิงซ้อน โดยที่ a และ b เป็ น
เลขจํานวนจริ ง และ i = −1 ดังนั้ นค่าเชิงขั้ วของตัวแปร x คือ


x = re

โดยที่ r = 2
a +b
2
เป็ นขนาด (magnitude) และ θ = tan −1 ( ) เป็ นมุมเฟส (phase) ของเลข
b
a
จํานวนเชิงซ้อน จากกฎของออย์เลอร์ (Euler’s formula) จะได้วา่

= cos ( θ ) + isin ( θ )

e

ฉะนั้ นตัวแปร x สามารถเขียนให้อยูใ่ นรู ปใหมได้


่ ดังนี้

{
x = r cos (θ) +isin (θ) = a + bi }

ซึ่ งแสดงวา่ a = rcos ( θ ) และ b = rsin ( θ ) ดังนั้ นรากที่สองของตัวแปร x สามารถหาได้จาก

⎛θ⎞ ⎛θ⎞
x = re( )
iθ 1/ 2
=r e
1/ 2 iθ/2
= rcos ⎜ ⎟ + i rsin ⎜ ⎟
⎝ 2⎠ ⎝ 2⎠

่ านวณ เชน่
ตัวอยางการคํ

-->sqrt([4, -4, 3 + 4*%i, 4*%i])


ans =
2. 2.i 2. + i 1.4142136 + 1.4142136i

-->sqrt([9, -9; -2*%i, 1-2*%i])


ans =
3. 3.i
1. - i 1.2720196 - 0.7861514i
92

4.1.3 ฟังก์ชัน int(x)

เป็ นฟังกชั์ นที่ใช้ในการหาสวนที


่ ่เป็ นจํานวนเต็ม (integer part) ของตัวแปร x ตัวอยางเ
่ ชน่

-->int([0.1, 2.9, -1.5, 2.3*%i])


ans =
0 2. - 1. 2.i

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

4.1.4 ฟังก์ ชัน modulo(m,n)

เป็ นฟังกชั์ นที่ใช้ในการหาเศษ (fraction) ที่ได้จากการหารคาของตั


่ วแปร m ่
ดัวยคาของตั
วแปร n
่ อ ถ้ากาหนดให้
กลาวคื ํ

m r
=q+
n n

โดยที่ q คือผลลัพธ์ที่ได้จากการหาร และ r คือเศษที่ได้จากการหาร ดังนั้ นจะได้วา่

r = modulo(m,n)


หรื อสามารถหาคาเศษที ่ได้จากการหารนี้ จากความสัมพันธ์

r = m – n.*int(m./n)

ผลลัพธ์ที่ได้สามารถเป็ นได้ท้ งั จํานวนเต็มบวก, จํานวนเต็มลบ, หรื อจํานวนเต็มศูนย์ ทั้ งนี้ ข้ ึนอยูก่ บั



คาของพารามิ เตอร์ m และ n ตัวอยางเชน่ ่

-->m = [-3 -2 -1 0 1 2 3];

-->n = [2 2 2 2 2 2 2];

-->modulo(m,n)
93
ans =
- 1. 0. - 1. 0. 1. 0. 1.

-->r = m - n.*int(m./n) ่ ั าสัง่ modulo(m,n)


//ได้ผลลัพธ์เทากบคํ
r =
- 1. 0. - 1. 0. 1. 0. 1.

4.1.5 ฟังก์ชัน ceil(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนเต็มที่มีคาใกล้
่ กบคาั ่ x ไปทางคา่ +∞ มากที่สุด ตัวอยางเชน
่ ่

-->ceil([1.9 -2.5 2.1*%i -3.8*%i -%inf])


ans =
2. - 2. 3.i - 3.i -Inf

4.1.6 ฟังก์ชัน floor(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนเต็มที่มีคาใกล้
่ กบคาั ่ x ไปทางคา่ −∞ ่ ่
มากที่สุด ตัวอยางเชน

-->floor([1.9 -2.5 2.1*%i -3.8*%i %inf])


ans =
1. - 3. 2.i - 4.i Inf

4.1.7 ฟังก์ชัน round(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนเต็มที่มีคาใกล้
่ กบคาั ่ x มากที่สุด ตัวอยางเชน
่ ่

-->round([1.9 -2.5 2.5 2.1*%i -3.8*%i %inf])


ans =
2. - 3. 3. 2.i - 4.i Inf

4.1.8 ฟังก์ชัน fix(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนเต็มที่มีคาใกล้
่ กบคาั ่ x ไปทางคา่ 0 มากที่สุด นัน่ คือมีคาเทากบ
่ ่ ั

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

4.1.9 ฟังก์ ชัน rat(x)

เป็ นฟั งกชั์ นที่ใช้ในการประมาณคาจํ


่ านวนจริ งให้อยูใ่ นรู ปของเลขเศษสวน
่ มีลกั ษณะการเรี ยกใช้งาน
ดังนี้

[num, den] = rat(x, [tolerance])

โดยที่พารามิเตอร์
ƒ x คือ เลขจํานวนจริ งใดๆ
ƒ tolerance ่
คือ คาความคลาดเคลื ่อนที่ยอมรับได้ โดยที่ค่าโดยปริ ยายมีคาเทากบ
่ ่ ั
1.e-6*norm(x,1)
ƒ num และ den คือ เลขจํานวนเต็มซึ่ งเป็ นผลลัพธ์ของฟังกชั์ นนี้ เมื่อ num./den จะมี
่ เคียงกบคา
คาใกล้ ั ่ x มากที่สุดในลักษณะที่วา่ abs(num./den-x)
<= tolerance*abs(x)

่ การใช้งานคําสั่งนี้ เชน่
ตัวอยาง

-->[num, den] = rat(0.333333333) //นัน


่ คือ 1/3 = 0.3333333...
den =
3.
num =
1.

-->[num, den] = rat(%pi)


den =
113.
95
num =
355.

-->[355/113-%pi, 22/7-%pi] ่ ค่าใกล้เคียงกบคา


//ตรวจสอบผลลัพธ์ที่ได้วามี ั ่ π หรื อไม่
ans = //จะพบวา่ 355/113 มีค่าใกล้เคียงคา่ π มากกวาคา
่ ่ 22/7
0.0000003 0.0012645

-->[num, den] = rat(%pi, 1.D-12)


den =
364913.
num =
1146408.

-->num/den - %pi ่
//คาความคลาดเคลื ่ ั ่กาหนดไว้
่อนเทากบที ํ
ans =
1.611D-12

4.1.10 ฟังก์ชัน sign(x)

่ านวนจริ ง ฟังกชั์ น
ถ้าตัวแปร x เป็ นคาจํ ่ งนี้
sign(x) จะมีคาดั

⎧+1 ,x > 0

sign(x)= ⎨ 0 ,x = 0
⎪⎩−1 ,x < 0

่ อฟั งกชั์ นนี้ จะให้ผลลัพธ์เป็ นคา่ +1 ถ้าตัวแปร x มีค่ามากกวาศู


กลาวคื ่ นย์, ให้ผลลัพธ์เป็ นคา่ 0
่ ่ ั นย์, และให้ผลลัพธ์เป็ นคา่ -1 ถ้าตัวแปร x มีคาน้
ถ้าตัวแปร x มีคาเทากบศู ่ อยกวาศู
่ นย์ ตัวอยางเชน
่ ่
-->sign([-%inf -0.01 0 0.02 %inf])
ans =
- 1. - 1. 0. 1. 1.

่ านวนเชิงซ้อน ฟังกชั์ นนี้ จะให้ผลลัพธ์เป็ น sign(x) =


ในกรณี ที่ตวั แปร x เป็ นคาจํ x./abs(x)
่ ่
ตัวอยางเชน
-->sign([%i -%i 3+4*%i 3-4*%i])
ans =
i - i 0.6 + 0.8i 0.6 - 0.8i
96

4.1.11 ฟังก์ชัน roots(x)

เป็ นฟังกชั์ นที่ใช้ในการหารากหรื อคําตอบของสมการพหุนาม โปรแกรม SCILAB สามารถรองรับ


่ อเทากบ
พหุนามที่มีดีกรี นอ้ ยกวาหรื ่ ั 100 เทานั
่ ้ น ตัวอยางเชน
่ ่

-->y = poly([1 3 5], 'x', 'r') //สร้างสมการพหุ นามจากคําตอบของสมการ


y =
2 3
- 15 + 23x - 9x + x

-->roots(y)
ans =
1.
3.
5.

4.1.12 ฟังก์ ชัน real(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนจริ ง (real number) ของตัวแปร x ตัวอยางเชน
่ ่

-->real([0.1, %i, -1.5 + 2*%i, 2 - %i])


ans =
0.1 0. - 1.5 2.

4.1.13 ฟังก์ ชัน imag(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาจํ


่ านวนจินตภาพ (imaginary number) ของตัวแปร x ตัวอยางเชน
่ ่

-->imag([0.1, %i, -1.5 + 2*%i, 2 - %i])


ans =
0. 1. 2. - 1.

4.1.14 ฟังก์ ชัน conj(x)

เป็ นฟังกชั์ นที่ใช้ในการทําสังยุคของจํานวนเชิงซ้อน (complex conjugate) ของตัวแปร x ตัวอยางเชน


่ ่

-->conj([0.1, %i, -1.5+2*%i, 2-%i])


ans =
0.1 - i - 1.5 - 2.i 2. + i
97

่ ฟั งกชั์ นเลขชี้ กาลั


ตารางที่ 4.2 ตัวอยาง ํ งและลอการิ ทึม
ฟังก์ ชัน คําอธิบาย
exp(x) หาคา่ e ของตัวแปร x
x

log(x) หาคา่ log ฐาน e ของตัวแปร x


log2(x) หาคา่ log ฐาน 2 ของตัวแปร x
log10(x) หาคา่ log ฐาน 10 ของตัวแปร x

4.2 ฟังก์ ชันเลขชี้กาํ ลังและลอการิทมึ


่ ้ จะกลาวถึ
ในสวนนี ่ งฟังกชั์ นเลขชี้ กาลั ํ งและลอการิ ทึม (exponential and logarithm functions)
่ นี้
ตามที่แสดงในตารางที่ 4.2 ซึ่ งมีลกั ษณะการใช้งานดังตอไป

4.2.1 ฟังก์ชัน exp(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ ex (e = 2.7182818) ตัวอยางเชน


่ ่

-->[exp(1) %e]
ans =
2.7182818 2.7182818

-->x = log([1, %e, 10, 20]);

-->exp(x)
ans =
1. 2.7182818 10. 20.

่ งกชั์ นเลขชี้ กาลั


สําหรับการหาคาฟั ํ งของเลขจํานวนเชิงซ้อน x = a + bi โดยที่ a และ b เป็ นเลข
จํานวนจริ ง และ i = −1 สามารถทําได้ดงั นี้

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

4.2.2 ฟังก์ชัน log(x)

่ นเวอร์ ส (inverse) ของฟังกชั์ นเลขชี้ กาลั


คาอิ ํ งกคื็ อ ฟั งกชั์ นลอการิ ทึมธรรมชาติ (natural logarithm)
หรื อคา่ log ฐาน e กลาวคื
่ อถ้า y = log(x) ดังนั้ น x = exp(y) = ey ตัวอยางเชน ่ ่

-->log([1, %e, 10, 20, 100])


ans =
0. 1. 2.3025851 2.9957323 4.6051702

่ ยวกนการหาคาฟั
เชนเดี ั ่ งกชั์ นลอการิ ทึมธรรมชาติของเลขจํานวนเชิงซ้อน x = a + bi สามารถทํา
ได้ดงั นี้

log(x)= log re ( iθ
) = log (r) + log (e ) = log (r) + 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

4.2.3 ฟังก์ ชัน log2(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ log ฐาน 2 ของคา่ x ตัวอยางเชน


่ ่

-->log2([1, 2, 4, 8])
ans =
0. 1. 2. 3.

4.2.4 ฟังก์ ชัน log10(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ log ฐาน 10 ของคา่ x ตัวอยางเชน


่ ่

-->log10([1, 2, 10, 20, 100])


ans =
0. 0.30103 1. 1.30103 2.
99

ู ่ 4.1 สามเหลี่ยมมุมฉาก
รปที

สําหรับฟังกชั์ นลอการิ ทึมที่มีฐานอื่นๆ กสามารถหาคาได้


็ ่ โดยอาศัยความสัมพันธ์ดงั นี้

loga ( y )
logx ( y ) =
loga ( x )

่ ่ ั log ของจํานวน y ที่มีฐาน a หารด้วย log ของ


นัน่ คือ log ของจํานวน y ที่มีฐาน x มีคาเทากบ
่ ่ ถ้าต้องการหาคา่ log ของ
จํานวน x ที่มีฐาน a โดยที่ a เป็ นเลขจํานวนเต็มบวกใดๆ ตัวอยางเชน

81 ที่มีฐาน 3 กสามารถทํ าได้ดงนี
ั ้

-->y = [log(81)/log(3), log2(81)/log2(3), log10(81)/log10(3)]


y =
4. 4. 4.

่ ั
ซึ่ งให้ผลลัพธ์เทากบ log3 (81) = log3 3( ) = 4 × log (3) = 4 × 1 = 4
4
3

4.3 ฟังก์ ชันตรีโกณมิติ


ฟั งกชั์ นตรี โกณมิติ (trigonometric function) ประกอบไปด้วย 6 ฟั งกชั์ น ได้แก่ sine, cosine,
tangent, secant, cosecant, และ cotangent โดยทัว่ ไปแล้วฟั งกชั์ นตรี โกณมิติเหลานี
่ ้ สามารถที่จะ

ถูกกาหนดในรู ปของมุมและความยาวของด้านตางๆ ่ ของรู ปสามเหลี่ยมมุมฉากตามที่แสดงในรู ปที่ 4.1
่ านตรงข้ามมุมฉาก (hypotenuse) ถ้าพิจารณาที่มุม α (alpha) ด้าน b จะถูก
โดยที่ c จะถูกเรี ยกวาด้
่ านประชิดมุม และด้าน a จะถูกเรี ยกวา่ด้านตรงข้ามมุม จากรู ปที่ 4.1 จะได้ความสัมพันธ์
เรี ยกวาด้
ของฟังกชั์ นตรี โกณมิติตางๆ่ ดังนี้
100

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 (radian) ในกรณี ที่ตอ้ งการใช้คามุ
มีหนวยเป็ ่ มเป็ นหนวยองศา
่ ็
(degree) กสามารถทํ าได้
โดยใช้ความสัมพันธ์ที่ว่า π = 180º ในทางกลับกนัถ้าต้องการทราบวาคามุ ่ ่ มเทาใดที
่ ่ทาํ ให้ได้

ผลลัพธ์เป็ นคาของฟั งกชั์ นตรี โกณมิติน้ นั กสามารถทํ
็ าได้โดยใช้ฟังกชั์ นตรี โกณมิติผกผัน (inverse
trigonometric function) ซึ่ งประกอบไปด้วย 6 ฟั งกชั ์ น ได้แก่ arcsine, arccosine, arctangent,
arcsecant, arccosecant, และ arccotangent โดยมีความสัมพันธ์กบฟั ั งกชั์ นตรี โกณมิติดังตอไปนี
่ ้

ถ้า y = sin ( α ) จะได้วา่ ( y ) = arcsine ( y )


−1
α = sin

ถ้า y = cos ( α ) จะได้วา่ ( y ) = arccosine ( y )


−1
α = cos

ถ้า y = tan ( α ) จะได้วา่ ( y ) = arctangent ( y )


−1
α = tan

โปรแกรม SCILAB ได้เตรี ยมคําสัง่ พื้นฐานสําหรับฟังกชั์ นตรี โกณมิติและฟังกชั์ นตรี โกณมิติผกผันไว้


่ งกชั์ นมีลกั ษณะการใช้งานดังตอไป
ตามที่แสดงในตารางที่ 4.3 ซึ่ งแตละฟั ่ นี้

4.3.1 ฟังก์ ชัน sin(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ sine ของคา่ x โดยที่ x คือมุมที่มีหนวยเป็


่ นเรเดียน ตัวอยางเชน
่ ่

-->y = sin([0, 1, %pi/2, %pi])


y =
0. 0.8414710 1. 1.225D-16

21
่ ตราสวนระหวาง
คาอั ่ ่ ความยาวสวนโค้
่ ่
งของวงกลมตอความยาวของรั ศมีของวงกลม
101

ตารางที่ 4.3 ฟั งกชั์ นตรี โกณมิติและฟั งกชั์ นตรี โกณมิติผกผัน


ฟังก์ ชัน คําอธิบาย
sin(x) หาคา่ sine ของตัวแปร x
cos(x) หาคา่ cosine ของตัวแปร x
tan(x) หาคา่ tangent ของตัวแปร x
asin(y) หาคา่ sine inverse ของตัวแปร y
acos(y) หาคา่ cosine inverse ของตัวแปร y
atan(y) หาคา่ tangent inverse ของตัวแปร y

่ ่ ดท้ายมีคาน้
สังเกตจะพบวาคาสุ ่ อยมากหรื อสามารถประมาณได้เทากบคาศู
่ ั ่ นย์ (ใช้คาํ สัง่ clean ชวย

่ ) ซึ่ งจะทําให้สอดคล้องกบหลั
ในการปั ดคาได้ ั กความจริ งที่วา่ sin(180º) = 0 ตามที่ตอ้ งการ

4.3.2 ฟังก์ชัน cos(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ cosine ของคา่ x โดยที่ x คือมุมที่มีหนวยเป็


่ นเรเดียน ตัวอยางเชน
่ ่

-->y = clean(cos([0, 1, %pi/2, %pi]))


y =
1. 0.5403023 0. - 1.

4.3.3 ฟังก์ชัน tan(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ tangent ของคา่ x โดยที่ x คือมุมที่มีหนวยเป็


่ นเรเดียน ตัวอยางเชน
่ ่

-->y = tan([0, 1, %pi/2, %pi])


y =
0. 1.5574077 1.633D+16 - 1.225D-16

4.3.4 ฟังก์ชัน asin(y)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ 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

4.3.5 ฟังก์ ชัน acos(y)

เป็ นฟั งกชั์ นที่ใช้ในการหาคา่ arccosine(y) นัน่ คือถ้า y = cos(x) จะได้วา่ x = acos(y) โดยที่
y จะมีค่าอยูร่ ะหวางคา ่ ่ -1 ถึง 1 และ x คือผลลัพธ์ที่ได้ซ่ ึ งจะเป็ นมุมที่มีค่าอยูร่ ะหวาง
่ 0 ถึง π
เรเดียน ตัวอยางเช ่ ่น

-->y = cos([0, 1, %pi/2, %pi]);

-->x = acos(y)
ans =
0. 1. 1.5707963 3.1415927

4.3.6 ฟังก์ ชัน atan(y)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ arctangent(y) นัน่ คือถ้า y = tan(x) จะได้วา่ x = atan(y)


่ ร่ ะหวาง
โดยที่ y เป็ นจํานวนจริ งใดๆ และ x คือผลลัพธ์ที่ได้ซ่ ึ งจะเป็ นมุมที่มีคาอยู ่ –π/2 ถึง π/2
่ ่
เรเดียน ตัวอยางเชน

-->y = tan([0, 1, %pi/2, -%pi/2]);

-->x = atan(y)
ans =
0. 1. 1.5707963 - 1.5707963

นอกจากนี้ คาํ สั่ง atan ยังสามารถเรี ยกใช้งานในอีกลักษณะหนึ่งได้คือ atan(y, x)ซึ่ งใช้ใน


การหาคา่ arctangent (หรื อคาอิ
่ นเวอร์สของ tangent) ของคา่ y หารด้วยคา่ x ซึ่ งผลลัพธ์ที่ได้จะ
่ ร่ ะหวาง
เป็ นมุมที่มีคาอยู ่ –π ถึง π เรเดียน โดยจะขึ้ นอยูก่ บเครื
ั ่ องหมายของตัวแปร y และ x เชน่
-->x = [1, %i, -1, -%i];

-->phase = atan(imag(x), real(x))


phase =
0. 1.5707963 3.1415927 - 1.5707963
103

่ โกณมิติอื่นๆ ได้แก่ secant, cosecant, cotangent, arcsecant, arccosecant,


สําหรับคาตรี
และ arccotangent สามารถคํานวณหาได้โดยการดัดแปลงจากฟังกชั์ นที่โปรแกรม SCILAB มีอยู่
แล้ว ตามที่อธิบายไว้ขา้ งต้น

4.4 ฟังก์ ชันไฮเพอร์ โบลิก


ฟังกชั์ นไฮเพอร์ โบลิก (hyperbolic function) เป็ นฟังกชั์ นที่เป็ นผลมาจากการรวมกนของฟั
ั งกชั์ น
ลอการิ ทึมธรรมชาติ ex ประกอบด้วย 6 ฟังกชั์ น คือ hyperbolic sine (sinh), hyperbolic cosine
(cosh), hyperbolic tangent (tanh), hyperbolic secant (sech), hyperbolic cosecant (csch),
และ hyperbolic cotangent (coth) ซึ่ งมีรูปแบบดังนี้
x −x
e −e 1
sinh ( x ) = csch ( x ) =
2 sinh ( x )
x −x
e +e 1
cosh ( x ) = sech ( x ) =
2 cosh ( x )
x −x
e −e 1
tanh ( x ) = coth ( x ) =
tanh ( x )
x −x
e +e

ั ่ นเวอร์สของฟังกชั์ นไฮเพอร์โบลิก (หรื อเรี ยกวา่ฟังกชั์ นไฮเพอร์โบลิกผกผัน)


ในทํานองเดียวกนคาอิ
เหลานี ็
่ ้ กสามารถหา ได้โดยใช้ความสัมพันธ์ดงั นี้

ถ้า y = sinh ( x ) จะได้วา่ ( y ) = asinh ( y )


−1
x = sinh

ถ้า y = cosh ( x ) จะได้วา่ ( y ) = acosh ( y )


−1
x = cosh

ถ้า y = tanh ( x ) จะได้วา่ ( y ) = atanh ( y )


−1
x = tanh

โปรแกรม SCILAB ได้เตรี ยมคําสั่งพื้นฐานสําหรับฟังกชั์ นไฮเพอร์โบลิกและฟังกชั์ นไฮเพอร์โบลิก


่ งกชั์ นมีลกั ษณะการใช้งานดังตอไปนี
ผกผันไว้ตามที่แสดงในตารางที่ 4.4 ซึ่ งแตละฟั ่ ้
104

ตารางที่ 4.4 ฟังกชั์ นไฮเพอร์โบลิกและฟั งกชั์ นไฮเพอร์โบลิกผกผัน


ฟังก์ ชัน คําอธิบาย
sinh(x) ใช้หาคา่ hyperbolic sine ของตัวแปร x
cosh(x) ใช้หาคา่ hyperbolic cosine ของตัวแปร x
tanh(x) ใช้หาคา่ hyperbolic tangent ของตัวแปร x
asinh(y) ใช้หาคา่ hyperbolic sine inverse ของตัวแปร y
acosh(y) ใช้หาคา่ hyperbolic cosine inverse ของตัวแปร y
atanh(y) ใช้หาคา่ hyperbolic tangent inverse ของตัวแปร y

4.4.1 ฟังก์ ชัน sinh(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ hyperbolic sine ของคา่ x ตัวอยางเชน


่ ่

-->y = sinh([0, 1, -1])


y =
0. 1.1752012 - 1.1752012

4.4.2 ฟังก์ ชัน cosh(x)


เป็ นฟังกชั์ นที่ใช้ในการหาคา่ hyperbolic cosine ของคา่ x ตัวอยางเชน
่ ่

-->y = cosh([0, 1, -1])


y =
1. 1.5430806 1.5430806

4.4.3 ฟังก์ ชัน tanh(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ hyperbolic tangent ของคา่ x ตัวอยางเชน


่ ่

-->y = tanh([0, 1, -1])


y =
0. 0.7615942 - 0.7615942
105

4.4.4 ฟังก์ชัน asinh(y)

เป็ นฟังกชั์ นที่ใช้ในการหาคาอิ


่ นเวอร์สของ hyperbolic sine ของ y ซึ่ งมีค่าเทากบ
่ ั

(
asinh(y) = ln y + y +1
2
)
เมื่อ ln(x) คือฟังกชั์ นลอการิ ทึมธรรมชาติของจํานวน x ตัวอยางเชน
่ ่

-->y = sinh([0, 1, -1]);

-->x = asinh(y)
x =
0. 1. - 1.

-->z = log(y + sqrt(y.^2 + 1)) //มีค่าเทากบการใช้


่ ั คาํ สัง่ asinh
z =
0. 1. - 1.

4.4.5 ฟังก์ชัน acosh(y)

เป็ นฟังกชั์ นที่ใช้ในการหาคาอิ


่ นเวอร์สของ hyperbolic cosine ของคา่ y ซึ่ งมีคาเทากบ
่ ่ ั

(
acosh(y) = ln y + y -1
2
)
โดยที่คา่ y ≥ 1 และผลลัพธ์ที่ได้จะเป็ นคาสั
่ มบูรณ์เสมอ ตัวอยางเชน
่ ่

-->y = cosh([0, 1, -1]);

-->x = acosh(y)
x =

0. 1. 1. ่ มบูรณ์
//ผลลัพธ์ที่ได้จะเป็ นคาสั

-->z = log(y + sqrt(y.^2 - 1)) //มีค่าเทากบการใช้


่ ั คาํ สัง่ acosh
z =
0. 1. 1.
106

4.4.6 ฟังก์ ชัน atanh(y)

เป็ นฟังกชั์ นที่ใช้ในการหาคาอิ


่ นเวอร์สของ hyperbolic tangent ของคา่ y ซึ่ งมีคาเทากบ
่ ่ ั
1 ⎛ 1+ y ⎞
atanh(y) = ln ⎜ ⎟ สําหรับ y <1
2 ⎝ 1-y ⎠

่ เชน่
ตัวอยาง
-->y = tanh([0, 1, -1]);

-->x = atanh(y)
x =
0. 1. - 1.

-->z = 0.5*log((1 + y)./(1 - y)) //มีค่าเทากบการใช้


่ ั คาํ สัง่ atanh
z =
0. 1. - 1.

สําหรับคา่ของฟังกชั์ นไฮเพอร์โบลิกและฟังกชั์ นไฮเพอร์โบลิกผกผันอื่นๆ กสามารถ


็ ที่จะคํานวณหา
ได้โดยการดัดแปลงจากฟังกชั์ นที่โปรแกรม SCILAB มีอยูแ่ ล้ว ตามที่อธิบายไว้ขา้ งต้น

4.5 ฟังก์ ชันพืน้ ฐานทางสถิติ


โปรแกรม SCILAB ได้เตรี ยมฟังกชั์ นจํานวนมากสําหรับใช้งานทางด้านสถิติ ตารางที่ 4.5 แสดง
่ งกชั์ นพื้นฐานสําหรับใช้งานทางด้านสถิติ ซึ่ งแตละฟั
ตัวอยางฟั ่ งกชั์ นมีลกั ษณะการใช้งานดังนี้

4.5.1 ฟังก์ ชัน min(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาตํ


่ ่าสุ ด (minimum) ของตัวเลขทั้ งหมดภายในตัวแปร x ดังแสดงใน
่ ่
ตัวอยางตอไปนี ้

-->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

ตารางที่ 4.5 ตัวอยางฟั ่ งกชั์ นพื้นฐานทางสถิติ


ฟังก์ ชัน คําอธิบาย
min(x) หาคาตํ ่ ่าสุ ด (minimum) ของตัวเลขทั้งหมดในตัวแปร x
max(x) หาคาสู ่ งสุ ด (maximum) ของตัวเลขทั้ งหมดในตัวแปร x
mean(x) หาคาเฉลี ่ ่ย (mean) ของตัวเลขทั้งหมดในตัวแปร x (ถือเป็ นคาเฉลี ่ ่ยเลขคณิ ต)
median(x) หาคามั ่ ธยฐาน (median) ของตัวเลขทั้งหมดในตัวแปร x
stdev(x) หาคาเบี ่ ่ยงเบนมาตรฐาน (standard deviation) ของตัวเลขทั้ งหมดในตัวแปร x
sum(x) ่
หาคาผลบวกของตั วเลขทั้งหมดในตัวแปร x
cumsum(x) หาคาผลบวกสะสม ่ (cumulative sum) ของตัวเลขทั้ งหมดในตัวแปร x
prod(x) ่ ณของตัวเลขทั้ งหมดในตัวแปร x
หาคาผลคู
cumprod(x) หาคาผลคู ่ ณสะสม (cumulative product) ของตัวเลขทั้งหมดในตัวแปร x
sort(x) เรี ยงลําดับตัวเลขทั้งหมดในตัวแปร x จากคามากไปหาคาน้ ่ ่ อย
วาดรู ปฮิสโตแกรม (histogram) ของคาทั ่ ้ งหมดในเวกเตอร์ x เป็ นจํานวน n
histplot(n,x)

ชวงระหวางคาตํ ่ ่ ่าสุ ดและคาสู
่ งสุ ดของเวกเตอร์ x
variance(x) หาคาความแปรปรวน ่ (variance) ของตัวเลขทั้ งหมดในตัวแปร x
geomean(x) หาคาเฉลี ่ ่ยเรขา (geometric mean) ของตัวเลขทั้ งหมดในตัวแปร x
harmean(x) หาคาเฉลี ่ ่ยฮาร์มอนิก (harmonic mean) ของตัวเลขทั้งหมดในตัวแปร x
nfreq(x) หาความถี่ (frequency) ของตัวเลขทั้ งหมดในตัวแปร x

-->min(x) //หาคา่ตํ่าสุ ดของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
0.

-->min(x, 'r') //หาคา่ตํ่าสุ ดของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
0. 1. 1. 2.

-->min(x, 'c') //หาคา่ตํ่าสุ ดของตัวเลขทั้ งหมดในแต่ละแนวตั้งของเมทริ กซ์ x


ans =
1.
0.
1.

นอกจากนี้ฟังกชั์ น min ยังมีลกั ษณะการใช้งานแบบอื่นอีก ลองศึกษาได้จากคําสัง่ help


108

4.5.2 ฟังก์ ชัน max(x)

ฟังกชั์ นนี้ มีรูปแบบการใช้เหมือนกบฟั


ั งกชั์ น min ทุกประการ เพียงแตจะให้
่ คาสู่ งสุ ด (maximum)
แทนคาตํ ่ ่าสุ ด ตัวอยางเชน
่ ่

--> x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->max(x) //หาคา่สู งสุ ดของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
6.

-->max(x, 'r') \//หาคา่สู งสุ ดของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
2. 6. 5. 4.

-->max(x, 'c') //หาคา่สู งสุ ดของตัวเลขทั้ งหมดในแตละ


่ แนวตั้ งของเมทริ กซ์ x
ans =
4.
5.
6.

4.5.3 ฟังก์ ชัน mean(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาเฉลี


่ ่ยเลขคณิ ต (arithmetic mean) ของตัวเลขทั้ งหมดในตัวแปร x
สมมติวา่ x = [x1 x2 … xN] มีสมาชิกทั้ งหมด N ตัว ดังนั้ นคาเฉ
่ ลี่ยเลขคณิ ต am หาได้จาก

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];

-->mean(x) //หาคา่เฉลี่ยของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
2.5

-->mean(x, 'r') //หาคา่เฉลี่ยของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
109
ans =
1. 3. 3. 3.

-->mean(x, 'c') //หาคา่เฉลี่ยของตัวเลขทั้ งหมดในแตละ


่ แนวตั้งของเมทริ กซ์ x
ans =
2.5
2.25
2.75

4.5.4 ฟังก์ชัน median(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคามั


่ ธยฐาน (median) ของตัวเลขทั้ งหมดในตัวแปร x ตัวอยางเชน
่ ่

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->median(x) //หาคา่มัธยฐานของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
2.

-->median(x, 'r') //หาคา่มัธยฐานของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
1. 2. 3. 3.

-->median(x, 'c') //หาคา่มัธยฐานของตัวเลขทั้ งหมดในแตละ


่ แนวตั้งของเมทริ กซ์ x
ans =
2.5
2.
2.

4.5.5 ฟังก์ชัน stdev(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาเบี


่ ่ยงเบนมาตรฐาน (standard deviation) ของตัวเลขทั้ งหมดในตัวแปร
่ ่
x ตัวอยางเชน

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->stdev(x) //หาคา่เบี่ยงเบนมาตรฐานของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
1.7837652
110

-->stdev(x, 'r') //หาคา่เบี่ยงเบนมาตรฐานของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
1. 2.6457513 2. 1.

-->stdev(x, 'c') ่ ่ยงเบนมาตรฐานของตัวเลขทั้ งหมดในแตละ


//หาคาเบี ่ แนวตั้งของเมทริ กซ์ x
ans =
1.2909944
2.2173558
2.2173558

4.5.6 ฟังก์ ชัน sum(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาผลบวกของตั


่ ่ ่
วเลขทั้ งหมดในตัวแปร x ตัวอยางเชน

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->sum(x) //หาคา่ผลบวกของตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
30.

-->sum(x, 'r') //หาคา่ผลบวกของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
3. 9. 9. 9.

-->sum(x, 'c') //หาคา่ผลบวกของตัวเลขทั้ งหมดในแตละ


่ แนวตั้งของเมทริ กซ์ x
ans =
10.
9.
11.

4.5.7 ฟังก์ ชัน cumsum(x)

เป็ นฟั งกชั์ นที่ใช้ในการหาคาผลบวกสะสม


่ (cumulative sum) ของตัวเลขทั้ งหมดในตัวแปร x
่ ่
ตัวอยางเชน

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->cumsum(x) //หาคา่ผลบวกสะสมของตัวเลขทั้ งหมดในเมทริ กซ์ x


111
ans =
1. 5. 15. 25.
1. 6. 20. 28.
3. 12. 21. 30.

-->cumsum(x, 'r') //หาคา่ผลบวกสะสมของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
1. 2. 3. 4.
1. 3. 8. 7.
3. 9. 9. 9.

-->cumsum(x, 'c') //หาคา่ผลบวกสะสมของตัวเลขทั้ งหมดในแตละ


่ แนวตั้ งของเมทริ กซ์ x
ans =
1. 3. 6. 10.
0. 1. 6. 9.
2. 8. 9. 11.

4.5.8 ฟังก์ชัน prod(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาผลคู


่ ณของตัวเลขทั้ งหมดในตัวแปร x ตัวอยางเชน
่ ่
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->prod(x) //หาคา่ผลคูณตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
0.

-->prod(x, 'r') //หาคา่ผลคูณของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
0. 12. 15. 24.

-->prod(x, 'c') //หาคา่ผลคูณของตัวเลขทั้ งหมดในแตละ


่ แนวตั้งของเมทริ กซ์ x
ans =
24.
0.
24.

4.5.9 ฟังก์ชัน cumprod(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาผลคู


่ ณสะสม (cumulative product) ของตัวเลขทั้ งหมดในตัวแปร x
่ ่
ตัวอยางเชน
112
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->cumprod(x) //หาคา่ผลคูณสะสมตัวเลขทั้ งหมดในเมทริ กซ์ x


ans =
1. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.

-->cumprod(x, 'r') //หาคา่ผลคูณสะสมของตัวเลขทั้ งหมดในแตละแถวของเมทริ


่ กซ์ x
ans =
1. 2. 3. 4.
0. 2. 15. 12.
0. 12. 15. 24.

-->cumprod(x, 'c') //หาคา่ผลคูณสะสมของตัวเลขทั้ งหมดในแตละ


่ แนวตั้ งของเมทริ กซ์ x
ans =
1. 2. 6. 24.
0. 0. 0. 0.
2. 12. 12. 24.

4.5.10 ฟังก์ ชัน sort(x)

เป็ นฟังกชั์ นที่ใช้ในการเรี ยงลําดับตัวเลขทั้ งหมดในตัวแปร x จากคามากไปหาคาน้


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

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->sort(x) //เรี ยงลําดับตัวเลขทั้ งหมดในเมทริ กซ์ x โดยผลลัพธ์ที่ได้


ans = ่ และจากซ้ายไปขวา
//จะเรี ยงจากบนลงลาง
6. 3. 2. 1.
5. 3. 2. 1.
4. 2. 1. 0.

-->sort(x, 'r') ่
//เรี ยงลําดับตัวเลขทั้ งหมดในแตละแถวของเมทริ กซ์ x
ans =
2. 6. 5. 4.
1. 2. 3. 3.
0. 1. 1. 2.

-->sort(x, 'c') ่ แนวตั้ งของเมทริ กซ์ x


//เรี ยงลําดับตัวเลขทั้ งหมดในแตละ
ans =
113
4. 3. 2. 1.
5. 3. 1. 0.
6. 2. 2. 1.

ถ้าต้องการเรี ยงลําดับข้อมูลแบบอื่นๆ เชน่ เรี ยงลําดับจากคาน้


่ อยไปหาคามาก
่ ็
กสามารถทํ าได้โดย
ใช้คาํ สัง่ gsort ซึ่ งมีลกั ษณะการใช้งานหลายรู ปแบบ (ศึกษารายละเอียดในคําสั่ง help)

4.5.11 ฟังก์ชัน histplot(n,x)

เป็ นฟังกชั์ นที่ใช้ในการวาดรู ปฮิสโตแกรม (histogram) ของคาทั


่ ้ งหมดในเวกเตอร์ x เป็ นจํานวน n

ชวงระหวางคาตํ่ ่ ่าสุ ดและคาสู
่ งสุ ดของเวกเตอร์ x ตัวอยางเชน
่ ่

-->d = rand(1, 10000, 'normal');

-->subplot(1,2,1); histplot(10, d); //รู ปที่ 4.1 ด้านซ้าย

-->subplot(1,2,2); histplot(20, d); //รู ปที่ 4.1 ด้านขวา

คําสัง่ แรกจะทําการสร้างจํานวนสุ่ ม (random number) จํานวน 10000 ตัว (บรรจุไว้ในเวกเตอร์


ขนาด 1×10000) โดยมีลกั ษณะการแจกแจงปรกติ (normal distribution) หรื อการแจกแจงแบบ
่ ่ย (mean) เทากบคา
เกาส์เซี ยน (Gaussian distribution) นัน่ คือมีคาเฉลี ่ ั ่ 0 และมีคาความแปรปรวน

่ ั ่ 1 จากนั้ นกทํ็ าการวาดรู ปฮิสโตแกรมของจํานวนสุ่ มทั้ งหมดโดยแบงข้
(variance) เทากบคา ่ อมูล
่ (รู ปที่ 4.1 ด้านซ้าย) และแบงข้
เป็ น 10 ชวง ่ อมูลเป็ น 20 ชวง
่ (รู ปที่ 4.1 ด้านขวา) ดูรายละเอียดของ
การสร้างจํานวนสุ่ มโดยใช้คาํ สั่ง rand ในหัวข้อที่ 4.6.4

4.5.12 ฟังก์ชัน variance(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคา่ ความแปรปรวน (variance) ของตัวเลขทั้ งหมดในตัวแปร x เชน่

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->variance(x)
ans =
3.1818182
114

ู ่ 4.1 ตัวอยา่งรู ปฮิสโตแกรม


รปที

-->variance(x, 'r')
ans =
1. 7. 4. 1.

-->variance(x, 'c')
ans =
1.6666667
4.9166667
4.9166667

4.5.13 ฟังก์ ชัน geomean(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาเฉลี


่ ่ยเรขาคณิ ต (geometric mean) ของตัวเลขทั้ งหมดในตัวแปร x
สมมติวา่ x = [x1 x2 … xN] มีสมาชิกทั้ งหมด N ตัว ดังนั้ นคาเฉลี
่ ่ยเรขาคณิ ต gm หาได้จาก
N
gm = N ∑ xi = N x1 ×x2 ×…×xN
i=1

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

-->x = [2 4 6];

-->gm = geomean(x)
115
gm =
4.

-->gm = (2*4*8)^(1/3) //มีค่าเทากบการใช้


่ ั คาํ สัง่ geomean(x)
gm =
4.

4.5.14 ฟังก์ชัน harmean(x)

เป็ นฟังกชั์ นที่ใช้ในการหาคาเฉลี


่ ่ยฮาร์มอนิก (harmonic mean) ของตัวเลขทั้ งหมดในตัวแปร x
สมมติวา่ x = [x1 x2 … xN] มีสมาชิกทั้ งหมด N ตัว ดังนั้ นคาเฉลี
่ ่ยฮาร์มอนิก hm หาได้จาก

1 N
hm = N
= N

∑ xi ∑x
1
i
N i=1 i=1

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

-->x = [2 4 8];

-->hm = harmean(x)
hm =
3.4285714

-->hm = 3/(1/2 + 1/4 + 1/8) //มีค่าเทากบการใช้


่ ั คาํ สัง่ harmean(x)
hm =
3.4285714

4.5.15 ฟังก์ชัน nfreq(x)

เป็ นฟังกชั์ นที่ใช้ในการหาความถี่ (frequency) ของตัวเลขทั้ งหมดในตัวแปร x ตัวอยางเชน


่ ่

-->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 ตัว

นอกจากนี้โปรแกรม SCILAB ยังมีฟังกชั์ นทางสถิติที่น่าสนใจอีกจํานวนมากในไลบรารี


statslib ซึ่ งสามารถเรี ยกดูได้ดงั นี้

-->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

่ ฟังกชั์ นที่น่าสนใจ เชน่


ตัวอยาง
ƒ perctl ทําหน้าที่คาํ นวณหาเปอร์เซ็นไทล์ (percentile)
ƒ quart ทําหน้าที่คาํ นวณหาควอร์ไทล์ (quartile)
ƒ correl ่
ทําหน้าที่คาํ นวณหาคาสหสั มพันธ์ (correlation)
ƒ covar ทําหน้าที่คาํ นวณหาคา่ความแปรปรวนรวมเกยว่ ี่ (covariance)
ƒ moment ทําหน้าที่คาํ นวณหาคา่โมเมนต์ (moment)
ƒ msd ่ ่ยงเบนกาลั
ทําหน้าที่คาํ นวณหาคาเบี ํ งสองเฉลี่ย (mean squared deviation)
สําหรับผูส้ นใจสามารถศึกษารายละเอียดเพิม่ เติมของฟังกชั์ นทางสถิติต่างๆ ได้จากคําสัง่ help
117

่ เมทริ กซ์พิเศษในโปรแกรม SCILAB


ตารางที่ 4.6 ตัวอยาง
คําสั่ ง คําอธิบาย
eye เมทริ กซ์เอกลักษณ์ (identity matrix)
ones เมทริ กซ์ค่าหนึ่ง (one matrix)
zeros เมทริ กซ์ค่าศูนย์ (zero matrix)
rand เมทริ กซ์สุ่ ม (random matrix)
diag เมทริ กซ์ทแยงมุม (diagonal matrix)
tril เมทริ กซ์สามเหลี่ยมด้านลาง่ (lower triangular matrix)
triu เมทริ กซ์สามเหลี่ยมด้านบน (upper triangular matrix)
testmatrix เมทริ กซ์รูปแบบพิเศษ
toeplitz เมทริ กซ์ Toeplitz (toeplitz matrix)
spones เมทริ กซ์มากเลขศูนย์ (sparse matrix)
sylm เมทริ กซ์ Sylvester (Sylvester matrix)

4.6 เมทริกซ์ พเิ ศษ



ในการประยุกต์ใช้งานเมทริ กซ์บางครั้ งมีความจําเป็ นต้องสร้างเมทริ กซ์ที่มีคาเฉพาะหรื อมีรูปแบบที่
เป็ นมาตรฐาน เชน่ ต้องการสร้างเมทริ กซ์ที่มีคาเป็
่ นหนึ่ งทั้ งหมดขนาด m×n โดยที่ m และ n มีคามา
่ ก
ถ้าสร้างเมทริ กซ์น้ ีโดยการพิมพ์ค่าแตละคาเข้
่ ่ าไปตามที่ได้อธิบายไว้ในหัวข้อที่ผานมา
่ อาจจะทําให้
เสี ยเวลามากและอาจเกดข้ ิ อผิดพลาดได้ง่าย ดังนั้ นโปรแกรม SCILAB จึงได้เตรี ยมฟังกชั์ นพื้นฐาน
สําหรับสร้างเมทริ กซ์พิเศษหลายรู ปแบบขึ้ นมาไว้ใช้งานตามตารางที่ 4.6 ในสวนนี ่ ้ จะอธิบายเฉพาะ
เมทริ กซ์พิเศษที่ใช้บ่อยดังตอไปนี
่ ้ (ผูส้ นใจสามารถศึกษารายละเอียดลักษณะการใช้งานคําสั่งเหลานี่ ้
เพิม่ เติมได้จากคําสั่ง help)

4.6.1 เมทริกซ์ เอกลักษณ์


เมทริ กซ์เอกลักษณ์ (identity matrix) คือเมทริ กซ์ที่มีสมาชิกที่มีคา่เป็ นคา่ 1 ปรากฎอยูเ่ ฉพาะใน
แนวเส้นทแยงมุมหลัก (main diagonal) สวน ่ สมาชิกที่ตาํ แหนงอื
่ ่นๆ จะมีคาเป็
่ นคา่ 0 คุณสมบัติ
่ ั านวนแนวตั้ ง) คือเมื่อคูณเมทริ กซ์
ของเมทริ กซ์เอกลักษณ์แบบจัตุรัส (เมทริ กซ์ที่มีจาํ นวนแถวเทากบจํ
ใดด้วยเมทริ กซ์เอกลักษณ์แบบจัตุรัสแล้ว ผลลัพธ์ที่ได้กคื็ อเมทริ กซ์เดิมนั้ น ในโปรแกรม SCILAB
การสร้างเมทริ กซ์เอกลักษณ์ทาํ ได้โดยใช้คาํ สัง่ eye เชน่
118

-->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.

-->B*eye(B) //ผลลัพธ์ที่ได้คือเมทริ กซ์ B


ans =
1. 2.
3. 4.

-->A = eye(3,4) //เมทริ กซ์เอกลักษณ์ไมจํ่ าเป็ นต้องเป็ นเมทริ กซ์จตั ุรัสกได้



A =
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.

4.6.2 เมทริกซ์ ค่าหนึ่ง


่ ่ ง (one matrix) เป็ นเมทริ กซ์ที่สมาชิกทุกตัวในเมทริ กซ์มีคาเป็
เมทริ กซ์คาหนึ ่ นคา่ 1 การสร้างเมทริ กซ์
่ ่ งในโปรแกรม SCILAB สามารถทําได้โดยใช้คาํ สัง่ ones ตัวอยาง
คาหนึ ่ เชน่

-->A = ones(2, 3) //สร้างเมทริ กซ์ค่าหนึ่งขนาด 2 แถวและ 3 แนวตั้ ง


A =
1. 1. 1.
1. 1. 1.

-->A = ones(1:3) //สร้างเมทริ กซ์ค่าหนึ่งขนาด 1 แถวและ 3 แนวตั้ ง


A =
1. 1. 1.
119
-->v = [1 2 3 4];

-->A = ones(v) //สร้างเมทริ กซ์ค่าหนึ่งขนาดเท่ากบเวกเตอร์


ั v
ans =
1. 1. 1. 1.

4.6.3 เมทริกซ์ ค่าศนย์



่ นย์ (zero matrix) เป็ นเมทริ กซ์ที่สมาชิกทุกตัวในเมทริ กซ์มีคาเป็
เมทริ กซ์คาศู ่ นคา่ 0 มีลกั ษณะการ
ทํางานเหมือนกบัเมทริ กซ์คาหนึ
่ ่ งทุกประการ การสร้างเมทริ กซ์คาศู
่ นย์ในโปรแกรม SCILAB สามารถ
ทําได้โดยใช้คาํ สัง่ zeros เชน่
-->A = zeros(2, 3)
A =
0. 0. 0.
0. 0. 0.

4.6.4 เมทริกซ์ สุ่ ม


เมทริ กซ์สุ่ ม (random matrix) เป็ นเมทริ กซ์ที่มีสมาชิกเป็ นจํานวนสุ่ ม (random number) การสร้าง
เมทริ กซ์สุ่ มในโปรแกรม SCILAB สามารถทําได้โดยใช้คาํ สั่ง rand ซึ่ งมีลกั ษณะการเรี ยกใช้งาน
หลายรู ปแบบ ดังนี้

rand(m1, m2, ..., [key])

rand(X, [key])

โดยที่พารามิเตอร์
ƒ mi ํ
คือ เลขจํานวนเต็มบวก (เมื่อ i = 1,2,3,...) ใช้กาหนดขนาดของเมทริ กซ์
สุ่ มที่จะสร้างขึ้ นมา เชน่ rand(m1, m2) หมายถึงสร้างเมทริ กซ์สุ่ มขนาด m1
แนวนอน และ m2 แนวตั้ ง
ƒ X คือ เมทริ กซ์ใดๆ (นัน่ คือสัง่ ให้สร้างเมทริ กซ์สุ่ มขนาดเทากบเมทริ
่ ั กซ์ X)
ƒ key ํ
เป็ นตัวเลือกที่กาหนดลั กษณะการแจกแจง (distribution) ของจํานวนสุ่ มที่สร้าง
กลาว ่ คือ ถ้า
120

o key = "uniform" จํานวนสุ่ มที่สร้างขึ้ นมาจะมีลกั ษณะการแจกแจงเอกรู ปมีคาอยู ่ ่


ระหวาง่ 0 ถึง 1 (เป็ นคาโดยปริ
่ ยาย)
o key = "normal" จํานวนสุ่ มที่สร้างขึ้ นมาจะมีลก ั ษณะการแจกแจงปรกติ (หรื อแบบ
่ ่ยเทากบ
เกาส์เซี ยน) ที่มีคาเฉลี ่ ั คา่ 0 และมีคาความแปรปรวน
่ 22
่ ั คา่ 1
(varaince) เทากบ

่ งานของคําสั่งนี้ เชน่
ตัวอยางการใช้

-->X = rand(2, 4, 'uniform') //สร้างเมทริ กซ์สุ่ มขนาด 2×4


X =
0.3095371 0.9706916 0.0204748 0.3490364
0.6762972 0.5441797 0.8941365 0.1105365

-->rand('normal') ํ ลกั ษณะการแจกแจงของจํานวนสุ่ มเป็ นแบบปรกติ


//กาหนดให้

-->rand('info') //ตรวจสอบดูวา่ ณ ตอนนี้ คําสัง่ rand ใช้ลกั ษณะการแจกแจงแบบไหน


ans =
normal

-->Y = rand(X, 'normal') //สร้างเมทริ กซ์สุ่ มขนาดเทาเมทริ


่ กซ์ X
Y =
- 0.2870145 0.9632817 - 0.9390319 - 0.4596412
- 0.3563124 0.3714145 1.7104345 0.5145099

โดยทัว่ไปเมื่อเปิ ดใช้งานโปรแกรม SCILAB แตละครั ่ ้ ง สถานะของตัวกาเนิ ํ ดจํานวนสุ่ ม (random



generator) จะถูกกาหนดให้ อยูใ่ นสถานะตั้ งต้นใหมทุ่ กครั้ ง ดังนั้ นการใช้คาํ สั่ง rand(X) เพื่อสร้าง
เมทริ กซ์สุ่ มในครั้ งแรกที่เปิ ดโปรแกรม SCILAB จะได้ผลลัพธ์เป็ นคาเดิ ่ มทุกครั้ ง ถ้าต้องการเปลี่ยน
สถานะตั้ งต้นใหมให้ ่ กบตั
ั วกาเนิ ํ ดจํานวนสุ่ มกสามารถทํ
็ าได้โดยใช้คาํ สั่ง

rand('seed', n)


ซึ่ งเป็ นคําสั่งที่ใช้กาหนดสถานะตั ํ ดจํานวนสุ่ มให้มีคาเทากบคา
้ งต้นของตัวกาเนิ ่ ่ ั ่ n (คาโด่ ยปริ ยาย คือ

n = 0 สําหรับการเรี ยกใช้คาํ สัง่ rand ครั้ งแรก) หากต้องการทราบวาสถานะ ํ ด
ตั้ งต้นของตัวกาเนิ
จํานวนสุ่ ม ณ ขณะนั้ นมีคาเทาใดก
่ ่ ส็ ามารถตรวจสอบดูได้จากการใช้คาํ สัง่ rand('seed') เชน่
22

คาความแปรปรวน มีค่าเทากบคาเบี
่ ั ่ ่ยงเบนมาตรฐานยกกาลั
ํ งสอง
121
-->rand('seed')
ans =
1.473D+09

เมทริ กซ์สุ่ มมีประโยชน์มากโดยเฉพาะอย่างยิง่ ในทางวิศวกรรมไฟฟ้ าสื่ อสาร เนื่ องจากสัญญาณใน


่ ใหญ่จะเป็ นสัญญาณสุ่ มที่มีลกั ษณะการแจกแจงเป็ นแบบเกาส์เซี ยน ดังนั้ น
ระบบสื่ อสารดิจิทลั สวน
สัญญาณที่ตอ้ งการสามารถที่จะถูกสร้างขึ้ นได้จากเมทริ กซ์สุ่ มนี้
นอกจากนี้ ถา้ ต้องการสร้างเมทริ กซ์สุ่ มที่มีลักษณะการแจกแจงแบบอื่นๆ เชน่ การแจกแจง
ทวินาม (binomial distribution), การแจกแจงเรขาคณิ ต (geometric distribution), การแจกแจง
เอกรู ป (uniform distribution), การแจกแจงไคกาลั ํ งสอง (chi-square distribution), การแจกแจง
แกมมา (gamma distribution), การแจกแจงปัวซง (Poisson distribution) และการแจกแจง

มาร์ คอฟ (Markov distribution) เป็ นต้น กสามารถทํ ่ เชน่ (ศึกษา
าได้โดยใช้คาํ สั่ง grand ตัวอยาง
รายละเอียดรู ปแบบการเรี ยกใช้งานคําสัง่ grand ได้จากคําสัง่ help)

-->Y = grand(2, 8, 'uin', 1, 9) //สร้างเมทริ กซ์สุ่ มขนาด 2×8 ของเลขจํานวนเต็มระหวาง



Y = //คา่ 1 ถึง 9 โดยมีลกั ษณะการแจกแจงเอกรู ป
5. 1. 9. 6. 3. 7. 1. 2.
7. 8. 1. 7. 6. 8. 8. 9.

-->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

4.6.5 เมทริกซ์ ทแยงมมุ


เมทริ กซ์ทแยงมุม (diagonal matrix) เป็ นเมทริ กซ์ที่มีสมาชิกที่มีคา่ตามที่กาหนดเฉพาะ
ํ ในแนวเส้น
ทแยงมุมหลัก สวน่ สมาชิกที่ตาํ แหนงอื่ ่นๆ จะมีคาเป็่ นคา่ 0 ในโปรแกรม SCILAB สามารถสร้าง
เมทริ กซ์ทแยงมุมได้โดยใช้คาํ สั่ง diag ซึ่ งมีลกั ษณะการใช้งานหลายรู ปแบบ ดังนี้

diag(vm, [k])
122

ƒ ่ ่จะแสดงในแนวเส้นทแยงมุม สวนคาพารา
ถ้าพารามิเตอร์ vm เป็ นเวกเตอร์ของคาที ่ ่ มิเตอร์ k
่ นแนวเส้นทแยงมุมไหน นัน่ คือถ้า
จะเป็ นตัวบอกวาเป็
o k < 0 หมายถึง เส้นทแยงมุมลําดับที่ |k| ที่อยูใ่ ต้เส้นทแยงมุมหลัก
o k = 0 ่
หมายถึง เส้นทแยงมุมหลัก (เป็ นคาโดยปริ ยาย)
o k > 0 หมายถึง เส้นทแยงมุมลําดับที่ k ที่อยูเ่ หนือเส้นทแยงมุมหลัก
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้

-->diag([1 2 3]) //คา่ 1, 2, และ 3 อยูท


่ ี่เส้นทแยงมุมหลัก
ans =
1. 0. 0.
0. 2. 0.
0. 0. 3.

-->diag([1 2 3], 1) //คา่ 1, 2, และ 3 จะอยูเ่ หนือเส้นทแยงมุมหลักหนึ่งลําดับ


ans =
0. 1. 0. 0.
0. 0. 2. 0.
0. 0. 0. 3.
0. 0. 0. 0.

-->diag([1 2 3], -2) //คา่ 1, 2, และ 3 จะอยูใ่ ต้เส้นทแยงมุมหลักสองลําดับ


ans =
0. 0. 0. 0. 0.
0. 0. 0. 0. 0.
1. 0. 0. 0. 0.
0. 2. 0. 0. 0.
0. 0. 3. 0. 0.

ƒ ่ ่อยูใ่ น
ถ้าพารามิเตอร์ 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.

4.6.6 เมทริกซ์ สามเหลีย่ มด้ านล่ าง


เมทริ กซ์สามเหลี่ยมด้านลาง ่ (lower triangular matrix) สามารถสร้างได้โดยใช้คาํ สัง่ tril(X, k)
ซึ่ งเป็ นฟังกชั์ นที่ใช้ในการสร้างเมทริ กซ์ใหมที่ ่มีขนาดเทากบเมทริ
่ ั กซ์ X โดยจะดึงเฉพาะสมาชิกใน

บริ เวณสามเหลี่ยมด้านลางของเมทริ กซ์ X มาใส่ สวน ่ สมาชิกในตําแหนง่อื่นๆ จะมีค่าเป็ นคา่ 0
สําหรับพารามิเตอร์ k จะเป็ นตัวบอกวาให้ ่ เริ่ มดึงข้อมูลในแนวเส้นทแยงมุมไหน กลาวคื ่ อมีลกั ษณะ
การใช้งานเหมือนพารามิเตอร์ k ที่ใช้ในเมทริ กซ์ทแยงมุม นัน่ คือ k = 0 หมายถึงแนวเส้นทแยงมุม

หลัก (เป็ นคาโดยปริ ยาย) ลองศึกษาการใช้งานคําสัง่ tril จากตัวอยาง ่ ตอไป
่ นี้ จะได้เข้าใจลักษณะ
การใช้งานของคําสัง่ tril มากขึ้ น

-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12];

-->B = tril(A) //ดึงสมาชิกทั้ งหมดที่อยูใ่ นแนวตั้ งแตเส้


่ นทแยงมุมหลักลงมา
B = //ของเมทริ กซ์ A มาสร้างเป็ นเมทริ กซ์ B
1. 0. 0. 0.
5. 6. 0. 0.
9. 10. 11. 0.

-->C = tril(A, 2) //ดึงสมาชิกทั้ งหมดที่อยูใ่ นแนวตั้ งแตเส้


่ นทแยงมุมที่อยูเ่ หนือ
C = //เส้นทแยงมุมหลักขึ้ นไปสองลําดับลงมา
1. 2. 3. 0.
5. 6. 7. 8.
9. 10. 11. 12.

-->D = tril(A, -1) //ดึงสมาชิกทั้ งหมดที่อยูใ่ นแนวตั้ งแตเส้


่ นทแยงมุมที่อยูใ่ ต้
124

D = //เส้นทแยงมุมหลักขึ้ นไปหนึ่งลําดับลงมา
0. 0. 0. 0.
5. 0. 0. 0.
9. 10. 0. 0.

4.6.7 เมทริกซ์ สามเหลีย่ มด้ านบน


เมทริ กซ์สามเหลี่ยมด้านบน (upper triangular matrix) สามารถสร้างได้โดยใช้คาํ สัง่ triu(X, k)
ซึ่ งเป็ นฟังกชั์ นที่ใช้ในการสร้างเมทริ กซ์ใหมที่ ่มีขนาดเทากบเมทริ
่ ั กซ์ X โดยจะดึงเฉพาะสมาชิกใน
บริ เวณสามเหลี่ยมด้านบนของเมทริ กซ์ X มาใส่ สวน ่ สมาชิกอื่นๆ จะมีคาเป็
่ นคา่ 0 คําสั่งนี้ มีรูปแบบ
การใช้งานเหมือนกบัคําสัง่ tril(X, k) ทุกประการ เพียงแตผลลั ่ พธ์ที่ได้จะเป็ นเมทริ กซ์สามเหลี่ยม
ด้านบน ตัวอยางเชน ่ ่
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12];

-->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.

4.6.8 เมทริกซ์ รู ปแบบพิเศษ


เมทริ กซ์รูปแบบพิเศษ ได้แก่ เมทริ กซ์กล (magic matrix), อินเวอร์สของเมทริ กซ์ฮิลเบิร์ต (Hilbert
่ ้ สามารถสร้างได้จากการใช้คาํ สัง่ testmatrix
matrix), และเมทริ กซ์ Franck โดยเมทริ กซ์เหลานี
ซึ่ งมีรูปแบบการเรี ยกใช้งานดังนี้
125

testmatrix('matrix_name', n)

โดยที่พารามิเตอร์ matrix_name มีได้ 3 รู ปแบบ คือ


1) magi สร้างเมทริ กซ์จตั ุรัสขนาด n×n ที่มีผลรวมของตัวเลขจํานวนเต็มในแนวนอน,
แนวตั้ ง, และแนวเส้นทแยงมุม เทากน ่ ั
2) frk สร้างเมทริ กซ์ Franck
3) hilb สร้างอินเวอร์สของเมทริ กซ์ฮิลเบิร์ตขนาด n×n โดยที่สมาชิกแถวที่ i และแนวตั้ ง
่ ่ ั H(i,j) = 1/(i+j-1)
ที่ j ของเมทริ กซ์ฮิลเบิร์ตมีคาเทากบ
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้

-->n = 3;

-->testmatrix('magi', n) //สร้างเมทริ กซ์กล


ans =
8. 1. 6. //ผลรวมของตัวเลขจํานวนเต็มในแนวนอน, แนวตั้ ง,
3. 5. 7. //และแนวเส้นทแยงมุม มีค่าเทาก
่ บั 15
4. 9. 2.

-->testmatrix('hilt', n) //สร้างอินเวอร์ของเมทริ กซ์ฮิลเบิร์ต


ans =
9. - 36. 30.
- 36. 192. - 180.
30. - 180. 180.

-->inv(testmatrix('hilt', n)) //สร้างเมทริ กซ์ฮิลเบิร์ต


ans =
1. 0.5 0.3333333
0.5 0.3333333 0.25
0.3333333 0.25 0.2

4.7 ตัวอย่ างการคํานวณ


่ ้ จะยกตัวอยางการแกไขปั
ในสวนนี ่ ้ ญหาโจทย์ทางคณิ ตศาสตร์โดยใช้โปรแกรม SCILAB ดังตอไปนี
่ ้
126

ตัวอย่ างที่ 1 จงหาคา่ของฟังกชั์ น f ( x) = sin2 (θ) sec (θ) เมื่อ θ = 0, π/8, และ π/4
วิธีทาํ คําตอบของโจทย์ขอ้ นี้ หาได้จากการใช้ชุดคําสั่งดังนี้
-->theta = [0, %pi/8, %pi/4];

-->fx = (sin(theta).^2) ./ cos(theta)


fx =
0. 0.1585127 0.7071068

่ ่ กบั 0, 0.1585127, และ 0.7071068 เมื่อ θ = 0, π/8, และ π/4 เรเดียน


นัน่ คือ f(x) มีคาเทา


ตัวอย่ างที่ 2 จงหาคาของ f (x) = (
tan ( x) +log10 cosh ( x) ) เมื่อ x = 0, 0.5, และ 1
วิธีทาํ ่
คาของ x หาได้จาก

-->x = [0 0.5 1];

-->fx = sqrt(tan(x)) + log10(cosh(x))


fx =
0. 0.7912879 1.43635

่ ่ ั 0, 0.7912879, และ 1.43635 เมื่อ x = 0, 0.5, และ 1


ดังนั้ น f(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

ใช้โปรแกรม SCILAB หาคา่ x ได้ดงั นี้

-->x = asin(0.8) - 20*%pi/180


x =
0.5782294 //หน่วยเป็ นเรเดียน

จากนั้ นแทนคา่ x ลงใน cot (70o - x) = 1


่ ั
จะได้ผลลัพธ์เทากบ
(
tan 70o-x )
-->y = 1/tan((70*%pi/180) - x) ่ นเรเดียน
//แปลง 70o ให้มีหนวยเป็
y =
1.3333333

นัน่ คือถ้า sin ( x +20o ) = 0.8 แล้วจะได้วา่ cot (70o - x) = 1.3333333 = 43

ตัวอย่ างที่ 4 จงหาคา่ θ ที่ทาํ ให้สมการ cos3 (θ) - cos2 (θ) -4cos (θ) +4 = 0

วิธีทาํ กาหนดให้ x = cos (θ) จะได้วา่ ดังนั้ นคําตอบของสมการนี้ หา
3 2
x - x -4x + 4 = 0
ได้จาก
-->x = poly(0, 'x');

-->y = x^3 - x^2 - 4*x + 4;

-->x = roots(y)
x =
1.
2.
- 2.

เนื่องจาก x = cos (θ) ดังนั้ นคา่ θ สามารถหาได้จากคําสั่ง θ = acos ( x ) ดังนี้


-->theta = acos(x)
theta =
0
1.3169579i
3.1415927 - 1.3169579i
128
-->y = clean(cos(theta ).^3 - cos(theta ).^2 - 4*cos(theta ) + 4)
y =
0
0
0

คําตอบของสมการคือ θ = 0, 1.3169579i, และ 3.1415927-1.3169579i


ตัวอย่ างที่ 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

-->index = find(x == xmin) //หาตําแหนง่ของข้อมูลที่มีค่าเทากบ


่ ั คะแนนตํ่าสุ ด
index =
2. 20.

-->Nmin = length(index) //หาจํานวนนักศึกษาที่ได้คะแนนตํ่าสุ ด


Nmin =
2.

่ ่ ั 45 และมีนกั ศึกษาจํานวน 2 คนที่ได้คะแนนตํ่าสุ ด


นัน่ คือคะแนนตํ่าสุ ดมีคาเทากบ

่ ่ยเลขคณิ ต, คาเฉลี
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

4.9 แบบฝึ กหัดท้ ายบท



4.1 จงคํานวณหาคาของฟั งกชั์ น f(x) ตอไปนี
่ ้ เมื่อ x = −2, 0, 2, −2i, และ 2i
4.1.1) 3
f(x) = x − 2x + log10 3x − 5 ( )
( x + 3) ⎛ ex + e− x ⎞
4.1.2) f(x) = 3e + log e ⎜ ⎟
⎝ 2 ⎠
4.1.3) f ( x ) = 4cosh
3
( x ) − 3cosh ( x )
ํ ตวั แปร x เป็ นเลขจํานวนจริ ง จงพิสูจน์วา่
4.2 กาหนดให้
4.2.1) log a ( x ) = log ( x ) /log ( a )

4.2.2) log a ( xy ) = log a ( x ) + log a ( y )

log a ( x ) = ylog a ( x )
y
4.2.3)

ํ ตวั แปร x เป็ นเลขจํานวนจริ ง จงพิสูจน์วา่


4.3 กาหนดให้
4.3.1) sin ( 2x ) = 2sin ( x ) cos ( x )

4.3.2) cos ( 2x ) = cos ( x ) − sin 2 ( x ) = 1 − 2sin 2 ( x ) = 2cos 2 ( x ) − 1


2

2tan ( x )
4.3.3) tan ( 2x ) =
1 − tan
2
(x)
131

4.3.4) sin ( 3x ) = 3sin ( x ) − 4sin (x)


3

4.3.5) cos ( 3x ) = 4cos ( x ) − 3cos ( x )


3

3tan ( x ) − tan (x)


3
4.3.6) tan ( 3x ) =
1 − 3tan
2
(x)
4.3.7) sinh ( 3x ) = 3sinh ( x ) + 4sinh (x)
3

4.3.8) cosh ( 3x ) = 4cosh ( x ) − 3cosh ( x )


3

3tanh ( x ) + tanh (x)


3
4.3.9) tanh ( 3x ) =
1 + 3tanh
2
(x)
( cos ( x ) + isin ( x )) {cos ( zx ) + isin ( zx )} โดยที่ r และ z เป็ นเลข
z
4.3.10) r
z
=r
z

จํานวนจริ ง และ i = -1


4.4 จงหารากหรื อคําตอบของสมการตอไปนี

4.4.1) x2 – 2x + 5 = 0

4.4.2) x3 – 6x2 + 11x – 6 = 0

4.4.3) x3 – 4x2 + 6x – 4 = 0

4.4.4) x7 – 14x5 + 49x3 – 36x = 0

4.4.5) x7 + 2x6 + 3x5 – 26x4 – 2x3 + 72x2 – 104x = 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

่ ที่ใช้บ่อยในการพัฒนาฟังกชั์ นขึ้ นมาใช้งาน ได้แก่ คําสัง่วนซํ้ า และ


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

5.1 คําสั่ งวนซํ้า


่ ครั้ งในการเขียนโปรแกรมมีความจําเป็ นที่จะต้องคํานวณชุดคําสั่งบางอยาง
บอย ่ ซํ้ าเป็ นจํานวนหลายๆ
รอบซึ่ งในกรณี น้ ีการใช้คาํ สั่งวนซํ้าจึงมีความจําเป็ นมาก โดยโปรแกรม SCILAB ได้เตรี ยมคําสัง่
สําหรับการวนซํ้าไว้อยูส่ องรู ปแบบ คือ คําสัง่ for และคําสัง่ while ซึ่ งมีหลักการใช้งานดังนี้

5.1.1 คําสั่ ง for

คําสั่ง for เหมาะสําหรับการใช้งานที่ตอ้ งการให้โปรแกรมทําซํ้ าชุดคําสั่งเดิมที่อยูภ่ ายในลูป (loop)



เป็ นจํานวนรอบตามที่กาหนด ไว้ในนิพจน์ (expression) คําสั่ง for มีรูปแบบการใช้งาน ดังนี้

for variable = expression


instruction_1;

instruction_n;
end
134

่ อโปรแกรมจะทําซํ้ าคําสั่ง (instruction) ทั้ งหมดภายในลูปเป็ นจํานวนรอบตามที่กาหนดโดย


กลาวคื ํ

ตัวแปรที่เป็ นไปตามเงื่อนไขของนิพจน์ ตัวอยางการใช้ ่ เชน่
งานคําสั่ง for ตัวอยาง
-->L = 5;

-->x = [];

-->for i = 1:L
--> x(i) = i;
-->end

ชุดคําสัง่ นี้ หมายความวา่ เมื่อเริ่ มต้นใช้งาน ตัวแปร L จะมีคาเทากบ


่ ่ ั 5 และ x เป็ นเมทริ กซ์วาง ่
(empty matrix) จากนั้ นกทํ ็ าการวนซํ้าโดยใช้ตวั แปร i เป็ นตัวนับจํานวนซํ้ า นัน่คือตัวแปร i จะ
เริ่ มจากคา่ 1 แล้วเพิม่ ขึ้ นทีละ +1 จนไปถึงคา่ 5 โดยที่คาของตั
่ ่ ่ กบรรจุไว้ใน
วแปร i แตละคาจะถู
สมาชิกลําดับที่ i ของเวกเตอร์ x ผลลัพธ์ของการประมวลผลชุดคําสัง่ นี้ คือ
-->x'
ans =
1. 2. 3. 4. 5.

่ ่
ลองศึกษาตัวอยางตอไปนี
้ สาํ หรับการประยุกต์การใช้งานคําสั่ง for

่ ่ 1 ไปเรื่ อยๆ เป็ นจํานวน


ตัวอย่ างที่ 1 จงหาผลรวมของเลขจํานวนเต็มคี่ (odd number) ตั้ งแตคา
่ คือการหาคา่ y จากความสัมพันธ์
N = 10 ครั้ ง โดยใช้โปรแกรม SCILAB นัน

y = 1 + 3 + 5 + … + ( 2N − 1)
N elements

วิธีทาํ จากโจทย์ที่ให้มา สามารถเขียนโปรแกรม SCILAB เพื่อคํานวณหาคา่ y ได้ดงั นี้

-->N = 10;

-->y = 0;

-->for i = 1:N
--> y = y + (2*i - 1);
-->end
135

เมื่อประมวลผลชุดคําสัง่ นี้ แล้วจะได้วา่ ตัวแปร y มีคาเทากบ


่ ่ ั 100 นัน่ คือ

-->y
y =
100.

5.1.2 คําสั่ ง while

คําสั่ง 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 คําสั่ งทดสอบเงือ่ นไข


คําสั่งทดสอบเงื่อนไขมีความจําเป็ นมากสําหรับการเขียนโปรแกรมคอมพิวเตอร์ที่ซบั ซ้อน โปรแกรม
SCILAB ได้เตรี ยมคําสัง่ ทดสอบเงื่อนไขไว้อยู่ 2 รู ปแบบ คือ คําสัง่ if และคําสัง่ select-
case ซึ่ งมีหลักการใช้งาน ดังนี้

5.2.1 คําสั่ ง if

่ นจริ งหรื อเป็ นเท็จ โดยมีรูปแบบการใช้งาน


คําสัง่ if จะทําการทดสอบเงื่อนไขความสัมพันธ์วาเป็
คือ

if expression then

instruction_1;

instruction_n;
end
137

่ อถ้าผลการทดสอบเงื่อนไขในนิพจน์เป็ นจริ ง โปรแกรม SCILAB ก็จะทําคําสัง่ ทั้ งหมดที่อยู่


กลาวคื
่ าวา่ then และ end แตถ้่ าผลการทดสอบเป็ นเท็จ โปรแกรม SCILAB จะไมทํ่ าคําสัง่
ระหวางคํ
ทั้ งหมดที่อยูร่ ะหวางคํ
่ าวา่ then และ end

นอกจากนี้ คาํ สั่ง if ยังสามารถนําไปใช้งานกบการตั
ดสิ นใจที่ซบั ซ้อนมากขึ้ นได้โดยการ
่ ั else ซึ่ งมีรูปแบบการใช้งาน ดังนี้
ใช้งานรวมกบ

if expression then

instructions_set1;
else
instructions_set2;
end

นัน่คือถ้าผลการทดสอบเงื่อนไขในนิ พจน์เป็ นจริ ง โปรแกรม SCILAB จะทําคําสั่งทั้ งหมดที่อยู่


่ าวา่ then และ else แตถ้่ าผลการทดสอบเป็ นเท็จ โปรแกรม SCILAB จะทําคําสั่ง
ระหวางคํ
ทั้ งหมดที่อยูร่ ะหวางคํ
่ าวา่ else และ end แทน
ในการใช้งานที่มีการตัดสิ นใจที่ซบั ซ้อนมากยิง่ ขึ้ น ผูใ้ ช้กส็ ามารถใช้งานคําสั่ง if รวมกบ
่ ั
elseif ได้ โดยมีรูปแบบการใช้งานดังนี้

if expression_1 then

instructions_set1;
elseif expression_2 then
instructions_set2;
else
instructions_set3;
end
138

นัน่คือถ้าผลการทดสอบเงื่อนไขในนิพจน์ expression_1 เป็ นจริ ง โปรแกรม SCILAB จะทําชุดคําสัง่


instructions_set1 แตถ้ ่ าผลการทดสอบเป็ นเท็จ โปรแกรม SCILAB ก็จะทําการทดสอบเงื่อนไข
ในนิ พจน์ expression_2 ตอไปทั่ นที โดยที่ถา้ ผลการทดสอบในนิ พจน์ expression_2 เป็ นจริ ง
โปรแกรม SCILAB ก็จะทําชุดคําสั่ง instructions_set2 แตถ้่ าผลการทดสอบเป็ นเท็จ กจะ ็ ทํา
ชุดคําสัง่ instructions_set3

พิจารณาตัวอยางโปรแกรมการสร้ ํ
างเมทริ กซ์จตั ุรัสขนาด N×N (ถ้ากาหนดให้ N = 3) โดย
สมาชิกทุกตัวที่อยูใ่ ต้เส้นทแยงมุมหลักมีคาเทากบ
่ ่ ั 1 สวน ่ สมาชิกทุกตัวที่อยูใ่ นแนวเส้นทแยงมุมหลัก
่ ่ ั 2 และสมาชิกทุกตัวที่อยูเ่ หนือเส้นทแยงมุมหลักมีคาเทากบ
มีคาเทากบ ่ ่ ั 3 ดังนั้ นเมทริ กซ์น้ ีสามารถ
เขียนเป็ นชุดคําสั่งในโปรแกรม SCILAB ได้ คือ

-->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

5.2.2 คําสั่ ง select-case

่ ั
การทดสอบเงื่อนไขความสัมพันธ์สามารถทําได้อีกรู ปแบบหนึ่ งคือ การใช้คาํ สั่ง select รวมกบ
case โดยมีรูปแบบการใช้งาน ดังนี้

select expression

case result_1 then instructions_1;

case result_n then instructions_n;

else instruction_m;
end

่ อโปรแกรม SCILAB จะทําการทดสอบเงื่อนไขในนิ พจน์ก่อน ถ้าผลการทดสอบตรงกบั


กลาวคื

ข้อกาหนดของ case ใด โปรแกรม SCILAB กจะทํ ็ าชุดคําสั่งทั้ งหมดที่อยูภ่ ายใน case นั้ น23

แต่ถา้ ผลการทดสอบไมตรงกบข้ ั อกาหนดของ
ํ case ใดๆ โปรแกรม SCILAB กจะทํ ็ าชุดคําสั่ง
ทั้ งหมดที่อยูร่ ะหวาง
่ else และ end (ในที่น้ ีคือชุดคําสั่ง instruction_m) ตัวอยางเชน
่ ่

-->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 การพัฒนาฟังก์ ชัน


่ ้ จะอธิบายถึงหลักการพัฒนาฟังกชั์ น (function) ขึ้ นมาใช้งานรวมกบโปรแกรม
ในสวนนี ่ ั SCILAB
โดยมีรายละเอียดดังนี้

5.3.1 ไฟล์สคริปต์ และไฟล์ฟังก์ชัน


ไฟล์สคริ ปต์ (file script) และไฟล์ฟังกชั์ น (file function) เป็ นสิ่ งที่มีประโยชน์มากในการพัฒนา
โปรแกรม โดยทัว่ ไปไฟล์สคริ ปต์และไฟล์ฟังกชั์ นมีขอ้ แตกตาง ่ กนัดังตอไป ่ นี้

5.3.1.1 ไฟล์สคริปต์
่ ที่ตอ้ งการให้โปรแกรม SCILAB
ไฟล์สคริ ปต์เป็ นไฟล์ขอ้ มูล (text file) ที่รวบรวมคําสั่งตางๆ
ทํางานบรรจุไว้ในไฟล์เดียว เพื่อที่จะได้สะดวกตอ่การทํางานที่ตอ้ งการแบงแยกสวนของขั
่ ่ ้ นตอน
การทํางานแตละขั่ ้ นตอนให้ชดั เจน จะได้ง่ายตอการตรวจสอบ
่ ้ ้ นตอนการทํางาน
ปรับปรุ ง และแกไขขั

นั้ นๆ ดังนั้ นไฟล์สคริ ปต์จึงชวยหลี ิ ้ นได้ ถ้านําเอาชุดคําสัง่
กเลี่ยงปัญหาความผิดพลาดที่อาจจะเกดขึ
ทั้ งหมดมารวมไว้ในโปรแกรมหลักที่เดียว นอกจากนี้ การตรวจสอบและการแกไข ้ ข้อมูลตางๆ
่ ใน
ไฟล์สคริ ปต์กส็ ามารถทําได้ง่าย โดยการใช้โปรแกรมเอดิเตอร์ทว่ั ไป เชน่ โปรแกรม Notepad,
WordPad, หรื ออาจจะใช้โปรแกรมเอดิเตอร์ ของ SCILAB เองที่เรี ยกวา่ “Scipad” กได้ ็
ในทางปฏิบตั ิไฟล์สคริ ปต์จะเป็ นไฟล์ที่ปิดท้ายด้วย .sce และสามารถใช้คาํ สัง่ exec
ในการประมวลผลไฟล์สคริ ปต์ การทํางานของไฟล์สคริ ปต์จะเทียบเทากบการป้ ่ ั ่
อนคําสั่งผานโปรแกรม
SCILAB โดยตรงตามปรกติทีละคําสัง่ตามลําดับที่ปรากฎอยูใ่ นไฟล์สคริ ปต์ ดังนั้ นตัวแปรทั้ งหมด
่ น ตัวแปรโกลบอล (global variable) ซึ่ งหมายความวา่ ถ้าตัวแปร
ที่ใช้ในไฟล์สคริ ปต์จึงถือวาเป็

ตางๆ ที่ใช้ในหน้าตางคํ ่
่ าสั่งกอนการเรี ั วแปรที่อยูใ่ นไฟล์สคริ ปต
ยกใช้งานไฟล์สคริ ปต์มีชื่อซํ้ากบตั

แล้ว คาของตั ่ ้ นกสามารถที
วแปรเหลานั ็ ่จะถูกเปลี่ยนไปได้ตามคําสัง่ที่อยูใ่ นไฟล์สคริ ปต์
141

5.3.1.2 ไฟล์ฟังก์ ชัน


ถ้าต้องการสร้างไฟล์ที่ทาํ หน้าที่เสมือนเป็ นฟังกชั์ นหนึ่งในตัวโปรแกรม SCILAB ขึ้ นมาใช้งานเอง
โดยมีลกั ษณะการทํางานเหมือนกบฟั ั งกชั์ นในตัว (built-in function) ของโปรแกรม SCILAB
่ คือมีการสงผานคาของตั
กลาว ่ ่ ่ วแปรตางๆ่ ไปให้กบั ฟังกชั์ น จากนั้ นฟังกชั์ นกจะ
็ นําคาของตั
่ วแปร
่ ้ ไปประมวลผลตามคําสัง่ ที่มีอยูภ่ ายในตัวฟังกชั์ น แล้วกสงผลลั
เหลานี ็่ พธ์ที่ได้ออกมาจากตัวฟังกชั์ น
ไฟล์ลกั ษณะนี้ในโปรแกรม SCILAB จะเรี ยกวา่ ไฟล์ฟังกชั์ นหรื อ “Sci-file” ข้อดีของไฟล์ฟังกชั์ น
่ าให้ผใู้ ช้งานโปรแกรม SCILAB สามารถพัฒนาฟังกชั์ นรู ปแบบใหมๆ่ ที่ไมมี่ อยูใ่ น
คือการชวยทํ
โปรแกรม SCILAB ขึ้ นมาใช้งานเฉพาะด้านได้ตามความต้องการ ดังนั้ นไฟล์ฟังกชั์ นจึงมีประโยชน์
มากในการเขียนโปรแกรมที่ซบั ซ้อน
ในทางปฏิบตั ิไฟล์ฟังกชั์ นจะเป็ นไฟล์ที่ปิดท้ายด้วย .sci และสามารถใช้คาํ สัง่ exec
หรื อ getf ในการประมวลผลไฟล์ฟังกชั์ น ข้อแตกตางที ่ ่สาํ คัญระหวางไฟล์
่ สคริ ปต์และไฟล์ฟังกชั์ น
ก็คือ ตัวแปรทั้ งหมดที่ ใช้ในไฟล์ฟังกชั์ นจะถื อวาเป็ ่ น ตัวแปรโลคอล (local variable) ซึ่ ง
หมายความวา่ ถึงแม้วาตั ่ วแปรตางๆ ่ ที่ใช้ในไฟล์ฟังกชั์ นจะมีชื่อซํ้ ากนกบตั
ั ั วแปรที่ใช้อยูใ่ นหน้าตาง ่
คําสั่ง (หรื อนอกไฟล์ฟังกชั์ น) การเปลี่ยนแปลงคาของตั ่ วแปรที่ใช้อยูใ่ นหน้าตางคํ
่ าสัง่ จะไมมี่ ผลกระทบ
ตอตั่ วแปรที่มีช่ือซํ้ ากนที
ั ่ใชอ้ ยูภ่ ายในไฟล์ฟังกชั์ น ดังนั้ นผูพั้ ฒนาไฟล์ฟังกชั์ นขึ้ นมาใหมจึ่ งไมต้่ อง
กงวล ั กบการ
ั กาหนดชื
ํ ั ั วั แปรที่ใช้อยูใ่ นหน้าตางคํ
่อตัวแปรที่ซ้ าํ กนกบต ่ าสั่ง หรื อในไฟล์ฟังกชั์ นอื่นๆ
่ ทําให้ผใู้ ช้สามารถสร้างไฟล์ฟังกชั์ นรู ปแบบใหมๆ่ ขึ้ นมาใช้งานได้อยางเป็
ซึ่ งจะชวย ่ นอิสระจากผูอ้ ื่น
กลาวคื่ อผูใ้ ช้สามารถนําไฟล์ฟังกชั์ นของผูอ้ ื่นมาใช้กบงานของตนเองได้
ั เพียงแตป้่ อนคา่ ของตัวแปร
่ ให้สอดคล้องกบรู
ตางๆ ั ปแบบและข้อกาหนดของไฟล์
ํ ฟังกชั์ นนั้ น

5.3.2 รปแบบและข้
ู อกําหนดในการเขียนไฟล์ ฟังก์ ชัน
โปรแกรม SCILAB มีฟังกชั์ นสําเร็ จรู ปที่สามารถนํามาใช้งานมากมาย แต่ในกรณี ที่ผใู้ ช้ตอ้ งการ
สร้างฟังกชั์ นใหมๆ่ ขึ้ นมาใช้งานเฉพาะทาง กสามารถทํ
็ ่ ั
าได้เชนกนโดยใช้ โปรแกรมเอดิเตอร์ ทว่ั ไป
ในการเขียนไฟล์ฟังกชั์ น แตโครงสร้
่ างของฟังกชั์ นต้องสอดคล้องกบรู
ั ปแบบของโปรแกรม SCILAB
่ นี้
ดังตอไป
142

function [ y1, y2 , ..., yn ] = function_name (x1, x2, ..., xm)

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 เพื่อทําหน้าที่น้ ีได้ดงั นี้

function [OddSum] = MySum(x1, x2)


//[OddSum] = MySum(x1, x2) computes the summation of odd
//numbers between x1 and x2.

index = modulo(x1, x2);


if index == 1 then
StartNumber = 1;
else
StartNumber = x1 + 1;
end
143
OddSum = 0;
i = StartNumber;
while i <= x2
OddSum = OddSum + i;
i = i + 2;
end
endfunction

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จแล้วจะต้องบันทึกไฟล์น้ ีในชื่อของ MySum.sci เทานั ่ ่จะนํา


่ ้ น กอนที
ไฟล์ฟังกชั์ นนี้ มาใช้งานเสมือนหนึ่งวาเป็
่ นฟังกชั์ นมาตรฐานของโปรแกรม SCILAB จะต้องทําการ
โหลด (load) ไฟล์ฟังกชั์ นนี้ ก่อน โดยใช้คาํ สัง่ exec หรื อ getf ดังแสดงในตัวอยางตอไปนี
่ ่ ้

--> 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 ในพื้นที่ใช้งาน

คําสัง่ exists เป็ นคําสั่งที่ใช้ในการยืนยันการมีอยูจ่ ริ ง24 (existence) ของชื่อตัวแปรนั้ นๆ กลาวคื ่ อ


ถ้ามีชื่อตัวแปรนั้ นอยูใ่ นพื้นที่ใช้งาน (workspace) จริ ง กจะให้
็ ผลลัพธ์เป็ นคา่ 1 แตถ้่ าไมมี่ ชื่อตัวแปร
นั้ นอยูก่ จะให้
็ ผลลัพธ์เป็ นคา่ 0 เมื่อทําการโหลดไฟล์ฟังกชั์ นโดยใช้คาํ สัง่ exec หรื อ getf แล้ว
โปรแกรม SCILAB กจะมองเห็ ็ นไฟล์ฟังกชั์ นที่สร้างขึ้ นมานี้ เป็ นเสมือนตัวแปรตัวหนึ่ งที่สามารถ
เรี ยกมาใช้งานได้ทนั ที เชน่

24
เมื่อทําการโหลดไฟล์ฟังกชั์ นแล้ว โปรแกรม SCILAB จะถือวาชื
่ ่อไฟล์ฟังกชั์ นนั้ นเป็ นเสมือนตัวแปรตัวหนึ่ ง
ภายในโปรแกรม SCILAB
144

-->y = MySum(2, 10) //ในที่น้ ีจะหมายถึง x1 = 2 และ x2 = 10


y =
24. //ผลลัพธ์คือ 3 + 5 + 7 + 9 = 24

-->y = MySum(1, 10) //ในที่น้ ีจะหมายถึง x1 = 1 และ x2 = 10


y =
25. //ผลลัพธ์คือ 1 + 3 + 5 + 7 + 9 = 25

่ ่อป้ อนอินพุตพารามิเตอร์ x1 และ x2 ให้กบัไฟล์ฟังกชั์ น MySum แล้ว โปรแกรม


จะเห็นได้วาเมื
็ าการประมวลผลชุดคําสั่งภายในไฟล์ฟังกชั์ น MySum จากนั้ นก็จะสงผลลั
SCILAB กจะทํ ่ พธ์ที่ได้

ออกมาบรรจุไว้ในตัวแปร y ถ้าหากป้ อนอินพุตพารามิเตอร์ไมครบตามที ํ ในไฟล์ฟังกชั์ น
่กาหนดไว้
็ ่
MySum โปรแกรม SCILAB กจะไมสามารถประมวลผล ไฟล์ฟังกชั์ นนี้ ได้

-->y = MySum(1) ่ วเดียว คือ x1


//ป้ อนอินพุตพารามิเตอร์แคตั
!--error 4
undefined variable : x2
at line 12 of function MySum called by :
y = MySum(1)

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

-->x2 = 10
x2 =
10.

-->y = MySum(1) ํ
//กาหนดให้ x2 = 10 อัตโนมัติ
y =
25.

ไฟล์ฟังกชั์ นที่ถูกโหลดโดยใช้คาํ สัง่ exec หรื อ getf จะทําหน้าที่เสมือนเป็ นฟังกชั์นมาตรฐาน



ของโปรแกรม SCILAB อยางไรกตามถ้ ็ าป้ อนคําสั่ง clear เข้าไปที่หน้าตางคํ
่ าสั่ง ตัวแปรและ
ไฟล์ฟังกชั์ นตางๆ
่ กจะถู็ กลบออกไปจากโปรแกรม SCILAB ดังแสดงในตัวอยางตอไปนี ่ ่ ้
145
-->clear;

-->x2
!--error 4
undefined variable : x2 //ไมมี่ ชื่อตัวแปร x2 ในพื้นที่ใช้งาน

-->exists('MySum')
ans =
0. //ไมมี่ ชื่อไฟล์ฟังกชั์ น MySum ในพื้นที่ใช้งาน

5.3.3 การใช้ งานคําสั่ง argn

่ ่แสดงข้างต้น ในกรณี ที่ผใู้ ช้ลืมป้ อนอินพุตพารามิเตอร์บางตัวให้กบัไฟล์ฟังกชั์ นที่สร้าง


จากตัวอยางที
ขึ้ นมา แตชื่ ่อของอินพุตพารามิเตอร์เหลานั
่ ้ นไปซํ้ากบชื
ั ่อของตัวแปรที่เคยเรี ยกใช้อยูใ่นพื้นที่ใช้งาน
ไฟล์ฟังกชั์ นกจะนํ
็ าเอาคาของตั
่ ั ่อของอินพุตพารามิเตอร์ไปใช้ในการประมวลผล
วแปรที่มีชื่อซํ้ ากบชื
ภายในตัวไฟล์ฟังกชั์ น ซึ่ งการทํางานในลักษณะนี้ เป็ นสิ่ งที่ควรหลีกเลี่ยงเนื่องจากอาจจะเป็ นการใช้

คาของอิ นพุตพารามิเตอร์ที่ผดิ จุดประสงค์ อันจะสง่ผลทําให้โปรแกรมทั้ งหมดเกดความเสี ิ ยหายได้
เพราะวา่ใช้ค่าที่ไมถู่ กต้องในการคํานวณ
ดังนั้ นโปรแกรม SCILAB จึงได้เตรี ยมคําสัง่ argn เพื่อให้ผพู้ ฒั นาไฟล์ฟังกชั์ นสามารถ
ตรวจสอบได้วา่ โปรแกรมภายนอกที่กาลั ํ งเรี ยกใช้ไฟล์ฟังกชั์ นนี้ ได้ป้อนอินพุตอาร์กิวเมนต์กี่ตัวและ
ต้องการเอาต์พุตอาร์ กิวเมนต์กี่ตัว เพื่อให้ผพู ้ ฒั นาไฟล์ฟังกชั์ นจะได้สามารถเขียนโปรแกรมให้
ทําหน้าที่สอดคล้องกบจํั านวนอาร์กิวเมนต์ที่รับเข้ามาและที่ส่ งออกไป รู ปแบบการใช้งานของคําสัง่
argn มีดงั นี้

[lhs, rhs] = argn()

โดยที่พารามิเตอร์
ƒ lhs เป็ นเลขจํานวนเต็มบวกที่แสดงถึงจํานวนเอาต์พุตอาร์ กิวเมนต์ของไฟล์ฟังกชั์ น
ƒ rhs เป็ นเลขจํานวนเต็มบวกที่แสดงถึงจํานวนอินพุตอาร์ กิวเมนต์ของไฟล์ฟังกชั์ น

คําสัง่ argn นี้ จะต้องถูกใช้ภายในตัวไฟล์ฟังกชั์ นที่พฒั นาขึ้ นมาเทานั


่ ้ น ให้พิจารณาตัวอยางตอไปนี
่ ่ ้
จะได้เข้าใจถึงการทํางานของคําสั่ง argn มากขึ้ น
146

function [OddSum, EvenSum] = MySum2(x1, x2)


//[OddSum, EvenSum] = MySum2(x1, x2) finds the summation of
//odd numbers and even numbers between x1 and x2.

[lhs, rhs] = argn(); ่ านวนเอาต์พตุ อาร์กิวเมนต์และอินพุตอาร์กิวเมนต์


//คํานวณหาคาจํ

if rhs < 2 then x2 = 10; end

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

ไฟล์ฟังกชั์ นนี้ จะหาผลบวกของเลขจํานวนคี่และจํานวนคู่ท้ งั หมดที่อยูร่ ะหวางคา


่ ่ x1 และคา่ x2
โดยผลบวกของเลขจํานวนคี่จะถูกบรรจุไว้ในตัวแปรชื่อ OddSum และผลบวกของเลขจํานวนคู่
147

จะถูกบรรจุไว้ในตัวแปรชื่อ EvenSum เมื่อพิจารณาดูขอ้ มูลภายในไฟล์ฟังกชั์ นจะพบวา่ มีการกาหน ํ ด


จํานวนอินพุตอาร์ กิวเมนต์และเอาต์พุตอาร์ กิวเมนต์ โดยที่ถา้ จํานวนอินพุตอาร์ กิวเมนต์นอ้ ยกวา่
สองตัว (นัน่ คือไมมี่ การป้ อนคา่ x2 ให้กบัไฟล์ฟังกชั์ น MySum2) ไฟล์ฟังกชั์ นนี้ กจะกาหนดให้
็ ํ
x2 = 10 โดยอัตโนมัติ เชน ่ เดียวกนถ้
ั าจํานวนเอาต์พุตอาร์กิวเมนต์นอ้ ยกวาสอง
่ ตัว ไฟล์ฟังกชั์ นนี้
็ ่ทาํ การคํานวณหาคาผลรวมของเลขจํ
กจะไม ่ ่ ่ x1 และคา่ x2 ดังนั้ นเมื่อเขียน
านวนคูท่ ี่อยูร่ ะหวางคา
่ ่จะนําไฟล์
ไฟล์ฟังกชั์ นนี้เสร็ จแล้วก็ให้บนั ทึกไฟล์ฟังกชั์ นนี้ ในชื่อของ MySum2.sci และกอนที
ฟังกชั์ นนี้ มาใช้งานก็จะต้องทําการโหลดไฟล์ฟังกชั์ นนี้ ก่อน ดังแสดงในตัวอยางตอไปนี
่ ่ ้

-->getf('MySum2.sci')

-->[y1, y2] = MySum2(1,10)


y2 =
30.
y1 =
25.

-->[y1, y2] = MySum2(1) ์ น MySum2 จะใช้ค่า x2 = 10 โดยอัตโนมัติ


//ไฟล์ฟังกชั
y2 =
30.
y1 =
25.

-->y1 = MySum2(1,10) ์ น MySum2 จะไมแสดงผลรวมของเลขจํ


//ไฟล์ฟังกชั ่ านวนคู่
y1 =
25.

-->y1 = MySum2(1) ์ น MySum2 จะใช้ค่า x2 = 10 โดยอัตโนมัติ


//ไฟล์ฟังกชั
y1 = ่ านวนคู่
//แต่จะไมแสดงผลรวมของเลขจํ
25.

5.3.4 การเขียนฟังก์ชันแบบอินไลน์
การพัฒนาฟั งกชั์ นรู ปแบบใหม่ข้ ึนมาใช้งานสามารถทําได้ตามที่อธิ บายไว้ขา้ งต้น เชน่ ถ้าต้องการ
สร้างฟังกชั์ นเพื่อหาค่าสูงสุ ดของเลขสองจํานวน ก็สามารถเขียนฟังกชั์ นในโปรแกรม SCILAB ได้
ดังนี้
148

function [y] = MyMax(x1, x2)

if x1 >= x2 then
y = x1
else
y = x2;
end

endfunction

ั ั ่อของฟังกชั์ น
จากนั้ นให้ทาํ การบันทึกฟังกชั์ นนี้ ลงในไฟล์ โดยที่ชื่อไฟล์จะต้องเป็ นชื่อเดียวกนกบชื
นัน่ คือชื่อไฟล์ MyMax.sci นอกจากนี้ ก่อนจะใช้งานฟั งกชั์ นนี้ ได้ก็จะต้องทําการโหลดฟั งกชั์ น
โดยใช้คาํ สัง่ exec หรื อ getf กอน ่
สังเกตจะพบวา่วิธีการสร้างฟังกชั์ นข้างต้นคอนข้
่ างจะเสี ยเวลาเนื่องจากมีการทํางานหลาย
ขั้ นตอน ในกรณี ที่ฟังกชั์ นที่พัฒนาขึ้ นมามีขนาดเล็กและถูกใช้งานเฉพาะภายในโปรแกรมหลักเพียง
โปรแกรมเดียว โปรแกรม SCILAB อนุญาตให้มีการกาหนดฟั ํ งกชั์ นแบบอินไลน์ (in-line function)
่ าสัง่ ได้โดยตรง ดังแสดงในตัวอยางตอไปนี
ที่หน้าตางคํ ่ ่ ้ (ยังคงเริ่ มต้นฟังกชั์ นด้วยคําวา่ function
และจะต้ องลงท้ายด้วยคําวา่ endfunction เสมอ)

-->function [y] = MyMax(x1, x2), if x1 >= x2 then y = x1, ...


-->else y = x2; end; endfunction;

-->y = MyMax(1, 5)
y =
5.

วิธีการนี้จะทําให้สามารถนําฟังกชั์ นที่สร้างขึ้ นมาไปใช้งานได้ทนั ที เนื่องจากโปรแกรม SCILAB


จะทําการโหลดฟังกชั์ นนี้ โดยอัตโนมัติ (ไมต้่ องเรี ยกผานคํ
่ าสั่ง exec หรื อ getf) วิธีการสร้าง
ฟังกชั์ นแบบนี้ จะสะดวกในกรณี ที่จาํ นวนคําสั่งภายในฟังกชั์ นมีไมมาก
่ นอกจากวิธีการนี้ แล้ว ผูใ้ ช้
ยังสามารถใช้คาํ สัง่ deff ในการสร้างฟังกชั์ นแบบอินไลน์ได้เชนกน ่ ั ซึ่ งมีรูปแบบการใช้งาน คือ

deff('[เอาต์พต
ุ ] = function_name(อินพุต)', 'ชุดคําสัง่')
149

ตัวอยา่งการใช้งานคําสัง่ deff เชน่

-->deff('[y] = MyMax(x1, x2)', 'if x1 > x2 then y = x1; ...

-->else y = x2; end');

-->y = MyMax(1,5)
y =
5.


จะเห็นได้วาการสร้ างฟังกชั์ นใหมขึ่ ้ นมาใช้งานในโปรแกรม SCILAB สามารถทําได้หลายลักษณะ

ทําให้สะดวกตอการใช้ งานตามที่ตอ้ งการ

5.4 การเขียนไฟล์ ไดอารี


ไฟล์ไดอารี (diary file) เป็ นไฟล์ขอ้ มูลที่จะบันทึกข้อมูลทั้ งหมดที่แสดงผลออกทางหน้าตางคํ ่ าสั่ง
ตั้ งแตมี่ การเรี ยกใช้คาํ สั่ง diary ไปเรื่ อยๆ จนถึงคําสัง่ diary(0) รู ปแบบการเรี ยกใช้งานของ
คําสัง่ diary มีดงั นี้

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

เมื่อใช้คาํ สัง่ diary(0) ก็จะถือวา่เป็ นการสิ้ นสุ ดการบันทึกข้อมูลและทําให้ได้ไฟล์เอาต์พุตออกมา


ที่ชื่อวา่ “mydiary.txt” ในสารบบที่กาลั ํ งทํางานอยู่ ณ ขณะนั้ น เมื่อลองใช้โปรแกรมเอดิเตอร์
ที่ชื่อวา่ “WordPad” เปิ ดอานไฟล์
่ น้ ีดก็ู จะได้ตามที่แสดงในรู ปที่ 5.1 ซึ่ งจะพบวาข้ ่ อมูลที่อยูใ่ นไฟล์
นี้ จะเหมือนกบข้ ั อมูลที่ปรากฎอยูใ่ นหน้าตางคํ ่ าสั่ง ตั้ งแต่มีการเรี ยกใช้คาํ สั่ง diary จนถึงคําสั่ง
diary(0)

ประโยชน์ของไฟล์ไดอารี กเพื ็ ่อทําหน้าที่เกบบั


็ นทึกข้อมูลตางๆ
่ ที่แสดงผลออกทางหน้าตาง

่ ้ ไปวิเคราะห์และประมวลผลในขั้ นตอนตอไป
คําสั่ง เพื่อที่จะได้นาํ ข้อมูลเหลานี ่

5.5 ความร้ ู เพิม่ เติมในการเขียนไฟล์ ฟังก์ ชัน


่ ้ จะกลาว
ในสวนนี ่ ถึงการโหลดไฟล์ฟังกชั์น คําสั่งพื้นฐานที่ใช้บ่อยสําหรับการพัฒนาไฟล์ฟังกชั์ น
พร้อมทั้ งแนะนําเทคนิคการเขียนโปรแกรมให้มีประสิ ทธิภาพ
151

5.5.1 การโหลดไฟล์ ฟังก์ชัน


่ ่จะนําไฟล์ฟังกชั์ นที่พฒั นาขึ้ นมาใช้งานในโปรแกรม SCILAB
ั แล้ววา่ กอนที
ตอนนี้ เป็ นที่ทราบกนดี
ผูใ้ ช้จะต้องทําการโหลดไฟล์ฟังกชั์ นนั้ นกอ่นโดยใช้คาํ สัง่ exec หรื อ getf โดยไฟล์ฟังกชั์ นที่ถูก
โหลดเข้าไปในโปรแกรม SCILAB จะถือวาเป็ ่ นตัวแปรตัวหนึ่งของโปรแกรม แตถ้่ ามีการใช้คาํ สัง่
clear ในหน้าตางคํ ่ าสัง่ กจะทํ
็ าให้ไฟล์ฟังกชั์ นนั้ นถูกลบออกจากโปรแกรม SCILAB
โดยทัว่ ไปฟั งกชั์ นมาตรฐานตางๆ
่ ที่เกยวข้
ี่ องกนัในโปรแกรม SCILAB จะถูกรวบรวม
เกบ็ไว้ในไลบรารี (library) โดยไลบรารี ที่โปรแกรม SCILAB เตรี ยมไว้ให้ ได้แก่ ไลบรารี สาํ หรับ
ฟั งกชั์ นพื้ นฐาน (elemlib), ไลบรารี ทางด้านสถิติ (statslib), และไลบรารี สาํ หรับการ
ประมวลผลสัญญาณ (siglib) เป็ นต้น จะถูกเกบไว้ ็ ในสารบบที่ชื่อวา่ “SCIDIR/macros/” เมื่อ
SCIDIR คือสารบบที่เกบโปรแกรม ็ SCILAB

ถ้าต้องการสร้างไลบรารี ใหมเพื ่ ่อเกบ็ ไฟล์ฟังกชั์ นตางๆ


่ ที่ผใู ้ ช้พฒั นาขึ้ นมา กสามารถทํ
็ าได้
โดยใช้คาํ สัง่ genlib เพื่อที่วา่ไฟล์ฟังกชั์ นเหลานี ่ ้ สามารถที่จะถูกเรี ยกใช้งานได้ตลอดเวลาเสมือน
เป็ นฟังกชั์ นในตัว (built-in function) ของโปรแกรม SCILAB (ไมต้่ องมีการโหลดไฟล์ฟังกชั์ น

กอนการเรี ยกใช้งาน) ทั้ งนี้ เป็ นเพราะวา่ โปรแกรม SCILAB จะทําการโหลดไลบรารี ต่างๆ ทุกครั้ ง
เมื่ อเริ่ มใช้งานโปรแกรม SCILAB สําหรั บผูส้ นใจสามารถศึ กษารายละเอียดการใช้งานคําสั่ง
genlib ได้จากคําสั่ง help

5.5.2 คําสั่ งพืน้ ฐานสํ าหรับการพัฒนาฟังก์ชัน


่ ้ จะกลาวถึ
ในสวนนี ่ งคําสัง่ พื้นฐานที่ใช้บ่อยในการพัฒนาฟังกชั์ น ซึ่ งมีดงั ตอไปนี
่ ้

5.5.2.1 ฟังก์ ชัน disp

คําสั่งนี้ มีการเรี ยกใช้งานอยูห่ ลายรู ปแบบ เชน่


ƒ disp(x) เป็ นคําสัง่ ที่ใช้ในการแสดงผลของตัวแปร x ่
ตัวอยางการ ใช้งาน เชน่

-->x = [2 4 6 8];

-->disp(x([1 3])) //แสดงข้อมูลสมาชิกตัวที่หนึ่งและตัวที่สามของเวกเตอร์ x


2. 6.
152

ƒ disp("string") เป็ นคําสัง่ ที่ใช้ในการแสดงข้อความในเครื่ องหมาย "..." ออกมาที่


่ าสั่ง
หน้าตางคํ

-->disp("Piya Kovintavewat")
Piya Kovintavewat

นอกจากนี้ คาํ สั่ง disp ยังมีการใช้งานในรู ปแบบอื่นอีก เชน่

-->A = 3.5; disp(A, "A = ")


A =
3.5

-->X = 3.5; Y = 2; disp(Y, "Y = ", X, "X = ")


X =
3.5
Y =
2.

-->Z = -5.2; disp("Z = " + string(Z))


Z = -5.2

5.5.2.2 ฟังก์ชัน error

รู ปแบบการใช้งานของคําสั่งนี้ คือ error('string') ซึ่ งจะทําหน้าที่ในการแสดงข้อความที่


อยูใ่ นเครื่ องหมาย '...' ออกทางหน้าตางคํ
่ าสัง่ และหยุดการทํางานของโปรแกรมนั้ น

5.5.2.3 ฟังก์ชัน warning

รู ปแบบการใช้งานของคําสั่งนี้ คือ warning('string')ซึ่ งจะทําหน้าที่ในการแสดงข้อความ


ที่อยูใ่ นเครื่ องหมาย '...' ออกทางหน้าตางคํ
่ าสั่งคล้ายกบคํ
ั าสั่ง error แต่จะไมมี่ การหยุดการ
ทํางานของโปรแกรม

5.5.2.4 ฟังก์ชัน pause

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


เครื่ องหมาย SCILAB prompt “-->” พร้อมทั้ งแสดงระดับของการหยุดจังหวะ (level of the
153

pause) ้
คําสั่งนี้ มีประโยชน์มากสําหรับการตรวจสอบและแกไขโปรแกรม (debugging program)
่ ่ (ศึกษารายละเอียดเพิ่มเติมได้ในหัวข้อที่ 8.1.3)
ตัวอยางเชน

-->pause //หยุดจังหวะการประมวลผลของโปรแกรม

-1->pause //ระดับที่หนึ่งของการหยุดจังหวะ

-2->pause //ระดับที่สองของการหยุดจังหวะ

-3-> //ระดับที่สามของการหยุดจังหวะ

5.5.2.5 ฟังก์ชัน abort

เป็ นคําสั่งที่ใช้ในการขัดจังหวะการประมวลผลของโปรแกรม โดยโปรแกรม SCILAB จะแสดง


เครื่ องหมาย SCILAB prompt “-->” และทําให้ระดับของการหยุดจังหวะลดลงจนเป็ นศูนย์
่ ่ (ศึกษารายละเอียดเพิ่มเติมได้ในหัวข้อที่ 8.1.4.1)
ตัวอยางเชน
-->pause

-1->pause

-2->pause

-3->abort //ทําการขัดจังหวะการประมวลผลของโปรแกรม

--> //พร้อมทั้ งทําให้ระดับของการหยุดจังหวะลดลงเป็ นศูนย์

5.5.2.6 ฟังก์ชัน break

เป็ นคําสั่งที่ใช้ในการหยุดการทํางานของลูป (loop) นัน่คือถ้าคําสัง่ นี้ อยูภ่ ายในชุดคําสั่ง for หรื อ


while จะสงผล ่ ทําให้ลปู หยุดการทํางาน

5.5.2.7 ฟังก์ชัน exit

่ าสั่งของโปรแกรม
เป็ นคําสั่งที่ใช้ในการหยุดการทํางานของโปรแกรม SCILAB นัน่ คือหน้าตางคํ

SCILAB กจะหายไปด้ วย
154

5.5.2.8 ฟังก์ชัน quit

เป็ นคําสั่งที่ใช้ในการหยุดการทํางานของโปรแกรม SCILAB หรื อใช้การลดระดับของการหยุด


่ ่
จังหวะ (pause) ตัวอยางเชน

-->pause
-1->pause
-2->pause

-3->quit //ลดระดับของการหยุดจังหวะลงสองระดับ
-1->quit
-->

5.5.2.9 ฟังก์ชัน resume และ return


่ านี้ กลับมาทํางานตอ่อีกครั้ ง พร้อมทั้ งสําเนา (copy)
เป็ นคําสัง่ ที่ทําให้โปรแกรมที่ถกู ขัดจังหวะกอนหน้
ตัวแปรโลคอลมาใช้ในพื้นที่ใช้งาน ณ ขณะนั้ น (ศึกษารายละเอียดการใช้งานคําสั่ง resume และ
return เพิ่มเติมได้ในหัวข้อที่ 8.1.2)

5.5.2.10 ฟังก์ชัน tic และ toc


ฟังกชั์ น tic เป็ นคําสั่งที่ใช้ในการจับเวลาเริ่ มต้นการทํางานของชุดคําสั่ง โดยทัว่ ไปจะใช้งานรวมกบ
่ ั
ฟังกชั์ น toc ซึ่ งจะทําหน้าที่ในการหยุดเวลาที่ต้ งั ไว้จากการใช้คาํ สั่ง tic พร้อมทั้ งแสดงผลลัพธ์
่ นวินาที) ออกทางหน้าตางคํ
ของเวลาที่ใช้ไป (มีหนวยเป็ ่ าสัง่ ตัวอยางเชน
่ ่

-->tic //เริ่ มจับเวลา

-->deff('[y] = fsum(N)', 'y=0; for i=1:N, y=y+1; end');

-->y = fsum(2000000)
y =
100.

-->toc //สิ้ นสุ ดการจับเวลา ในที่น้ ีได้ใช้เวลาไปประมาณ 5.719 วินาที


ans =
5.719
155

5.5.3 ข้ อแนะนําในการพัฒนาโปรแกรมให้ มีประสิ ทธิภาพ


การพัฒนาโปรแกรมเพื่อให้สอดคล้องกบัข้อกาหนดที
ํ ่ตอ้ งการสามารถที่จะทําได้หลายวิธี ทั้ งนี้ จะ
ขึ้นอยูก่ บทั
ั กษะและความถนัดของผูพ้ ฒั นาโปรแกรมแตละคน
่ โดยทัว่ ไปผูพ้ ฒั นาโปรแกรมจะพยายาม
่ ถูกต้องและรวดเร็ ว
ที่จะทําให้ได้โปรแกรมที่สามารถทํางานได้อยาง
เนื่ องจากโปรแกรม SCILAB เป็ นโปรแกรมที่ทาํ งานบนพื้ นฐานของเมทริ กซ์ ดังนั้ น
หลักการเขียนโปรแกรมที่ดีคือ ควรจะพยายามใช้ประโยชน์จากโครงสร้างของเมทริ กซ์และพยายาม

หลีกเลี่ยงการใช้คาํ สัง่วนซํ้าตางๆ ่ รคํานวณหาคาผลรวมของ
ให้มากที่สุด ลองพิจารณตัวอยางกา ่
2

ฟั งกชั์ น f (i) =
3i + 2i-1
2
่ วแปร i ตั้ งแตค่ ่า 1 ถึงคา่ 200000 นัน่ คือการหาคา่
สําหรับคาตั
5i
ของตัวแปร y จาก
200000
⎛ 3i2 +2i-1 ⎞
y= ∑ ⎜
5i2

i=1 ⎝ ⎠

ซึ่ งสามารถเขียนเป็ นชุดคําสั่งเพื่อหาคา่ y โดยใช้คาํ สัง่วนซํ้าได้ดงั นี้

-->y = 0;

-->tic //เริ่ มจับเวลา

-->for i=1:200000
--> y = y + (3*i^2 + 2*i - 1)/(5*i^2);
-->end

-->toc //หยุดจับเวลา และแสดงเวลาทั้ งหมดที่ใช้


ans =
2.937

-->y
y =
120004.78

่ ็
ชุดคําสัง่ นี้ มีการใช้คาํ สัง่วนซํ้าทําให้ใช้เวลาในการประมวลผลรวมทั้ งสิ้ น 2.937 วินาที อยางไรกตาม
ผูใ้ ช้สามารถที่จะพัฒนาชุดคําสัง่ใหมให้ ่ มีผลลัพธ์เทาเดิ
่ ม แตใช้
่ ความเร็ วในการประมวลผลน้อยลงได้
โดยใช้ประโยชน์จากโครงสร้างของเมทริ กซ์ ดังตอไปนี ่ ้
156
-->tic

-->i = 1:200000;

-->y = sum((3*i.^2 + 2*i - 1)./(5*i.^2));

-->toc
ans =
0.234

-->y
y =
120004.78

จะเห็นได้วาชุ ่ ดคําสั่งนี้ จะใช้เวลาในการประมวลผลเพียง 0.234 วินาที ซึ่ งเร็ วกวาชุ


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

5.6 ตัวอย่ างการคํานวณ


่ ้ จะยกตัวอยางการแกไขปั
ในสวนนี ่ ้ ญหาโจทย์ทางคณิ ตศาสตร์โดยใช้โปรแกรม SCILAB ดังตอไปนี
่ ้

ตัวอย่ างที่ 2 จงเขียนโปรแกรมเพื่อเรี ยงลําดับเลขจํานวนเต็มใดๆ 3 จํานวน เพื่อให้แสดงผลลัพธ์


จากคา่น้อยไปหาคา่มาก โดยกาหนดให้
ํ มีรูปแบบการเรี ยกใช้งานดังนี้

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

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ MinToMax.sci ตัวอยาง


่ การใช้งานเชน่

-->getf('MinToMax.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->y = MinToMax(3, -3, 1)
y =
- 3. 1. 3.

-->y = MinToMax(-0.2, 99, 0.45)


y =
- 0.2 0.45 99.

่ ดสองจุดในระบบ
ตัวอย่ างที่ 3 จงเขียนโปรแกรมเพื่อคํานวณหาระยะทางที่ส้ ันที่สุด d ระหวางจุ
พิกดัคาร์ทีเซี ยน นัน่ คือ P1(x1, y1) และ P2(x2, y2) โดยมีรูปแบบการเรี ยกใช้งาน คือ
d = FindDistance(x1, y1, x2, y2)

วิธีทาํ เนื่องจากระยะทางระหวางจุ ่ ดสองจุดหาได้จาก d = ( x1- x2) + (y1-y2) ดังนั้ น


2 2

โปรแกรมนี้ สามารถสร้างได้ดงั นี้

function [d] = FindDistance(x1, y1, x2, y2)

d = sqrt((x1-x2)^2 + (y1-y2)^2)

endfunction

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ FindDistance.sci ตัวอยาง


่ เชน่
158

-->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

ตัวอย่ างที่ 4 จงเขียนโปรแกรมเพื่อหาผลรวมของเลขจํานวนเต็มบวกตั้ งแต่ n1 ถึง n2 ที่หารด้วย



เลขจํานวนเต็มบวก m ลงตัว โดยกาหนดให้ มีรูปแบบการเรี ยกใช้งานดังนี้
y = MySumMod(n1, n2, m)

วิธีทาํ โปรแกรมนี้ สามารถสร้างได้ดงั นี้

function y = MySumMod(n1, n2, m)

x = n1:n2;
temp = modulo(x, m);
index = find(temp == 0);
y = sum(x(index))

endfunction

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ MySumMod.sci ตัวอยาง


่ การใช้งานเชน่

-->getf('MySumMod.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->y = MySumMod(1, 9, 2)
y =
20.
159
-->y = MySumMod(1, 13, 3)
y =
30.

-->y = MySumMod(3, 50, 7)


y =
196.

่ ฟังกชั์ น
ตัวอย่ างที่ 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

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ MyFx.sci ตัวอยาง


่ การใช้งานเชน่
160

-->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)

วิธีทาํ โปรแกรมนี้ สามารถสร้างได้โดยใช้คาํ สัง่ for ดังนี้

function fn = MyFN(N)

fn = 0;
for i = 0:N
fn = fn + (i^2 - 3*i);
end

endfunction

เมื่อเขียนไฟล์ฟังกชั์นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ MyFN.sci ตัวอยาง


่ การใช้งานเชน่

-->getf('MyFN.sci') ่ ยกใช้งาน
//ทําการโหลดไฟล์ฟังกชั์ นกอนเรี
-->fn = MyFN(3)
fn =
- 4.
161
-->fn = MyFN(20)
fn =
2240.

หรื ออาจจะเขียนโปรแกรมนี้ โดยใช้คาํ สั่ง while แทนคําสัง่ for ได้ดงั นี้

function fn2 = MyFN2(N)

fn2 = 0;
i = 0;
while i <= N
fn2 = fn2 + (i^2 - 3*i);
i = i + 1;
end

endfunction

เมื่อเขียนไฟล์ฟังกชั์ นเสร็ จกทํ็ าการบันทึกไฟล์น้ ีในชื่อ MyFN2.sci ตัวอยาง


่ การใช้งานเชน่

-->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

elseif-else-end, และ select-case) นอกจากนี้ ยงั ได้อธิบายถึงหลักการพัฒนาฟังกชั์ น


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

5.8 แบบฝึ กหัดท้ ายบท



5.1 กาหนดให้ตวั แปร N เป็ นเลขจํานวนเต็มบวกใดๆ จงเขียนโปรแกรมโดยใช้คาํ สัง่ for เพื่อ
่ ่
คํานวณหาคาตอไปนี ้
N
5.1.1) ∑i = 1+ 2 + 3 +… + N
i =1

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

ั อ 5.1 โดยใช้คาํ สั่ง while แทน


5.2 ทําเหมือนกบข้
่ าสั่ง for และคําสัง่ while
5.3 จงอธิบายข้อแตกต่างระหวางคํ
ํ ตวั แปร N เป็ นเลขจํานวนเต็มบวกใดๆ จงพิสูจน์วา่
5.4 กาหนดให้
N N
5.4.1) ∑ i = ( N + 1)
i =1 2
N N
5.4.2) ∑ i 2 = ( N + 1)( 2N + 1)
i =1 6
2
N
⎛N ⎞
5.4.3) ∑ i = ⎜ ( N + 1) ⎟
3

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

่ าสั่งวา่ “x must be A, B, or C only….


การทํางานแล้วแสดงผลออกทางหน้าตางคํ
Please try again ”

5.9.2) ถ้า x = 4 ให้แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “You got A” แตถ้่ า x = 3 ให้


แสดงผลออกทางหน้าตางคํ ่ าสั่งวา่ “You got B” แตถ้่ า x = 2 ให้แสดงผลออกทาง
่ าสั่งวา่ “You got C” แตถ้่ า x = 1 ให้แสดงผลออกทางหน้าตางคํ
หน้าตางคํ ่ าสั่งวา่
“You got F” สําหรับคา่ x คาอื่ ่นๆ ให้โปรแกรมหยุดการทํางานแล้วแสดงผลออกทาง
่ าสัง่ วา่ “x must be 1, 2, 3 or 4 only…. Please try again ”
หน้าตางคํ
5.10 จงเขียนไฟล์ฟังกชั์ นที่มีรูปแบบการเรี ยกใช้งานคือ [a, b, c, d] = MoneyExchange(m)
เพื่อทําหน้าที่เปลี่ยนจํานวนเงิน m บาท ให้เป็ นธนบัตรใบละ 100 บาท จํานวน a ใบ,
ธนบัตรใบละ 20 บาท จํานวน b ใบ, เหรี ยญสิ บบาท จํานวน c เหรี ยญ และเหรี ยญหนึ่งบาท
จํานวน d เหรี ยญ
่ ฟังกชั์ นตอไปนี
5.11 จงเขียนโปรแกรมเพื่อหาคาของ ่ ้


( x + 2)
2
, −10 ≤ x < −1
⎪ 3
f ( x) = ⎨ x − 10 , −1 ≤ x < 5
⎪sin ( x ) − cos ( 2 x ) , 5 ≤ x < 10
⎪⎩ 0 elsewhere

่ ่ าสั่ง exec และคําสัง่ getf


5.12 จงเปรี ยบเทียบข้อแตกตางระหวางคํ
่ ระหวาง
5.13 จงอธิบายข้อแตกตาง ่ ไฟล์สคริ ปต์และไฟล์ฟังกชั์ น

5.14 จงอธิบายการใช้งานคําสัง่ argn พร้อมแสดงตัวอยางการใช้
งานคําสัง่ นี้
5.15 จงเขียนฟังกชั์ นแบบอินไลน์ (in-line function) ให้ทาํ งานเหมือนกบข้
ั อ 5.4.1 และ 5.4.2
โดยใช้คาํ สั่ง function-endfunction และ deff

5.16 จงอธิบายการใช้งานไฟล์ไดอารี (file diary) พร้อมแสดงตัวอยางการใช้
งานคําสั่งนี้

5.17 จงอธิบายการใช้งานคําสัง่ tic-toc พร้อมแสดงตัวอยางการใช้
งานคําสั่งนี้
บทที่ 6
การวาดกราฟด้ วย SCILAB

การทํางานในด้านตางๆ่ หลังจากที่ทาํ การวิเคราะห์ขอ้ มูลเสร็ จแล้ว ขั้ นตอนตอไปกคื


่ ็ อการนําเสนอ
ผลงานวิจยั หรื อผลการทดลองที่ได้มา ซึ่ งโดยทัว่ ไปแล้วมักจะแสดงผลในรู ปของรู ปกราฟ (graph)
เชน่ แผนภูมิ กราฟแทง่ และกราฟเส้น เป็ นต้น เนื่องจากสื่ อความหมายให้เข้าใจได้โดยงาย่ ดังนั้ น
ในบทนี้ จะขออธิ บายถึงหลักการวาดกราฟโดยใช้โปรแกรม SCILAB ทั้ งที่เป็ นแบบสองมิติและ
สามมิติ

6.1 รายละเอียดหน้ าต่ างกราฟ


เมื่อใช้คาํ สั่งในการวาดกราฟ โปรแกรม SCILAB จะทําการสร้างหน้าตางกราฟ ่ (graphics window)
ขึ้ นมาใหมที่ ่ชื่อวา่ “SCILAB Graphic (j)” เพื่อแสดงผลของกราฟที่วาดขึ้ นมา โดยที่ j เป็ นเลข
จํานวนเต็มที่มากกวาหรื ่ อเทากบศู
่ ั นย์ซึ่ งแสดงถึงหมายเลขของหน้าตางกราฟ
่ ดังแสดงในรู ปที่ 6.1
่ ่ ั ่ 0 จะหมายความวาหน้
ซึ่ งในที่น้ ี j มีคาเทากบคา ่ าตางที
่ ่ทาํ งานอยู่ (active window) ขณะนี้ คือ

หน้าตางกรา ่
ฟหมายเลขศูนย์ จากรู ปที่ 6.1 หน้าตางกราฟจะมี แถบเมนู (menu bar) อยูห่ นึ่งแถบ
ประกอบไปด้วยสามเมนูหลัก คือ เมนู File, Tools และ Edit โดยที่แตละ ่ เมนูหลักจะมีเมนูยอย


ตามที่แสดงในรู ปที่ 6.2 ซึ่ งรายละเอียดของแตละเมนู ่
หลักสามารถอธิ บายได้ดงั ตอไปนี ้
ƒ เมนู File ประกอบไปด้วย
New … ่
สร้างหน้าตางกราฟใหมขึ ่ ้ นมา
Load … เปิ ดรู ปภาพที่บนั ทึกไว้ในไฟล์ตามรู ปแบบ (format) ของโปรแกรม
SCILAB (โดยทัว่ ไปจะเป็ นไฟล์ที่ปิดท้ายด้วย .scg)
166

รปที ่
ู ่ 6.1 ตัวอยางหน้ ่
าตางกราฟที ่ใช้แสดงผลรู ปภาพของโปรแกรม SCILAB

่ นในหน้าตางกราฟ
ู ่ 6.2 รายละเอียดของเมนูหลักแตละอั
รปที ่

Save … ็ ในไฟล์ตามรู ปแบบของโปรแกรม


บันทึกรู ปกราฟลงไปเกบไว้
SCILAB (โดยทัว่ ไปจะเป็ นไฟล์ที่ปิดท้ายด้วย .scg)
Export บันทึกรู ปกราฟลงไปในไฟล์ที่เป็ นรู ปแบบเฉพาะ (specific format)
เชน่ Postscript, Xfig, GIF, BMP, และ PPM เป็ นต้น
167

Copy to clipboard สําเนารู ปกราฟเพื่อนําไปวาง (paste) ไว้ในที่อื่น


Print Setup … ํ
กาหนดคา ่ พารามิเตอร์ ต่างๆ ของเครื่ องพิมพ์
Print พิมพ์รูปกราฟออกทางเครื่ องพิมพ์
Close ่
ปิ ดหน้าตางกราฟ ที่ทาํ งานอยู่
ƒ เมนู Tools ประกอบไปด้วย
ToolBar ้
เปิ ดหรื อปิ ดแถบเครื่ องมือที่ใช้ในการเรี ยกดูภาพหรื อแกไขภาพ ตามที่

แสดงในรู ปของสัญรู ป (icon) ทั้ งห้าตัวบนมุมบนซ้ายของหน้าตางกราฟ
นัน่ คือ
Zoom ขยายขนาดของรู ปกราฟเฉพาะสวนที ่ ่ตอ้ งการ สามารถทําได้โดย
การใช้เมาส์ (mouse) เลื่อนเคอร์เซอร์ (cursor) ไปที่สัญรู ปนี้ แล้วกด
็ เมาส์เลื่อนเคอร์ เซอร์ มายังตําแหนงแรกที
คลิกหนึ่ งครั้ ง จากนั้ นกใช้ ่ ่
ต้องการจะขยายรู ปกราฟ กดคลิกหนึ่งครั้ ง แล้วกใช้ ็ เมาส์เลื่อนเคอร์เซอร์
เคอร์เซอร์ไปยังตําแหนงสุ ่ ดท้ายที่ตอ้ งการจะขยายรู ปกราฟ แล้วกดคลิก
็ รูปกราฟในสวนที
อีกหนึ่งครั้ ง กจะได้ ่ ่ตอ้ งการขยายตามที่ตอ้ งการ
UnZoom ทําให้รูปกราฟที่ได้จากการขยาย กลับไปเป็ นรู ปกราฟเหมือนเดิม
่ ่จะทําการขยาย
กอนที
2D/3D Rotation หมุนรู ปกราฟให้อยูใ่ นตําแหนงและลั
่ กษณะที่ตอ้ งการ
Graphical Editor ่ ดิเตอร์ เพื่อใช้ในการจัดรู ปแบบการแสดงผลของ
เปิ ดหน้าตางเอ
รู ปกราฟ เชน่ กาหนดชื
ํ ่อเส้นแกน x และเส้นแกน y, เปลี่ยนรู ปแบบ
ของเส้นกราฟ, และเปลี่ยนสี ของกราฟ เป็ นต้น
Entity Picker ่
เปิ ดและปิ ดการเลือกตําแหนงของรู ้
ปกราฟเพื่อทําการแกไข
ƒ เมนู Edit ประกอบไปด้วย
Select figure as current สํารองไว้ใช้ในโปรแกรม SCILAB เวอร์ชนั ถัดไป
Redraw figure สํารองไว้ใช้ในโปรแกรม SCILAB เวอร์ชนั ถัดไป
Erase figure ลบรู ปกราฟที่แสดงอยูใ่ นหน้าตางกราฟ

168

Figure properties ่
เปิ ดหน้าตางเอดิ เตอร์ เพื่อใช้ในการจัดรู ปแบบการแสดงผล
ของรู ปกราฟเมนูยอย ่ นี้ จะมีประโยชน์มาก โดยเฉพาะในกรณี

ที่ ผูใ้ ช้ไมสามารถจดจํ าคา่ พารามิ เตอร์ ต่างๆ ที่ ใช้ในคําสั่ง
สําหรับจัดรู ปแบบการแสดงผลของรู ปกราฟ
Current axes properties เปิ ดหน้าตางเอดิ ่ เตอร์ เพื่อแสดงสถานะของเส้นแกน (axes)
ที่ใช้อยูใ่ นหน้าตางกราฟ

Start entity picker เริ่ มต้นการเลือกตําแหนงของรู่ ปกราฟเพื่อทําการแกไข ้
Stop entity picker หยุดการเลือกตําแหนงของรู ่ ปกราฟเพื่อทําการแกไข ้

6.2 การวาดกราฟสองมิติ
่ ้ จะอธิบายถึงพื้นฐานในการวาดกราฟสองมิติ และคําสัง่ตางๆ
ในสวนนี ่ ที่ใช้ในการวาดกราฟสองมิติ
พร้อมทั้ งแสดงตัวอยา่ งการวาดกราฟสองมิติแบบตางๆ

6.2.1 พืน้ ฐานการวาดกราฟสองมิติ


สมการคณิ ตศาสตร์แบบสองตัวแปรใดๆ สามารถที่จะแสดงให้อยูใ่ นรู ปของกราฟสองมิติได้ เพื่อใช้
แสดงความสัมพันธ์ของตัวแปรทั้ งสอง การวาดกราฟสองมิติในโปรแกรม SCILAB นั้ นไมยาก ่
ั าสั่งวาดกราฟตางๆ
เพียงแต่จะต้องเข้าใจถึงรู ปแบบของข้อมูลที่จะต้องป้ อนให้กบคํ ่ ่ คําสัง่
กอน
พื้นฐานสําหรับการวาดกราฟสองมิติบนระบบพิกดฉาก ั x-y คือคําสัง่ plot ซึ่ งมีรูปแบบการ
เรี ยกใช้งาน ดังนี้
plot(x, y)

ั าสั่ง plot ประกอบด้วยเวกเตอร์สองชุด คือ เวกเตอร์ x ซึ่ ง


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

plot(y)
169


ซึ่ งในกรณี น้ ีโปรแกรม SCILAB จะสมมติวาพารามิ ่ ่ ั ่
เตอร์ x มีคาเทากบคา 1 ถึงจํานวนสมาชิก
ทั้ งหมดของเวกเตอร์ y นัน่คือ x = 1:length(y) โดยอัตโนมัติ

ตัวอย่ างที่ 1 จงวาดกราฟของรู ปสัญญาณไซนูซอยด์ (sinusoid waveform) ตามสมการ y = sin(2πft)



สําหรับเวลาที่ t = 0 ถึง 2 วินาที ถ้ากาหนดให้
ความถี่ f = 1 เฮิตร์ ซ (Hertz)
วิธีทาํ จากโจทย์สามารถเขียนเป็ นชุดคําสั่งของโปรแกรม SCILAB ได้ดงั นี้

-->t = 0:0.01:2;

-->f = 1;

-->y = sin(2*%pi*f*t);

-->plot(t, y)

-->xtitle('A sinusoidal wave','Time (t)','Amplitude')


คําสัง่ แรกเป็ นการกาหนดให้ ่ ร่ ะหวาง
ตวั แปร 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;

-->y = [sin(2*%pi*f*t)' cos(2*%pi*f*t)'];

-->plot(t, y) ั
//วาดกราฟสองเส้นพร้อมกน

-->xtitle('Two sinusoidal waves', 'Time (t)', 'Amplitude')

โดยผลลัพธ์ที่ได้เป็ นไปตามรู ปที่ 6.4


170

ู ่ 6.3 สัญญาณไซนูซอยด์ y = sin(2πft)


รปที

ู ่ 6.4 สัญญาณ sin(2πft) และ cos(2πft)


รปที
171

คําสัง่ วาดกราฟสองมิติอีกรู ปแบบหนึ่งที่น่าสนใจก็คือ

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, 1); //รู ป 6.5 ด้านบนซ้าย


-->plot2d(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d - Piecewise linear');

-->subplot(2, 2, 2); //รู ป 6.5 ด้านบนขวา


-->plot2d2(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d2 - Piecewise constant');

-->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')

่ ดคําสั่งข้างต้นมีการเรี ยกใช้คาํ สัง่ subplot(m,n,i)


ซึ่ งจะได้ผลลัพธ์ตามรู ปที่ 6.5 จะเห็นได้วาชุ
่ าให้สามารถวาดกราฟได้หลายๆ กราฟในหน้าตางกราฟเดี
เพื่อชวยทํ ่ ยวกนั โดยคําสั่ง subplot
172

่ ปกราฟแบบตางๆ
ู ่ 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 จะมี
ลักษณะการใช้งานดังนี้

options = [style, axesflag, leg, rect, logflag, nax, frameflag]

โดยที่
ƒ style ่
มีลกั ษณะการใช้งานคือ style = [j] เมื่อคาของพารามิ ํ
เตอร์ j จะเป็ นตัวกาหนด
รู ปแบบของเส้นกราฟแบบตางๆ่ ดังแสดงในตารางที่ 6.1 ตัวอยางการใช้
่ งานเชน่

-->x = 0:0.1:5; //เวกเตอร์ x มีขนาด 1×51

-->u = [-0.8+sin(x); -0.4+sin(x); sin(x); ...


-->0.4+sin(x); 0.8+sin(x)]'; //เมทริ กซ์ u มีขนาด 51×5

-->plot2d(x, u, style=[-9, -7, -5, -3, -1])

-->x = 0:0.2:5; //เวกเตอร์ x มีขนาด 1×26

-->y = [1.4+sin(x); 1.8+sin(x)]'; //เมทริ กซ์ y มีขนาด 26×2

-->plot2d(x, y, style=[-4, -6])


174

่ ปกราฟแสดงการใช้พารามิเตอร์ style ในคําสัง่ plot2d


ู ่ 6.6 ตัวอยางรู
รปที


ตารางที่ 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.6 แตถ้่ าพารามิเตอร์ j เป็ นเลขจํานวนเต็มบวก ผลลัพธ์ที่ได้จาก


การใช้ style = [j] จะกลายเป็ นการกาหนดสี ํ ํ
ของเส้นกราฟตามที่กาหนดใน ตารางที่ 6.2
่ ่
ตัวอยางเชน

-->x = linspace(-2*%pi, 2*%pi, 100)';

-->plot2d(x, [sin(x), cos(x)], style=[1, 5]);


175

่ ปกราฟแสดงการใช้คาํ สัง่ กาหนดสี


ู ่ 6.7 ตัวอยางรู
รปที ํ ของเส้นกราฟ


ตารางที่ 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) ไมได้ ่ อยูใ่ นกรอบรู ปภาพ เส้นแกนจะไมแสดงออกมา

โดยคําสัง่ linspace(vmin, vmax, num) จะเป็ นการแบงคาสู ่ ่ งสุ ด vmax กบค


ั ่าตํ่าสุ ด
vmin เป็ นจํานวน num ตัว ผลลัพธ์ของชุดคําสั่งนี้ แสดงในรู ปที่ 6.7 ซึ่ งจะได้กราฟสองเส้น
เส้นหนึ่งมีสีดาํ (สําหรับ j = 1) และอีกเส้นหนึ่งมีสีแดง (สําหรับ j = 5)
ƒ axesflag มีลก ่
ั ษณะการใช้งานคือ axesflag = [j] โดยที่คาของพารามิ เตอร์ j จะเป็ น

ตัวกาหนด ่
ลักษณะของเส้นแกนในหน้าตางกราฟ ่ ตามที่แสดงในตารางที่ 6.3
โดยมีรูปแบบตางๆ

ตัวอยางการใช้งานพารามิเตอร์ axesflag มีดงั นี้
176

่ ปกราฟแสดงการใช้พารามิเตอร์ axesflag ในคําสัง่ plot2d


ู ่ 6.8 ตัวอยางรู
รปที

-->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])

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.8


ƒ ่ อความบรรยาย (description) เส้นกราฟแตละเส้
leg ใช้ในการใสข้ ่ น ซึ่ งมีลกั ษณะการใช้งาน
คือ leg = "description 1 @description 2 @ ..." โดยที่ขอ้ ความที่อยูภ่ ายใน
่ น และข้อความบรรยายเส้นกราฟแตละ
เครื่ องหมาย "..." จะใช้บรรยายเส้นกราฟแตละเส้ ่
เส้นจะถูกคัน่ ด้วยเครื่ องหมาย @
ƒ ํ
rect ใช้กาหนดขนาดของกรอบรู ปภาพซึ่ งมีลกั ษณะการใช้งาน คือ rect = [xmin, ymin,
xmax, ymax] ํ
โดยที่ xmin และ xmax ใช้กาหนดคาตํ ่ ่าสุ ดและคาสู
่ งสุ ดของเส้นแกน x

ในขณะที่ ymin และ ymax ใช้กาหนดคาตํ ่ ่าสุ ดและค่าสู งสุ ดของเส้นแกน y ตามลําดับ

สําหรับตัวอยางการใช้
งานพารามิเตอร์ leg และ rect มีดงั นี้
-->clf; x = 0:0.2:5;
-->y = [1.4+sin(x); 1.8+sin(x)]';
-->plot2d(x, y, style = [-2 -9], leg = "X-mark curve@Circle ...
-->curve", rect = [0.5,0,4.5,3]);

ซึ่ งผลลัพธ์ที่ได้แสดงในรู ปที่ 6.9


177

่ ปกราฟแสดงการใช้พารามิเตอร์ leg และ rect ในคําสัง่ plot2d


ู ่ 6.9 ตัวอยางรู
รปที

ƒ logflag ํ
ใช้ในการกาหนดลั กษณะของเส้นแกน x และเส้นแกน y วาจะให้ ่ เป็ นสเกลแบบ
่ ่เป็ นได้ของ logflag มีท้ งั หมดสี่ แบบ
ธรรมดาหรื อสเกลแบบลอการิ ทึม (logarithm) โดยคาที
คือ "nn", "nl", "ln" และ "ll" เมื่อ n หมายถึงให้ใช้สเกลแบบธรรมดา และ l หมายถึง
ให้ใช้สเกลแบบลอการิ ทึม (พารามิเตอร์ ตวั แรกจะอ้างอิงถึงเส้นแกน x และพารามิเตอร์ ตวั ที่

สองจะอ้างถึงเส้นแกน y) ตัวอยางการใช้งานพารามิเตอร์ logflag มีดงั นี้

-->clf; x = 0:0.2:5;

-->y = [1.4+sin(x); 1.8+sin(x)]';

-->subplot(1, 2, 1);

-->plot2d(x, y, style=[-2 -9], leg="X-mark curve ...


-->@Circle curve", rect=[0.5,0.1,4.5, 3], logflag="nl");

-->subplot(1, 2, 2);

-->plot2d(x, y, style=[-2 -9], leg="X-mark curve ...


-->@Circle curve", rect=[0.5,0.1,4.5,3], logflag="ll");

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.10


178

่ ปกราฟแสดงการใช้พารามิเตอร์ logflag ในคําสัง่ plot2d


ู ่ 6.10 ตัวอยางรู
รปที

ƒ nax จะถูกนํามาใช้เมื่อมีการเรี ยกใช้พารามิเตอร์ axesflag = 1 โดย nax จะใช้ในการ



กาหนดลั กษณะของป้ าย (label) ของเส้นแกน x และเส้นแกน y ซึ่ งมีรูปแบบการใช้งานคือ
nax = [nx, Nx, ny, Ny] โดยที่ Nx และ Ny เป็ นตัวเลขจํานวนเต็มบวกที่ใช้กาหนด ํ
จํานวนขีดหลัก (main tics) ที่จะปรากฎบนเส้นแกน x และเส้นแกน y ในขณะที่ nx และ ny

เป็ นตัวเลขจํานวนเต็มบวกที่ใช้กาหนดจํ านวนขีดยอย่ (subtics) ที่จะปรากฎอยูร่ ะหวางขี
่ ดหลัก
สองขีดบนเส้นแกน x และเส้นแกน y ตัวอยางการใช้ ่ งานพารามิเตอร์ nax มีดงั นี้

-->clf; x = 0:0.2:5;

-->y = [1.4+sin(x); 1.8+sin(x)]';

-->subplot(1, 2, 1);

-->plot2d(x, y, style=[-2 -9], leg="X-mark curve @Circle ...


-->curve", rect=[0.5, 0, 4.5, 3], nax=[3, 6, 2, 5]);

-->subplot(1, 2, 2);

-->plot2d(x, y, style=[-2 -9], leg="X-mark curve @Circle ...


-->curve", rect=[0.5, 0,4. 5, 3], nax=[5, 4, 1, 10]);

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.11


179

่ ปกราฟแสดงการใช้พารามิเตอร์ nax ในคําสัง่ plot2d


ู ่ 6.11 ตัวอยางรู
รปที

ƒ frameflag ใช้ควบคุมขอบเขตของเส้นแกน (axes boundaries) x และเส้นแกน y โดยมี


ลักษณะการใช้งาน คือ frameflag = [j] โดยที่ค่าของพารามิเตอร์ j จะเป็ นตัวกาหนด


ลักษณะขอบเขตของเส้นแกนในหน้าตางกราฟดั งแสดงในตารางที่ 6.4

6.2.2 การตกแต่ งรปกราฟ



ในการนําเสนอผลงานวิจยั หรื อผลการทดลองโดยใช้รูปกราฟ บางครั้ งอาจจะมีความจําเป็ นที่จะต้อง
ตกแตง่รู ปแบบของกราฟให้มีลกั ษณะตางๆ่ เชน่ เปลี่ยนสี และลักษณะของเส้นกราฟ, ใสคํ่ าอธิ บาย
ลงไปในกราฟ, และอื่นๆ เพื่อให้อยูใ่ นรู ปที่สวยงามและงายตอความเข้
่ ่ าใจ การตกแตงรู ่ ปกราฟใน
โปรแกรม SCILAB สามารถทําได้โดยใช้เมนูยอย ่ Figure properties (ในเมนูหลัก Edit ของ

หน้าตางกราฟ ่ ็ ่ ้ จะขออธิ บายถึงคําสั่งตางๆ
) อยางไรกตามในสวนนี ่ ที่ใช้บ่อยในการจัดรู ปแบบการ
่ ปกราฟอยาง
แสดงผลของกราฟ (ซึ่ งมีประโยชน์ในกรณี ที่ตอ้ งการตกแตงรู ่ งาย
่ โดยเร็ ว) ดังตอไปนี
่ ้

6.2.2.1 คําสั่ ง xtitle



เป็ นคําสั่งที่ใช้ในการกาหนดชื ่ อของรู ปกราฟ, ชื่อของเส้นแกน x, และชื่ อของเส้นแกน y โดยมี
รู ปแบบการใช้งาน คือ
xtitle('title_name','x_axis','y_axis')
180


ตารางที่ 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 แตสเกลของกราฟใหมจะไปทั
่ ่ บซ้อนสเกลของเดิม

เมื่อ title_name คือชื่อของรู ปกราฟ, x_axis คือชื่อของเส้นแกน x, และ y_axis คือชื่อ


ของเส้นแกน y

6.2.2.2 คําสั่ ง xgrid(j)


่ นกริ ดเข้าไปในรู ปกราฟ โดยเส้นกริ ดจะมีสีตามที่กาหนดโดยพารามิ
เป็ นคําสั่งที่ใช้ในการใสเส้ ํ เตอร์
j ซึ่ งเป็ นเลขจํานวนเต็มบวกตามที่ แสดงในตารางที่ 6.2 ตัวอยางการใช้่ งานคําสั่ง xgrid เชน่
จากรู ปที่ 6.11 ด้านซ้าย ถ้าต้องการเพิ่มเส้นกริ ดสี ดําเข้าไปในรู ปกราฟก็สามารถทําได้โดยใช้คาํ สัง่

ตอไปนี ้

-->clf; x = 0:0.2:5;

-->y = [1.4+sin(x); 1.8+sin(x)]';

-->plot2d(x, y, style=[-2 -9], rect=[0.5,0,4.5,3], nax=[3,6,2,5]);

-->xtitle('Two signals','Time (t)','Amplitude')

-->xgrid(1) ่ นกริ ดสี ดํา (j = 1) เข้าไปในรู ปกราฟ


//ใสเส้
181

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ xgrid


ู ่ 6.12 ตัวอยางรู
รปที

ซึ่ งจะได้ผลลัพธ์ตามที่แสดงในรู ปที่ 6.12

6.2.2.3 คําสั่ ง xset

เป็ นคําสั่งที่ใช้ในการปรับรู ปแบบการแสดงผลของเส้นแกน x และเส้นแกน y คําสั่งนี้ มีลกั ษณะ


การใช้งานหลายรู ปแบบ เชน่ เปลี่ยนรู ปแบบและขนาดของตัวอักษรของเส้นแกน, เปลี่ยนความหนา

(หรื อความเข้ม) ของเส้นแกน, และอื่นๆ ตัวอยางการใช้ งานคําสั่งนี้ เชน่ จากรู ปที่ 6.12 ถ้าต้องการ

ปรับรู ปแบบของเส้นแกนกสามารถทํ ่
าได้โดยการเพิม่ คําสัง่ ตอไปนี
้ ลงไป

-->xset("font", 5, 4) //เพิ่มขนาดของตัวอักษรในเส้นแกน x และเส้นแกน y

-->xset("thickness", 3) //เพิ่มขนาดของเส้นแกน x และเส้นแกน y

ซึ่ งผลลัพธ์ที่ได้แสดงในรู ปที่ 6.13 นอกจากนี้คาํ สัง่ xset ยังมีการใช้งานอีกหลายรู ปแบบที่น่าสนใจ


ผูส้ นใจสามารถศึกษารายละเอียดการใช้งานของคําสัง่ xset เพิ่มเติมได้จากคําสั่ง help
182

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ xset


ู ่ 6.13 ตัวอยางรู
รปที

6.2.2.4 คําสั่ ง plotframe


เป็ นคําสัง่ ที่ใช้สร้างกรอบ (frame) สําหรับวาดรู ปกราฟ โดยมีลกั ษณะการใช้งานดังนี้

plotframe(rect, tics, [options])

่ ว คือ
โดยที่ความหมายของพารามิเตอร์แตละตั
ƒ 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);

-->rect = [min(x), min(y), max(x), max(y)];

-->tics = [1, 10, 1, 5];

-->plotframe(rect, tics, [%f, %f], ["My plot", "x", "y"], ...


-->[0, 0, 0.5, 0.5])

-->plot2d(x, y, 2, "000") //รู ปที่ 6.14 ด้านบนซ้าย

-->plotframe(rect, tics, [%t, %f], ["My plot with grids", ...


-->"x","y"],[0.5,0,0.5,0.5])

-->plot2d(x, y, 3, "000") //รู ปที่ 6.14 ด้านบนขวา

-->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 ด้านลางซ้

-->plotframe(rect, tics, [%f, %t], ["My plot without grids ...


-->but with automatic bounds", "x", "y"], [0.5, 0.5, 0.5, 0.5])

-->plot2d(x, y, 5, "000") ่
//รู ปที่ 6.14 ด้านลางขวา
184

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ plotframe


ู ่ 6.14 ตัวอยางรู
รปที

โดยที่คาํ สั่ง tics = [1, 10, 1, 5] หมายถึงกาหนด ํ ให้เส้นแกน x มีสิบขีดหลักและมีหนึ่ ง



ขีดยอยระหวางขี ่ ดหลัก สวนเส้
่ นแกน y มีหา้ ขีดหลักและมีหนึ่ งขีดยอยระหวางขี
่ ่ ดหลัก ผลลัพธ์ที่ได้
จากชุดคําสั่งนี้ แสดงในรู ปที่ 6.14

6.2.2.5 คําสั่ ง xstring


่ ่กาหน
เป็ นคําสั่งที่ใช้บรรจุสายอักขระเข้าไปในรู ปกราฟตามรู ปแบบและตําแหนงที ํ ด มีลกั ษณะการ
ใช้งานดังนี้

xstring(x, y, str, angle, box)

โดยที่พารามิเตอร์
185

ƒ x และ y เป็ นเลขจํานวนจริ งที่ใช้บอกจุดพิกดั (coordinate point) เริ่ มต้นของสายอักขระ


ั ่ มต้น x = 0 และ y = 0 จะอยูท่ ี่มุมลางด้
โดยจุดพิกดเริ ่ านซ้ายของกรอบรู ปกราฟ
ƒ str เป็ นเมทริ กซ์ของสายอักขระที่จะปรากฎในรู ปกราฟตามจุดพิกดัที่กาหนด ํ
ƒ angel เป็ นเลขจํานวนจริ งที่ใช้แสดงมุมองศา (ระดับความเอียง) ของตัวสายอักขระใน
ทิศทางตามเข็มนาฬิกา (คาโดยปริ ่ ยายคือ คา่ 0)
ƒ box เป็ นเลขจํานวนเต็มที่ใช้ในการสร้างกลองสี ่ ่ เหลี่ยม (box) มาครอบสายอักขระ

(คาโดยปริ ยายคือ คา่ 0 ซึ่ งหมายถึงไมต้่ องมีกลองสี
่ ่ เหลี่ยมมาครอบสายอักขระ)

ตัวอยางการใช้
คาํ สั่ง xstring มีดงั นี้

-->clf;

-->alphabet = ["P i y a K o v i n ta v e w a t"];

-->plot2d([0;0.6], [0;1.5], 0); ่ องให้แสดงเส้นกราฟ


//สร้างรู ปกราฟขึ้ นมา โดยไมต้

-->xstring(0.1, 1.3, alphabet) //แสดงชื่อ "Piya" ที่จุดพิกดั x = 0.1 และ y = 1.8

-->xstring(0.2, 1.1, alphabet, 0, 1) ่


//แสดงชื่อ "Piya" ในกลอง

-->xstring(0.3, 0.9, alphabet, 20) ่ ั 20º


//ให้ชื่อที่แสดงออกมามีมุมเอียงเทากบ

-->xset("font", 1, 1) ํ ดให้ใช้ตวั อักษรแบบสัญลักษณ์


//กาหน

-->xstring(0.1, 0.5, alphabet)

-->xset("font", 1, 3) //เปลี่ยนขนาดของตัวอักษร

-->xstring(0.2, 0.3, alphabet)

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.15

6.2.2.6 คําสั่ ง scf(j)


เป็ นคําสั่งที่ใช้กาหนดหน้ ่
าตางกราฟหมายเลข ่
j ให้เป็ นหน้าตางกรา ฟที่จะทํางาน (active graphic
window) โดยที่ j เป็ นเลขจํานวนเต็มบวก แตถ้ ่ าหน้าตางหมายเลขนั
่ ้ นยังไมมี่ หรื อไมมี่ การกาหนด

คา่พารามิเตอร์ j) โปรแกรม SCILAB กจะสร้ ็ ่
างหน้าตางกราฟหมายเลข j ขึ้ นมาใหม่ คําสั่ง
่ ั
scf(j) จะทําหน้าที่เทียบเทากบการใช้ คาํ สัง่ xset("window", j)
186

ู ่ 6.15 รู ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ xstring


รปที

6.2.2.7 คําสั่ ง clf(j)

เป็ นคําสัง่ ที่มาจากคําวา่ “Clear current graphic figure” โดยจะทําหน้าที่ลบรู ปกราฟที่แสดงอยูใ่ น



หน้าตางกราฟหมายเลข ่ การกาหนดคาพารามิ
j ในกรณี ที่ไมมี ํ ่ เตอร์ j โปรแกรม SCILAB จะทํา
การลบรู ปกราฟที่แสดงอยูใ่ นหน้าตางกราฟที
่ ํ งทํางานอยู่
่กาลั
ถ้าไม่ใช้คาํ สัง่ clf(j) กอนที ่ ่จะสั่งให้โปรแกรม SCILAB วาดรู ปกราฟใหมลงไปใน ่

หน้าตางกราฟหมายเลข ่ ่สงั่ ให้วาดจะไปทับซ้อนกบรู
j ผลลัพธ์ที่ได้คือ รู ปกราฟใหมที ั ปกราฟเดิมที่
แสดงอยูใ่ นหน้าตางกราฟหมายเลข
่ j

6.2.2.8 คําสั่ งอืน่ ๆ


ƒ คําสัง่ xbasc ใช้ลบรู ปกราฟที่แสดงอยูใ่ นหน้าตางกราฟ
่ คําสั่งนี้ มีผลลัพธ์เทียบเทา่
กบัการใช้คาํ สัง่ clf
ƒ คําสัง่ xdel(j) ่
ใช้ล บหน้าตางกราฟหมายเลข ่ การกาหนด
j ในกรณี ที่ ไ มมี ํ คา่ j
็ าการลบหน้าตางกราฟที
โปรแกรม SCILAB กจะทํ ่ ํ งทํางานอยู่
่กาลั
187

(x, y )
r

θ
x

่ จุด (x, y) ในระบบพิกดฉาก


ู ่ 6.16 ความสัมพันธ์ระหวาง
รปที ั ั งขั้ว
และจุด (r, θ) ในระบบพิกดเชิ

ƒ คําสัง่ xget ใช้เรี ยกดูคา่พารามิเตอร์ต่างๆ ที่ใช้ในการกาหนดรู


ํ ปแบบของรู ปกราฟ
่ อคา่ พารามิเตอร์ ท้ งั หมดที่ใช้ในคําสั่ง xset สามารถที่จะถูก
กลาวคื
เรี ยกออกมาดูได้โดยใช้คาํ สัง่ xget
ƒ คําสัง่ xgetech ่
ใช้เรี ยกดูคาพารามิ เตอร์ต่างๆ ที่ใช้ในการกาหนดขนาดหรื
ํ อสเกลของ
รู ปกราฟ

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⎠

ั ดพิกดั (r, θ) ในระบบพิกดเชิ


ในทํานองเดียวกนจุ ั งขั้ วกสามารถ
็ ที่จะแปลงกลับไปเป็ นจุดพิกดั (x, y)

ในระบบพิกดฉากได้ จากความสัมพันธ์ดังนี้
188

x = r cos ( θ ) และ y = r sin ( θ )

การวาดกราฟเชิงขั้ วในโปรแกรม SCILAB สามารถทําได้โดยการใช้คาํ สัง่

polarplot(theta, r, [options])

่ ม θ (มีหนวยเป็
เมื่อพารามิเตอร์ theta คือคามุ ่ นเรเดียน), พารามิเตอร์ r คือคาความยาวของรั
่ ศมี,
และพารามิเตอร์ options มีรูปแบบการใช้งานคือ

options = [style, strf, leg, rect]

โดยที่
ƒ 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.17

6.2.4 การวาดกราฟสองมิตแิ บบพิเศษ


นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมคําสั่งสําหรับการวาดกราฟสองมิติแบบอื่นๆ ไว้ใช้งาน
เฉพาะด้านมากมายดังแสดงในตารางที่ 6.5 (ผูส้ นใจสามารถศึกษารายละเอียดเพิ่มเติมของคําสั่งวาด
่ ้ ได้จากคําสั่ง help) ตัวอยางการใช้
กราฟสองมิติเหลานี ่ ่ ้ เชน่
งานคําสัง่ เหลานี
189

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ polarplot


ู ่ 6.17 ตัวอยางรู
รปที

่ าสัง่ ในการวาดกราฟสองมิติสาํ หรับการใช้งานเฉพาะด้าน


ตารางที่ 6.5 ตัวอยางคํ
คําสั่ ง คําอธิบาย
fplot2d ํ
วาดกราฟทัว่ ไปแบบสองมิติ ที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์
grayplot วาดกราฟสี แสดงพื้นผิว (surface) แบบสองมิติ
fgrayplot ํ
วาดกราฟสี แสดงพื้นผิวแบบสองมิติ ที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์
histplot วาดกราฟฮีสโตแกรม (histogram plot)
contour2d วาดกราฟคอนทัวร์ (contour surface) จากรู ปกราฟสองมิติ
champ วาดกราฟสนามเวกเตอร์แบบสองมิติ (2-D vector field)
fchamp

วาดกราฟสนามเวกเตอร์แบบสองมิติ ที่กาหนดโดยสมการอนุ พนั ธ์อนั ดับหนึ่ง (first-
order ordinary differential equation)
วาดกราฟของโบดไดอะแกรม (Bode diagram) ทั้ งกราฟแสดงขนาด (magnitude
bode
plot) และกราฟแสดงมุม (phase plot) ซึ่ งมีประโยชน์มากทางด้านวิศวกรรม
gainplot วาดกราฟแสดงขนาดของโบดไดอะแกรม
nyquist วาดกราฟไนควิตซ์ (Nyquist plot)
evans วาดกราฟอีแวนรู ทโลคัส (Evans root locus)
plzr วาดกราฟโพล-ซีโร่ (pole-zero plot)
190
-->subplot(2, 2, 1);

-->champ(-5:5, -5:5, rand(11,11), rand(11,11), ...


-->rect = [-10,-10,10,10], arfact = 2); //รู ปที่ 6.18 ด้านบนซ้าย

-->xtitle('2-D vector field plot');

-->s = poly(0, 's'); ํ


//กาหนดให้
ตัวแปร s เป็ นตัวแปรพหุนาม
-->h = syslin('c', (s^2 + 2*0.9*10*s + 100)/(s^2 + ...
-->2*0.3*10.1*s + 102.01)); ํ
//กาหนดรู ปแบบฟั งกชั์ นของระบบควบคุม

-->subplot(2, 2, 2); nyquist(h, 0.01, 100); //รู ปที่ 6.18 ด้านบนขวา

-->subplot(2, 2, 3); evans(h, 100); ่ ซ้าย


//รู ปที่ 6.18 ด้านลาง

-->subplot(2, 2, 4); plzr(h); ่


//รู ปที่ 6.18 ด้านลางขวา

ผลลัพธ์ที่ได้จากชุดคําสัง่นี้ แสดงในรู ปที่ 6.18

6.3 การวาดกราฟสามมิติ
นอกจากการวาดกราฟสองมิติแล้ว โปรแกรม SCILAB ยังได้เตรี ยมคําสัง่จํานวนมากสําหรับการ
่ นี้ จะอธิบายถึงพื้นฐานในการวาดกราฟสามมิติ คําสัง่ ที่ใช้ในการ
วาดกราฟสามมิติ ดังนั้ นในสวน

วาดกราฟสามมิติ พร้อมทั้ งแสดงตัวอยางการวาดกราฟสามมิ ่
ติแบบตางๆ

6.3.1 พืน้ ฐานการวาดกราฟสามมิติ


สมการคณิ ตศาสตร์แบบสามตัวแปรใดๆ สามารถที่จะแสดงให้อยูใ่ นรู ปของกราฟสามมิติได้ เพื่อใช้

แสดงความสัมพันธ์ของตัวแปรทั้ งสาม การใช้งานคําสัง่ วาดกราฟสามมิติน้ นั ไมยากเพี ยงแตต้่ องเข้าใจ
ั าสั่งเหลานี
ถึงรู ปแบบของข้อมูลที่จะป้ อนให้กบคํ ่ ้ การวาดกราฟสามมิติจะใช้ขอ้ มูลทั้ งหมดสามชุด
สําหรับเส้นแกน x, เส้นแกน y, และเส้นแกน z ที่อยูใ่ นพิกดคาร์
ั ทีเซี ยน (Cartesian coordinate)

x-y-z โดยเวกเตอร์ x จะเป็ นตัวกาหนดคาในเส้ ่ ํ
นแกน x, เวกเตอร์ y จะเป็ นตัวกาหนดคาในเส้ ่ น
่ ่ยนแปลงไปตามคา่ x และ y ซึ่ งกคื็ อขนาดของคาบนเส้
แกน y, และตัวแปรตามที่มีคาเปลี ่ นแกน z
่ ั
นัน่ เอง ดังนั้ นตัวแปรตาม z นี้ จะต้องมีจาํ นวนเทากบผลคู ณของจํานวนข้อมูลในเวกเตอร์ x กบั
จํานวนข้อมูลในเวกเตอร์ y
191

่ ปกราฟแสดงผลลัพธ์จากการใช้ชุดคําสัง่ สําหรับวาดกราฟสองมิติที่ใช้งานเฉพาะด้าน
ู ่ 6.18 ตัวอยางรู
รปที

คําสัง่ พื้นฐานสําหรับการวาดกราฟแบบสามมิติในโปรแกรม SCILAB มีรูปแบบดังนี้

plot3d(x, y, z, [options])

่ ั และพารามิเตอร์ z คือตัวแปรตามที่ข้ ึนกบั


โดยที่พารามิเตอร์ x และ y คือเวกเตอร์ ที่มีขนาดเทากน
คา่ของ x และ y ซึ่ งจะมีจาํ นวนเทากบผลคู
่ ั ั านวนข้อมูลใน
ณของจํานวนข้อมูลในเวกเตอร์ x กบจํ
เวกเตอร์ y สําหรับพารามิเตอร์ options มีลกั ษณะการใช้งานคือ

options = [alpha, theta, leg, flag, ebox]


192

α 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 จงวาดกราฟสามมิติจากสมการ

z = 0.5 cos ( 2xπ ) cos ( 2yπ )

วิธีทาํ จากโจทย์ สามารถวาดกราฟสามมิติได้โดยใช้ชุดคําสั่งของโปรแกรม SCILAB ดังนี้

-->clf; x = linspace(0, 1, 21);

-->y = linspace(0, 1, 21);

-->z = abs(0.5 * cos(2*%pi*x)' * cos(2*%pi*y));

-->subplot(1, 2, 1); plot3d(x, y, z, flag = [4, 2, 4]); //รู ปที่ 6.20 ด้านซ้าย

-->subplot(1, 2, 2); plot3d(x, y, z, alpha = 35, theta = 45, ...


-->flag = [0, 2, 3]); //รู ปที่ 6.20 ด้านขวา

่ ้ แสดงในรู ปที่ 6.2025


ผลลัพธ์ที่ได้จากชุดคําสั่งเหลานี


จากรู ปที่ 6.20 ด้านซ้าย ถ้าต้องการให้มีการไลโทนสี ่
ตามขนาดของคาในแกน z ็
กสามารถทํ
าได้
โดยการใช้คาํ สัง่ plot3d1 ดังนี้
-->clf; plot3d1(x, y, z, theta = 35, alpha = 25, flag = [0, 2, 4]);

25
รู ปที่ 6.20 ด้านขวามีรูปรางลั ่ กษณะเหมือนกบรู
ั ปพื้นผิวรางแห
่ (mesh surface plot) ดังนั้ นผูใ้ ช้สามารถวาดรู ป

พื้นผิวรางแหได้ ่ ั
จากคําสัง่ นี้ เชนกน
195

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ plot3d


ู ่ 6.20 ตัวอยางรู
รปที

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ plot3d1


ู ่ 6.21 ตัวอยางรู
รปที

ซึ่ งจะได้ผลลัพธ์ตามรู ปที่ 6.21


่ กบขนาดของคาในแกน
นอกจากนี้ ถา้ ต้องการทราบความสัมพันธ์ระหวางสี ั ่ z ก็สามารถ
ทําได้โดยใช้คาํ สัง่ colorbar ซึ่ งมีรูปแบบการใช้งานคือ
196

colorbar(umin, umax, [colminmax])

โดยที่พารามิเตอร์
ƒ umin เป็ นเลขจํานวนจริ งของคาตํ่ ่าสุ ดของขนาดของคาในแกน
่ z
ƒ umax ่ งสุ ดของขนาดของคาในแกน
เป็ นเลขจํานวนจริ งของคาสู ่ z
ƒ colminmax เป็ นตัวเลือกที่มีรูปแบบการใช้งาน คือ

colminmax = [1 nb_colors]

เป็ นเวกเตอร์ขนาด 1×2 โดยที่ nb_colors คือจํานวนสี ที่จะใช้ในรู ปกราฟ


่ งานคําสัง่ นี้ เชน่ (ตอเนื
ตัวอยางการใช้ ่ ่องจากรู ปที่ 6.21)

-->clf; zmin = min(z);

-->zmax = max(z);

-->colorbar(zmin, zmax, [1 30]);

-->plot3d1(x, y, z, theta = 35, alpha = 25, flag = [0, 2, 4]);

่ ต่างๆ กบขนาดของคา
ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.22 ซึ่ งจะมีแถบสี แสดงความสัมพันธ์ระหวางสี ั ่
ในแกน z
นอกจากนี้โปรแกรม SCILAB ยังมีคาํ สัง่ ที่ใช้ในการวาดภาพสามมิติแบบอื่นอีกมากมาย

ตามที่แสดงในตารางที่ 6.6 ตัวอยางการใช้ ่ ้ เชน่
งานคําสัง่ เหลานี

-->clf; u = linspace(-%pi/2, %pi/2, 20);

-->v = linspace(0, 2*%pi, 10);

-->X = cos(u)' * cos(v);

-->Y = cos(u)' * sin(v);

-->Z = sin(u)' * ones(v);

-->subplot(2, 2, 1);

-->plot3d2(X, Y, Z); xtitle('plot3d2'); //รู ปที่ 6.23 ด้านบนซ้าย


197

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ colorbar รวมกบ


ู ่ 6.22 ตัวอยางรู
รปที ่ ั plot3d1

่ าสัง่ ในการวาดกราฟสามมิติแบบทัว่ ไป
ตารางที่ 6.6 ตัวอยางคํ
คําสั่ ง คําอธิบาย
plot3d2 วาดกราฟพื้นผิวแบบมีสี
plot3d3 วาดกราฟพื้นผิวรางแห่ (mesh surface plot)
surf วาดกราฟพื้นผิวรางแห ่ ่
โดยมีการไลโทนสี ่
ตามขนาดของคาในแกน z
fplot3d ํ
วาดกราฟพื้นผิวที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์

วาดกราฟพื้นผิวที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์ โดยมีการไลโทนสี
่ ตาม
fplot3d1

ขนาดของคาในแกน z

-->subplot(2, 2, 2);

-->plot3d3(X, Y, Z); xtitle('plot3d3'); //รู ปที่ 6.23 ด้านบนขวา

-->subplot(2, 2, 3);

-->surf(X, Y, Z); xtitle('surf'); ่ าย


//รู ปที่ 6.23 ด้านลางซ้

-->deff('z=f(x, y)', 'z = x^4 - y^4'); ์ นโดยใช้คาํ สัง่ deff


//สร้างฟั งกชั

-->x = -3:0.2:3;
198

่ ปกราฟสามมิติแบบทัว่ ไป
ู ่ 6.23 ตัวอยางรู
รปที

-->y = x;

-->subplot(2, 2, 4);

-->fplot3d(x, y, f, alpha=5, theta=30); ่


//รู ปที่ 6.23 ด้านลางขวา

-->xtitle('fplot3d');

ผลลัพธ์ที่ได้จากชุดคําสั่งเหลานี่ ้ แสดงในรู ปที่ 6.23 สําหรับผูส้ นใจสามารถศึกษารายละเอียดการใช้


่ ้ เพิม่ เติมได้ในคําสั่ง help
งานคําสัง่ เหลานี

6.3.2 กราฟคอนทัวร์

กราฟคอนทัวร์ (contour plot) หรื อกราฟเส้นชั้ นความสู ง เป็ นกราฟที่เกดจากการเฉื อนรู ปกราฟ
สามมิติแล้วมองจากด้านบนลงมาจะได้ออกมาเป็ นเส้นชั้ นความสู ง โดยแตละเส้ ่ นชั้ นความสูงที่มีสี
199


เดียวกนจะแสดงถึ ่ ั ปกราฟสามมิติ การวาดรู ปกราฟคอนทัวร์ในโปรแกรม
งระดับความสูงที่เทากนในรู
SCILAB สามารถทําได้โดยการใช้คาํ สัง่

contour(x, y, z, nz, [options])


โดยที่พารามิเตอร์ x, y, และ z แสดงคาในเส้ นแกน x, เส้นแกน y, และเส้นแกน z ตามลําดับ
่ พารามิเตอร์ nz เป็ นเลขจํานวนเต็มบวกที่ใช้กาหนดจํ
สวน ํ านวนระดับความสูง (หรื อจํานวนเส้น)
ที่ตอ้ งการให้แสดงในรู ปกราฟคอนทัวร์ และพารามิเตอร์ options จะมีรูปแบบการใช้งานคือ

options = [theta, alpha, leg, flag, ebox, zlev]

เมื่อ
ƒ theta, alpha, leg, flag, ebox ั ่กลาวมาแล้
มีรูปแบบเหมือนกบที ่ วข้างต้น
ƒ zlev ่ เส้นแกน z กลาวคื
เป็ นเลขจํานวนจริ งที่ใช้ในการปรับขนาดคาของ ่ อคาของ่ สมาชิก
ทุกสมาชิกในตัวแปรของเส้นแกน z จะถูกนําไปบวกรวมกบคา ่ ่จะนําคา่
ั ่ zlev กอนที

ของผลลัพธ์ที่ได้ไปใช้กาหนดขนาดคาของ ่ เส้นแกน z ในการแสดงผลของรู ปกราฟ
่ ่ ถ้าต้องการวาดรู ปคอนทัวร์ของกราฟสามมิติในรู ปที่ 6.21 ก็สามารถทําได้โดยการใช้
ตัวอยางเชน

คําสั่งตอไปนี

-->clf; x = linspace(0, 1, 21);

-->y = linspace(0, 1, 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

่ ปกราฟแสดงผลลัพธ์จากการใช้คาํ สัง่ plot3d1


ู ่ 6.24 ตัวอยางรู
รปที

่ าสัง่ วาดกราฟสามมิติแบบพิเศษสําหรับการใช้งานเฉพาะด้าน
ตารางที่ 6.7 ตัวอยางคํ
คําสั่ ง คําอธิบาย
param3d วาดเส้นโค้งแบบอิงพารามิเตอร์ (parametric curve) หนึ่งเส้น
param3d1 วาดเส้นโค้งแบบอิงพารามิเตอร์หลายๆ เส้นในรู ปกราฟเดียวกนั
hist3d วาดกราฟฮีสโตแกรมแบบสามมิติ (3D histogram)
fcontour ํ
วาดกราฟคอนทัวร์ที่กาหนดโดยฟั งกชั์ นทางคณิ ตศาสตร์

6.3.3 การวาดกราฟสามมิตแิ บบพิเศษ


นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมคําสั่งจํานวนมากสําหรับการวาดกราฟสามมิติแบบพิเศษ
ไว้ใช้ในงานเฉพาะด้านโดยเฉพาะงานทางด้านวิศวกรรมและวิทยาศาสตร์ ดังแสดงในตารางที่ 6.7
่ ้ ได้จากคําสั่ง help)
(ผูส้ นใจสามารถศึกษารายละเอียดเพิ่มเติมของคําสั่งวาดกราฟสามมิติเหลานี

ตัวอยางการใช้งานคําสัง่เหล่านี้ เชน่

-->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]);

-->xtitle('param3d'); //รู ปที่ 6.25 ด้านบนซ้าย

-->subplot(2, 2, 2);

-->param3d1([sin(t), sin(2*t)], [cos(t),cos(2*t)], ...

-->list([t/10, sin(t)], [3,2]), 35, 45, "X@Y@Z", [2,3]);

-->xtitle('param3d1'); //รู ปที่ 6.25 ด้านบนขวา

-->subplot(2, 2, 3);

-->hist3d(6*rand(6,6));

-->xtitle('hist3d'); ่ ซ้าย
//รู ปที่ 6.25 ด้านลาง

-->deff("[z] = f(x, y)", "z = sin(x)*cos(y)");

-->t = %pi*[-10:10]/10;

-->subplot(2, 2, 4);

-->fcontour(t, t, f, 4, ebox = [-4 4 -4 4 -1 1], flag = [0 1 4]);

-->xtitle('fcontour'); ่
//รู ปที่ 6.25 ด้านลางขวา

่ ้ แสดงในรู ปที่ 6.25


ผลลัพธ์ที่ได้จากชุดคําสั่งเหลานี

6.4 การวาดกราฟแบบผสม
ในการวาดกราฟบางครั้ งมีความจําเป็ นต้องวาดกราฟสองแบบผสมกนั เพื่อที่จะได้สามารถอธิ บาย
ความหมายของรู ปกราฟนั้ นได้ครบถ้วน โปรแกรม SCILAB สามารถที่จะวาดกราฟลักษณะนี้ ได้
โดยการวาดกราฟทีละรู ปลงไปทับซ้อนกนั ดังแสดงในตัวอยางตอไปนี
่ ่ ้

-->clf; x = linspace(0, 1, 21);

-->y = linspace(0, 1, 21);

-->z = 2*abs(cos(2*%pi*x)'*cos(2*%pi*y));

-->rect = [min(x), max(x), min(y), max(y), min(z)-5, max(z)+1];

-->plot3d(x, y, z, theta = 35, alpha = 15, flag = [2,1,4], ebox = rect);


202

่ ปกราฟแสดงผลลัพธ์จากการใช้ชุดคําสัง่ สําหรับวาดกราฟสามมิติที่ใช้งานเฉพาะด้าน
ู ่ 6.25 ตัวอยางรู
รปที

-->contour(x, y, z, 4, theta = 35, alpha = 15, flag = [1,1,4], ...


-->ebox = rect, zlev = -5);


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

6.5 ตัวอย่ างการวาดกราฟ


่ ้ จะยกตัวอยางการวาดกราฟแบบตางๆ
ในสวนนี ่ ่ เพื่อให้เข้าใจถึงขั้นตอนในการวาดกราฟที่มีคุณสมบัติ

ตามที่ระบุไว้ ดังตอไปนี

203

รปที ่
ู ่ 6.26 ตัวอยางการวาดรู ปกราฟแบบผสม

ตัวอย่ างที่ 3 ในเรื่ องการสื่ อสารดิจิทลั (digital communication) ฟังกชั์ นของรู ปสัญญาณที่พบบอย

คือฟังกชั์ นซิ งก์ (sinc function) ซึ่ งมีรูปแบบตามสมการ

sin ( x )
y=
x


เมื่อ x เป็ นระยะหางจากจุ ํ ด (origin point) ถ้ากาหนดให้
ดกาเนิ ํ –20 < x < 20 จงวาดรู ปกราฟของ
ฟังกชั์ นซิ งกน์ ้ ี
วิธีทาํ กราฟของฟังกชั์ นซิ งกสามารถที
์ ่จะวาดโดยใช้โปรแกรม SCILAB ได้ ดังนี้

-->clf;

-->x = -20:0.1:20;

-->x(find(x == 0)) = %eps;

-->y = sin(x)./x;

-->plot(x,y); xtitle("Sinc function","x","y = sin(x)/x");

-->xgrid(5); ่ นกริ ดสี แดงในหน้าตางกราฟ


//ใสเส้ ่
204

ู ่ 6.27 รู ปสัญญานของฟั งกชั์ นซิงก์


รปที y = sin(x)/x


ในชุดคําสั่งบรรทัดที่สาม คําสัง่ find จะทําหน้าที่หาตําแหนงของตั ่ นศูนย์วาอยู
วแปร x ที่มีคาเป็ ่ ่
ตําแหนง่ไหน จากนั้ นกเปลี
็ ่ยนคาของตั
่ ่ นศูนย์ให้มีคาเทากบ
วแปร x ที่มีคาเป็ ่ ่ ั %eps แทน เพื่อ

ป้ องกนการหารด้ วยคา่ 0 ของฟังกชั์ น y ผลลัพธ์ที่ได้จากชุดคําสัง่ นี้ แสดงในรู ปที่ 6.27

ตัวอย่ างที่ 4 ฟังกชั์ นซิ งก์แบบสามมิติสามารถแสดงได้ดว้ ยสมการ

sin ( d )
y= และ d= x +y
2 2


โดยที่ d คือระยะทางจากจุดศูนย์กลางไปยังจุดใดๆ ในพิกดทรงกลม (ดูรูปที่ 6.19) จงวาดรู ปกราฟ
ของฟังกชั์ นซิ งก์แบบสามมิติ ถ้ากาหนดให้
ํ –6 < x < 6 และ –6 < y <6 และต้องการให้รูปกราฟที่

ได้มีการไลโทนสี ่ ต่างๆ กบขนาดของคาใน
และมีแถบสี แสดงความสัมพันธ์ระหวางสี ั ่ เส้นแกน z
วิธีทาํ รู ปกราฟของฟังกชั์นซิ งกแบบสามมิ
์ ติสามารถที่จะวาดโดยใช้โปรแกรม SCILAB ได้ดงั นี้
205

ู ่ 6.28 รู ปสัญญานของฟังกชั์ นซิ งก์แบบสามมิติ


รปที

-->clf; x = -6:0.5:6;

-->y = -6:0.5:6;

-->[XX, YY] = ndgrid(x, y);

-->d = sqrt(XX.^2 + YY.^2);

-->d(find(d == 0)) = %eps;

-->ZZ = sin(d) ./ d;

-->zmin = min(ZZ);

-->zmax = max(ZZ);

-->colorbar(zmin, zmax, [1, 20]);

-->surf(XX, YY, ZZ);

คําสัง่ ndgrid (บรรทัดที่สามของชุดคําสั่งนี้ ) จะทําหน้าที่ในการสร้างจุดพิกดั (x,y) ทั้ งหมด


่ ่
ในชวงคาของเส้ นแกน x และเส้นแกน y ผลลัพธ์ที่ได้จากชุดคําสัง่ นี้ แสดงในรู ปที่ 6.28
206

(x, y, z )
φρ
y
θ


ู ่ 6.29 รู ปแสดงพิกดทรงกลม
รปที

ตัวอย่ างที่ 5 จงวาดรู ปกราฟพื้ นผิวแบบมีสีของรู ปทรงกลม (sphere) บนระบบพิกดคาร์ั ทีเซี ยน


x–y–z ที่มีจุดศูนย์กลางของทรงกลมที่จุดพิกด ั (x, y, z) = (0, 0, 0) และมีความยาวรัศมี (radius)
่ ั 1 หนวย
เทากบ ่
่ ่นให้พิจารณาสมการของทรงกลมบนระบบพิกดคาร์
วิธีทาํ กอนอื ั ทีเซี ยนดังนี้
2 2 2 2
x +y +z = ρ


โดยที่ (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;

-->phi = linspace(0, %pi, 16);

-->theta = linspace(0, 2*%pi, 31);

-->rho = 1;

-->[PHI, THETA] = ndgrid(phi, theta);

-->X = rho * cos(THETA) .* sin(PHI);

-->Y = rho * sin(THETA) .* sin(PHI);

-->Z = rho * cos(PHI);

-->plot3d2(X,Y,Z,alpha=60)

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.30


208


ตัวอย่ างที่ 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);

-->theta = linspace(0, 2*%pi, 21);

-->a = 1.4;

-->c = 0.5;

-->[PHI, THETA] = ndgrid(phi, theta);

-->X = (a + c*cos(PHI)) .* cos(THETA);


209

่ ปกราฟทรงหวงยาง
ู ่ 6.31 ตัวอยางรู
รปที ่

-->Y = (a + c * cos(PHI)) .* sin(THETA);

-->Z = c * sin(PHI);

-->plot3d2(X, Y, Z, alpha = 60, flag = [4, 2, 4]);

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.31

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));

-->subplot(1, 2, 1); plot2d(x, y); //รู ปที่ 6.32 ด้านซ้าย


-->subplot(1, 2, 2); plot2d(x, y, logflag="ll"); //รู ปที่ 6.32 ด้านขวา
210

ู ่ 6.32 รู ปกราฟของฟังกชั์ น f ( x ) = (2+ cos ( x)) e-sin(x)


รปที

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.32


ตัวอย่ างที่ 8 วาดกราฟเส้นโค้งกลีบกุหลาบ (rose curve) ที่กาหนดโดยสมการ r = 5cos ( 4θ ) เมื่อ
ั งขั้ ว
0 ≤ θ ≤ 2π ในระบบพิกดเชิ

วิธีทาํ กราฟเส้นโค้งกลีบกุหลาบนี้ สามารถหาได้จากชุดคําสั่งดังนี้


-->clf;

-->theta = 0:0.01:2*%pi;

-->r = 5*cos(4*theta);

-->polarplot(theta, r)

ผลลัพธ์ที่ได้แสดงในรู ปที่ 6.33


211

ู ่ 6.32 รู ปกราฟเส้นโค้งกลีบกุหลาบ r = 5cos ( 4θ )


รปที

6.6 สรปุ
่ ที่ใช้ในการวาดกราฟสองมิติ (เชน่ คําสัง่ plot, plot2d,
ในบทนี้ ได้อธิบายถึงการใช้คาํ สัง่ ตางๆ
polarplot, contour2d, และ plzr เป็ นต้น) และกราฟสามมิติ (เชน ่ คําสั่ง plot3d,
countour, และ hist3d) พร้อมทั้ งกลาวถึ ่ งพารามิเตอร์ ต่างๆ ที่ใช้ในคําสั่งเหลานี
่ ้ เพื่อให้
สามารถนําไปประยุกต์ใช้งานได้อยางถู ่ กต้องและตรงตามความต้องการ

ดังนั้ นจะเห็นได้วาโปรแกรม ่ ง่
SCILAB สามารถวาดกราฟได้หลายรู ปแบบจึงเหมาะอยางยิ
สําหรับการนํามาใช้ในการวาดรู ปกราฟ เพื่อใช้ในการนําเสนอผลงานวิจยั และผลงานทางวิชาการ
่ ง่ งานทางด้านวิศวกรรมและวิทยาศาสตร์
โดยเฉพาะอยางยิ

6.7 แบบฝึ กหัดท้ ายบท



6.1 กาหนดให้ ่ ดังนี้
y = 4x2 โดยที่ 1 ≤ x ≤ 100 จงวาดกราฟที่มีรูปแบบตางๆ

6.1.1) กราฟเชิงเส้น
212

6.1.2) กราฟลอการิ ทึมในแนวแกน x


6.1.3) กราฟลอการิ ทึมในแนวแกน y
6.1.4) กราฟลอการิ ทึมทั้ งในแนวแกน x และแกน y

6.2 กาหนดให้ y = 10 log10(3x) โดยที่ 1 ≤ x ≤ 100

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.4) จงอธิบายรู ปกราฟที่ได้จากข้อ 6.5.1, 6.5.2, และ 6.5.3


6.5.5) r = 2 − 2cos ( θ )

6.5.6) r = 4 − 2cos ( θ )

6.5.7) r = 2 − 4cos ( θ )

6.5.8) จงอธิบายรู ปกราฟที่ได้จากข้อ 6.5.5, 6.5.6, และ 6.5.7



6.6 เส้นโค้งกลีบกุหลาบ (rose curve) ถูกกาหนดโดยสมการ r = asin ( nθ ) และ r = acos ( nθ )
โดยที่ a เป็ นเลขจํานวนจริ ง, n เป็ นเลขจํานวนเต็มบวก, และ 0 ≤ θ ≤ 2π จงวาดกราฟของ

สมการตอไปนี ั งขั้ ว
้ ในระบบพิกดเชิ
6.6.1) r = 3sin ( 2θ )

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.6.6) จงอธิบายรู ปกราฟที่ได้จากข้อ 6.6.1, 6.6.2, 6.6.3, 6.6.4, และ 6.6.5


ํ โดยสมการ r 2 = a 2sin ( 2θ ) และ r 2 = a 2 cos ( 2θ )
6.7 เส้นโค้งเลมนิสเคต (Lemniscates) ถูกกาหนด

เมื่อ a เป็ นเลขจํานวนจริ ง และ 0 ≤ θ ≤ 2π จงวาดกราฟของสมการตอไปนี ั งขั้ ว
้ ในระบบพิกดเชิ
6.7.1) r = 4sin ( 2θ )
2

6.7.2) r = 9sin ( 2θ )
2
214

6.7.3) r = 4cos ( 2θ )
2

6.7.4) r = 9cos ( 2θ )
2

6.8 เส้นเวียนกน้หอย (spirals) ถูกกาหนดโดยสมการ


ํ r = aθ , r = e , และ rθ = a โดยที่ a เป็ น


เลขจํานวนจริ ง และ 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.11.2) z = cos ( 2πx ) sin ( 2π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
ั ่ องคอมพิวเตอร์ ซึ่ งจะชวยทํ
กบเครื ่ าให้สามารถพัฒนาฟังกชั์ นแบบใหมๆ่ ได้

7.1 คําสั่ งพืน้ ฐานสํ าหรับการติดต่ อระบบอินพตและเอาต์


ุ พตุ
การเขียนโปรแกรมเพื่อทําหน้าที่ในการอาน ่ และเขียนข้อมูลระหวางโปรแกรม
่ ั ่ อง
SCILAB กบเครื
่ คาํ สั่งอะไรบ้างที่ทําหน้าที่เกยวข้
คอมพิวเตอร์น้ นั สิ่ งที่ควรคํานึงถึงคือจะต้องทราบวามี ี่ องกบระบบ

อินพุตและเอาต์พตุ รวมทั้ งรู ปแบบการเรี ยกใช้งานของคําสั่งเหลานั ่ ้ น ฉะนั้ นในสวนนี
่ ้ จะขออธิ บาย

ถึงคําสัง่ พื้นฐานในการติดตอระบบ ่ นี้
อินพุตและเอาต์พุตดังตอไป

7.1.1 คําสั่ ง input

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

[x] = input(message, ["string"])


216

โดยที่พารามิเตอร์
ƒ message คือ สายอักขระ (character string) ที่ตอ้ งการให้แสดงผลออกทางหน้าตางคํ ่ าสั่ง
ƒ "string" ํ
(หรื อ "s") เป็ นตัวกาหนดวา ่ ข้อมูลที่พารามิเตอร์ x จะเกบไว้ ็ เป็ นสายอักขระ
ƒ x คือ ผลลัพธ์ที่ได้จากคียบ์ อร์ด ซึ่ งเป็ นได้ท้ งั เลขจํานวนจริ งหรื อสายอักขระ
่ งานคําสัง่ นี้ เชน่
ตัวอยางการใช้

-->x = input("How many iterations?")


How many iterations?-->5
x =
5.

-->y = input("What is your name?", "s")


What is your name?-->Piya Kovintavewat
y =
Piya Kovintavewat

7.1.2 คําสั่ ง file

เป็ นคําสัง่ ที่ใช้ในการเปิ ดหรื อปิ ดแฟ้ มข้อมูลหรื อไฟล์ โดยมีรูปแบบการใช้งานทัว่ ไปดังนี้

unit = file('open', filename, [status])

โดยที่พารามิเตอร์
ƒ 'open' เป็ นการบอกโปรแกรมให้เปิ ดไฟล์ filename ขึ้ นมาใช้งาน
ƒ filename เป็ นชื่อไฟล์ขอ้ มูลที่ตอ้ งการจะเรี ยกขึ้ นมาใช้งาน

ƒ status เป็ นการกาหนดสถา นะของไฟล์ที่เปิ ดขึ้ นมาใช้งาน ซึ่ งมีอยู่ 4 รู ปแบบคือ
o "new" ่ อยูใ่ นสารบบทํางาน
หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะต้องไมเคยมี
o "old" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะต้องมีอยูแ่ ล้วในสารบบทํางาน
o "unknown" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะมีอยูห ่ รื อไมมี่ อยูใ่ นสารบบทํางานกได้

o "scratch" หมายถึงไฟล์ที่เปิ ดขึ้ นมาจะถูกลบทิ้งหลังจากเสร็ จสิ้ นการทํางาน
ƒ unit เป็ นเลขจํานวนเต็มที่โปรแกรมใช้อา้ งถึงชื่อไฟล์ filename นั้ น
217

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


โดยใช้คาํ สัง่ ดังนี้

file('close', unit)

ในทางปฏิบตั ิคาํ สั่งทั้ งสองนี้ มกั จะใช้งานคู่กนเสมอ


ั นอกจากนี้ คาํ สั่ง file ยังสามารถใช้งานใน
ลักษณะอื่นได้อีก (ลองศึกษารายละเอียดการใช้งานคําสัง่ file ในคําสัง่ help)

7.1.3 คําสั่ ง printf


เป็ นคําสั่งที่ใช้ในการพิมพ์คาของตั ่ าสั่ง ซึ่ งมีรูปแบบการใช้งานดังนี้
วแปรออกมาที่หน้าตางคํ

printf(format, value_1 , ..., value_n)

โดยที่พารามิเตอร์
ƒ format ่ าสั่ง
คือ สายอักขระที่ตอ้ งการให้แสดงผลออกทางหน้าตางคํ
ƒ value_i ํ ่
เป็ นตัวกาหนดวาจะให้ ่ าสั่ง
ขอ้ มูลใดแสดงผลออกมาที่หน้าตางคํ
่ งานคําสัง่ นี้ เชน่
ตัวอยางการใช้

-->printf('Result is: alpha = %d", 2.535) //พิมพ์เลขจํานวนเต็ม


Result is: alpha = 2

-->printf('Result is:\nalpha = %f", 2.535) //พิมพ์เลขจํานวนจริ ง


Result is:
alpha = 2.535000

่ าสั่งแรกจะมีการใช้รหัสรู ปแบบ (format) %d ซึ่ งเป็ นตัวบอกวา่ให้แสดงข้อมูล


สังเกตจะพบวาในคํ
ออกมาในรู ปของจํานวนเต็ม สวนรหั ่ สรู ปแบบ %f จะเป็ นตัวบอกวาให้่ แสดงข้อมูลออกมาในรู ป
ของจํานวนจริ ง รหัสรู ปแบบนี้จะเหมือนกบัรหัสรู ปแบบทัว่ ไปที่ใช้ในโปรแกรมภาษาซี ตามที่แสดง

ในตารางที่ 7.1 สวนในคํ าสัง่ ที่สองจะมีการใช้รหัสบังคับการพิมพ์ (escape sequence) \n ซึ่ งเป็ น
่ ข้ ึนบรรทัดใหม่ รหัสบังคับการพิมพ์น้ ีจะเหมือนกบัรหัสบังคับการพิมพ์ทว่ั ไปที่ใช้ใน
ตัวบอกวาให้
่ ั ดังแสดงในตารางที่ 7.2
โปรแกรมภาษาซี เชนกน
218

ตารางที่ 7.1 รหัสรู ปแบบในโปรแกรม SCILAB


รหัสรปแบบ
ู คําอธิบาย
%d แสดงผลเป็ นเลขจํานวนเต็มฐานสิ บแบบมีเครื่ องหมาย (signed integer)
%u แสดงผลเป็ นเลขจํานวนเต็มฐานสิ บแบบไมมี่ เครื่ องหมาย (unsigned integer)
%x หรื อ %X แสดงผลเป็ นเลขจํานวนเต็มฐานสิ บหกแบบไมมี่ เครื่ องหมาย
%f แสดงผลเป็ นเลขจํานวนจริ ง
%e แสดงผลเป็ นเลขจํานวนจริ งในรู ปของเลขยกกาลัํ ง
%c แสดงผลตัวอักขระ
%s แสดงผลสายอักขระ

ตารางที่ 7.2 รหัสบังคับการพิมพ์ในโปรแกรม SCILAB


รหัสบังคับการพิมพ์ คําอธิบาย
\n ขึ้ นบรรทัดใหม่
\t แท็ป (tab) ในแนวนอน
\v แท็ปในแนวตั้ง
\b เลื่อนเคอร์เซอร์ไปลบตัวอักขระทางซ้ายมือหนึ่งตัวอักขระ
\r ั
เครื่ องหมาย return เหมือนกบการกดปุ่ ม Enter
\f ขึ้ นหน้าใหม่
\a ่ ยงดังออกลําโพงหนึ่งครั้ ง
สงเสี
\\ เครื่ องหมาย \ (backslash)
\’ เครื่ องหมาย ’ (single quote)
\” เครื่ องหมาย ” (double quote)
\? เครื่ องหมาย ? (question mark)
\ooo พิมพ์ตวั อักขระที่มีเลขฐานแปดตรงกบคาั ่ ooo
\xhh พิมพ์ตวั อักขระที่มีเลขฐานสอบหกตรงกบคา ั ่ hh

ลองศึกษาการใช้งานคําสัง่ printf จากฟังกชั์ นที่ใช้สร้างตารางรหัสแอสกี (ASCII code)


่ ตอไปนี
ในตัวอยาง ่ ้
219

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

หลังจากเขียนฟังกชั์ นเสร็ จแล้วกให้


็ บนั ทึกลงในไฟล์ที่ชื่อวา่ MyASCIITable.sci จากนั้ นให้
ทําการโหลดชื่อไฟล์น้ ีเพื่อเรี ยกใช้งานฟังกชั์ น MyASCIITable โดยใช้คาํ สัง่ exec หรื อ getf
่ การใช้งาน เชน่
ตัวอยาง

-->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 จะทําหน้าที่แปลงรหัสแอสกีไปเป็ นตัวอักขระของโปรแกรม SCILAB หรื อ


ให้ในการแปลงตัวอักขระของโปรแกรม SCILAB ไปเป็ นรหัสแอสกได้ ี เชนกน
่ ั ตัวอยาง
่ เชน่

-->ascii(91)
ans =
[

-->ascii('[')
ans =
91.

7.1.4 คําสั่ ง fprintf

ั าสั่ง printf แตจะทํ


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

fprintf(file, format, value_1, ..., value_n)

โดยที่พารามิเตอร์
ƒ file ็ ่
เป็ นชื่อของไฟล์ที่ตอ้ งการจะให้เกบคาของตัวแปร value_i
ƒ format และ value_i ทําหน้าที่เหมือนกนกบที ั ั ่ใช้ในคําสั่ง printf
่ งานคําสั่งนี้ เชน่
ตัวอยางการใช้
221

ู ่ 7.1 ใช้โปรแกรม Notepad ในการเรี ยกดูขอ้ มูลภายในไฟล์ results.txt


รปที

-->u = file('open', 'results.txt', 'unknown');

-->for t = 0:%pi/10:%pi
--> fprintf(u, 'time = %6.3f value = %6.3f\n', t, cos(t));
-->end

-->file('close', u);

ผลลัพธ์ที่ได้คือโปรแกรม SCILAB จะทําการสร้างไฟล์ที่ชื่อวา่ results.txt ในสารบบที่


ํ งทํางานอยูซ่ ่ ึ งจะมีขอ้ มูลที่กาหนดโดยคํ
กาลั ํ าสั่ง fprintf ปรากฎอยู่ ถ้าลองใช้โปรแกรมเอดิเตอร์
เชน่ Notepad หรื อ WordPad เปิ ดไฟล์ results.txt ขึ้ นมาดูก็จะพบข้อมูลตามที่กาหนดไว้ ํ
ดังแสดงในรู ปที่ 7.1

7.1.5 คําสั่ ง scanf


เป็ นคําสัง่ ที่ใช้ในการรับคาจากคี ็ ในตัวแปร ซึ่ งมีรูปแบบการใช้งานดังนี้
ยบ์ อร์ดมาเกบไว้
-->printf('Enter x and y in the same line: X Y\n');
Enter x and y in the same line: X Y
222

ู ่ 7.2 ข้อมูลภายในไฟล์ MyData.txt


รปที

-->[x,y] = scanf('%f %f')

-->2.3 -3.3 ่
//เว้นวรรคหนึ่ งชองไฟ ่ อมูลแตละตั
ระหวางข้ ่ ว
y =
- 3.3
x =
2.3

7.1.6 คําสั่ ง fscanf

่ ่
เป็ นคําสั่งที่ ใช้ในการอานคาจากไฟล์ ็ ในตัวแปร โดยมี รูปแบบการใช้งานตามตัวอยาง
ไปเกบไว้ ่
ที่จะแสดงตอไปนี่ ็ อมูลตัวเลข
้ เริ่ มต้นให้ทาํ การสร้างไฟล์ MyData.txt ในสารบบ c:\ เพื่อเกบข้
1 ถึง 6 ตามที่แสดงในรู ปที่ 7.2 โดยใช้ชุดคําสัง่ ดังนี้

--> u = file('open', 'c:\MyData.txt', 'unknown');

-->fprintf(u, '1 2 3\n');

-->fprintf(u, '4 5 6\n');

-->file('close', u);

จากนั้ นให้ทําการเปิ ดไฟล์ MyData.txt แล้วใช้คาํ สัง่ fscanf เพื่อทําการอานข้่ อมูลในไฟล์น้ ี


็ ในตัวแปร a, b, และ c โดยเมื่ออานข้
มาเกบไว้ ่ อมูลจากไฟล์เสร็ จแล้วกให้
็ ทาํ การปิ ดไฟล์ ขั้ นตอนที่
่ นี้ สามารถเขียนเป็ นชุดคําสัง่ ได้ คือ
กลาวมา
223
-->w = file('open', 'c:\MyData.txt', 'old');

-->aa = []; bb = []; cc = [];

-->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 จะพบวา่ได้ขอ้ มูลครบถ้วนเหมือนกบั


ข้อมูลที่อยูใ่ นไฟล์ MyData.txt นัน่ คือ

-->[aa bb cc]
ans =
1. 2. 3.
4. 5. 6.

7.1.7 คําสั่ ง read


่ อมูลจากไฟล์มาเกบไว้
เป็ นคําสั่งที่ใช้ในการอานข้ ็ ในตัวแปร ซึ่ งมีรูปแบบการใช้งานดังนี้

[x] = read(file_desc, m, n, [format])

โดยที่พารามิเตอร์
ƒ file_desc ่ อมูล
คือ ตัวแปรที่ใช้อา้ งอิงถึงชื่อของไฟล์ที่ตอ้ งการจะอานข้
ƒ m คือ จํานวนแถวของข้อมูลในไฟล์ที่ตอ้ งการจะอานข้ ่ อมูล (ใช้ m = -1
่ อมูลทุกแถว)
ถ้าต้องการให้อานข้
ƒ n คือ จํานวนแนวตั้ งของข้อมูลในไฟล์ที่ตอ้ งการจะอานข้ ่ อมูล
ƒ format ํ
เป็ นตัวเลือกที่กาหนดลั ่ อมูลจากไฟล์ตามรู ปแบบของ
กษณะการอานข้
ภาษาฟอร์แทรน (FORTRAN) โดยมีรูปแบบดังนี้
o iw โดยที่ i สําหรับเลขจํานวนเต็ม และ w คือจํานวนของตัวอักขระที่ยอมให้มีได้
224

o fw.d โดยที่ f สําหรับเลขจํานวนจริ ง, w คือจํานวนของตัวอักขระที่ยอมให้มีได้, และ


d คือจํานวนของจุดทศนิ ยม (d ≥ w+3)
o ew.d ํ ง, w คือจํานวนของ
โดยที่ e สําหรับเลขจํานวนจริ งที่แสดงในรู ปของเลขยกกาลั
ตัวอักขระที่ยอมให้มีได้, และ d คือจํานวนของจุดทศนิยม (d ≥ w+7)
o aw โดยที่ a สําหรับสายอักขระ และ w คือจํานวนของตัวอักขระที่ยอมให้มีได้

สําหรับตัวอยางการใช้
งานคําสัง่ read สามารถดูได้ในหัวข้อที่ 7.2.1

7.1.8 คําสั่ ง write


็ ในไฟล์ โดยมีรูปแบบการใช้งานดังนี้
เป็ นคําสัง่ ที่ใช้ในการเขียนข้อมูลลงไปเกบไว้

write(file_desc, a, [format])

โดยที่พารามิเตอร์
ƒ file_desc คือ ตัวแปรที่อา้ งอิงถึงชื่อของไฟล์ที่ตอ้ งการจะเขียนข้อมูล
ƒ a คือ เวกเตอร์หรื อเมทริ กซ์ของสายอักขระที่จะนําไปบันทึกไว้ในไฟล์
ƒ format ํ
เป็ นตัวกาหนดลั กษณะการเขียนข้อมูลลงไปในไฟล์ตามรู ปแบบของ
ภาษาฟอร์แทรนเหมือนกบพารามิ ั เตอร์ format ที่ใช้ในคําสั่ง read
่ ่ ถ้าใช้ 'f10.3' จะหมายถึงให้เขียนเป็ นเลขจํานวน
ยกตัวอยางเชน
จริ งสิ บหลัก โดยมีเลขที่ตามหลังจุดทศนิยมเป็ นจํานวนสามหลัก

สําหรับตัวอยางการใช้
งานคําสัง่ write สามารถดูได้ในหัวข้อที่ 7.2.2

7.2 ตัวอย่ างการเขียนโปรแกรมเพือ่ ติดต่ อระบบอินพตและเอาต์


ุ พตุ
่ ้ จะขอยกตัวอยาง
ในสวนนี ่
่ การเขียนโปรแกรม เพื่อใช้ในการติดตอระบบ อินพุตและเอาต์พุตของ
โปรแกรม SCILAB เริ่ มต้นจะอธิ บายถึงตัวอยางฟั่ งกชั์ นสําหรับใช้ในการคํานวณหาพื้นที่ของรู ป
่ นี้
สี่ เหลี่ยม, สามเหลี่ยม, และวงกลม ดังตอไป
225

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

printf("The area for a "+id+" cross-section is %10.6f .",A)

endfunction
226

เมื่อเขียนฟังกชั์ นเสร็ จแล้วกให้


็ บนั ทึกลงในไฟล์ที่ชื่อวา่ MyArea.sci จากนั้ นทําการโหลดไฟล์น้ ี
เพื่อเรี ยกใช้งานฟังกชั์ น MyArea โดยใช้คาํ สัง่ exec หรื อ getf ตัวอยางเชน
่ ่
-->getf('MyArea.sci')

-->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.sci จากนั้ นให้ทาํ การโหลด


่ ่
ไฟล์น้ ีเพื่อเรี ยกใช้งานฟังกชั์ น MyTable โดยใช้คาํ สัง่ exec หรื อ getf ตัวอยางเชน
-->getf("MyTable.sci")

-->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

7.2.1 การอ่ านข้ อมลจากไฟล์



่ ้ จะอธิ บายตัวอยางการใช้
ในสวนนี ่ ่ อมูลจากไฟล์มาเกบไว้
งานคําสั่ง read เพื่ออานข้ ็ ในตัวแปร สมมติ
วา่มีไฟล์ที่ชื่อ table1.txt ในสารบบ c:\ ซึ่ งมีขอ้ มูลภายในไฟล์ตามรู ปที่ 7.3 ถ้าต้องการสร้าง
ฟังกชั์ นเพื่อนําข้อมูลแตละ
่ แนวตั้ งในไฟล์น้ ีมาบรรจุไว้ในตัวแปร x1, x2, x3, และ x4 กสามารถ

ทําได้ดงั นี้

function [x1, x2, x3, x4] = MyReadTable1()


//|------------------------------------------------|
//| The name of a file contains a table. |
//| This function reads the table out of the file. |
//|------------------------------------------------|
printf("Reading a table from a file\n");
printf("===========================\n");
filename = input("Enter filename between quotes:\n");
u = file('open', filename, 'old');

Table = read(u, -1, 4); //ไมรู่ ้วามี


่ ขอ้ มูลกแถว
ี่ แตรู่ ้วามี
่ ขอ้ มูล 4 แนวตั้ ง
[n, m] = size(Table);
printf("There are %d columns in the table\n", m);
for j = 1:m
execstr('x' + string(j) + ' = Table(:,j)');
end
file('close', u);
endfunction
229

เมื่อเขียนฟังกชั์ นเสร็ จแล้วกให้


็ บนั ทึกลงในไฟล์ที่ชื่อวา่ MyReadTable1.sci จากนั้ นทําการโหลด
ไฟล์น้ ีเพื่อเรี ยกใช้งานฟังกชั์ น MyReadTable1 โดยใช้คาํ สัง่ exec หรื อ getf ตัวอย่างเชน่

-->getf('MyReadTable1.sci')

-->[x1, x2, x3, x4] = MyReadTable1()


Reading a table from a file
===========================
Enter filename between quotes:

-->'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.

หมายเหตุ คําสัง่ Table = read(u, -1, 4) หมายถึงให้ทาํ การอานข้ ่ อมูลในไฟล์ที่กาหนดโดย



่ นพุตอาร์ กิวเมนต์ตวั ที่สองที่มีคา่เทากบ
พารามิเตอร์ u สวนอิ ่ ั -1 หมายถึงให้โปรแกรม SCILAB
่ อมูลทุกแถวในไฟล์ สวน
อานข้ ่ อินพุตอาร์ กิวเมนต์ตวั ที่สามที่มีคาเทากบ
่ ่ ั 4 หมายถึงให้โปรแกรม
SCILAB อานข้่ อมูลเป็ นจํานวนห้าแนวตั้ งในไฟล์ สําหรับคําสั่ง execstr เป็ นคําสัง่ ที่บอกให้
โปรแกรม SCILAB ทําการประมวลผลคาของ ่ สายอักขระ
่ อมูลจากไฟล์แล้ว ผูใ้ ช้ยงั สามารถใช้คาํ สั่ง fscanf
นอกจากการใช้คาํ สัง่ read เพื่ออานข้
่ ั ซึ่ งมีรูปแบบการใช้งานดังนี้
ได้เชนกน
230

function [aa, bb, cc, dd] = MyReadTable2()


//|------------------------------------------------|
//| This function is similar to MyReadTable1() but |
//| using fscanf() instead of read() to read data. |
//|------------------------------------------------|
filename = input("Enter filename between quotes:\n");
u = file('open', filename, 'old');
aa = []; bb = []; cc = []; dd = [];
for j = 1:3
[a, b, c, d] = fscanf(u,'%f %f %f %f');
aa = [aa; a];
bb = [bb; b];
cc = [cc; c];
dd = [dd; d];
end
file('close', u);
endfunction

เมื่อเขียนฟังกชั์ นเสร็ จแล้วกให้


็ บนั ทึกลงในไฟล์ที่ชื่อวา่ MyReadTable2.sci จากนั้ นทําการโหลด
ไฟล์น้ ีเพื่อเรี ยกใช้งานฟังกชั์ น MyReadTable2 โดยใช้คาํ สัง่ exec หรื อ getf ตัวอยาง
่ เชน่

-->getf('MyReadTable2.sci')

-->[aa, bb, cc, dd] = MyReadTable2()


Enter filename between quotes:

-->'c:\table1.txt' ่ น้ ีอยูใ่ นสารบบ c:\ และมีขอ้ มูลตามรู ปที่ 7.3


//สมมติวาไฟล์
dd =
4.
8.
12.
cc =
3.
7.
11.
231
bb =
2.
6.
10.
aa =
1.
5.
9.

7.2.2 การเขียนข้ อมลลงในไฟล์



่ ้ จะขอยกตัวอยางการใช้
ในสวนนี ่ ็ ในไฟล์ดังตอไป
งานคําสัง่ write เพื่อเขียนข้อมูลเข้าไปเกบไว้ ่ นี้
่ องการสร้างฟังกชั์ นชื่อ MyWriteToFile1.sci เพื่อบันทึกคาของตั
สมมติวาต้ ่ วแปร x, x2,
็ ในไฟล์ชื่อ temp1.txt ในสารบบ c:\
และ x3 สําหรั บ x = 1, 2, 3, 4, และ 5 ลงไปเกบไว้

กสามารถทํ าได้ดงั นี้

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

write(u, " ==================================");


file('close',u)

endfunction
232

ู ่ 7.4 ข้อมูลภายในไฟล์
รปที temp1.txt

เมื่อเขียนฟังกชั์ นเสร็ จแล้วกให้


็ บนั ทึกลงในไฟล์ที่ชื่อวา่ MyWriteToFile1.sci จากนั้ นทําการ
โหลดไฟล์น้ ี เพื่อเรี ยกใช้งานฟั งกชั์ น MyWriteToFile1 โดยใช้คาํ สั่ง exec หรื อ getf
่ ่
ตัวอยางเชน

-->getf('MyWriteToFile1.sci')

-->MyWriteToFile1
Printing to a file
==================
Enter file to write to (between quotes):
-->'c:\temp1.txt'

-->

็ ในไฟล์ชื่อ temp1.txt ซึ่ งเมื่อใช้โปรแกรม


ผลลัพธ์ที่ได้คือข้อมูลที่ตอ้ งการจะถูกเขียนเข้าไปเกบไว้
Notepad เปิ ดไฟล์น้ ี กจ็ ะได้ตามรู ปที่ 7.4

็ ในไฟล์แล้ว ผูใ้ ช้ยงั สามารถใช้


นอกจากการใช้คาํ สัง่ write เพื่อเขียนข้อมูลลงไปเกบไว้
คําสัง่ fprintf ได้เชนกน่ ั โดยมีรูปแบบการเรี ยกใช้งานที่แตกตาง
่ กนัเล็กน้อยดังแสดงในตัวอยาง่

ตอไปนี ้ (ศึกษารายละเอียดการใช้งานคําสัง่ write และ fprintf ได้จากคําสั่ง help)
233

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.sci จากนั้ นทําการ
โหลดไฟล์น้ ี เพื่อเรี ยกใช้งานฟั งกชั์ น MyWriteToFile2 โดยใช้คาํ สั่ง exec หรื อ getf
่ ่
ตัวอยางเชน
-->getf('MyWriteToFile2.sci')

-->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
================================================

็ ในไฟล์ที่ชื่อวา่ temp2.txt ในสารบบ c:\ ดังนั้ นถ้าเรี ยกดู


ซึ่ งผลลัพธ์ที่ได้น้ ีจะถูกนําไปเกบไว้
ข้อมูลในไฟล์น้ ีโดยใช้โปรแกรม Notepad ก็จะได้ผลลัพธ์ตามรู ปที่ 7.5
235

7.3 สรปุ
่ เชน่ คําสัง่ input, file, read, write,
ในบทนี้ ได้อธิบายถึงรู ปแบบการใช้งานคําสั่งตางๆ
printf, และ scanf เป็ นต้น เพื่อใช้ในการติดตอระบบอิ ่ นพุตและเอาต์พุตซึ่ งเป็ นระบบที่
ี่ องกบการอาน
เกยวข้ ั ่ และเขียนข้อมูลระหวางโปรแกรม
่ ั ่ องคอมพิวเตอร์ กลาวคื
SCILAB กบเครื ่ อ
่ อมูลจากไฟล์มาเกบไว้
ผูใ้ ช้สามารถที่จะอานข้ ็ ในตัวแปรที่ใช้ภายในโปรแกรม SCILAB หรื อเขียน
ข้อมูลคา่ของตัวแปรจากโปรแกรม SCILAB เข้าไปเกบไว้ ็ ในไฟล์กได้็ ดังนั้ นเมื่อเข้าใจถึงลักษณะ
่ ที่ใช้ในการติดตอ่ระบบอินพุตและเอาต์พุตของโปรแกรม SCILAB แล้ว ก็
การใช้งานคําสัง่ ตางๆ
จะทําให้สามารถออกแบบและพัฒนาฟังกชั์ นใหมๆ่ ให้มีความสามารถในการโต้ตอบกนัระหวางตั ่ ว
โปรแกรม SCILAB กบผู ั พ้ ฒั นาโปรแกรมได้

7.4 แบบฝึ กหัดท้ ายบท


7.1 จงเขียนโปรแกรมเพื่อหาผลลัพธ์ของ การบวก การลบ การคูณ และการหาร ของเลขสอง

จํานวน x และ y โดยให้ตวั โปรแกรมรับคาของตัวแปร x และ y จากคียบ์ อร์ด โดยใช้คาํ สัง่
่ าสั่ง ผานทางคํ
input และแสดงผลลัพธ์ที่ได้ออกมาที่หน้าตางคํ ่ าสั่ง printf
ั อ 7.1 แตใช้
7.2 ทําเหมือนกบข้ ่ คาํ สั่ง scanf ในการรับคาของตั
่ วแปร x และ y จากคียบ์ อร์ด

7.3 กาหนดให้
ขอ้ มูลภายในไฟล์ชื่อ test1.txt มีดงั นี้

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
การตรวจสอบหาข้ อผิดพลาดของโปรแกรม

การพัฒนาโปรแกรมโดยทัว่ ไป สิ่ งที่ผพัู้ ฒนาโปรแกรมจะต้องพบเสมอกคื็ อ โปรแกรมที่พฒั นาขึ้ นมา



ไมสามารถทํ างานได้ตามที่คาดหวังไว้อนั เนื่ องมาจากมีจุดบกพรอง่ (bug) ภายในตัวโปรแกรมซึ่ ง

อาจจะเกดจากสาเหตุ ่ เชน่ ข้อผิดพลาดทางด้านไวยากรณ์ (syntax error) และข้อผิดพลาด
ตางๆ
จากอัลกอริ ทึม เป็ นต้น ข้อผิดพลาดเหลานี ่
่ ้ จะทําให้โปรแกรมที่พฒั นาขึ้ นมาไมสามารถทํ างานได้
หรื อถ้าทํางานได้แต่กจ็ ะให้ผลลัพธ์ผดิ ไปจากที่คาดหวังไว้ ดังนั้ นผูพ้ ฒั นาโปรแกรมมีความจําเป็ นที่
จะต้องเข้าใจเกี่ยวกบหลัั กการทํางานของฟังกชั์ นทั้ งหมดที่ใช้ภายในโปรแกรมอยางถู ่ กต้อง หรื อถ้า
มีขอ้ ผิดพลาดเกดขึ ิ ้ น ผูพ้ ฒั นาโปรแกรมกควรที
็ ่จะสามารถค้นหาได้วา่ อะไรเป็ นสาเหตุของข้อผิดพลาด
เหลานั่ ้ น (หรื อสามารถหาตําแหนงของ ่ จุดบกพร่ องได้) เพื่อที่จะได้ทาํ การแกไขตั้ วโปรแกรมให้
ถูกต้อง ซึ่ งขั้ นตอนนี้ จะเรี ยกวา่การแกจุ้ ดบกพรอง ่ (debugging) ดังนั้ นในบทนี้ จะอธิ บายถึงขั้ นตอน
่ ที่ใช้ในการตรวจสอบหาข้อผิดพลาดของโปรแกรม
และคําสัง่ตางๆ

8.1 ขั้นตอนการตรวจสอบหาข้ อผิดพลาด


่ ้ จะอธิบายถึงขั้ นตอนและคําสัง่ ตางๆ
ในสวนนี ่ ที่ใช้ในการตรวจสอบหาข้อผิดพลาดของโปรแกรมที่
พัฒนาขึ้ นมา ให้พิจารณาสมการพหุนาม ax2 + bx +c = 0 ซึ่ งคําตอบของสมการนี้ มีสองคําตอบ คือ
-b ± b2-4ac
x=
2a
่ ่ ถ้ากาหนดให้
ตัวอยางเชน ํ 2
x -3x +2 = 0 ่ าตอบของสมการนี้ คือ
จะได้วาคํ
x = 1 และ x = 2 ผูใ้ ช้สามารถเขียนโปรแกรมเพื่อคํานวณหาคําตอบของสมการพหุนามนี้ ได้ดงั
แสดงในรู ปที่ 8.1
238

function [x1, x2] = MyRoot(a, b, c) //บรรทัดที่ 1


num1 = -b + sqrt(b^2 - 4*a*c); //บรรทัดที่ 2
num2 = -b - sqrt(b^2 - 4*a*c); //บรรทัดที่ 3
den = 2*a; //บรรทัดที่ 4
x1 = num1/den; //บรรทัดที่ 5
x2 = num2/den; //บรรทัดที่ 6
endfunction //บรรทัดที่ 7

ู ่ 8.1 รายละเอียดชุดคําสัง่ ภายในไฟล์ฟังกชั์ น


รปที MyRoot.sci

เมื่อเขียนโปรแกรมเสร็ จแล้วกทํ็ าการบันทึกฟังกชั์ นนี้ ลงในไฟล์ที่ชื่อวา่ MyRoot.sci จากนั้ นให้


ทําการโหลดชื่อไฟล์น้ ีเพื่อเรี ยกใช้งานฟังกชั์ นนี้โดยใช้คาํ สัง่ exec หรื อ getf ดังนี้

-->getf('MyRoot.sci');

-->a = 1; b = -3; c = 2;

-->[x1, x2] = MyRoot(a, b, c)


x2 =
1.
x1 =
2.

ซึ่ งจะได้ผลลัพธ์ถกู ต้องตามที่ตอ้ งการ


ในการหาข้อผิดพลาดภายในตัวโปรแกรม ขั้ นตอนแรกคือผูใ้ ช้จะต้องทําการขัดจังหวะ
(interruption) การประมวลผลของโปรแกรมเพื่อตรวจสอบดูคาของตั ่ วแปรตางๆ่ ณ เวลาขณะนั้ น
วา่มีค่าเป็ นไปตามที่คาดหวังไว้จากตัวโปรแกรมหรื อไม่ ถ้าผลลัพธ์ที่ได้ผดิ ไปจากที่คาดหวังไว้แสดง

วาอาจจะมี ิ ้ นภายในตัวโปรแกรมก่อนจะถึงตําแหนงที
ขอ้ ผิดพลาดเกดขึ ่ ่ทําการขัดจังหวะ แตถ้่ าหาก
ผลลัพธ์ที่ได้เป็ นไปตามที่คาดหวังไว้ก็แสดงวา่ ไมมี่ ขอ้ ผิดพลาดภายในตัวโปรแกรมกอนที ่ ่จะถึง
ตําแหนงที่ ่ทําการขัดจังหวะ ในทางปฏิบตั ิการขัดจังหวะโปรแกรมสามารถทําได้ 3 วิธี คือ
1) กดปุ่ ม Ctrl-C จากคียบ์ อร์ด
2) ใช้คาํ สัง่ setbpt (มาจากคําวา่ set breakpoint) ที่หน้าตางคํ
่ าสั่ง
3) ใช้คาํ สัง่ pause ใสเข้ ่
่ าไปในตัวโปรแกรม กอนจะทํ าการประมวลผล
239

่ ่ เห็ นได้ชัดระหวางคํ
ข้อแตกตางที ่ าสั่ง setbpt และ pause คือคําสั่ง setbpt จะไมไป ่
เปลี่ยนแปลงตัวโปรแกรมที่พฒั นาขึ้ นมา ในขณะที่คาํ สั่ง pause จะไปเปลี่ยนแปลงตัวโปรแกรม
เนื่องจากคําสัง่ pause จะต้องถูกใสเข้ ่
่ าไปในตัวโปรแกรมนั้ นกอนจะทําการประมวลผล

8.1.1 คําสั่ ง setbpt


คําสั่ง setbpt เป็ นคําสั่งที่ใช้ในการกาหนดตํ ่
าแหนงของ ่
จุดพัก26 (breakpoint) วาจะให้ อยู่ที่

บรรทัดใดในตัวโปรแกรมเพื่อที่วาเวลาประมวลผลโปรแกรมนั ้ นแล้ว ตัวโปรแกรมจะมาหยุดแบบ

ชัว่ คราว ณ บรรทัดที่มีจุดพัก เพื่อให้ผใู้ ช้สามารถเปลี่ยนแปลงคาพารามิ เตอร์ หรื อตรวจสอบความ

ถูกต้องของตัวโปรแกรมตั้ งแตบรรทั ดแรก (หรื อบรรทัดที่มีจุดพักกอนหน้ ่ านี้ ) จนถึงบรรทัดก่อนที่

จะมีจุดพักนั้ นได้ ให้พิจารณาชุดคําสัง่ตอไปนี ้ จะได้เข้าใจถึงหลักการใช้งานคําสั่ง setbpt

-->clear;

-->getf('MyRoot.sci');

-->a = 1; b = -3; c = 2;

-->setbpt('MyRoot', 5) //บรรทัดที่หา้ ในโปรแกรม MyRoot จะยังไมถู่ กนําไปประมวลผล

่ าสั่งโดยใช้คาํ สัง่ clear จากนั้ นกทํ็ าการโหลด


ชุดคําสัง่ นี้ จะทําการลบข้อมูลทั้ งหมดในหน้าตางคํ
ไฟล์ MyRoot.sci เพื่อเรี ยกใช้งานโปรแกรม MyRoot พร้อมทั้ งกาหนดคาของตัํ ่ วแปร a, b,
และ c สวน ่ คําสั่งสุ ดท้ายเป็ นการกาหนดตํ
ํ ่
าแหนงของจุ ดพักให้อยูใ่ นบรรทัดที่หา้ ภายในโปรแกรม
MyRoot หลังจากนั้ นถ้าทําการประมวลผลโปรแกรม MyRoot จะได้ผลดังนี้

-->[x1, x2] = MyRoot(a, b, c)


Stop after row 5 in function MyRoot :

-1-> //เครื่ องหมายแสดงระดับการขัดจังหวะ ณ ระดับที่ 1

ผลลัพธ์ที่ได้คือโปรแกรม MyRoot จะถูกขัดจังหวะแบบชัว่ คราว ณ บรรทัดที่หา้ ของตัวโปรแกรม


MyRoot (นัน ่ คือบรรทัดที่หา้ จะยังไมถู่ กนําไปประมวลผล) โดยจะแสดงเครื่ องหมาย Interruption

26
คําสัง่ ในบรรทัดที่มีจุดพัก จะยังไมถู่ กนําไปประมวลผล
240

prompt27 “-1->” เพื่อเป็ นการบอกวาตอนนี่ ้ โปรแกรม MyRoot ได้อยูท่ ี่ระดับที่ 1 ของการ


ขัดจังหวะ ซึ่ ง ณ ตําแหนงนี ่ ้ ผใู้ ช้สามารถตรวจสอบความถูกต้องของข้อมูลตั้ งแตบรร ่ ทัดที่หนึ่ ง
่ ่ ผูใ้ ช้สามารถเรี ยกดูคาพารามิ
จนถึงบรรทัดที่สี่ได้ ตัวอยางเชน ่ เตอร์ต่างๆ ที่ได้มีการกาหนดภายใน

โปรแกรม MyRoot ตั้ งแตบรรทั ่ ่ ้ มีคาตรงตามที
ดที่หนึ่งจนถึงบรรทัดที่สี่ ซึ่ งถ้าพารามิเตอร์เหลานี ่ ่

คาดหวังไว้กแสดงวาคํ ่ าสั่งทั้ งหมดตั้ งแตบรรทั
่ ดที่หนึ่งจนถึงบรรทัดที่สี่มีความถูกต้อง เชน่

-1->[num1 num2 den]


ans =
4. 2. 2.

-1->[x1 x2]
[x1 x2]
--error 4
undefined variable : x1 //ตัวแปร x1 อยูใ่ นคําสัง่บรรทัดที่หา้ ซึ่ งยังไมได้
่ ถูกนําไปประมวลผล

ผลลัพธ์ที่ได้แสดงให้เห็นวา่ผูใ้ ช้สามารถเรี ยกดูค่าของพารามิเตอร์ num1, num2, และ den ได้



และมีผลลัพธ์ตามที่คาดหวังไว้ อยางไรกตาม ็ ่
ณ จุดนี้ ผใู้ ช้ยงั ไมสามารถเรี ่
ยกดูคาของพารามิ เตอร์
x1 และ x2 ได้เนื่ องจากโปรแกรม MyRoot ยังไมได้ ่ ทําการประมวลผลคําสัง่ ในบรรทัดที่หา้ และ
บรรทัดหก (ดูรูปที่ 8.1)

8.1.2 คําสั่ ง resume และ return

่ ในหัวข้อ 8.1.1 ถ้าต้องการให้โปรแกรม MyRoot ทํางานตอไปจน


จากตัวอยาง ่ จบโปรแกรม ก็
28

สามารถทําได้โดยใช้คาํ สัง่ resume ดังแสดงตอไปนี

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)

-->[x1, x2] = MyRoot(a,b,c)


Stop after row 5 in function MyRoot :

-1->[num1 num2 den] //คา่เดิมของพารามิเตอร์ต่างๆ เมื่อ a = 1, b = -3 และ c = 2


ans =
4. 2. 2.

-1->num1=3; num2=1; ํ ่ ่ กบพารามิ


//กาหนดคาใหมให้ ั เตอร์ num1 และ num2

-1->resume //ใช้คาํ สัง่ resume ในลักษณะเดิม จะทําให้ได้ผลลัพธ์เหมือนเดิม


x2 =
1.
x1 =
2.

หากต้องการให้โปรแกรม MyRoot นําคา่ของตัวแปรที่ถกู กาหนดขึ ํ ้ นมาใหม่น้ ี มาใช้ในคํานวณหา


คา่ x1 และ x2 แล้ว ผูใ้ ช้จะต้องใช้คาํ สัง่ resume ในลักษณะตอไป
่ นี้

-1->num1 = 3; num2 = 1;

-1->[num1, num2] = resume(num1, num2)


x2 = //เนื่องจาก x2 = num2/den = 1/2 = 0.5
0.5
242

x1 = //เนื่องจาก x1 = num1/den = 3/2 = 1.5


1.5

ั ่าของ num1 และ num2 ที่ถกู กาหนดคาให้


ผลลัพธ์ที่ได้จะเป็ นคําตอบที่สอดคล้องกบค ํ ่ ใหม่
ั าสัง่ resume ทุกประการ
หมายเหตุ คําสัง่ return จะทํางานได้เหมือนกบคํ

8.1.3 คําสั่ ง pause

ั ั
คําสัง่ pause มีผลลัพธ์แบบเดียวกนกบการใช้ คําสัง่ setbpt เพียงแต่จะต้องนําคําสัง่ pause
ไปใสไว้ ่ ในตัวโปรแกรมก่อนบรรทัดที่มีการกาหนด
ํ ่ ่ ถ้า
จุดพักด้วยคําสัง่ setbpt ยกตัวอยางเชน
ใช้คาํ สัง่

-->setbpt('MyRoot', 5)

่ ยวกนกบการนํ
จะมีผลลัพธ์เชนเดี ั ั ่ าสัง่ ใน
่ ในตัวโปรแกรม MyRoot กอนคํ
าคําสัง่ pause ไปใสไว้
บรรทัดที่หา้ ในรู ปที่ 8.1

8.1.4 คําสั่ งทีน่ ่ าสนใจ


่ ้ จะอธิบายคําสัง่ ที่น่าสนใจที่ใช้ในการตรวจสอบและแกไขโปรแกรม
ในสวนนี ้ ที่พฒั นาขึ้ นมาดังนี้

8.1.4.1 คําสั่ ง abort


เป็ นคําสัง่ ที่ทาํ ให้ระดับของการขัดจังหวะลดลงมาอยูท่ ี่ระดับที่ศูนย์ นัน่ คือมาอยูท่ ี่เครื่ องหมาย Scilab
prompt “-->” ซึ่ งเป็ นระดับปรกติของหน้าตางคํ ่ าสั่งในโปรแกรม SCILAB

8.1.4.2 คําสั่ ง dispbpt


เป็ นคําสั่งที่ใช้แสดงจุดพักทั้ งหมดที่มีอยูใ่ นตัวโปรแกรมวาอยู
่ ท่ ี่บรรทัดใดบ้าง ตัวอยาง
่ เชน่

-->setbpt('MyRoot', 5)

-->dispbpt
breakpoints of function :MyRoot
5
243

function [x1, x2] = MyRoot2(a, b, c) //บรรทัดที่ 1


num1 = -b + sqrt(b^2 - 4*a*c); //บรรทัดที่ 2
num2 = -b - sqrt(b^2 - 4*a*c); //บรรทัดที่ 3
den = 2*a; //บรรทัดที่ 4
pause; //บรรทัดที่ 5
x1 = num1/den; //บรรทัดที่ 6
x2 = num2/den; //บรรทัดที่ 7
endfunction //บรรทัดที่ 8

ู ่ 8.2 รายละเอียดชุดคําสัง่ ภายในโปรแกรม MyRoot2.sci


รปที

8.1.4.3 คําสั่ ง delbpt


่ เชน่
เป็ นคําสัง่ ที่ใช้ในการลบจุดพักออกจากตัวโปรแกรม ตัวอยาง

-->delbpt('MyRoot', 5)

-->dispbpt

-->

่ งจากลบจุดพักแล้ว เมื่อใช้คาํ สั่ง dispbpt กจะไมพบอะไร


จะเห็นได้วาหลั ็ ่

8.1.4.4 คําสั่ ง whereami


ในระหวาง ่ การประมวลผลของตัวโปรแกรม ถ้ากดปุ่ ม Ctrl-C หรื อมีคาํ สั่ง pause อยูภ่ ายในตัว
โปรแกรมเพื่อทําหน้าที่ขดั จังหวะการประมวลผลของโปรแกรม ผูใ้ ช้สามารถที่จะหาตําแหนงของ่
่ ่
การขัดจังหวะได้โดยใช้คาํ สัง่ whereami ดังแสดงในตัวอยางตอไปนี้
ให้พิจารณาฟังกชั์ น MyRoot2.sci ตามรู ปที่ 8.2 ซึ่ งมีคาํ สั่ง pause อยูใ่ นบรรทัดที่หา้
เมื่อเรี ยกใช้งานโปรแกรมนี้ จะได้ผลลัพธ์คือ

-->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->[num1 num2 den]


ans =
4. 2. 2.

-1->[x1 x2]
[x1 x2]
!--error 4
undefined variable : x1


ผลลัพธ์ที่ได้แสดงให้ทราบวาโปรแกรม MyRoot2 ถูกขัดจังหวะโดยคําสัง่ pause เมื่อประมวลผล
มาจนถึงบรรทัดที่หก (คําสัง่ บรรทัดที่หกยังไมถู่ กนําไปประมวลผล) ดังนั้ นจึงสามารถเรี ยกดูค่าของ
่ ่
ตัวแปร num1, num2, และ den ได้ แตไมสามารถเรี ยกดูค่าของตัวแปร x1 และ x2

8.1.4.5 คําสั่ ง where


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

-1->[linenum, mac] = where()


mac =
!pause !
! !
!MyRoot2 !
linenum =
0.
6.
245

่ าสัง่ พื้นฐานสําหรับจัดการข้อผิดพลาด
ตารางที่ 8.1 ตัวอยางคํ
ฟังก์ ชัน คําอธิบาย
error แสดงข้อความออกทางหน้าตางคํ ่ าสัง่ แล้วหยุดการประมวลผลโปรแกรม
่ างาน เมื่อเกดิ ประเภทของข้อผิดพลาด
สัง่ ให้การกระทํา (action) บางอยางทํ
errcatch

(error type) ตามที่กาหนดในระหวาง ่ ที่กาลั
ํ งทําการประมวลผลโปรแกรม
iserror ตรวจสอบวามี ่ ขอ้ ผิดพลาดตามที่กาหนดเกดขึ
ํ ิ ้ นภายในโปรแกรมหรื อไม่
errclear ํ
ยกเลิกการกระทําที่เป็ นผลมาจากประเภทของข้อผิดพลาดที่กาหนดไว้

่ การเรี ยกใช้คาํ สั่ง pause ในโปรแกรม MyRoot2 โดยโปรแกรม


ผลลัพธ์ที่ได้แสดงให้ทราบวามี
จะมาสิ้ นสุ ดการประมวลผล ณ บรรทัดที่หก (คําสั่งบรรทัดที่หกยังไมถู่ กนําไปประมวลผล)
นอกจากนี้ โปรแกรม SCILAB ยังได้เตรี ยมคําสั่งพื้นฐานอื่นๆ สําหรับจัดการข้อผิดพลาด

(error handler) ตารางที่ 8.1 แสดงคําสั่งที่พบบอยในการเขี ยนโปรแกรม (ผูส้ นใจสามารถศึกษา
่ ้ ได้จากคําสั่ง help)
รายละเอียดการใช้งานคําสัง่ เหลานี

8.2 สรปุ

ในบทนี้ ได้อธิ บายถึงขั้ นตอนการตรวจสอบหาข้อผิดพลาดและรู ปแบบการเรี ยกใช้งานคําสั่งตางๆ
ได้แก่ คําสั่ง pause, setbpt, และ resume เป็ นต้น เพื่อใช้เป็ นแนวทางในการตรวจสอบ
หาข้อผิดพลาดภายในตัวโปรแกรม ซึ่ งจะชวย ่ ทําให้ผพู้ ฒั นาโปรแกรมสามารถค้นหาข้อผิดพลาดที่
ิ ้ นภายในตัวโปรแกรมได้โดยงาย
เกดขึ ่ เพื่อจะได้ดาํ เนินการแกไข้ ข้อผิดพลาดเหลานั
่ ้ นตอไป

8.3 แบบฝึ กหัดท้ ายบท


่ ่ าสั่ง setbpt และคําสัง่ pause
8.1 จงเปรี ยบเทียบข้อแตกตางระหวางคํ
8.2 การอธิบายการใช้งานของคําสั่ง dispbpt และคําสัง่ delbpt
่ ่ าสั่ง quit และคําสัง่ abort
8.3 จงเปรี ยบเทียบข้อแตกตางระหวางคํ
่ ่ าสั่ง where และคําสัง่ whereami
8.4 จงเปรี ยบเทียบข้อแตกตางระหวางคํ
246
บทที่ 9
ตัวอย่ างการประยกต์
ุ ใช้ งาน


ในบทนี้ จะแสดงตัวอยางการใช้ โปรแกรม SCILAB ในการแกไขปั ้ ญหาทางคณิ ตศาสตร์ลกั ษณะตาง
่ ๆ
เชน่ การใช้งานเวกเตอร์และเมทริ กซ์ตรรกะ, การดําเนินการเชิงสัญลักษณ์, การหาตัวคูณรวมน้ ่ อย

และตัวหารรวมมาก , การแยกตัวประกอบของพหุนาม, การลดรู ปพหุ นาม, การหาปริ พนั ธ์จาํ กดเขต ั ,

และการแกสมการอนุ พนั ธ์อนั ดับหนึ่ง เป็ นต้น เพื่อให้ผอู้ ่านทราบถึงความสามารถของโปรแกรม
SCILAB ในการที่ จะนํามาประยุกต์ใช้ในการเรี ยนการสอน (ทั้ งในระดับมัธยมศึกษาและระดับ
อุดมศึกษา) และการทํางานวิจยั โดยเฉพาะงานทางด้านวิศวกรรมและวิทยาศาสตร์

9.1 การใช้ งานเวกเตอร์ และเมทริกซ์ ตรรกะ


ตัวดําเนินการตรรกะ (logical operator) ได้แก่ เครื่ องหมาย AND “&”, เครื่ องหมาย OR “|”, และ
เครื่ องหมาย NOT “~” เป็ นตัวดําเนินการที่ใช้เชื่อมความสัมพันธ์ระหวางคาของตั่ ่ ิ ้น
วแปรที่เกดขึ
โดยตัวดําเนินการสัมพันธ์ (relational operator) เชน่ เครื่ องหมายมากกวา่ “>”, เครื่ องหมายน้อยกวา่
“<”, เครื่ องหมายมากกวาหรื่ อเทาก ่ บั “>=”, เครื่ องหมายน้อยกวาหรื
่ อเทากบ ่ ั “<=”, เครื่ องหมาย
่ ั “==”, และเครื่ องหมายไมเทากบ
เทากบ ่ ่ ั “<>” (หรื อ “~=”) ถ้าความสัมพันธ์สอดคล้องกนผลลั ั พธ์
็ ค่าเทากบ
ที่ได้กจะมี ่ ั T (เป็ นจริ ง) หรื อมีคาทางตรรกะเทากบ
่ ่ ั คา่ 1 แตถ้่ าความสัมพันธ์ไมสอดคล้
่ อง

กนผลลั ็ คาเทากบ
พธ์ที่ได้กจะมี ่ ่ ั F (เป็ นเท็จ) หรื อมีคาทางตรรกะเทากบ
่ ่ ั คา่ 0 โดยทัว่ ไปเวกเตอร์
หรื อเมทริ กซ์ของข้อความแสดงการเปรี ยบเทียบ (comparison statement) สามารถที่จะถูกสร้างได้

เช่นเดียวกบการสร้ างเวกเตอร์หรื อเมทริ กซ์ของคา่ สเกลาร์หรื อสัญลักษณ์ทว่ั ไป ตามที่ได้อธิบายใน
่ ่
บทที่ 2 ตัวอยางเชน
248
-->v = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2 2 ~= 2]
v =
F T F T F T F

ผลลัพธ์ที่ได้คือเวกเตอร์ v ที่มีสมาชิกทั้ งหมดเป็ นตัวแปรบูลีน (Boolean) หรื อผลลัพธ์ที่ได้จากการ


เปรี ยบเทียบ โดยทัว่ ไปตัวแปรลักษณะนี้ จะเรี ยกกนวาั ่ เวกเตอร์ตรรกะ (logical vector)
่ ่
ในสวนตอไปนี ้ จะกลาวถึ ั
่ งการดําเนินการทางคณิ ตศาสตร์กบเวกเตอร์ และเมทริ กซ์ตรรกะ
่ ตอไปนี
ดังแสดงในตัวอยาง ่ ้

-->x = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2];


x =
F T F T F T

-->2*x
ans =
0. 2. 0. 2. 0. 2.

-->2*[0 1 0 1 0 1]
ans =
0. 2. 0. 2. 0. 2.

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


่ ่ ั ่ สเกลาร์ น้ นั

สวนผลคู ณของคา่ สเกลาร์ กบัตัวแปรบูลีนที่เป็ นเท็จจะมีคาเทากบคา
่ ่ ั ่ ศูนย์ ดังนั้ นสามารถที่จะสรุ ปได้วา่
เมื่อนําเวกเตอร์และเมทริ กซ์ตรรกะมาดําเนินการทางคณิ ตศาสตร์กบคา ั ่ สเกลาร์ เวกเตอร์และเมทริ กซ์
่ ้ สามารถแทนได้ดว้ ยเวกเตอร์และเมทริ กซ์ของคา่สเกลาร์ที่มีสมาชิกเป็ นคา่ 0 กบคา
เหลานี ั ่ 1 โดยที่
คา่ 0 จะใช้แทนตัวแปรบูลีนที่เป็ นเท็จ และคา่ 1 จะใช้แทนตัวแปรบูลีนที่เป็ นจริ ง เพราะฉะนั้ นจาก
่ างต้นจะได้วา่ เวกเตอร์ x มีคาเที
ตัวอยางข้ ่ ยบเทากบเวกเตอร์
่ ั [0 1 0 1 0 1]


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

-->v = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2];

-->v + [1 2 3 4 5 6] //เวกเตอร์ v เปรี ยบเสมือนมีค่าเทากบ


่ ั v = [0 1 0 1 0 1]
ans =
1. 3. 3. 5. 5. 7.
249

-->v .* [1 2 3 4 5 6]
ans =
0. 2. 0. 4. 0. 6.

เมทริ กซ์ตรรกะ คือ เมทริ กซ์ที่สมาชิกทั้ งหมดภายในเมทริ กซ์เป็ นตัวแปรบูลีน (T หรื อ F)


ในทํานองเดียวกนัผูใ้ ช้สามารถดําเนินการทางคณิ ตศาสตร์กบเมทริ
ั ั
กซ์ตรรกะได้เหมือนกบเวกเตอร์
่ ่
ตรรกะ ดังแสดงในตัวอยางตอไปนี ้

-->A = [1 2; 3 4] //เมทริ กซ์ค่าสเกลาร์


A =
1. 2.
3. 4.

-->B = [1 < 2 2 > 3; 2 == 3 2 <> 3] ่ ั


//เมทริ กซ์ตรรกะเทียบเทากบเมทริ กซ์ [1 0; 0 1]
B =
T F
F T

-->A + B
ans =
2. 2.
3. 5.

-->A .* B
ans =
1. 0.
0. 4.

9.1.1 การใช้ งานเวกเตอร์ และเมทริกซ์ ตรรกะสํ าหรับวาดรปูกราฟ



เวกเตอร์และเมทริ กซ์ตรรกะมีประโยชน์มากในการชวยวาด ่ ดังแสดงตอไปนี
รู ปกราฟแบบตางๆ ่ ้

9.1.1.1 การแก้ไขปัญหาค่ าอนันต์


่ ่เป็ นคาอนั
ในกรณี ที่ขอ้ มูลที่จะนํามาใช้ในการวาดรู ปกราฟมีคาที ่ นต์ (infinity) รวมอยูด่ ว้ ย ถ้าวาด
็ ได้รูปกราฟที่ไมสวยงาม
รู ปกราฟโดยใช้ขอ้ มูลนี้กจะ ่ ตัวอยาง่ เชน่ จากคุณสมบัติของฟังกชั์ นตรี โกณมิติ
จะได้วา่ tan(x) = sin(x)/cos(x) = ±∞ เมื่อ x = ±nπ/2 สําหรับ n = 1, 2, 3, ... ที่เป็ น
250

ู ่ 9.1 รู ปกราฟของฟั งกชั์ นตรี โกณมิติ tan(x)


รปที

จํานวนเต็มบวกเนื่องจาก cos(x) = 0 ดังนั้ นถ้าต้องการวาดรู ปกราฟของฟังกชั์ น tan(x) โดยที่


่ ้ งแต่ -3π/2 ถึง 3π/2 โดยใช้ชุดคําสัง่ ดังนี้
x มีคาตั

-->x = -3*%pi/2:%pi/100:3*%pi/2;

-->y = tan(x);

-->plot(x, y)

-->xtitle('y = tan(x)', 'x', 'y');

ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.1 ซึ่ งจะพบว่ารู ปกราฟที่ได้จะมีสไปค์ (spike) เกดิขึ้ นมา ณ ตําแหนงที
่ ่
คา่ x = ±π และ x = ±3π/2 เนื่องจากตัวแปร y มีคาสู ่ งมาก (คาเข้
่ าใกล้ค่าอนันต์) ทําให้รูปกราฟที่

ได้ไมสามารถแสดงรายละเอี ยดได้ครบถ้วน วิธีการแกไขปั้ ญหานี้ สามารถทําได้โดยใช้คุณสมบัติของ
เวกเตอร์ตรรกะโดยการปรับคาของ ่ ตัวแปร y ดังนี้

-->x = -3*%pi/2:%pi/100:3*%pi/2;

-->y = tan(x);
251

ู ่ 9.2 รู ปกราฟของฟั งกชั์ น tan(x)หลังจากปรับคาของตั


รปที ่ วแปร y

-->y = y .* (abs(y) < 1e10); //ปรับคา่ของตัวแปร y

-->plot(x, y)

-->xtitle('y = tan(x)', 'x', 'y');


คําสั่งบรรทัดที่สามเป็ นการปรับคาของตั ่ มบูรณ์ของตัวแปร y มีคาน้
วแปร y โดยที่ถา้ คาสั ่ อยกวา่ คา่
็ บให้ตวั แปร y มีคาเทากบคาศู
10 กจะปรั
10
่ ่ ั ่ นย์ ผลลัพธ์ที่ได้จากการใช้ชุดคําสั่งนี้ แสดงในรู ปที่ 9.2
ซึ่ งจะแสดงรายละเอียดของกราฟได้ครบถ้วนตามที่ตอ้ งการ

9.1.1.2 การแก้ไขปัญหาการหารด้ วยค่ าศนย์



่ ่เป็ นคาอนั
ในกรณี ที่ขอ้ มูลที่ใช้วาดรู ปกราฟมีคาที ่ นต์ (infinity) ที่เกดจากการหารคาจํ
ิ ่ านวนจริ งด้วย
่ นย์ เชน่ ถ้าต้องการวาดรู ปกราฟของฟังกชั์ นซิ งก์ y = sin(x)/x ซึ่ งเป็ นสัญญาณที่พบมาก
คาศู
่ นคาอนั
ในระบบการสื่ อสารดิจิทลั ดังนั้ นเมื่อตัวแปร x = 0 จะทําให้ตวั แปร y มีคาเป็ ่ นต์ ดังแสดง
่ ่
ในตัวอยางตอไปนี ้
252

ู ่ 9.3 รู ปกราฟของฟังกชั์ น sin(x)/x หลังจากปรับคาของตั


รปที ่ ่ ่มีค่าเป็ นคาศู
วสวนที ่ นย์

-->x = [-15:0.1:15];
-->y = sin(x)./x;
--error 27
division by zero...

วิธีการแกปั้ ญหาการหารคาจํ่ านวนจริ งด้วยคาศู


่ นย์ในโปรแกรม SCILAB สามารถทําได้โดยการ
แทนคาตั่ วสวน่ (denominator) ที่มีค่าเป็ นคาศู
่ นย์ดว้ ยคา่ %eps = 2.220D-16 วิธีการหา

ตําแหนงของตั ่ ที่มีคาเป็
วสวน ่ นคาศู
่ นย์สามารถทําได้หลายวิธี เชน่ การใช้คาํ สัง่ find หรื อการใช้
คุณสมบัติของเวกเตอร์ ตรรกะ ดังแสดงในตัวอยาง ่ ตอไปนี
่ ้
-->clf; x = [-15:0.1:15];

-->x = x + (x == 0)* %eps; //ปรับคา่ของตัวแปร x


-->y = sin(x) ./ x;
-->plot(x, y)
-->xtitle('y = sin(x)/x', 'x', 'y');

ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.3


253

ู ่ 9.4 รู ปกราฟของฟั งกชั์ น sin(x)


รปที

9.1.1.3 การสร้ างกราฟแบบไม่ ต่อเนื่อง


ในการทํางานบางครั้ งมีความจําเป็ นต้องเปลี่ยนแปลงรู ปกราฟแบบตอเนื่ ่ อง (continuous graph)
ให้อยูใ่ นรู ปกราฟแบบไมตอเนื
่ ่ ่อง (discontinuous graph) เพื่อนําเสนอผลการทดลองตามที่กาหนด ํ
่ ่ รู ปกราฟของฟังกชั์ นตรี โกณมิติ sin(x) เป็ นกราฟแบบตอเนื
ตัวอยางเชน ่ ่องซึ่ งมีคาทั
่ ้ งด้านบวก
และด้านลบตามรู ปที่ 9.4

-->clf; x = [-15:0.1:15];

-->y = sin(x);

-->plot(x, y)

--> xtitle('y = sin(x)', 'x', 'y');

คุณสมบัติของเวกเตอร์ตรรกะสามารถที่จะถูกนํามาใช้ในการเปลี่ยนรู ปกราฟนี้ ให้เป็ นกราฟแบบไม่


่ ่ อง เชน่ เปลี่ยนให้เป็ นรู ปกราฟที่แสดงผลเฉพาะคาบวกของสั
ตอเนื ่ ญญาณ ดังแสดงในตัวอยาง ่
่ นี้
ตอไป
254

ู ่ 9.5 รู ปกราฟของฟั งกชั์ น sin(x) ที่แสดงผลเฉพาะคาบวก


รปที ่

-->clf; x = [-15:0.1:15];

-->y = sin(x);

-->y = y .* (y >= 0);

-->plot(x, y)

-->xtitle('Modified function of sin(x)', 'x', 'y');

ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.5 ซึ่ งเป็ นรู ปสัญญาณที่พบมากในงานทางด้านวิศวกรรมไฟฟ้ า เชน่ รู ป


สัญญาณของวงจรเรี ยงกระแสตรงแบบครึ่ งคลื่น (half-wave rectifier) เป็ นต้น

9.1.1.4 การขริบข้ อมลบางส่


ู วนของกราฟ
ั ั วข้อที่ 9.1.1.3 ผูใ้ ช้สามารถที่จะขริ บหรื อเล็ม (clip) ข้อมูลที่แสดงผลบางสวน
ในทํานองเดียวกนกบหั ่
ของรู ปกราฟได้โดยใช้คุณสมบัติของเวกเตอร์ตรรกะ ดังแสดงในตัวอยางตอไปนี ่ ่ ้

-->clf; x = [-15:0.01:15];

-->y = sin(x);
255

่ ปกราฟของฟังกชั์ น sin(x) ที่ตดั ข้อมูลที่แสดงผลบางสวนแบบที


ู ่ 9.6 ตัวอยางรู
รปที ่ ่หนึ่ง

-->x = [-15:0.01:15];

-->y = sin(x);

-->y = y .* (abs(y) <= 0.95);

-->plot(x, y)

่ หนึ่งคือ
ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.6 หรื ออีกตัวอยาง

-->clf; x = [-15:0.01:15];

-->y = sin(x);

-->y = y .* (y <= -0.95 | y >= 0.95);

-->plot(x,y)

ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.7


จากตัวอยาง่ ตางๆ
่ ที่แสดงข้างต้นแสดงให้เห็นวา่เวกเตอร์และเมทริ กซ์ตรรกะสามารถที่จะ
่ ได้ตรงตามความต้องการ
นํามาประยุกต์ใช้ในการวาดรู ปกราฟแบบตางๆ
256

่ ปกราฟของฟังกชั์ น sin(x) ที่ตดั ข้อมูลที่แสดงผลบางสวนแบบที


ู ่ 9.7 ตัวอยางรู
รปที ่ ่สอง

9.2 การดําเนินการเชิงสั ญลักษณ์


โปรแกรม SCILAB รองรับการดําเนินการเชิงสัญลักษณ์ (symbolic operation) ได้ใกล้เคียงกบั
โปรแกรมอื่นๆ เชน่ Maple, MuPad, และ Mathematica เป็ นต้น ทําให้สามารถพัฒนาโปรแกรม
่ ้ จะกลาวถึ
ได้หลากหลายรู ปแบบตามที่ตอ้ งการ ในสวนนี ่ งตัวอยางการประยุ
่ ี่ องกบั
กต์ใช้งานที่เกยวข้

การดําเนินการเชิงสัญลักษณ์ดงั ตอไปนี

9.2.1 ฟังก์ ชัน addf, subf, mulf, ldivf, และ rdivf

่ ้ จะทําหน้าที่ในการดําเนิ นการเชิ งสัญลักษณ์ ได้แก่ การบวก “addf”, การลบ


ฟั งกชั์ นเหลานี
“subf”, การคูณ “mulf”, การหารซ้าย “ldivf”, และการหารขวา “rdivf” ระหวางสาย ่
่ ่
อักขระ (character string) โดยผลลัพธ์ที่ได้จะเป็ นสายอักขระใหม่ ตัวอยางเชน

-->addf('x', '1') //การบวกเชิงสัญลักษณ์


ans =
x+1
257

-->addf('x+2', 'y-3') //การบวกเชิงสัญลักษณ์


ans =
x+y-1

-->subf('x+2', 'y-3') //การลบเชิงสัญลักษณ์


ans =
x-y+5

-->mulf('x+2', 'y-3') //การคูณเชิงสัญลักษณ์


ans =
(x+2)*(y-3)

-->ldivf('x+2', 'y-3') //การหารซ้ายเชิงสัญลักษณ์


ans =
(x+2)\(y-3)

-->rdivf('x+2', 'y-3') //การหารขวาเชิงสัญลักษณ์


ans =
(x+2)/(y-3)

9.2.2 ฟังก์ชัน cmb_lin

เป็ นฟังกชั์ นที่ทาํ หน้าที่ในการสร้างสมการเชิงเส้นเชิงสัญลักษณ์ (symbolic linear equation) โดย


มีรูปแบบการเรี ยกใช้งานคือ

z = cmb_lin(a, x, b, y)

ผลลัพธ์ที่ได้คือ ่ เชน่
z = a*x – b*y เมื่อพารามิเตอร์ z, a, x, b, และ y เป็ นสายอักขระ ตัวอยาง

-->z = cmb_lin('3', 'x', '2', 'y')


z =
3*x-2*y

-->z = cmb_lin('A', 'x^2+x+1', '2*B', '2*y-1')


z =
A*(x^2+x+1)-2*B*(2*y-1)
258

9.2.3 ฟังก์ ชัน eval และ evstr


เป็ นฟังกชั์ นที่ทาํ หน้าที่ในการคํานวณหาคาผลลั
่ พธ์ของสมการเชิงเส้นเชิงสัญลักษณ์ที่สร้างขึ้ น เมื่อ

กาหนดคาจํ่ านวนจริ งให้กบสั ั ญลักษณ์ที่ใช้ในสมการเชิงเส้น ตัวอยางเชน
่ ่

-->y = cmb_lin(mulf('2', 'x'), 'x^2 - 1', addf('3','2*x'), 'x^3')


y =
2*x*(x^2-1)-(2*x+3)*x^3 //ตัวแปร y เป็ นสายอักขระ

-->x = 3; ํ ตวั แปร x มีค่าเทากบค


//กาหนดให้ ่ ั ่า 3
-->eval(y)
ans =

- 195. //ผลลัพธ์ที่ได้คือ ( )
2 × 3 × 32 −1 − ( 2×3+3) × 3 = 6 × 8 − 9 × 27 = 48 − 243 = −195
3

-->x = poly(0, 'x'); ํ


//กาหนดให้
ตวั แปร x เป็ นตัวแปรพหุ นาม
-->y
y =
2*x*(x^2-1)-(2*x+3)*x^3

-->eval(y)
ans =
3 4
- 2x - x - 2x //ตัวแปร y ถูกเปลี่ยนเป็ นสมการพหุนาม

-->evstr(y) ่ ั
//มีผลลัพธ์เทากบการใช้
คาํ สัง่ eval
ans =
3 4
- 2x - x - 2x

-->x = 4;

-->eval(y) //คํานวณหาคา่ y เมื่อกาหน


ํ ดคาตั
่ วแปร x = 4
ans =
- 584.

-->evstr(y) ่ ั
//มีผลลัพธ์เทากบการใช้
คาํ สัง่ eval
ans =
- 584.
259

9.2.4 ฟังก์ ชัน trianfml

เป็ นฟังกชั์ นที่ทาํ หน้าที่ในการทํา symbolic triangularization ของเมทริ กซ์ นัน่คือการทําให้สมาชิก


ของเมทริ กซ์ที่อยูใ่ ต้เส้นทแยงมุมหลัก (main diagonal) มีคาเป็่ นคา่ศูนย์ หรื ออาจจะกลาวได้
่ วาเป็่ น
การทําให้เมทริ กซ์เชิงสัญลักษณ์เป็ นเมทริ กซ์สามเหลี่ยมด้านบน (upper triangular matrix) โดยวิธี
ทางคณิ ตศาสตร์ที่เรี ยกวา่การดําเนินการตามแถวขั้ นมูลฐาน (elementary row operation) ตัวอยางเชน่ ่
(ดูรายละเอียดเพิ่มเติมในหัวข้อที่ 2.3)

-->A = ['a11', 'a12'; 'a21', 'a22']


A =
!a11 a12 !
! !
!a21 a22 !

-->B = trianfml(A)
B =
!a21 a22 !
! !
!0 a21*a12-a11*a22 !

-->a11 = 1; a12 = 2; a21 = 3; a22 = 4;

-->evstr(A)
ans =
1. 2.
3. 4.

-->evstr(B)
ans =
3. 4.
0. 2.

9.2.5 ฟังก์ชัน solve

เป็ นฟังกชั์ นที่ทาํ หน้าที่ในการหาผลเฉลยเชิงสัญลักษณ์ (หาคาของตั


่ วแปร x) ของสมการที่อยูใ่ นรู ป
ของเมทริ กซ์ Ax = b โดยที่ b เป็ นเวกเตอร์เชิงสัญลักษณ์ และ A เป็ นเมทริ กซ์สามเหลี่ยมด้านบน
เชิงสัญลักษณ์ ตัวอยางเชน่ ่
260
-->A = ['a11', 'a12'; '0', 'a22']
A =
!a11 a12 !
! !
!0 a22 !

-->b = ['b1'; 'b2']


b =
!b1 !
! !
!b2 !

-->x = solve(A, b)
x =
!a11\(b1-a12*(a22\b2)) !
! !
!a22\b2 !

-->a11 = 1; a12 = 1; a22 = 2; b1 = 2; b2 = 5;

-->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 คือเวกเตอร์ของเลขจํานวนเต็มบวก (positive integer) หรื อเวกเตอร์ของพหุนาม (polynomial)


่ อยของสมาชิกทั้ งหมดที่อยูใ่ นเวกเตอร์ p
และ pp คือตัวคูณรวมน้

่ อยของ 12, 15, และ 30


ตัวอย่ างที่ 1 จงหาตัวคูณรวมน้
่ อยของ 12,
วิธีทาํ เนื่องจาก 12 = 2 × 2 × 3 , 15 = 3 × 5 , และ 30 = 2 × 3 × 5 ดังนั้ นตัวคูณรวมน้
15, และ 30 คือ 2 × 2 × 3 × 5 = 60 ผูใ้ ช้สามารถตรวจคําตอบได้จากการใช้ชุดคําสัง่ตอไป่ นี้

-->p = int16([12 15 30]) //ทําให้เป็ นเลขจํานวนเต็มขนาด 16 บิต

p =
12 15 30

-->pp = lcm(p)
pp =

60 ่ จุดทศนิยมตามหลังตัวเลขแสดงวาเป็
//ไมมี ่ นเลขจํานวนเต็ม

ซึ่ งให้ผลลัพธ์ตรงตามที่ตอ้ งการ

หมายเหตุ ถ้าสมาชิกในเวกเตอร์ p ที่ใช้ในคําสัง่ lcm(p) เป็ นเลขจํานวนจริ ง ก็จะทําให้ได้ผลลัพธ์


ที่ผดิ ไปจากที่คาดหวังไว้ เชน่

-->p = [12 15 30]


p =

12. 15 . 30. ่ นเลขจํานวนจริ ง


//มีจุดทศนิ ยมตามหลังตัวเลขแสดงวาเป็
262
-->pp = lcm(p)
pp =

5400. //ผลลัพธ์ที่ได้คือ 5400 = 12 × 15 × 30

่ อยของพหุนามได้ ดังแสดงในตัวอยาง
นอกจากนี้ คาํ สั่ง 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 เป็ นตัวแปรพหุ นาม

-->p = [x, x^2+x, x^2-x]


p =
2 2
x x + x - x + x

-->pp = lcm(p)
pp =
3
- x + x

่ ั
ซึ่ งให้ผลลัพธ์เทากน

9.3.2 ตัวหารร่ วมมาก


ตัวหารรวม ่ มาก (ห.ร.ม.) คือเลขจํานวนเต็มบวกที่มีคา่มากที่สุด ซึ่ งเมื่อนํามาหารเลขจํานวนเต็มบวก

อื่นๆ ที่กาหนดให้ทุกจํานวนแล้วปรากฎวา่หารลงตัวได้ทุกจํานวน การหาตัวหารรวม ่ มากในโปรแกรม
SCILAB สามารถทําได้โดยใช้คาํ สัง่ gcd ซึ่ งมีรูปแบบการใช้งานคือ
263
qq = gcd(q)

่ มากของ
เมื่อ q คือเวกเตอร์ของเลขจํานวนเต็มบวกหรื อเวกเตอร์ของพหุ นาม และ qq คือตัวหารรวม
สมาชิกทั้ งหมดที่อยูใ่ นเวกเตอร์ q

่ มากของ 18 และ 84
ตัวอย่ างที่ 3 จงหาตัวหารรวม
่ มากของ 18 และ 84
วิธีทาํ เนื่องจาก 18 = 2 × 3 × 3 และ 84 = 2 × 2 × 3 × 7 ดังนั้ นตัวหารรวม

คือ 2 × 3 = 6 ผูใ้ ช้สามารถตรวจคําตอบได้จากการใช้ชุดคําสั่งตอไปนี ้

-->q = int32([18, 84]) //ทําให้เป็ นเลขจํานวนเต็มขนาด 32 บิต

q =
18 84

-->qq = gcd(q)
qq =

6 ่ จุดทศนิยมตามหลังตัวเลขแสดงวาเป็
//ไมมี ่ นเลขจํานวนเต็ม

ซึ่ งให้ผลลัพธ์ตรงตามที่ตอ้ งการ

หมายเหตุ ในทํานองเดียวกนัถ้าสมาชิกในเวกเตอร์ q ที่ใช้ในคําสั่ง gcd(q) เป็ นเลขจํานวนจริ ง


ก็จะทําให้ได้ผลลัพธ์ที่ผดิ ไปจากที่คาดหวังไว้ เชน่

-->q = [18, 84]


q =

18. 84. ่ นเลขจํานวนจริ ง


//มีจุดทศนิ ยมตามหลังตัวเลขแสดงวาเป็

-->qq = gcd(q)
qq =

1 //เลขจํานวนเต็มคา่ 1 เป็ นตัวหารรวมมาก


่ ของเลขทุกจํานวน

นอกจากนี้ คาํ สั่ง gcd ่ มากของพหุ นามได้เชนกน


ยังสามารถใช้หาตัวหารรวม ่ ั ดังแสดง
่ ตอไปนี
ในตัวอยาง ่ ้
264

่ อยและตัวหารรวม
ตัวอย่ างที่ 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 ) ซึ่ งผูใ้ ช้สามารถตรวจคําตอบได้จากการใช้ชุดคําสั่งตอไปนี
มีคาเทากบ ่ ้

-->x = poly(0, 'x'); ํ


//กาหนดให้ x เป็ นตัวแปรพหุ นาม

-->p = [x^2 – 5 * x - 14, x^2 – 12 * x + 35]


p =
2 2
- 14 - 5x + x 35 - 12x + x

-->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 คือเลขจํานวนจริ ง, และ F


่ ้ น) ถ้ากาหนดให้
คือเวกเตอร์พหุ นาม (ที่มีดีกรี หนึ่งหรื อสองเทานั ํ F = [f1 f2 f3 … fN] เมื่อ fi คือ
พหุนาม ดังนั้ นผลลัพธ์ที่ได้จากการใช้คาํ สั่ง factors คือ

y = g × f1 × f2 × f3 × … × fN

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

-->x = poly(0, 'x');

-->y = x^2 - 3*x + 2


y =
2
2 - 3x + x

//ผลลัพธ์ที่ได้คือ 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

่ าสัง่ polfact สามารถทําหน้าที่ในการแยกตัวประกอบของพหุ นามได้เชนเดี


จะเห็นได้วาคํ ่ ยวกบั
คําสัง่ factors แตมี่ รูปแบบการเรี ยกใช้งานตางกนเล็
่ ั กน้อย นัน่ คือ

P = polfact(y)

่ ้ น) และ p0 เป็ นคาคงตั


เมื่อ P = [p0 p1 p2 … pN] คือเวกเตอร์ พหุนาม (ที่มีดีกรี หนึ่ งหรื อสองเทานั ่ ว
(constant) โดยผลลัพธ์ที่ได้จากการใช้คาํ สัง่ polfact คือ

y = p0 × p1 × p2 × … × pN

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

-->x = poly(0, 'x');

-->y = 3*x^2 - 9*x + 6;

-->[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

ในกรณี ที่ตอ้ งการแยกตัวประกอบของพหุนามที่อยูใ่ นรู ปของเศษสวน


่ (rational polynomial)

กสามารถทํ
าได้โดยใช้รู ปแบบการเรี ยกใช้งานคําสั่ง factors ดังนี้
[N, D, g] = factors(Q)
267

เมื่อ Q คือสมการพหุนามที่อยูใ่ นรู ปของเศษสวน ่ , g คือเลขจํานวนจริ ง, และ N คือเวกเตอร์พหุ นาม


ของตัวเศษ (numerator), และ D คือเวกเตอร์พหุนามของตัวสวน ่ (denominator) ในทํานองเดียวกนั
ถ้าให้ N = [n1 n2 n3 … nk] และ D = [d1 d2 d3 … dm] เมื่อ ni และ dj คือพหุนาม (ที่มีดีกรี หนึ่ง
่ ้ น) ดังนั้ นผลลัพธ์ที่ได้จากการใช้คาํ สั่ง factors ในกรณี น้ ีคือ
หรื อสองเทานั

⎛ n1 ×n2 ×…×nk ⎞
Q = g×⎜ ⎟
⎝ d1 ×d2 ×…×d m ⎠
่ ่
ตัวอยางเชน
-->x = poly(0, 'x');

-->Q = (3 *x^2 - 9*x + 6)/(x^2 + 3*x + 2)


Q =
2
6 - 9x + 3x
-----------
2
2 + 3x + 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 ซึ่ งมีรูปแบบการใช้งานคือ

[n, d] = simp(Num, Den)


เมื่อ Num และ Den คือตัวเศษและตัวสวนของพหุ นามที่ตอ้ งการจะลดรู ป ในขณะที่ n และ d คือ
่ เชน่
ตัวเศษและตัวส่ วนของพหุ นามที่ลดรู ปเสร็ จแล้ว ตัวอยาง

-->x = poly(0, 'x');

-->[n, d] = simp((9*x^3 - 21*x^2 + 16*x - 4), (x - 1))


d =
1

( ) ( )
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] = simp((9*x^2 - 12*x + 4), (3*x - 2)*(x + 1))


d =
1 + x
n =
- 2 + 3x

9.4.3 คําสั่ งทีน่ ่ าสนใจ


่ ที่น่าสนใจในการทํางานกบัพหุ นาม เชน่ cmndred,
โปรแกรม SCILAB ยังได้เตรี ยมคําสัง่ ตางๆ

pdiv, coffg, และ coeff เป็ นต้น ซึ่ งมีรายละเอียดดังตอไปนี

9.4.3.1 คําสั่ ง cmndred

เป็ นคําสั่งที่ใช้ในการจัดรู ปผลบวกของพหุนามที่อยูใ่ นรู ปของเศษสว่ น ให้เป็ นผลบวกของพหุ นาม


่ ่ เหมือนกนทุ
ที่มีตวั สวนรวม ั กพจน์ โดยมีรูปแบบการเรี ยกใช้งานดังนี้
269
[n, d] = cmndred(N, D)

่ ่ตอ้ งการจะหาตัวสวนรวม
เมื่อ N และ D คือเวกเตอร์พหุ นามของตัวเศษและตัวสวนที ่ ่ ในขณะที่ n
่ ที่มีตวั สวนรวมเหมื
และ d คือเวกเตอร์ พหุ นามของตัวเศษและตัวสวน ่ ่ ั กพจน์ ตัวอยางเชน
อนกนทุ ่ ่
พิจารณาผลบวกของพหุนาม

( x -1) + ( x +2)
( x -3) ( x +3)

ซึ่ งสามารถที่จะจัดให้อยูใ่ นรู ปผลบวกของพหุนามที่มีตวั สวนรวมเหมื


่ ่ ั กพจน์ได้ดงั นี้
อนกนทุ

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


(x -3) (x +3) (x -3)(x +3) (x +3)(x -3)
2 2
x +2x -3 x - x -6
= +
2 2
x -9 x -9


ในโปรแกรม SCILAB สามารถหาผลเฉลยนี้ ได้โดยใช้ชุดคําสัง่ ตอไปนี

-->x = poly(0, 'x');

-->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, d] = cmndred([x - 1 x + 2 x - 3], [x - 3 x + 2 x - 3])


d =
2
- 6 - x + x

n =
2 2 2
- 2 + x + x - 6 - x + x - 6 - x + x

9.4.3.2 คําสั่ ง pdiv

เป็ นคําสัง่ ที่ใช้ในการคํานวณหาผลลัพธ์ที่ได้จากการหารพหุ นาม p1 ด้วยพหุนาม p2 ซึ่ งมีรูปแบบ


การเรี ยกใช้งานดังนี้

[r, q] = pdiv(p1, p2)

่ ่
เมื่อ r คือผลลัพธ์ที่ได้จากการหาร และ q คือเศษที่ได้จากการหาร ตัวอยางเชน

-->x = poly(0, 'x');

-->p1 = (x^2 + 1)*(x - 1)


p1 =
2 3
- 1 + x - x + x

-->p2 = x - 1
p2 =
- 1 + x

-->[r, q] = pdiv(p1, p2)


q =
2
1 + x
271
r =
0.

-->[r, q] = pdiv((x^3 + 3*x^2 - 3*x + 5), (x + 2))


q =
2
- 5 + x + x
r =
15.

9.4.3.3 คําสั่ ง coffg


่ นเวอร์สการคูณของเมทริ กซ์พหุนาม ซึ่ งมีรูปแบบการเรี ยกใช้งานดังนี้
เป็ นคําสั่งที่ใช้ในการหาคาอิ
[MI, d] = coffg(M)

่ นเวอร์สการคูณ (ต้องเป็ นเมทริ กซ์จตั ุรัสเทานั


เมื่อ M คือเมทริ กซ์พหุ นามที่ตอ้ งการหาคาอิ ่ ้ น), MI คือ

อินเวอร์ สการคูณของเมทริ กซ์ M, และ d คือตัวหารรวมของเมทริ กซ์ MI เพื่อที่วา่
MI
M=
d

่ ่
ตัวอยางเชน
-->x = poly(0, 'x');

-->M = [x, x^2 + 1; x, x^2 - 1]


M =
2
x 1 + x

2
x - 1 + x

-->[MI, d] = coffg(M)
d =
- 2x
MI =
2 2
- 1 + x - 1 - x

- x x
272

-->I = M*MI/d //ตรวจคําตอบ M = MI/d


I = //ผลลัพธ์ที่ได้คือ เมทริ กซ์เอกลักษณ์ (identity matrix)
- 2 0
- -
- 2 1

0 - 2
- -
1 - 2

9.4.3.4 คําสั่ ง coeff

่ มประสิ ทธิ์ (coefficient) ของพหุนาม ซึ่ งมีรูปแบบการใช้งานคือ


เป็ นคําสั่งที่ใช้ในการเรี ยกดูคาสั

C = coeff(M, [deg])

่ มประสิ ทธิ์ ของพหุ นาม (เรี ยงจากดีกรี นอ้ ยไปมาก), M คือ


เมื่อ C คือเมทริ กซ์ที่มีสมาชิกเป็ นคาสั
่ มประสิ ทธิ์ และ deg เป็ นตัวเลือกที่ใช้ในการระบุดีกรี ของพหุ นาม
เมทริ กซ์พหุ นามที่ตอ้ งการหาคาสั
่ มประสิ ทธิ์ ถ้าไมได้
ที่ตอ้ งการจะหาคาสั ่ กาหนดคา
ํ ่ มประสิ ทธิ์
่ พารามิเตอร์ deg คําสั่งนี้ จะแสดงคาสั
ทั้ งหมดของพารามิเตอร์ M ตัวอยางเชน่ ่

-->x = poly(0, 'x');

-->p = 8*x^4 - 6*x^3 + 4*x^2 - 2*x + 9


p =

2 3 4
9 - 2x + 4x - 6x + 8x

-->c = coeff(p) ่ มประสิ ทธิ์ ของพุนามจะเรี ยงจากดีกรี นอ้ ยไปหาดีกรี มาก


//คาสั
c =
9. - 2. 4. - 6. 8.

-->c = coeff(p, [4 2 0]) ่ มประสิ ทธิ์ ของพุนามเฉพาะดีกรี 4, 2, และ 0


//แสดงคาสั
c =
8. 4. 9.
273
-->M = [6*x^3 + 4*x^2 + 2*x + 1, 3*x^2 - 5; -x^2 + 3, 3*x^3 + 2*x^2 + x]
M =
2 3 2
1 + 2x + 4x + 6x - 5 + 3x

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
ซึ่ งผูส้ นใจสามารถศึกษารายละเอียดเพิ่มเติมของคําสั่งตางๆ

9.5 การหาปริพนั ธ์ จาํ กัดเขต


ปริ พนั ธ์ (integral) คือ ฟังกชั์ นที่ใช้หาพื้นที่, มวล, ปริ มาตร, หรื อผลรวมตางๆ
่ โปรแกรม SCILAB
ี่ องกบการหา
มีคาํ สัง่ ที่เกยงข้ ั ่ ่น้ ีจะอธิบายเฉพาะการหาปริ พนั ธ์จาํ กดเขต
ปริ พนั ธ์หลายคําสั่ง แตในที ั 30
(definite integral) ซึ่ งมีรูปแบบการใช้งานดังนี้

y = integrate('fx', 'x', x0, x1)

เมื่อ y คือผลลัพธ์ที่ได้จากการหาปริ พนั ธ์, fx คือฟังกชั์ นที่ตอ้ งการหาปริ พนั ธ์, x คือตัวแปรของ
่ ่ มต้นและคาสุ
การหาปริ พนั ธ์, x0 และ x1 คือคาเริ ่ ดท้ายของตัวแปร x ที่ใช้หาปริ พนั ธ์

30
ั จะมีช่วงของการหาปริ พนั ธ์กาหนด
ปริ พนั ธ์จาํ กดเขต ํ มาไว้ให้
274

ั ของฟังกชั์ นที่สร้างขึ้ นมา กสามารถทํ


นอกจากนี้ ในกรณี ที่ตอ้ งการหาปริ พนั ธ์จาํ กดเขต ็ าได้
โดยใช้คาํ สัง่ intg ซึ่ งมีรูปแบบการใช้งานคือ

I = intg(a, b, f)

่ ่ มต้นและคาสุ
เมื่อ I คือผลลัพธ์ที่ได้จากการหาปริ พนั ธ์, a และ b คือคาเริ ่ ดท้ายของการหาปริ พนั ธ์,
และ f คือฟังกชั์ นแบบตัวแปรเดียวที่ตอ้ งการหาปริ พนั ธ์ พิจารณาตัวอยางตอไปนี
่ ่ ้ จะได้เข้าใจลักษณะ
การใช้งานของคําสัง่ integrate และ intg มากขึ้ น

ตัวอย่ างที่ 5 จงหาคา่ปริ พนั ธ์ของฟังกชั์ น f ( x ) = 2 x + 1 สําหรับ x = 0 ถึง 3

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

ผูใ้ ช้สามารถตรวจคําตอบนี้ ได้จากการใช้คาํ สัง่ ดังนี้

-->y = integrate('2*x + 1', 'x', 0, 3)


y =
12.

หรื อใช้คาํ สัง่


275
-->function z = f(x), z = 2*x + 1, endfunction

-->I = intg(0, 3, f)
I =
12. ่ ั
//ให้ผลลัพธ์เทากบการใช้
คาํ สัง่ integrate

่ ั
ซึ่ งให้ผลลัพธ์เทากน

ตัวอย่ างที่ 6 จงหาคา่ของฟังกชั์ น ∫ ( 4 − x ) dx


2

วิธีทาํ จากโจทย์จะได้วา่
3
3
⎛ x3 ⎞ ⎛ ( 3) ⎞⎟ − 0 − 0 = 12 − 9 = 3
3

∫0 ( 4 −2
x )dx = ⎜ 4 x − ⎟ = ⎜
3 ⎠ 0 ⎜⎝
4 ( 3 ) −
3 ⎟⎠
( )

ผูใ้ ช้สามารถตรวจคําตอบนี้ ได้จากการใช้คาํ สั่ง

-->y = integrate('4 - x^2', 'x', 0, 3)


y =
3.

หรื อใช้คาํ สัง่

-->function z = f(x), z = 4 - x^2, endfunction

-->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

และลิมิตบน x=9 เปลี่ยนเป็ นลิมิตบน u = 1 (9) − 1 = 5


4 4
ดังนั้ น
9 5/ 4
⎛1 ⎞ 5/4
∫ cosh ( u ) du = 4sinh ( u ) 1/4
∫x=5 cosh ⎜⎝ 4 x − 1⎟⎠ dx = 4u =1/4
= 4 ⎡⎣sinh ( 5 / 4 ) − sinh (1/ 4 ) ⎤⎦ ≈ 5.4

ผูใ้ ช้สามารถตรวจคําตอบนี้ ได้จากการใช้คาํ สั่ง

-->y = integrate('cosh(x/4 - 1)', 'x', 5, 9)


y =
5.3972271

หรื อใช้คาํ สัง่

-->function z = f(x), z = cosh(x/4 - 1), endfunction

-->I = intg(5, 9, f)
I =

5.3972271 ่ ั
//ให้ผลลัพธ์เทากบการใช้
คาํ สัง่ integrate

่ ั
ซึ่ งให้ผลลัพธ์เทากน
277

9.6 การแก้ สมการอนพั


ุ นธ์ อนั ดับหนึ่ง
่ ้ จะแสดงการใช้โปรแกรม SCILAB ในการแกสมการอนุ
ในสวนนี ้ พนั ธ์อนั ดับหนึ่ งโดยใช้คาํ สัง่ ode
ซึ่ งมีรูปแบบการเรี ยกใช้งานดังนี้

y = ode(y0, x0, x, f)

เมื่อ y0 คือเวกเตอร์เลขจํานวนจริ งของเงื่อนไขเริ่ มต้น (initial conditions) ของฟังกชั์ น y(x) เมื่อ


่ ่ มต้นของตัวแปร x, x = [x(1), x(2), x(3), ...] คือเวกเตอร์เลขจํานวนจริ ง
x = 0, x0 คือคาเริ
ที่ใช้คาํ นวณหาคา่ของฟังกชั์ น y(x), f คืออนุพนั ธ์อนั ดับหนึ่ งของฟังกชั์ น y(x), และ y คือผล

เฉลยที่ได้จากการแกสมการอนุ พนั ธ์อนั ดับหนึ่งซึ่ งจะอยูใ่ นรู ปของเวกเตอร์ y = [y(x(1)),
y(x(2)), y(x(3)), ...] ตัวอยางการ ่ ใช้งานเชน่
พิจารณาฟังกชั์ นตอไปนี
่ ้

y ( x ) = x -3x +1 (1)
2

่ ่อ x = 0 จะได้วา่ y(x) = 1 โดยที่อนุพนั ธ์ของสมการ (1) คือ


สังเกตวาเมื

ydot =
dy
dx
= 2x -3 (2)


ถ้าต้องการแกสมการอนุ ็
พนั ธ์อนั ดับหนึ่งของสมการ (2) เพื่อให้ได้ผลลัพธ์เป็ นสมการ (1) กสามารถ
ทําได้โดยใช้ชุดคําสัง่ ดังนี้

-->function ydot = f(x, y), ydot = 2*x - 3, endfunction

-->y0 = 1; x0 = 0; x = 0:0.1:4;

-->y = ode(y0, x0, x, f);

-->plot(x, y); //วาดรู ปกราฟของฟั งกชั์ นที่ได้จากการแกสมการอนุ


้ พนั ธ์
-->yx = x^2 - 3*x + 1;

-->plot(yx, z, 'r+'); //วาดรู ปกราฟของสมการ (1) เป็ นเครื่ องหมาย '+' สี แดง
-->xtitle('y(x) = x^2 - 3*x + 1', 'x', 'y');
278

ู ่ 9.8 รู ปกราฟของฟั งกชั์ น y(x) (เส้นทึบ) และรู ปกราฟที่ได้จากการแกสมการอนุ


รปที ้ พนั ธ์ (เครื่ องหมาย '+')

ผลลัพธ์ที่ได้แสดงในรู ปที่ 9.8 ซึ่ งแสดงให้เห็นวา่ ผลลัพธ์ที่ได้จากการแกสมการอนุ


้ พนั ธ์ (รู ปกราฟ
่ ่ ั ปกราฟของฟังกชั์ น y(x) ในสมการ (1) ซึ่ ง
ที่แสดงเฉพาะเครื่ องหมาย '+' สี แดง) มีคาเทากบรู
เป็ นกราฟเส้นทึบ

หมายเหตุ การแกสมการอนุ ่
พนั ธ์ dy/dx ด้วยคําสัง่ ode จะให้ผลลัพธ์เป็ นคาของฟั งกชั์ น y(x)
ํ ่ วแปร x มาให้ ไม่ ได้ ให้ผลลัพธ์เป็ นสมการของฟังกชั์ น y(x)
เมื่อกาหนดคาตั

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 ได้ดงั นี้

-->function ydot = f(x, y), ydot = x - y, endfunction

-->y0 = 1; x0 = 0; x = [0.2 0.4 0.6 0.8 1];

-->y = ode(y0, x0, x, f) ้


//ผลลัพธ์จากการแกสมการอนุ พนั ธ์ดว้ ยคําสัง่ ode
y =
0.8374616 0.7406399 0.6976234 0.6986580 0.7357590

-->z = x + 2*exp(- x) – 1 //ผลลัพธ์จากการสมการผลเฉลย


z =
0.8374615 0.7406401 0.6976233 0.6986579 0.7357589

่ พธ์ที่ได้จากการแกสมการอนุ
จะเห็นได้วาผลลั ้ พนั ธ์ดว้ ยคําสั่ง 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 วินาที สามารถหาได้จากการใช้ชุดคําสัง่ ดังนี้

-->L = 10; R = 20; E = 12;

-->I0 = 0; t0 = 0; t = [0.5 1 2 4];

-->function Idot = f(t, I), Idot = (E - R*I)/L, endfunction

-->I = ode(I0, t0, t, f) ้


//ผลลัพธ์จากการแกสมการอนุ พนั ธ์ดว้ ยคําสัง่ ode
I =
0.3792723 0.5187989 0.5890106 0.5997987

-->z = E/R*(1 - exp(-R*t/L)) //ผลลัพธ์จากการสมการผลเฉลย


z =
0.3792723 0.5187988 0.5890106 0.5997987

จะเห็นได้วา่ ผลลัพธ์ที่ได้จากการแกสมการอนุ
้ พนั ธ์ดว้ ยคําสั่ง 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.7 แบบฝึ กหัดท้ ายบท



9.1 จงอธิบายประโยชน์ของเวกเตอร์ และเมทริ กซ์ตรรกะ พร้อมแสดงตัวอยางการใช้
งาน
9.2 จงเขียนโปรแกรมเพื่อทํา symbolic triangularization ของเมทริ กซ์ขนาด 2×2
่ อยและตัวหารรวมมากของ
9.3 จงหาตัวคูณรวมน้ ่
9.3.1) เลขจํานวนเต็ม 12 และ 42
9.3.2) เลขจํานวนเต็ม 16, 39, และ 81
9.3.3) พหุนาม x2 – 2x – 3 และ x2 – x - 2
9.3.4) พหุนาม 3x2 – 9x + 6 และ 3x3 – 7x2 + 4
9.3.5) พหุนาม x2 – 2x + 1, x3 – 3x + 2, และ x3 – 3x2 + 3x -1
9.3.6) พหุนาม x2 + 3x + 2, x3 + 6x2 + 11x + 6, และ x4 + 10x3 + 35x2 + 50x + 24

9.4 จงหาแยกตัวประกอบของพหุ นามตอไปนี

9.4.1) 2x2 – 4x + 2

9.4.2) 4x2 – 4x + 1

9.4.3) 3x3 – 4.5x2 – 4.5x + 3

9.4.4) 6x3 – 15x2 + 3x + 6

9.4.5) 2x4 – 7x3 + x2 + 16x – 12

9.4.6) x4 – 6x3 + 3x2 + 26x – 24


282

่ ่
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 จงหาพื้นที่ใต้กราฟของฟังกชั์ นตอไปนี


่ ้
9.6.1) y = 3 x − 1 สําหรับ 1 ≤ x ≤ 5

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 สมการ คือ

cZ1 + dZ2 = 0 (ก3)


aZ1 + bZ2 = 0 (ก4)
284


โดยที่ตวั แปร Z1 และ Z2 เป็ นตัวแปรชัว่ คราวที่ถูกกาหนดขึ
้ นเพื่อใช้ในการสร้างสมการสองตัวแปร
จากคุณสมบัติการดําเนินการตามแถวขั้ นมูลฐาน สมการ (ก4) สามารถที่จะแทนได้ดว้ ยสมการที่เป็ น
่ ่ c คูณกบัสมการ (ก4) แล้วลบด้วยผลลัพธ์ที่ได้จากการนําตัวแปร
ผลลัพธ์จากการนําตัวแปรคาคงที
่ ่ a คูณกบัสมการ (ก3) นัน่ คือ
คาคงที

c (ก4) – a (ก3) = 0

c ( aZ1 + bZ 2 ) − a ( cZ1 + dZ 2 ) = 0

0(Z1) + (cb − ad)Z2 = 0 (ก5)

่ มประสิ ทธิ์ ของสมการ (ก3) และ (ก5) มาจัดรู ปให้อยูใ่ นรู ปของเมทริ กซ์
เพราะฉะนั้ นเมื่อนําคาสั
็ ดงั นี้
กจะได้

⎡c d ⎤ ⎡ Z1 ⎤ ⎡0 ⎤
⎢⎣0 cb − ad ⎥⎦ ⎢⎣ Z 2 ⎥⎦ = ⎢⎣0⎥⎦
Y


ซึ่ งกคื็ อเมทริ กซ์ Y ที่สอดคล้องกบสมการ (ก2) ตามที่ตอ้ งการ
ภาคผนวก ข
รหัสข้อผิดพลาด

่ ้ จะขอแสดงรายการของรหัสข้อผิดพลาด (error list) ของโปรแกรม SCILAB เพื่อใช้เป็ น


ในสวนนี
่ สข้อผิดพลาดมีอะไรบ้าง และเลขรหัสแต่ละ
ข้อมูลอ้างอิงให้นกั พัฒนาโปรแกรมสามารถเข้าใจวารหั

หมายเลขหมายถึงอะไร ดังแสดงในตารางตอไปนี ้

เลขรหัส คําอธิบาย
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

[10] ลัญจกร วุฒิสิทธิกลุ กจิ, MATLAB การประยุกตใช้ งานทางวิศวกรรมไฟฟ้ า, สํานักพิมพ์แหง่


จุฬาลงกรณ์มหาวิทยาลัย, พ.ศ. 2547.
[11] สุ ธรรม ศรี เกษม, เมธินทร์ ทรงชัยกุล, และ สงา่ ศรี ศุภปรี ดา, MATLAB เพื่อการแก้ ปัญหาทาง
วิศวกรรม, สํานักพิมพ์มหาวิทยาลัยรังสิ ต, พ.ศ. 2521.
292
ประวัตผิ ู้เขียน
ผศ.ดร.ปิ ยะ โควินท์ทวีวฒั น์
URL: http://home.npru.ac.th/~t3058

การศึกษา
ƒ ี ตินิยม) Thammasat University, Bangkok, Thailand
พ.ศ. 2537 ปริ ญญาตรี (เกยร
ƒ พ.ศ. 2541 ปริ ญญาโท Chalmers University of Technology, Göteborg, Sweden
ƒ พ.ศ. 2547 ปริ ญญาเอก Georgia Institute of Technology, Atlanta, GA, USA

ประสบการณ์ ทาํ งาน


ƒ อาจารย์และนักวิจยั มหาวิทยาลัยราชภัฏนครปฐม (พ.ศ. 2548 – ปั จจุบนั )
ƒ Technical Intern, Channels Department, Seagate Research Center, Pittsburgh, USA (รวม 1 ปี )
ƒ ผูช้ ่วยนักวิจยั ห้องปฏิบตั ิการเทคโนโลยีเครื อขาย
่ ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และ
คอมพิวเตอร์แหงชาติ่ (เนคเทค) ประเทศไทย (1 ปี )
ƒ วิศวกร บริ ษทั TT&T (มหาชน) จํากดั ประเทศไทย (3.5 ปี )

ผลงานทางวิชาการ
ƒ วารสารตีพิมพ์นานาชาติ 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)

You might also like