312

E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

  • Upload
    vuthien

  • View
    259

  • Download
    5

Embed Size (px)

Citation preview

Page 1: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม
Page 2: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

สาหรบผเรมตน (ฉบบปรบปรงใหม)

ผศ.ดร.ปยะ โควนททววฒน

โปรแกรมวศวกรรมโทรคมนาคม มหาวทยาลยราชภฏนครปฐม

Page 3: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

คมอโปรแกรมภาษา SCILAB สาหรบผเรมตน (ฉบบปรบปรงใหม)

สงวนลขสทธตามพระราชบญญตลขสทธ หามลอกเรยนแบบไมวาสวนใด สวนหนงในหนงสอเลมน ไมวาในรปแบบใดๆ นอกจากจะไดรบอนญาตเปนลายลกษณอกษรจากผเขยนเทานน ขอมลทางบรรณานกรมของหอสมดแหงชาต ปยะ โควนททววฒน คมอโปรแกรมภาษา SCILAB สาหรบผเรมตน ./ ปยะ โควนททววฒน. --นครปฐม: โปรแกรมวศวกรรมโทรคมนาคม คณะวทยาศาสตรและเทคโนโลย มหาวทยาลยราชภฏนครปฐม, 2551 310 หนา 1. ภาษาคอมพวเตอร 2. เอสซไอแอลเอบ (ภาษาคอมพวเตอร). 3. ชอเรอง GA 76.73.S3ป621 ISBN 974-620-609-5 หมายเหต หนงสออเลกทรอนกสฉบบนไดถกจดทาขนเพอใชในการศกษาและ การทาวจย ผอานสามารถ

ดาวนโหลดไปใชงานไดโดยไมตองเสยคาใชจายใดๆ ขอขอบคณสานกงานคณะกรรมการวจยแหงชาต (วช.) ทใหทนสนบสนน

Page 4: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

สาหรบครอบครว โควนททววฒน

Page 5: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม
Page 6: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

คานา ในปจจบนนความเจรญกาวหนาทางดานเทคโนโลยเปนไปอยางรวดเรว หลายๆ หนวยงานในภาค การศกษาไดมการนาอปกรณคอมพวเตอรและซอฟตแวรตางๆ มาใชชวยในการเรยนการสอนและ ทางานวจยในหลายสาขาวชาเชน วศวกรรมศาสตร และวทยาศาสตร เปนตน โปรแกรม 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 ในรปแบบทงายตอก ารเขาใจและเรยนรไดดวยตนเอง ทาใหสามารถนาโปรแกรมนไปประยกตใชในการเรยนการสอนของวชาตางๆ ทางดานวศวกรรมและ

Page 7: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

วทยาศาสตรไดอยางรวดเรว ซงจะชวยทาใหนกศกษาสามารถเขาใจถงทฤษฏในบทเรยนมากยงขน ฉะนนหนงสอเลมนจงสามารถนามาใชประกอบการเรยน การสอนในระดบมธยมศกษาตอนปลายและระดบอดมศกษาไดเปนอยางด เชน วชาคณตศาสตร, วชาฟสกส, วชาการสอสารดจทล (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

หนงสอเลมนจะไ มสามารถทาใหสาเรจขนมาได ถาหากขาดบคคลตางๆ ทคอยใหความชวยเหลอและเปนกาลงใจใหขาพเจาตลอดมา ดงนน ขาพเจาขอกราบขอบพระคณอาจารยทกทานทใหความรและคาปรกษาตลอดระยะเวลาการศกษา รวมทง ทกๆ คนในครอบครวของขาพเจา ไดแก

Page 8: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

คณเกยรต โควนททววฒน , คณพรรณ โควนททววฒน, คณรชนศ โรจนกจ , คณอนทศน โรจนกจ, คณฉตรชย โควนททววฒน, คณกตตศกด โควนททววฒน , และคณศรสดา โสมนส นอกจากนขาพเจาขอขอบคณมหาวทยาลยราชภฏนครปฐมทใหการสนบสนนและใหความสะดวกแกขาพเจาตลอดระยะเวลาในการเขยนหนงสอเลมน

ทายสดนขาพเจาพยายามอยางยงในการทจะทาใหหนงสอเลมนงายตอการเรยนร เพอให ผอานสามารถทาความเขาใจไดดวยตนเองอยางรวดเรวและมประสทธผล ดงนนหากมขอบกพรอง ประการใด ขาพเจามความยนดและจกขอบพระคณยง ถาทานผใชหนงสอเลมนจะสงขอคดเหนและ คาแนะนาทเปนประโยชนสาหรบการปรบปรงหนงสอเลมนมาทอเมล [email protected] เพอทขาพเจาจะไดดาเนนการปรบปรงและแกไขในการพมพครงตอไป

ผศ.ดร.ปยะ โควนททววฒน โปรแกรมวศวกรรมโทรคมนาคม

มหาวทยาลยราชภฏนครปฐม กรกฎาคม พ.ศ. 2551

Page 9: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม
Page 10: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

สารบญ

บทท 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 2.1 คาคงทพเศษ ........................................................................................................................... 19

2.1.1 คาคงทพเศษ %i............................................................................................................. 19 2.1.2 คาคงทพเศษ %pi .......................................................................................................... 20 2.1.3 คาคงทพเศษ %e............................................................................................................. 21 2.1.4 คาคงทพเศษ %inf ....................................................................................................... 21 2.1.5 คาคงทพเศษ %nan ....................................................................................................... 21 2.1.6 คาคงทพเศษ %eps ....................................................................................................... 21 2.1.7 คาคงทพเศษ ans .......................................................................................................... 23 2.1.8 คาคงทพเศษ %t, %T, %f, และ %F ............................................................................... 23 2.1.9 คาคงทพเศษ %s และ %z .............................................................................................. 24 2.1.10 คาคงทพเศษ %io ........................................................................................................ 24

2.2 เมทรกซคาคงท ...................................................................................................................... 25

Page 11: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 12: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 13: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 14: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 15: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 16: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 17: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 18: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 19: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 สามารถทางานไดอยางรวดเรวและมประสทธภาพมากทสด

Page 20: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ผใชสามารถดาวนโหลดตวโปรแกรม SCILAB สาหรบระบบปฏบตการตางๆ ไดจาก http://www.scilab.org

Page 21: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

4

รปท 1.1 หนาตางคา สงของโปรแกรม SCILAB

รปท 1.2 หนาตาง เอดเตอรทชอ “SciPad” ของโปรแกรม SCILAB

(Open file) เรยกไฟลทมอยในสารบบขนมาใชงาน

(Copy) สาเนาขอมลในสวนทผใชเลอกในหนาตางคาสง

(Paste) นาขอมลทสาเนาไวมาวางในหนาตาง คาสง

Page 22: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จะทาการคนหาไฟลตางๆ หรอบนทกไฟลลงไป เกบไว

Page 23: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) เพอใชในการเขยนหรอแกไขโปรแกรม

Page 24: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 25: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

8

ในสวนนจะ อธบายถงคาสงพนฐานสาหรบการเรมตนใชงานโปรแกรม SCILAB เพอเปนแนวทางสาหรบการเรยนรในบทตอ ไป เรมตนจะขอแสดงการกาหนดคาคงทใหกบตวแปร เชน ถาตองการกาหนดใหตวแปร x มคาเทากบคา 5 จะตองปอนคาสงลงในหนาตางคาสงดงน

-->x = 5

เมอกดปม Enter หนาตางคาสงจะแสดงผลลพธเปน

x =

5.

-->

นนคอ โปรแกรม SCILAB จะแสดงผลลพธ x = 5 ออกมาทหนาตางคาสง พรอมทงแสดงเครองหมาย SCILAB prompt “-->” เพอรอรบคาสงตอไป

ในกรณทไมตองการใหโปรแกรม SCILAB แสดงผลลพธออกทางหนาตางคาสง กใหใส เครองหมายเซมโคลอน (semi-colon) “;” ปดทายคาสงนน กอนกดปม Enter เชน ถาตองการกาหนดใหตวแปร y มคาเทากบคา 3 โดยไมตองแสดงผลลพธออกทาง หนาตางคาสง กสามารถทาไดโดยปอนคาสงดงน

-->y = 3;

-->

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

หมายเหต ขอควรระวงในการกาหนดชอของตวแปรมดงน

โปรแกรม SCILAB จะพจารณาถงความแตกตางของ ตวอกษรตวพมพใหญ (capital letter) กบอกษรตวพมพเลก ซงโปรแกรม SCILAB จะถอวาตวแปรทมชอเหมอนกน แตใชตวอกษรตางกน จะเปนตวแปรคนละตวกน ดงนนควรหลกเลยงการ กาหนด ชอตวแปรทเหมอนกน

ชอของตวแปรจะตองเรมดวยตวอก ษรและมความยาวไดทงหมดไมเก น 24 ตวอกษร ทงนอาจจะ ใชตวเลขหรอสญลกษณ underline “_” (สญลกษณอนหามใช) ชวยในการกาหนดชอของ ตวแปรกได

Page 26: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

รปท 1.3 ตวอยางชอทเปนคาสาคญใน โปรแกรม SCILAB

ชอของตวแปรทกาหนดขนมาจะตองไมซากบชอเฉพา ะหรอคาสาคญ (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 จะไดผลลพธเปน

Page 27: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 28: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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)

Page 29: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) มฟงกชน อะไรบาง กใหปอนคาสงดงน

Page 30: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

13

รปท 1.4 หนาตาง Scilab Browse Help ของโปรแกรม SCILAB

-->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) มฟงกชนอะไรบาง กใหปอนคาสงดงน

Page 31: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ของไฟลทจะบนทกขอมลให

Page 32: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

15

ชดเจนดวย7 ถาหากไมระบเสนทางทจะบนทกไฟล โปรแกรม SCILAB กจะทาการบนทกไฟลน ไวในสารบบทกาลงทางานอย ณ ขณะนนโดยอตโนมต สวนอนพตอารกวเมนตทอยในเครองหมาย วงเลบเหลยม (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 โดยใชคาสง clear9 ดงนนเมอ ทาการตรวจสอบดวา ณ ขณะน ตวแปร x มคาเปนอะไร กจะพบวาไมมขอมลของตวแปร x ปรากฎอยในโปรแกรม SCILAB

ถาตองการทราบวา ณ ตอนนโปรแกรม SCILAB ทางานอยบนระบบ MSDOS (เชน ระบบปฏบตการวนโดวส) หรอไม ก สามารถตรวจสอบไดโดยใชคาสง MSDOS ดงน 7 เชน ถาตองการบนทกขอมลของตวแปรทกตวลงในไฟลชอ test.dat และเกบไวในสารบบ “C:\SCIDIR” กใหใชคาสงดงน

-->save('C:\SCIDIR\test.dat')

8 พารามเตอรทเปนตวเลอกจะมหรอไมม ในคาสง กได เนองจากโดยทวไปจะมก ารกาหนดคาโดยปรยาย (default

value) ของพารามเตอรทเปนตวเลอกไวใหเรยบรอยแลว

9 ถาตองการลบขอมลของตวแปรบางตวกสามารถทาไดโดยการระบชอตวแปรนนๆ ตามหลงคาสง clear เชน ถาตองการลบขอมลเฉพาะของตวแปร y กทาไดโดยการใชคาสง

-->clear y;

Page 33: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 คอชอไฟล (จะตองระบเสนทางของไฟลทตองการเรยกมาใชงานใหถกตองครบถวน) ภายในเครองหมาย '…' หรอเครองหมาย "…" ตวอยางเชน

Page 34: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 //หาผลบวกของตวแปร x กบตวแปร y z = //แลวนาผลลพธทไดไปบรรจไวในตวแปรใหมทชอตวแปร z 8.

Page 35: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

1.3 จงเปรยบเทยบขอแตกตางระหวางคาสง who และคาสง whos

1.4 จงอธบายหนาทการทางานของคาสง who_users

1.5 จงทดสอบการใชงานคาสง save และคาสง load

1.6 จงอธบายหนาทการทางานของคาสง clear

Page 36: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 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 วามอะไรบาง ไดจากไฟลเรมตน (start-up file) ซงอยทสารบบ “SCIDIR/scilab.star”

Page 37: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

20

ตารางท 2.1 คาคงทพเศษ ในโปรแกรม SCILAB

คาคงทพเศษ คาอธบาย %i คาคงท ทใชในการแสดงตวเลขเชงซอน มคาเทากบ = −%i 1 %pi คาอตราสวนระหวางความยาวเสนรอบวงกบเสนผานศนยกลางของวงกลม %e คาคงทตรโกณมต (trigonometric constant) %inf ใชแทนตวเลขทมคาเปนอ นนต (infinity) นนคอ %inf = ∞ เชน คา 1/0

%nan ใชแสดงถงคาทไมสามารถแสดงใหอยในรป ของตวเลขได (มาจากคาวา Not-A-

Number)

%eps คา หนวยยอยขนาดเลกทสดทโปรแกรม SCILAB สามารถรองรบได กลาวคอคาจานว นจรงทคานอยกวาคา %eps โปรแกรม SCILAB จะถอวามคาเปนคา 0

ans ตวแปรชวคราว (temporary variable) ทเกบผลลพธทไดจากการคานวณของคาสง ซงจะถกนามาใชโดยอตโนมต ในกรณทไมมการระบตวแปรรบคาของผลลพธ

%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

Page 38: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 39: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 40: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 41: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

-->y = 2*%s^2 - 3*%s + 1 //มคาเทากบ 21 3 2y s s= − +

y =

2 1 - 3s + 2s

-->x = (3*%z^3 + 2*%z^2)/(2*%z - 1) //มคาเทากบ 3 23 2

2 1

z zx

z

+=

z =

2 3

2z + 3z

-------

- 1 + 2z

2.1.10 คาคงทพเศษ %io หนาตางคาสง ถอวาเปนอปกรณอนพตและเอาตพตมาตรฐาน (standard input and output device) ของโปรแกรม SCILAB ททาหนาทในการรบและสง ขอมลกบเครองคอมพวเตอร ในโปรแกรม SCILAB จะถอวาเคร องมออนพตและเอาตพตเปนหนวยเชงตรรกะ (logical unit) ซงกาหนดโดยตวเลขจานวนเตม กลาวคอ หนวยเชงตรรกะ หมายเลข 5 หมายถงเมอใชงานหนาตางคาสงสาหรบ เปนอนพต และหนวยเชงตรรกะ หมายเลข 6 หมายถงเมอใชงานหนาตางคาสงสาหรบเปนเอาตพต คาหนวยเชงต รรกะทงสองน จะถกเกบไวในคาคงท พเศษ %io ซงมประโยชนมากในการทางานกบระบบอนพตและเอาตพตของโปรแกรม SCILAB ตวอยางการใชงานของคาสงน เชน

Page 42: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 43: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 44: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จะถอวา เครองหมายบวก (หรอเครองหมายลบ) นนเปนเครองหมายแสดงคาบวก (หรอคาลบ ) ของตวเลข แตถาเครองหมายบวก (หรอเครองหมายลบ) ไมไดอยตดกบตวเลข จะหมายความวาใหนาตวเลขทอยระหวาง เครองหมายบวก (หรอเครองหมายลบ) มาทาการบวก (หรอการลบ) กน

Page 45: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 46: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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.

โดยทเครองหมายเซมโคลอนจะทาหนาทระบวาเปนจดสนสดของขอมล ในแตละแถว หากตองก ารทราบวาเมทรกซ A มขนาดเทาใด กสามารถทาไดโดยใชคาสง size ดงน

-->size(A)

ans =

2. 3.

ซงบอกวาเมทรกซ A มขนาด 2×3 (หรอ 2 แถว และ 3 แนวตง )

นอกจากนผใชสามารถทจะอางถงสมาชกแตละตวในเมทรกซได โดยตรงตามรปแบบการใชงานดงน

-->b = A(2, 3)

b =

6.

Page 47: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 48: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

31

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

1. 2.

4. 5.

สงเกตจะพบวา ณ ตอนนเมทรกซ A จะมจานวนแถวและแนวตง เทากน นนคอเปนเมทรกซขนา ด 2×2 ในกรณนเมทรกซ A จะถกเรยกวาเปน เมทรกซจตรส12 (square matrix) ถาตองการอางถงสมาชกตวทายสดในแตละแถว (หรอแตละ แนวตง ) กสามารถทาไดโดยการใหใชเครองหมาย “$” ตวอยาง เชน

-->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 เมทรกซจตรส คอ เมทรกซทมจานวนแถวเทากบจานวนแนวตง

Page 49: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Ac d

Page 50: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 (identity matrix) แบบจตรส ในทนจะ ยกตวอยาง การหาอนเวอรสการคณของเมทรกซขนาด 2×2 ดงตอไปน

ถากาหนดให เมทรกซ A มคาเทากบ

= ⎡ ⎤⎢ ⎥⎣ ⎦a b

Ac d

จากการคานวณทางคณตศาสตรจะไดวาอนเวอรสการคณของเมทรกซ A มคาเทากบ

( )− −

=−⎡ ⎤⎢ ⎥⎣ ⎦

1 1 d bA

c adet A

13 เมทรกซทมสมาชกทมคาเปนคา 1 ปรากฎอยในแนวเสนทแยงมมหลก สวนสมาชกในตาแหนงอนๆ ของ เมทรกซจะมคาเปนคา 0 (ดรายละเอยดของเมทรกซเอกลกษณไดในหวขอท 4.6.1)

Page 51: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

34

ตวอยางเชน ถาให = ⎡ ⎤⎢ ⎥⎣ ⎦1 2

A3 4

ดงนนอนเวอรสการคณของเมทรกซ A จะมคาเทากบ

− − −= =

− −−⎡ ⎤ ⎡ ⎤⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦

1 1 4 2 2 1A

3 1 1.5 0.52

จากตวอยางทแสดงขางตนจะพบวา เมทรกซใดทมคาดเทอรมแนนตไมเทากบคา 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 วาอยดานไหน

Page 52: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 (ดรายละเอยดเพมเตมท

Page 53: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 54: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ผใชสามารถทจะนาสายอกขระสองอนมาตอกนเปนอนเดยวได โดยการใชเครองหมายบวก “+” ดงแสดงในตวอยางตอไปน

Page 55: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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,

c, และ d กสาม ารถทาไดโดยการใชคาสง evstr เชน

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

-->evstr(X) //ประเมนคา (evaluate) ของเมทรกซ X ตามคาของตวแปรทกาหนด ให ans =

15 สามารถดรายละเอยดวธการทา symbolic triangularization ของตวอยางนไดในภาคผนวก ก

Page 56: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 n0 1 2 ny = a +a x+a x +…+a x

เมอพารามเตอร x คอตวแปรพหนาม, a = [a0 a1 a2 ... an] คอเวกเตอรทมสมาชกแตละ ตวเปนคาสมประสทธ16 (coefficient) ของพหนาม, n คอดกร17 (degree) ของพหนาม, และ y คอสมการพหนาม ในโปรแกรม SCILAB คาสมประสทธ และดกรของสมการพหนามนสามารถหาได 16 ศกษารายละเอยดการใชงานคาสง coeff ทใชในการหาคาสมประสทธไดในหวขอท 9.4.3.4 17 ดกรของพหนาม (degree of polynomial) คอคาเลขชกาลงทมากทสดของพหนามนน

Page 57: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 เปนคาตอบของ 023ss2 =+−

-->q = poly([1 2 3], "x", "coeff") //สรางสมการพหนามจากคาสมประสทธ q =

2 1 + 2x + 3x

-->c = coeff(q) //คาสมประสทธของพหนามจะเรยงจ ากดกรนอยไปหาดกรมาก c =

1. 2. 3.

-->d = degree(q)

d =

2. //ดกรของพหนาม

Page 58: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

A3 4

สมการลกษณะเฉพาะของเมทรกซ A หาไดจากการแกสมการตอไปน

( )λ− =det A I 0

Page 59: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

42

λλ

λ−

− = =−

⎛ ⎞ ⎛ ⎞⎡ ⎤ ⎡ ⎤ ⎡ ⎤⎜ ⎟ ⎜ ⎟⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦ ⎣ ⎦⎝ ⎠ ⎝ ⎠

1 2 1 0 1 2det det 0

3 4 0 1 3 4

( )( ) ( )( )λ λ− − − =1 4 3 2 0

λ λ− − =25 2 0

ดงนนสมการ ลกษณะเฉพาะของเมทรกซ A คอสมการ λ λ− − =25 2 0 ในโปรแกรม SCILAB

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

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

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

y =

2

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

ถาตองการหารากหรอคาตอบของสมการลกษณะเฉพาะทไดมาน กสามารถทาไดโดยใชคาสง 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) จะพบมากในงานทางดานวศวกรรมตางๆ

Page 60: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 61: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 แบบ ดงน

1) เลขจานวนเตมขนาด 8 บต มคาตงแต -128 ถง 127 (-27 ถง 27 - 1)

Page 62: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

45

สมพนธ

–1 +1

maxmin

underflow

overflow รปท 2.1 รปแสดงการเปลยนแปลงของขอมล เมอเกด overflow และ underflow

2) เลขจานวนเตมขนาด 8 บต แบบไมคดเครองหมาย มคาตงแต 0 ถง 255 (0 ถง 28 - 1) 3) เลขจานวนเตมขนาด 16 บต มคาตงแต -32768 ถง 32767 (-215 ถง 215 - 1) 4) เลขจานวนเตมขนาด 16 บต แบบไมคดเครองหมาย มคาตงแต 0 ถง 65535 (0 ถง 216 - 1) 5) เลขจานวนเตมขนาด 32 บต มคาตงแต – 2147483648 ถง 2147483647

(-231 ถง 231 - 1) 6) เลขจานวนเตมขนาด 32 บต แบบไมคดเครองหมาย มคาตงแต 0 ถง 4294967295

(0 ถง 232 - 1)

โดยทรปแบบของเลขจานวนเตมเหลานสามารถกาหนดไดโดยคาสง 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

Page 63: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) คอ กลมของขอมลประเภทตางๆ ทอยรวมกนในตวแปรตวเดยว ตวแปรประเภทลตซจะ สามารถอางถงขอมลไดหลายประเภทตามทกาหนด ซงจะมประโยชนมากในการเขยนโปรแกรม โดยเฉพาะอยางยงเมอตองการจดกลมของขอมลประเภทตางๆ ใ หอยภายในชอตวแปรชอเดยวกน คาสงทใชในกา รกาหนดตวแปรประเภทลตซมอยสอง แบบดงน

Page 64: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 กสามารถทาได ดงน

Page 65: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 66: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 67: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 68: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 69: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 เปนเมทรกซสายอกขระ

Page 70: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 อยเปนจานวนมาก

Page 71: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 72: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 73: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

นนคอ f(x) มคาเทากบ -13, -3, และ 7 เมอ x มคาเทากบ −5, 0, และ 5 ตามลาดบ

Page 74: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

57

ตวอยางท 2 จงพสจนคณสมบตของเมทรกซวา (A + B)C = AC + BC เมอ

1 23 4

= ⎡ ⎤⎢ ⎥⎣ ⎦

A , 5 68 7

= ⎡ ⎤⎢ ⎥⎣ ⎦

B , และ 12−

= ⎡ ⎤⎢ ⎥⎣ ⎦

C

วธทา ผใชสามารถพสจนคณสมบตของเมทรกซนไดจากการใชชดคาสงดงน

-->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 32 1 23 2 1

=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

A

จงหาคาดเทอรมแนนต, อนเวอรสการคณ, สมการลกษณะเฉพาะ, และคาตอบของสมการลกษณะเฉพาะทได

วธทา คาตอบของโจทยขอนสามารถหาไดจากการใชชดคาสงดงน

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

Page 75: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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');

Page 76: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ในการแกไขปญหาโจทยทางคณตศาสตร ซง เมอเขาใจถงลกษณะของขอมลแตละประเภทแลว กจะทาให สามารถสรางตวแปรสาหรบจดเกบขอมลแตละประเภทได อยางถกต องและตรงกบความตองการในการใชงาน

Page 77: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

60

2.12 แบบฝกหดทายบท 2.1 จงคานวณหาคาของฟงกชน ( )f x = 5x 3− + เมอ x มคาเทากบ −10, −5, 0, 5, และ 10

2.2 กาหนดให

5 8 7A 4 2 6

9 8 9=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

, 1 2 3

B 2 4 52 3 1

− −= −⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

, 3 1 2

C 1 2 12 1 1

= −− −

⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

[ ]D 1 2 3= , และ 2

E 02

−=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

จงหาคาตอไปน

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 3A 4 5 6

7 8 9=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

1 2 1

B 2 4 65 3 1

−=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

3 1 2

C 1 2 12 1 1

= −− −

⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

จงพสจนวา

2.3.1) (AB)C = A(BC)

2.3.2) A(B + C) = AB + AC

Page 78: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 7A 4 2 6

9 8 9=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

1 2 3

B 2 4 52 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 2iA

1 2i 1−

=+

⎡ ⎤⎢ ⎥⎣ ⎦

i 2iB

3i 4i= ⎡ ⎤⎢ ⎥⎣ ⎦

เมอ i 1= − จงคานวณหาคาตอไปนพรอมทงอธบายผลลพธทได

Page 79: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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.6.1) 2 3A

4 5= ⎡ ⎤⎢ ⎥⎣ ⎦

2.6.2) B = 1 52 3

−−⎡ ⎤⎢ ⎥⎣ ⎦

2.6.3) 1 2 3

C 4 5 67 8 9

=⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

2.6.4) 2 1 3

D 2 0 25 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 พรอมทงอธบายขอแตกตางระหวาง ขอมลแตละประเภท

Page 80: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 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 สาหรบตวอยางการ คานวณทางคณตศาสตรระหวางคา สเกลารกบค าสเกลารมดงน

Page 81: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

64

ตารางท 3.1 การดาเนนการทใชในการคานวณทางคณตศาสตรของคา สเกลาร

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

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

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

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

การหารซาย (left division) b

a a \ b

การหารขวา (right division) a

b a / 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 ตวอยางเชน

Page 82: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

65

ตารางท 3.2 ลาดบการทางานของตวดาเนนการ

-->y = 10 + 2 * 3 – 4 + 9 / 3 ^ 2 * 2 – 1

y =

13.

-->y = 10 + (2 * 3) – 4 + (9 / (3 ^ 2)) * 2 – 1

y =

13.

-->y = (10 + 2) * 3 – 4 + 9 / (3 ^ 2) * 2 – 1

y =

33.

3.1.3 การดาเนนการทางคณตศาสตรทเกยวของกบเมทรกซ ตวดาเนนการทใชในการคานวณทางคณตศาสตรสาหรบเมทรกซ แสดงในตารางท 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.

ลาดบความสาคญ (priority) ตวดาเนนการ

1 วงเลบ ( )

2 เลขยกกาลง ^ หรอ ** และเรยงจากซายไปขวา

3 การคณและการหาร และเรยงจากซายไปขวา

4 การบวกและการลบ และเรยงจากซายไปขวา

Page 83: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

66

ตารางท 3.3 ตวดาเนนการทใชในการคานวณทางคณตศาสตรของเมทรกซ

-->A – B

ans =

0. 1. 2.

5. 6. 7.

นอกจากนยงสามารถทาการบวก (หรอการลบ) ตวเลขทเปนสเกลารกบเมทรกซได โดยผลลพธทไดจะมาจากการนาเอาตวเลขทเปนสเกลารไปบวก (หรอลบ) กบสมาชกทกตวภายในเมทรกซนน ตวอยางเชน

-->3 + B

ans =

4. 4. 4.

2. 2. 2.

ตวดาเนนการ คาอธบาย

+ การบวก (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)

Page 84: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

67

3.1.3.2 การคณ การคณของสองเมทรกซจะทาไดกตอ เมอขนาดของสองเมทรกซนนสอดคลองกบกฎเกณฑพนฐาน ของการคณของเมทรกซ นนคอจานวน แนวตง ของตวตงจะตองเทากบจานวนแถวของตวคณ เชน

-->A = [1 2 3; 4 5 6]; //จานวนแนวตง ของเมทรกซ A เทากบ 3

-->B = [1 1 1; -1 -1 -1]; //จานวนแถวของเมทรกซ B เทากบ 2

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

Page 85: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 =

Page 86: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ตวอยางเชน

Page 87: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 88: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 //การนาเอาเมทรกซ A มายกกาลงเมทรกซ B ไมสอความหมายใดๆ --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)

Page 89: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

72

ถาใชหลกการแกสมการคณตศาสตรสองตวแปรทวไปเพอแกสมการท (1) และ (2) จะไดผลลพธคอ x1 = 2 และ x2 = -1 เชนเดยวกนผใชสามารถแกสมการทงสองนไดโดยใชเมทรกซดงน

จากสมการท (1) และ (2) สามารถเขยนสมการทงสองใหอยในรปของเมทรกซได คอ

=−

⎡ ⎤⎡ ⎤ ⎡ ⎤⎢ ⎥⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦⎣ ⎦

1

2

x2 1 3

x1 1 3 หรอ =Ax b (3)

โดยท =−

⎡ ⎤⎢ ⎥⎣ ⎦2 1

A1 1

และ = ⎡ ⎤⎢ ⎥⎣ ⎦3

b3

การหาผลเฉลยของสมการท (3) ทาไดโดยนา A-1 (อนเวอส

การคณของเมทรกซ A) คณเขาไปทงสองขางของสมการท (3) ซงจะไดผลลพธเปน

− −=1 1A Ax A b

−= 1x A b (4)

เนองจาก − =1A A 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 ได

Page 90: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 1xAA bA

−= 1x bA (7)

ตวอยางเชน จากสมการท (1) และ (2) สามารถเขยนความสมพนธของเมทรกซในอกรปแบบหนงทแตกตางจากสมการท (3) ไดคอ

Page 91: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

74

[ ] [ ]=−

⎡ ⎤⎢ ⎥⎣ ⎦1 2

2 1x x 3 3

1 1 (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]

Page 92: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 93: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 94: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

77

ตารางท 3.4 ตวดาเนนการสมพนธ (relational operator)

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

ตวดาเนนการสมพนธ คาอธบาย

== เครองหมายเทากบ (equal to)

< เครองหมายนอยกวา (less than)

> เครองหมายมากกวา (greater than)

<= เครองหมายนอยกวาหรอเทากบ (less than or equal to)

>= เครองหมายมากกวาหรอเทากบ (greater than or equal to)

<> หรอ ~= เครองหมายไมเทากบ (not equal to)

Page 95: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

78

ตารางท 3.5 ตวดาเนนการตรรกะ (logical operator)

T

F

PQ T

T

F

F

P AND Q

F

F

PQ

P

รปท 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

ตวดาเนนการตรรกะ คาอธบาย & และ (AND)

| หรอ (OR)

~ ไม (NOT)

Page 96: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 97: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

80

ตารางท 3.6 ลาดบการทางานของตวดาเนนการตาง ๆ

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

ลาดบความสาคญ (priority) ตวดาเนนการ สญลกษณตวดาเนนการ

1 วงเลบ ( )

2 ปฏเสธ ~

3 เลขคณต + – * /

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

5 ตรรกะ & |

Page 98: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) เสมอ เชน

Page 99: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

82

-->x = -1;

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

ans =

T T F F

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

ตวอยางท 1 จงหาคาของฟงกชน ( )1

++

3

2

3x -xf x = 5x-4

2x เมอ x มคาเทากบ −3i, −3, 0, 3

และ 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

นนคอ f(x) มคาเทากบ -4-15i, -19, -4, 11, และ -4+15i เมอ x มคาเทากบ −3i, −3, 0,

3 และ 3i

ตวอยางท 2 จงหาคาของ ( )( )22 22 222 2−

+ −=x

วธทา คาของ x หาไดจาก

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

x =

131072.

Page 100: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

83

ตวอยางท 3 จงหาคาของ 3 53 4 3 2

2 12 3 2 32 3 2 3

−− −

− −

⎛ ⎞ ⎛ ⎞⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

× ×= ÷× ×

x

วธทา คาของ 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 จากระบบสมการเชงเสน

Page 101: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 กาหนดใหพหนาม 2p = x -1 และ q = 2x+3 จงหาคาของเมทรกซ

⎡ ⎤⎢ ⎥⎢ ⎥⎣ ⎦

2

p+q p-q pq

M = p -2qp q

q p 3p+q

สาหรบ x = -2 และ x = 1 + i

วธทา คาตอบของโจทยขอนสามารถหาไดจากชดคาสงดงน

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

-->p = x^2 - 1;

-->q = 2*x + 3;

Page 102: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 สรป ในบทนไดอธบายถงลกษณะการใชงานของ ตวดาเนนการแบบตางๆ ไดแก ตวดาเนนการเลขคณต,

ตวดาเนนการสมพนธ, ตวดาเนนการตรรกะ, และตวดาเนนการระดบบต พรอมทงแสดงตวอยาง การใชงานตวดาเนนการตางๆ ในการแกไขปญหาโจทยทางคณตศาสตร เมอเขาใจถงลกษณะการทางานของตวดาเนนการเหลานแลว กจะ ชวยทาให สามารถนาตวดาเนนการเหลาน ไปใชในการพฒนาโปรแกรมทซบซอนไดอยางถกตองตามทตองการ

Page 103: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

86

3.6 แบบฝกหดทายบท 3.1 จงคานวณหาคาของฟงกชน ตอไปน

3.1.1) ( ) 3 2f x =3x +2x +1 เมอ x มคาเทากบ −10, −5, 5, และ 10

3.1.2) ( )2

2 5x2x 1

f xx 3

++

=−

เมอ x มคาเทากบ −5i, −5, 0, 5 และ 5i โดยท i 1= −

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

3 4= ⎡ ⎤⎢ ⎥⎣ ⎦

1 2B

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

Page 104: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) xTy < 5 โดยท (.)T คอ ทรานสโพสของเมทรกซแบบธรรมดา

Page 105: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 106: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 4 ฟงกชนพนฐานทางคณตศาสตร

ในบทนจะอธบายถงฟงกชนพนฐานทวไป ทใชในการคานวณทางคณตศาสตร เชน ฟงกชนพนฐาน ทเกยวกบตวเลข , ฟงกชนตรโกณมต , ฟงกชนไฮเพอรโบลก , ฟงกชนพนฐานท างสถต รวมทงฟงกชน สาหรบการสรางเมทรกซพเศษ เพอใหเขาใจถงรปแบบการใชงานของฟงกชนตางๆ ทจาเปนสาหรบ การพฒนาโปรแกรม

4.1 ฟงกชนพนฐานทเกยวกบตวเลข ในสวนนจะกลาวถงฟงกชนพนฐานทเกยวกบตวเลข (elementary number function) ทพบมากในโปรแกรม SCILAB ตามทแสดงในตารางท 4.1 ซงมลกษณะการใชงานดงตอไปน

4.1.1 ฟงกชน abs(x) เปนฟงกชนทใชในการหาคาสมบรณ (absolute value) ของตวแปร x ซงแบงไดเปน 2 กรณ คอ 1) ถาตวแปร x เปนเลขจานวนจรง คาสมบรณของตวแปร x จะมคาเทา กบ

{ ≥=

− <x ,x 0

xx ,x 0

2) ถาตวแปร x เปนเลขจานวนเชงซอนทสามารถเขยนใหอยในรปของ x = a + bi โดยท

ตวแปร a และ b เปนเลขจานวนจรง และ i = −1 เปนหนวยจนตภาพ ดงนนคาสมบรณของ ตวแปร x จะมคาเทากบ

= +2 2x a b

Page 107: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

90

ตารางท 4.1 ตวอยางฟงกชนพนฐานทเกยวกบตวเลข

ตวอยางการใชงานคาสงน เชน

-->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 ตวอยางการใชงานฟงกชนน เชน

ฟงกชน คาอธบาย 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

Page 108: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

91

-->sqrt([2, 4, -1, -4]) //หาคา รากทสองของแตละ สมาชกในเวกเตอร

ans =

1.4142136 2. i 2.i

สาหรบการหาคา รากทสองของจานวนเชงซอน ใหแทนเลขจานวนเชงซอนดวยคาเชงขว (polar representation) กลาวคอถาตวแปร x = a + bi เปนคาจานวนเชงซอน โดยท a และ b เปน

เลขจานวนจรง และ i = −1 ดงนน คาเชงขว ของตวแปร x คอ

θ= ix re

โดยท = +2 2r a b เปนขนาด (magnitude) และ ( )θ −= 1 b

atan เปนมมเฟส (phase) ของเลข

จานวนเชงซอน จากกฎของออยเลอร (Euler’s formula) จะไดวา

( ) ( )θ θ θ= +ie cos isin

ฉะนน ตวแปร x สามารถเขยนใหอยในรปใหมได ดงน

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

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

( )1/ 2θ 1/ 2 θ/2 θ θ= = = +⎛ ⎞ ⎛ ⎞

⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

i ix re r e 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

Page 109: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

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

Page 110: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ตวอยางเ ชน

Page 111: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 112: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ถาตวแปร x มคาเทากบศนย , และใหผลลพธเปนคา -1 ถาตวแปร x มคานอยกวาศนย ตวอยางเชน

-->sign([-%inf -0.01 0 0.02 %inf])

ans =

- 1. - 1. 0. 1. 1.

ในกรณทตวแปร x เปนคาจานวนเชงซอน ฟงกชนนจะใหผลลพธเปน sign(x) = x./abs(x) ตวอยางเชน

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

ans =

i - i 0.6 + 0.8i 0.6 - 0.8i

Page 113: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 114: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

97

ตารางท 4.2 ตวอยาง ฟงกชนเลขชกาลง และลอการทม

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 สามารถทาไดดงน

( ) ( ){ } ( ) ( )+= = = + = +a bi a bi a a aexp(x) e e e e cos b isin b e cos b ie sin b

ตวอยางเชน

-->exp([1-%i 3+4*%i])

ans =

1.4686939 - 2.2873553i - 13.128783 - 15.200784i

ฟงกชน คาอธบาย exp(x) หาคา ex ของตวแปร x log(x) หาคา log ฐาน e ของตวแปร x log2(x) หาคา log ฐาน 2 ของตวแปร x log10(x) หาคา log ฐาน 10 ของตวแปร x

Page 115: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 สามารถทาไดดงน

( ) ( ) ( ) ( )θ θ θ= = + = +i ilog(x) log re log r log e log r i

โดยท = +2 2r a b เปนขนาด และ ( )θ −= 1 b

atan เปนมมของ x ตวอยางเชน

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

Page 116: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

99

α

β

รปท 4.1 สามเหลยมมมฉาก

สาหรบฟงกชนลอการท มทมฐานอนๆ กสามารถหาคาไดโดย อาศยความสมพนธดงน

( ) ( )( )

ax

a

log ylog y =

log x

นนคอ log ของจานวน y ทมฐาน x มคาเทากบ log ของจานวน y ทมฐาน a หารดวย log ของจานวน x ทมฐาน a โดยท a เปนเลขจานวนเตมบวกใดๆ ตวอยางเชน ถาตองการหาคา log ของ 81 ทมฐาน 3 กสามารถทาไดด งน

-->y = [log(81)/log(3), log2(81)/log2(3), log10(81)/log10(3)]

y =

4. 4. 4.

ซงใหผลลพธเทากบ ( ) ( ) ( ) 4= =× ×43 3 3log 81 = log 3 4 log 1 =43

4.3 ฟงกชนตรโกณมต ฟงกชนตรโกณมต (trigonometric function) ประกอบไปดวย 6 ฟงกชน ไดแก sine, cosine,

tangent, secant, cosecant, และ cotangent โดยทวไปแลวฟงกชนตรโกณมตเหลานสามารถทจะ ถกกาหนดในรปของมมและความยาวของดานตางๆ ของรปสามเหลยมมมฉากตามทแสดงในรปท 4.1 โดยท c จะถกเรยกวาดานตรงขามมมฉาก (hypotenuse) ถาพจารณาทมม α (alpha) ดาน b จะถกเรยกวาดานประชดมม และดาน a จะถกเรยกวาดานตรงขามมม จากรปท 4.1 จะไดความสมพนธของฟงกชนตรโกณมต ตางๆ ดงน

Page 117: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

100

( ) asin α

c= ( ) ( )

1 ccosec α

sin α a= =

( ) bcos α

c= ( ) ( )

1 csec α

cos α b= =

( ) ( )( )

sin α atan α

cos α b= = ( ) ( )

1 bcot α

tan α a= =

ในการใชงานฟงกชนตรโกณมต คามมทใชหรอทไดรบจากฟงกชนทางตรโกณมตจะตอง มหนวยเปนเรเดยน 21 (radian) ในกรณทตองการใชคามมเปนหนวยองศา (degree) กสามารถทาไดโดยใชความสมพนธทวา π = 180º ในทางกลบกนถาตองการทราบวาคามมเทาใดททาใหได ผลลพธเปนคาของฟงกชนตรโกณมตนนกสามารถทาไดโดยใชฟงกชนตรโกณมต ผกผน (inverse

trigonometric function) ซงประกอบไปดวย 6 ฟงกชน ไดแก arcsine, arccosine, arctangent,

arcsecant, arccosecant, และ arccotangent โดยมความสมพนธกบฟงกชนตรโกณมต ดงตอไปน

ถา ( )y sin α= จะไดวา ( ) ( )1α sin y arcsine y−= =

ถา ( )y cos α= จะไดวา ( ) ( )1α cos y arccosine y−= =

ถา ( )y tan α= จะไดวา ( ) ( )1α tan y arctangent y−= =

โปรแกรม 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 คาอตราสวนระหวาง ความยาวสวนโคงของวงกลมตอความยาวของรศมของวงกลม

Page 118: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

เรเดยน ตวอยางเชน

Page 119: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 120: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

sinh x2

−−= ( ) ( )

1csch x

sinh x=

( )x xe e

cosh x2

−+= ( ) ( )

1sech x

cosh x=

( )x x

x xe e

tanh xe e

−−

=+

( ) ( )1

coth xtanh x

=

ในทานองเดยวกนคาอนเวอรสของฟงกชนไฮ เพอรโบลก (หรอเรยกวาฟงกชนไฮเพอรโบลก ผกผน) เหลาน กสามารถหา ไดโดยใชความสมพนธดงน

ถา ( )y sinh x= จะไดวา ( ) ( )1x sinh y asinh y−= =

ถา ( )y cosh x= จะไดวา ( ) ( )1x cosh y acosh y−= =

ถา ( )y tanh x= จะไดวา ( ) ( )1x tanh y atanh y−= =

โปรแกรม SCILAB ไดเตรยมคาสงพนฐานสาหรบฟงกชนไฮเพอรโบลก และฟงกชนไฮเพอรโบลก ผกผนไวตามทแสดงในตารางท 4.4 ซงแตละฟงกชนมลกษณะการใชงานดงตอไปน

Page 121: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 122: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

105

4.4.4 ฟงกชน asinh(y) เปนฟงกชนทใชในการหาคาอนเวอรสของ hyperbolic sine ของ y ซงมคาเทากบ

( )2asinh(y) = ln y+ y +1

เมอ 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 ซงมคาเทากบ

( )2acosh(y) = ln y+ y -1

โดยทคา 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.

Page 123: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

106

4.4.6 ฟงกชน atanh(y) เปนฟงกชนทใชในการ หาคาอนเวอรสของ hyperbolic tangent ของคา y ซงมคาเทากบ

⎛ ⎞⎜ ⎟⎝ ⎠

1 1+yatanh(y) = ln

2 1-y สาหรบ y <1

ตวอยาง เชน

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

Page 124: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จากคามากไปหาคานอย

histplot(n,x) วาดรปฮสโตแกรม (histogram) ของคาทงหมดในเวกเตอร x เปนจานวน n ชวงระหวางคาตาสดและคาสงสดของเวกเตอร 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

Page 125: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 หาไดจาก

=∑N

1 2 Ni

i=1

x +x +…+x1am = x

N N

ตวอยางเชน

-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];

-->mean(x) //หาคา เฉลยของตวเลขทงหมดในเมทรกซ x

ans =

2.5

-->mean(x, 'r') //หาคา เฉลยของตวเลขทงหมดในแตละแถวของเมทรกซ x

Page 126: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 127: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 128: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ตวอยางเชน

Page 129: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 =

Page 130: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) หรอการแจกแจงแบบเกาสเซยน (Gaussian distribution) นนคอมคาเฉลย (mean) เทากบคา 0 และมคาความแปรปรวน (variance) เทากบคา 1 จากนนกทาการวาดรปฮสโตแกรมของจานวนสมทงหมดโดยแบงขอมล เปน 10 ชวง (รปท 4.1 ดานซาย) และแบงขอมลเปน 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

Page 131: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

NNi 1 2 N

i=1

gm = x = x ×x ×…×x

ตวอยางเชน

-->x = [2 4 6];

-->gm = geomean(x)

Page 132: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 หาไดจาก

∑ ∑N N

i ii=1 i=1

1 Nhm = =

1x x

N

ตวอยางเชน

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

Page 133: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 134: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

117

ตารางท 4.6 ตวอยาง เมทรกซพเศษในโปรแกรม SCILAB

คาสง คาอธบาย 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 เชน

Page 135: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 136: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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) ของจานวนสมท สราง

กลาว คอ ถา

Page 137: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

120

o key = "uniform" จานวนสมทสรางขนมาจะ มลกษณะการแจกแจงเอกรปมคาอย ระหวาง 0 ถง 1 (เปนคาโดยปรยาย )

o key = "normal" จานวนสม ทสรางขนมาจะมลกษณะ การแจกแจงปรกต (หรอแบบเกาสเซยน) ทมคาเฉลยเทากบ คา 0 และมคาความแปรปรวน 22 (varaince) เทากบ คา 1

ตวอยางการใชงานของคาสงน เชน

-->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 คาความแปรปรวน มคาเทากบคาเบยงเบนมาตรฐานยกกาลงสอง

Page 138: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 139: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 140: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) //ดงสมาชกทงหมดทอยในแนวตงแตเสนทแยงมมทอยใต

Page 141: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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

matrix), และเมทรกซ Franck โดยเมทรกซเหลานสามารถสรางได จากการใชคาสง testmatrix ซงมรปแบบการเรยกใชงานดงน

Page 142: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

125

testmatrix('matrix_name', n)

โดยทพารามเตอร matrix_name มได 3 รปแบบ คอ

1) magi สรางเมทรกซจตรสขนาด n×n ทมผลรวมของตวเลขจานวนเตมในแนวนอน,

แนวตง , และแนวเสนทแยงมม เทากน 2) frk สรางเมทรกซ Franck

3) hilb สรางอนเวอรสของเมทรกซฮลเบรตขนาด n×n โดยทสมาชกแถวท i และแนวตง ท j ของเมทรกซฮลเบรตมคาเทากบ H(i,j) = 1/(i+j-1)

ตวอยางการใชงานคาสงน เชน

-->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 ดงตอไปน

Page 143: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

126

ตวอยางท 1 จงหาคาของฟงกชน ( ) ( ) ( )2f x = sin θ sec θ เมอ θ = 0, π/8, และ π/4

วธทา คาตอบของโจทยขอนหาไดจากการใชชดคาสงดงน

-->theta = [0, %pi/8, %pi/4];

-->fx = (sin(theta).^2) ./ cos(theta)

fx =

0. 0.1585127 0.7071068

นนคอ f(x) มคาเทา กบ 0, 0.1585127, และ 0.7071068 เมอ θ = 0, π/8, และ π/4 เรเดยน

ตวอยางท 2 จงหาคาของ ( ) ( ) ( )( )= 10f x tan x +log 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

ดงนน f(x) มคาเทากบ 0, 0.7912879, และ 1.43635 เมอ x = 0, 0.5, และ 1

ตวอยางท 3 กาหนดให ( )osin x+20 =0.8 จงหาคาของ ( )ocot 70 -x

วธทา จากทโจทยกาหนดจะไดวา

( )( ) ( )-1 o -10.8sin sin x+20 = sin

( )( ) π

o

-1

o0.8

20x = sin

180 เรเดยน

Page 144: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

127

ใชโปรแกรม SCILAB หาคา x ไดดงน

-->x = asin(0.8) - 20*%pi/180

x =

0.5782294 //หนวยเปนเรเดยน

จากนน แทนคา x ลงใน ( ) ( )1

=o

otan 70 -xcot 70 -x จะไดผลลพธเทากบ

-->y = 1/tan((70*%pi/180) - x) //แปลง o70 ใหมหนวยเปนเรเดยน

y =

1.3333333

นนคอ ถา ( )osin x+20 =0.8 แลวจะไดวา ( )o=

4cot 70 -x 1.3333333 =

3

ตวอยางท 4 จงหาคา θ ททาใหสมการ ( ) ( ) ( )3 2- -4 +4 = 0cos θ cos θ cos θ

วธทา กาหนดให ( )x = cos θ จะไดวา +3 2- -4x 4 = 0x x ดงนนคาตอบของสมการนหา

ไดจาก

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

Page 145: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 146: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 147: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

130

4.8 สรป ในบทนไดอธบายถงฟงกชนพนฐานทใชสาหรบการคานวณทางคณตศาสตร เชน ฟงกชนพนฐานท เกยวกบตวเลข , ฟงกชนตรโกณมต , ฟงกชนไฮเพอรโบลก , และฟงกชนพนฐานทางสถต เปนตน ซงเปนประโยชนมากในการแกไขปญหาทางวศวกรรมและวทยาศาสตร โดยเมอเขาใจถงรปแบบการใชงานของฟงกชนตางๆ แลว กจะทาให สามารถพฒนาโปรแกรมทมการคานวณทซบซอนได นอกจากฟงกชนทกลาวมาในบทน โปรแกรม SCILAB ยงไดเตรยมฟงกชนอนๆ อก จานวนมากทใชในการคานวณเฉพาะทาง สาหรบผสนใจสามารถศกษารายละเอยดเพมเตมได จากคาสง help

4.9 แบบฝกหดทายบท 4.1 จงคานวณหาคาของฟงกชน f(x) ตอไปน เมอ x = −2, 0, 2, −2i, และ 2i

4.1.1) ( )310f(x) x 2x log 3x 5= − + −

4.1.2) ( )x x

x 3e

e ef(x) 3e log

2

−+ +

= +⎛ ⎞⎜ ⎟⎝ ⎠

4.1.3) ( ) ( ) ( )3xf 4cosh x 3cosh x= −

4.2 กาหนดใหตวแปร x เปนเลขจานวนจรง จงพสจนวา

4.2.1) ( ) ( ) ( )alog x log x /log a=

4.2.2) ( ) ( ) ( )a a alog xy log x log y= +

4.2.3) ( ) ( )ya alog x ylog x=

4.3 กาหนดใหตวแปร x เปนเลขจานวนจรง จงพสจนวา

4.3.1) ( ) ( ) ( )sin 2x 2sin x cos x=

4.3.2) ( ) ( ) ( ) ( ) ( )2 2 2 2cos 2x cos x sin x 1 2sin x 2cos x 1= − = − = −

4.3.3) ( ) ( )( )2

2tan xtan 2x

1 tan x=

Page 148: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

131

4.3.4) ( ) ( ) ( )3sin 3x 3sin x 4sin x= −

4.3.5) ( ) ( ) ( )3cos 3x 4cos x 3cos x= −

4.3.6) ( ) ( ) ( )( )

3

2

3tan x tan xtan 3x

1 3tan x

−=

4.3.7) ( ) ( ) ( )3sinh 3x 3sinh x 4sinh x= +

4.3.8) ( ) ( ) ( )3cosh 3x 4cosh x 3cosh x= −

4.3.9) ( ) ( ) ( )( )

3

2

3tanh x tanh xtanh 3x

1 3tanh x

+=

+

4.3.10) ( ) ( )( ) ( ) ( ){ }zz zr cos x isin x r cos zx isin zx+ = + โดยท 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) 1 2 n 1 2 nx x x x x x+ + + = + + +… … เมอ x คอ คาสงยคของ x

4.5.2) 1 2 n 1 2 nx x x x x x⋅ = ⋅

4.5.3) ( )nnx x=

4.5.4) 2 2 21 2 1 1 2 2x x x 2 x x x+ ≤ + ⋅ +

4.5.5) 1 2 1 2x x x x+ ≤ +

Page 149: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) จงเรยงลาดบคะแนนของนกเรยนในหองจากคามาก ไปหาคานอย

Page 150: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 151: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จงหาผลรวมของเลขจานวนเตมค (odd number) ตงแตคา 1 ไปเรอยๆ เปนจานวน N = 10 ครง โดยใชโปรแกรม SCILAB นนคอ การหาคา y จากความสมพนธ

( )N elements

y 1 3 5 2N 1= + + + + −…

วธทา จากโจทยทใหมา สามารถเขยนโปรแกรม SCILAB เพอคานวณหาคา y ไดดงน

-->N = 10;

-->y = 0;

-->for i = 1:N

--> y = y + (2*i - 1);

-->end

Page 152: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

135

เมอประมวลผลชดคาสงนแลว จะไดวา ตวแปร y มคาเทากบ 100 นนคอ

-->y

y =

100.

5.1.2 คาสง while คาสง while มลกษณะการทางานคลายกบคาสง for เพยงแตคาสง while จะมการทดสอบเงอนไขทผเขยนโปรแกรมกาหนด ไวในนพจนทกๆ รอบของการวนซา กลาวคอถาผลการทดสอ ใหคาตรรกะเปน คา 1 (เปนจรง) โปรแกรมกจะทาซาชดคาสงภายในลปนนต ออกหนงรอบ แตถาผ การทดสอบใหคาตรรกะเปน คา 0 (เปนเทจ) โปรแกรมกจะ ยกเลกการทางานชดคาสงภายในลป นนทนท คาสง while มรปแบบการใชงาน ดงน

ตวอยางการใชงานคาสงการ วนซา while มดงน

-->L = 5;

-->x = [];

-->i = 1;

-->while i <= L

--> x(i) = i;

--> i = i + 1;

-->end

while expression

instruction_1;

instruction_n;

end

Page 153: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

136

สงเกตจะพบวาชดคาสงนคลายกบตวอยางของการใชคาสง for แตการใชคาสง while นนจะตองกาหนดคาเรมตนของตวแปร i กอน เพอทจะไดนาคา i ไปทาการเปรยบเทยบกบคา L ตามเงอนไขทกาหนด ผลลพธของการประมวลผลชดคาสงนคอ

-->x'

ans =

1. 2. 3. 4. 5.

ซงมคาเทากนกบผลลพธทไดจากการใชคาสง for ดงนนจะเหนไดวาคาสง while และคาสง for มความคลายกนมาก เพยงแตคาสง while จะมการทดสอบเงอนไขกอนทจ ะตดสนใจวาจะสงให โปรแกรมทางานชดคาสงภายในลปหรอไม

5.2 คาสงทดสอบเงอนไข คาสงทดสอบเงอนไขมความจาเปนมากสาหรบการเขยนโปรแกรมคอมพวเตอรทซบซอน โปรแกรม SCILAB ไดเตรยมคาสงทดสอบเงอนไขไวอย 2 รปแบบ คอ คาสง if และคาสง select-

case ซงมหลกการใชงาน ดงน

5.2.1 คาสง if คาสง if จะทาการทดสอบเงอนไขความสมพนธวาเปนจรงหรอ เปนเทจ โดยมรปแบบการใชงาน คอ

if expression then

instruction_1;

instruction_n;

end

Page 154: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

137

กลาวคอถาผลการทดสอบ เงอนไขในนพจนเปนจรง โปรแกรม SCILAB กจะทาคาสงทงหมดทอย ระหวางคาวา then และ end แตถาผลการทดสอบเปนเ ทจ โปรแกรม SCILAB จะไมทา คาสงทงหมดทอยระหวางคาวา then และ end

นอกจากนคาสง if ยงสามารถนาไปใชงานกบการตดสนใจทซบซอนมากขนไดโดย การใชงานรวมกบ else ซงมรปแบบการใชงาน ดงน

นนคอถาผลการทดสอบเงอนไขในนพจนเปนจรง โปรแกรม SCILAB จะทาคาสงทงหมดทอย ระหวางคาวา then และ else แตถาผลการทดสอบเปนเทจ โปรแกรม SCILAB จะทาคาสงทงหมดทอยระหวางคาวา else และ end แทน

ในการใชงานทมการตดสนใจทซบซอนมากยงขน ผใชกสามารถใชงานคาสง if รวมกบ elseif ได โดยมรปแบบการใชงานดงน

if expression_1 then

instructions_set1;

elseif expression_2 then

instructions_set2;

else

instructions_set3;

end

if expression then

instructions_set1;

else

instructions_set2;

end

Page 155: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 156: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

139

5.2.2 คาสง select-case การทดสอบเงอนไขความสมพนธสามารถทาไดอกรปแบบหนงคอ การใชคาสง select รวมกบ case โดยมรปแบบการใชงาน ดงน

กลาวคอโปรแกร ม 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” เสมอ

select expression

case result_1 then instructions_1;

case result_n then instructions_n;

else instruction_m;

end

Page 157: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ไฟลสครปต ไฟลสครปตเปนไฟลขอมล (text file) ทรวบรวมคาสงตางๆ ทตอง การใหโปรแกรม SCILAB ทางานบรรจไวในไฟลเดยว เพอทจะไดสะดวกตอ การทางานทตองการแบงแยกสวนของขนตอน การทางานแตละขนตอนใหชดเจน จะไดงายตอการตรวจสอบ ปรบปรง และแกไขขนตอนการทางาน นนๆ ดงนนไฟลสครปตจงชวยหลกเลยงปญหาความผดพลาดทอาจจะ เกดขนได ถานาเอาชดคาสงทงหมด มารวมไวในโปรแกรมหลกทเดยว นอกจากนการตรวจสอบและ การแกไข ขอมลตางๆ ในไฟลสครปตกสามารถทาไดงาย โดยการใชโปรแกรมเอดเตอรทวไป เชน โปรแกรม Notepad,

WordPad, หรออาจจะใชโปรแกรมเอดเตอรของ SCILAB เองทเรยกวา “Scipad” กได

ในทางปฏบตไฟลสครปตจะเปนไฟลทปดทายดวย .sce และสามารถใชคาสง exec ในการประมวลผลไฟลสครปต การทางานของไฟลสครปตจะเทยบเทากบการปอนคาสงผานโปรแกรม SCILAB โดยตรงตามปรกตทละคาสง ตามลาดบทปรากฎอยในไฟลสครปต ดงนนตวแ ปรทงหมดทใชในไฟลสครปตจงถอวาเปน ตวแปรโกลบอล (global variable) ซงหมายความวา ถาตวแปรตางๆ ทใชในหนาตางคาส งกอนการเรยกใชงานไฟลสครปต มชอซ ากบตวแปรทอยใ นไฟลสครปตแลว คาของตวแปรเหลานนกสามารถทจะถกเปลยนไป ไดตามคาสง ทอยในไฟลสครปต

Page 158: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ดงตอไป น

Page 159: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

142

ขอกาหนดในการเขยนไฟลฟงกชน มดงน ไฟลฟงกชนทสรางขนมาจะตองเรมตนดวยคาวา “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

function [ y1, y2 , ..., yn ] = function_name (x1, x2, ..., xm)

instruction_1;

instruction_n;

endfunction

Page 160: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 161: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 แลว โปรแกรม

SCILAB กจะทาการประมวลผลชดคาสง ภายในไฟลฟงกชน MySum จากนน กจะสงผลลพธ ทไดออกมาบรรจไวในตวแปร 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 ดงแสดงในตวอยางตอไปน

Page 162: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 มากขน

Page 163: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 และผลบวกของเลขจานวนค

Page 164: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ไดดงน

Page 165: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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(อนพต)', 'ชดคาสง ')

Page 166: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 167: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

150

รปท 5.1 รายละเอยดของขอมลภายในไฟล mydiary.txt โดยใชโปรแกรมเอดเตอร WordPad

เมอใชคาสง diary(0) กจะถอวาเปนการสนสดการ บนทกขอมลและทาใหไดไฟลเอาตพตออกมาทชอวา “mydiary.txt” ในสารบบทกาลงทางานอย ณ ขณะนน เมอลองใชโปรแกรมเอดเตอร ทชอวา “WordPad” เปดอานไฟลนด กจะไดตามทแสดงในรปท 5.1 ซงจะพบวาขอมลทอยใน ไฟลนจะเหมอนกบขอมลท ปรากฎอยใน หนาตางคาสง ตงแต มการเรยกใชคาสง diary จนถงคาสง diary(0)

ประโยชนของไฟลไดอารกเพอทาหนาทเกบบนทก ขอมลตางๆ ทแสดงผลออกทาง หนาตางคาสง เพอทจะ ไดนาขอมลเหลานไปวเคราะหและประมวลผลในขนตอนตอไป

5.5 ความรเพมเตมในการเขยน ไฟลฟงกชน ในสวนนจะกลาว ถงการโหลดไฟลฟงกช น คาสงพนฐานท ใชบอยสาหรบการพฒนา ไฟลฟงกชน พรอมทงแนะนา เทคนคการเขยนโปรแกรมใหมประสทธภาพ

Page 168: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 169: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 170: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 กจะหายไปดวย

Page 171: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 172: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

155

5.5.3 ขอแนะนาในการพฒนาโปรแกรมใหมประสทธภาพ การพฒนาโปรแกรมเพอใหสอดคลองกบขอกาหนดทตองการสามารถทจะทาไดหลายวธ ทงน จะขนอยกบทกษะและความถนดของผพฒนา โปรแกรมแตละคน โดยทวไป ผพฒนาโปรแกรมจะพยายามทจะทาใหไดโปรแกรมทสามารถทางานไดอยาง ถกตองและรวดเรว

เนองจากโปรแกรม SCILAB เปนโปรแกรมททางานบนพนฐานของเมทรกซ ดงนน หลกการเขยนโปรแกรมทดคอ ควรจะพยายามใชประโยชนจากโครงสรางของเมทรกซและพยายามหลกเลยงการใชคาสง วนซ าตางๆ ใหมา กทสด ลองพจารณตวอยางกา รคานวณหาคาผลรวมของ

ฟงกชน ( )2

2

3i +2i-1f i =

5i สาหรบคาตวแปร i ตงแตค า 1 ถงคา 200000 นนคอการ หาคา

ของตวแปร y จาก

⎛ ⎞⎜ ⎟⎝ ⎠

∑2200000

2i=1

3i +2i-1y =

5i

ซงสามารถเขยนเปนชดคาสงเพอหาคา 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 วนาท อยางไรกตาม ผใชสามารถทจะพฒนาชดคาสง ใหมใหมผลลพธเทาเดม แตใชความเรว ในการประมวลผลนอยลงไดโดยใชประโยชนจากโครงสรางของเมทรกซ ดงตอไปน

Page 173: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 174: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

วธทา เนองจากระยะทางระหวางจดสองจ ดหาไดจาก ( ) ( )2 2d = x1-x2 + y1-y2 ดงนน

โปรแกรมนสามารถสรางไดดงน

function [d] = FindDistance(x1, y1, x2, y2)

d = sqrt((x1-x2)^2 + (y1-y2)^2)

endfunction

เมอเขยนไฟลฟงกชนเสร จกทาการ บนทกไฟลนในชอ FindDistance.sci ตวอยาง เชน

Page 175: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 176: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

159

-->y = MySumMod(1, 13, 3)

y =

30.

-->y = MySumMod(3, 50, 7)

y =

196.

ตวอยางท 5 จงเขยนโปรแกรมเพอหาคาของ ฟงกชน

( )( )

( )( )

,x 2

, 2 < x < 2

,x 2

≤ −

⎧⎪⎨⎪⎩

2

2

x10

2x - 3cos x

f x = cosh (x) + 1

log x + e

เมอ 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 ตวอยาง การใชงานเชน

Page 177: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

160

-->getf('MyFx.sci') //ทาการโหลดไฟลฟงกชน กอนเรยกใชงาน

-->fx = MyFx(-3)

fx =

10.117204

-->fx = MyFx(0.3)

fx =

1.446628

-->fx = MyFx(2.2)

fx =

11.445503

ตวอยางท 6 จงเขยนโปรแกรมเพอหาคาของ ฟงกชน ( ) ( )N2

i 0f N i -3i

== ∑ เมอ N เปนเลขจานวน

เตมบวก โดยกาหนดให มรปแบบการเรยกใชงานดงน

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.

Page 178: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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-

Page 179: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

162

elseif-else-end, และ select-case) นอกจากนยงไดอธบายถง หลกการพฒนาฟงกชน ขอแตกตางระหวางไฟลสครปตและไฟลฟงกชน การสรางไฟลไดอาร รวมทงใหขอแนะนาในการพฒนาโปรแกรมใหมประสทธภาพ และแสดงตวอยางการ เขยนโปรแกรมเพอใชในการแกไขปญหาโจทยทางคณตศาสตร ดงนน จากทอธบายในบทนจะ เหนไดวาการพฒนาฟงกชน รปแบบใหมๆ ขนมาใชงานรวมกบโปรแกรม SCILAB สามารถทาไดโดยงาย

5.8 แบบฝกหดทายบท 5.1 กาหนดใหตวแปร N เปนเลขจานวนเตมบวกใดๆ จงเขยนโปรแกรมโดยใชคาสง for เพอ

คานวณหาคาตอไปน

5.1.1) N

i 1i 1 2 3 N

== + + + +∑ …

5.1.2) N

2 2 2 2 2

i 1i 1 2 3 N

== + + + +∑ …

5.1.3) N

3 3 3 3 3

i 1i 1 2 3 N

== + + + +∑ …

5.2 ทาเหมอนกบขอ 5.1 โดยใชคาสง while แทน

5.3 จงอธบายขอแตกตางระหวางคาสง for และคาสง while

5.4 กาหนดใหตวแปร N เปนเลขจานวนเตมบวกใดๆ จงพสจนวา

5.4.1) ( )N

i 1

Ni N 1

2== +∑

5.4.2) ( )( )N

2

i 1

Ni N 1 2N 1

6== + +∑

5.4.3) ( )2N

3

i 1

Ni N 1

2== +⎛ ⎞⎜ ⎟⎝ ⎠

5.4.4) ( )N

i 1

1 N

i i 1 N 1==

+ +∑

Page 180: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

163

5.5 จงเขยนโปรแกรมเพอคานวณหาตวคณรวมนอย (least common 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 คาอนๆ ใหโปรแกรมหยด

Page 181: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จงเขยนโปรแกรมเพอหาคาของ ฟงกชนตอไปน

( )( )

( ) ( )

2

3

2 , 10 1

10 , 1 5sin cos 2 , 5 10

0 elsewhere

x x

x xf xx x x

+ − ≤ < −

− − ≤ <=− ≤ <

⎧⎪⎪⎨⎪⎪⎩

5.12 จงเปรยบเทยบขอแตกตางระหวางคาสง exec และคาสง getf

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 พรอมแสดงตวอยางการใชงานคาสงน

Page 182: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 6 การวาดกราฟดวย SCILAB การทางานในดานตางๆ หลงจากททาการวเคราะหขอมล เสรจแลว ขนตอนตอไปกคอการนาเสนอ ผลงานวจยหรอผลการทดลองทไดมา ซงโดยทวไป แลวมกจะแสดงผลในรปของรปกราฟ (graph) เชน แผนภม กราฟแทง และกราฟเสน เปนตน เนองจากสอความหมายใหเขาใจไดโดยงาย ดงนนในบทนจะขออธบายถงหลกการวาดกราฟโดยใชโปรแกรม SCILAB ทงทเปนแบบสองมตและสามมต

6.1 รายละเอยดหนาตางกราฟ เมอใชคาสงในการวาดกราฟ โปรแกรม SCILAB จะทาการสรางหนาตางกราฟ (graphics window) ขนมาใหมทชอวา “SCILAB Graphic (j)” เพอแสดงผลของกราฟทวาดขนมา โดยท j เปนเลขจานวนเตมทมากกวาหรอเทากบศนย ซงแสดงถงหมายเลขของหนาตางกราฟ ดงแสดงในรปท 6.1 ซงในทน j มคาเทากบคา 0 จะหมายความวาหนาตางททางานอย (active window) ขณะนคอ หนาตางกรา ฟหมายเลขศนย จากรปท 6.1 หนาตางกราฟจะมแถบเมน (menu bar) อยหน งแถบ ประกอบไปดวยสามเมนหลก คอ เมน File, Tools และ Edit โดยทแตละ เมนหลกจะมเมนยอย ตามทแสดงในรปท 6.2 ซงรายละเอยดของแตละเมนหลกสามารถอธบายไดดงตอไปน

เมน File ประกอบไปดวย New … สรางหนาตางกราฟใหมขนมา

Load … เปดรปภาพทบนทกไวในไฟลตามรปแบบ (format) ของโปรแกรม SCILAB (โดยทวไปจะเปนไฟลทปดทายดวย .scg)

Page 183: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

166

รปท 6.1 ตวอยางหนาตางกราฟทใชแสดงผลรปภาพของโปรแกรม SCILAB

รปท 6.2 รายละเอยดของเมนหลกแตละอนในหนาตางกราฟ

Save … บนทกรปกราฟลงไปเกบไว ในไฟลตามรปแบบของโปรแกรม SCILAB (โดยทวไป จะเปนไฟลทปดทายดวย .scg)

Export บนทกรปกราฟลงไปในไฟลทเปนรปแบบเฉพาะ (specific format) เชน Postscript, Xfig, GIF, BMP, และ PPM เปนตน

Page 184: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ลบรปกราฟทแสดงอยในหนาตางกราฟ

Page 185: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 186: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 187: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

170

รปท 6.3 สญญาณไซนซอยด y = sin(2πft)

รปท 6.4 สญญาณ sin(2πft) และ cos(2πft)

Page 188: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ซงจะไดผลลพธตามรปท 6.5 จะเหนไดวาชดคาสงขางตน มการเรยกใชคาสง subplot(m,n,i) เพอชวยทาใหสามารถวาดกราฟไดหลาย ๆ กราฟในหนาตางกราฟเดยวกน โดยคาสง subplot

Page 189: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)') จะใหผลลพธเหมอนกน

Page 190: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 191: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

174

รปท 6.6 ตวอยางรปกราฟแสดงการใชพารามเตอร style ในคาสง plot2d

ตารางท 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]);

Page 192: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

175

รปท 6.7 ตวอยางรปก ราฟแสดงการใชคาสงกาหนดส ของเสนกราฟ

ตารางท 6.3 การกาหนดลกษณะของเสนแกนในหนาตางกราฟ axesflag = [j] คาอธบาย

j = 0 ไมตองแสดงเสนแกน (ทงเสนแกน x และเสนแกน y)

j = 1 แสดงเสนแกนพรอมขอมลของเสนแกน โดยทเสนแกน y จะแสดงอยทางดานซาย (คาโดยปรยาย )

j = 2 แสดงเสนแกน แตไมตองแสดงขอมลของเสนแกน j = 3 แสดงเสนแกนพรอมขอมลของเสนแกน โดยทเสนแกน y จะแสดงอยทางดานขวา j = 4 แสดงเสนแกน ณ ตาแหนงกงกลางของกรอบ (frame) รปภาพ

j = 5 เปนการกาหนดใหเสนแกน x และเสนแกน y จะตองตดกนทจด (0,0) ถาจด (0,0) ไมไดอยในกรอบรปภาพ เสนแกนจะไมแสดงออกมา

โดยคาสง linspace(vmin, vmax, num) จะเปนการแบงคาสงสด vmax กบค าต าสด vmin เปนจานวน num ตว ผลลพธของชดคาสงนแสดงในรปท 6.7 ซงจะไดกราฟสองเสน เสนหนงมสดา (สาหรบ j = 1) และอกเสนหนงมสแดง (สาหรบ j = 5)

axesflag มลกษณะการใชงานคอ axesflag = [j] โดยทคาของพารามเตอร j จะเปนตวกาหนด ลกษณะของเสนแกนในหนาตางกราฟ โดยมรปแบบตางๆ ตามทแสดงในตารางท 6.3 ตวอยางการใชงาน พารามเตอร axesflag มดงน

Page 193: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

176

รปท 6.8 ตวอยางรปกราฟแสดงการใชพารามเตอร axesflag ในคาสง plot2d

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

leg ใชในการใสขอความบรรยาย (description) เสนกราฟแตละเสน ซงมลกษณะการใชงาน คอ 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

Page 194: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

177

รปท 6.9 ตวอยางรปกราฟแสดงการใชพารามเตอร leg และ rect ในคาสง plot2d

logflag ใชในการกาหนดลกษณะของเสนแกน x และเสนแกน y วาจะใหเปน สเกลแบบธรรมดาหรอสเกลแบบลอการทม (logarithm) โดยคาทเปนไดของ logflag มทงหมด สแบบ คอ "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

Page 195: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

178

รปท 6.10 ตวอยางรปกราฟแสดงการใชพารามเตอร logflag ในคาสง plot2d

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

Page 196: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

179

รปท 6.11 ตวอยางรปกราฟแสดงการใชพารามเตอร nax ในคาสง plot2d

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

Page 197: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

180

ตารางท 6.4 การกาหนดลกษณะขอบเขตของเสนแกนในหนาตางกราฟ frameflag = [j] คาอธบาย

j = 0 ใชสเกลเดม (previous scale) ทใชในการวาดรปกราฟกอนหนาน ในการวาดกราฟรปใหม (เปนคาโดยปรยาย )

j = 1 ขอบเขต (range) ของหนาตางกราฟ จะถกกาหนดโดย พารามเตอร rect

j = 2 ขอบเขตของหนาตางกราฟ จะถกกาหนดโดยคาตาสดและคาสงสดขอ งขอมล ทใชในตวแปร x และ y

j = 3 เหมอนกบ j = 1 แตใชสเกล แบบสมมต (isometric scale) j = 4 เหมอนกบ j = 2 แตใชสเกล แบบสมมต

j = 5 เหมอนกบ j = 1 แตอาณาเขตของหนาตางกราฟจะม ขนาดขนเพอให ปายของเสนแกนสวยงาม (pretty axes)

j = 6 เหมอนกบ j = 2 แตอาณาเขตของหนาตางกราฟจะมขนาดขนเพอให ปายของเสนแกนสวยงาม

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) เขาไปในรปกราฟ

Page 198: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

181

รปท 6.12 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง xgrid

ซงจะไดผลลพธตามทแสดงในรปท 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

Page 199: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

182

รปท 6.13 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง xset

6.2.2.4 คาสง plotframe เปนคาสงทใช สรางกรอบ (frame) สาหรบวาดรปกราฟ โดยมลกษณะการใชงานดงน

plotframe(rect, tics, [options])

โดยทความหมายของพารามเตอรแตละตว คอ rect เปนเวกเตอร [xmin, ymin, xmax, ymax] ทใชกาหนดคาตาสดและ

คาสงสดของเสนแกน x และ y tics เปนเวกเตอร [nx, Nx, ny, Ny] โดยท Nx และ Ny คอจานวนขดหลก

(main tics) ทจะแบงบน เสนแกน x และ y ในขณะท nx และ ny คอจานวน ขดยอย (subtics) ทจะแบงใน แตละชองของ Nx และ Ny

options มรปแบบการใชงานอยสามแบบ คอ

Page 200: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ดานลางขวา

Page 201: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

184

รปท 6.14 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง plotframe

โดยทคาสง tics = [1, 10, 1, 5] หมายถงกาหนด ใหเสนแกน x มสบขดหลกและมหนงขดยอยระหวางขดหลก สวนเสน แกน y มหาขดหลกและมหนงขดยอยระหวางขดหลก ผลลพธทไดจากชดคาสงน แสดงในรปท 6.14

6.2.2.5 คาสง xstring เปนคาสงทใชบรรจ สายอกขระเขาไปในรปกราฟตามรปแบบและตาแหนงทกาหน ด มลกษณะการใชงานดงน

xstring(x, y, str, angle, box)

โดยทพารามเตอร

Page 202: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 203: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 กจะทาการลบหนาตางกราฟทกาลงทางานอย

Page 204: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

187

x

y

( )yx,

r

θ

รปท 6.16 ความสมพนธระหวาง จด (x, y) ในระบบพกดฉาก และจด (r, θ) ในระบบพกดเชงขว

คาสง xget ใชเรยกดคาพารามเตอรตางๆ ทใชในการกาหนดรปแบบของ รปกราฟ กลาวคอคา พารามเตอรทงหมด ทใชในคาสง xset สามารถทจะถก เรยกออกมาดไดโดยใชคาสง xget

คาสง xgetech ใชเรยกดคาพารามเตอรตางๆ ทใชในการกาหนดขนาดหรอสเกล ของ รปกราฟ

6.2.3 กราฟเชงขว นอกจากการวาดกราฟสองมตแบบทวไปในระบบพกดฉาก x-y ตามทอธบายไวในหวขอทผานมาแลว โปรแกรม SCILAB ยงสามารถทจะวาดกราฟในระบบพกดเชงขว (polar coordinates) ไดดงแสดงตอไปน

โดยทวไป จด (x, y) ทแสดงถงตาแหนง (location) บนรปกราฟในระบบพกดฉากสามารถทจะเปลยนใหอยในรปของ จด (r, θ) ในระบบพกดเชงขวได โดยท r คอขนาด และ θ คอมมเรเดยน (เทยบกบแกน x ในทศทวนเขมนาฬกา) โดยอาศยกฎของตรโกณมต นนคอ จากรปท 6.16 จะไดวา

2 2r x y= + และ y1θ tanx

−= ⎛ ⎞⎜ ⎟⎝ ⎠

ในทานองเดยวกนจดพกด (r, θ) ในระบบพกดเชงขว กสามารถ ทจะแปลงกลบไปเปนจดพกด (x, y) ในระบบพกดฉากไดจากความสมพนธ ดงน

Page 205: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ตวอยางการใชงานคาสงเหลาน เชน

Page 206: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

189

รปท 6.17 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง polarplot

ตารางท 6.5 ตวอยางคาสงในการวาดกราฟสองมตสาหรบการใ ชงานเฉพาะดาน

คาสง คาอธบาย fplot2d วาดกราฟทวไปแบบสองมต ทกาหนดโดยฟงกชนทางคณตศาสตร grayplot วาดกราฟสแสดงพนผว (surface) แบบสองมต fgrayplot วาดกราฟสแสดงพนผวแบบสองมต ทกาหนดโดยฟงกชนทางคณตศาสตร histplot วาดกราฟฮสโตแกรม (histogram plot) contour2d วาดกราฟคอนทวร (contour surface) จากรปกราฟสองมต champ วาดกราฟสนามเวกเตอรแบบสองมต (2-D vector field)

fchamp วาดกราฟสนามเวกเตอรแบบสองมต ทกาหนดโดยสมการอนพนธอนดบหนง (first-order ordinary differential equation)

bode วาดกราฟของโบดไดอะแกรม (Bode diagram) ทงกราฟแสดงขนาด (magnitude

plot) และกราฟแสดงมม (phase plot) ซงมประโยชนมากทางดานวศวกรรม gainplot วาดกราฟแสดงขนาดของโบดไดอะแกรม nyquist วาดกราฟไนควตซ (Nyquist plot) evans วาดกราฟอแวนรทโลคส (Evans root locus) plzr วาดกราฟโพล-ซโร (pole-zero plot)

Page 207: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 จะเปนตวกาหนดคาในเสน แกน y, และตวแปรตามทมคาเปลยนแปลงไปตามคา x และ y ซงกคอ ขนาดของคาบนเสนแกน z นนเอง ดงนน ตวแปรตาม z นจะ ตองมจานวนเทากบผลคณของจานวนขอมลในเวกเตอร x กบจานวนขอมลในเวกเตอร y

Page 208: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

191

รปท 6.18 ตวอยางรปกราฟแสดงผลลพธจากการใชชดคาสง สาหรบวาดกราฟสองมตทใชงานเฉพาะดาน

คาสงพนฐานสาหรบการวาดกราฟแบบสามมตในโปรแกรม SCILAB มรปแบบดงน

plot3d(x, y, z, [options])

โดยทพารามเตอร x และ y คอเวกเตอรทมขนาดเทากน และพารามเตอร z คอตวแปรตามทขนกบ คาของ x และ y ซงจะมจานวนเทากบผลคณของจานวนขอมลในเวกเตอร x กบจานวนขอมลในเวกเตอร y สาหรบพารามเตอร options มลกษณะการใชงานคอ

options = [alpha, theta, leg, flag, ebox]

Page 209: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

192

αθ

x

y

z

รปท 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]

โดยท

Page 210: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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]

Page 211: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ดงนนผใชสามาร ถวาดรปพนผวรางแหไดจากคาสงนเชนกน

Page 212: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

195

รปท 6.20 ตวอยางรปกราฟแสดงผลลพธจากการ ใชคาสง plot3d

รปท 6.21 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง plot3d1

ซงจะไดผลลพธตามรปท 6.21

นอกจากนถาตองการทราบความสมพนธระหวางสกบขนาดของคาในแกน z กสามารถทาไดโดยใชคาสง colorbar ซงมรปแบบการใชงานคอ

Page 213: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ดานบนซาย

Page 214: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

197

รปท 6.22 ตวอยางรปกราฟแสดงผลลพธจากการใชคา สง colorbar รวมกบ 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;

Page 215: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) หรอกราฟเสนชนความสง เปนกราฟทเกดจากการเฉอนรปกรา ฟสามมตแลวมองจากดานบนลงมาจะไดออกมาเปนเสนชนความสง โดยแตละเสน ชนความสง ทมส

Page 216: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ทเทากน

Page 217: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

200

รปท 6.24 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง plot3d1

ตารางท 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);

Page 218: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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);

Page 219: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

202

รปท 6.25 ตวอยางรปกราฟแสดงผลลพธจากการใชชดคาสง สาหรบวาดกราฟสามมตทใชงานเฉพาะดาน

-->contour(x, y, z, 4, theta = 35, alpha = 15, flag = [1,1,4], ...

-->ebox = rect, zlev = -5);

ผลลพธทไดแสดงในรปท 6.26 ซงจะเหนไดวาการวาดกราฟแบบผสมนไมยงยาก ดงนนผใชสามารถ ทจะวาดกราฟแบบผสมใดๆ กไดโด ยใชคาสงวาดกราฟตางๆ ตามทไดอธบายไวขางตน เพอทจะได รปกราฟในแบบทตองการ

6.5 ตวอยางการวาดกราฟ ในสวนนจะยกตวอยางการวาดกราฟแบบตางๆ เพอใหเขาใจถงขนตอนในการวาดกราฟทมคณสมบต ตามทระบไว ดงตอไปน

Page 220: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

203

รปท 6.26 ตวอยางการวาดรป กราฟแบบผสม

ตวอยางท 3 ในเรองการสอสารดจทล (digital communication) ฟงกชนของรปสญญาณทพบบอย คอฟงกชน ซงก (sinc function) ซงมรปแบบตามสมการ

( )sin xy =

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); //ใสเสนกรดสแดงในหนาตางกราฟ

Page 221: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

204

รปท 6.27 รปสญญานของฟงกชน ซงก y = sin(x)/x

ในชดคาสงบรรทดทสาม คาสง find จะทาหนาทหาตาแหนงของตวแปร x ทมคาเปนศนยวาอย ตาแหนง ไหน จากนนกเปลยนคาของตวแปร x ทมคาเปนศนยให มคาเทากบ %eps แทน เพอปองกนการหารดวยคา 0 ของฟงกชน y ผลลพธทไดจากชดคาสงนแสดงในรป ท 6.27

ตวอยางท 4 ฟงกชน ซงกแบบสามมตสามารถแสดงไดดวยสมการ

( )sin dy =

d และ 2 2d = x + y

โดยท d คอระยะทางจากจดศนยกลางไปยงจดใดๆ ในพกดทรงกลม (ดรปท 6.19) จงวาดรปกราฟของฟงกชน ซงกแบบสามมต ถากาหนดให –6 < x < 6 และ –6 < y <6 และตองการใหรปกราฟทไดมการไลโทนส และมแถบสแสดงความสมพนธระหวางสตางๆ กบขนาดของคาใน เสนแกน z

วธทา รปกราฟของฟงกช นซงกแบบสามมตสามารถทจะวาดโดยใชโปรแกรม SCILAB ไดดงน

Page 222: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 223: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

206

φ

θ

x

y

z

ρ

( )zy,x,

รปท 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 ถง π

Page 224: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 225: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

208

ตวอยางท 6 จงวาดรปกราฟพนผวแบบมสของรป ทรงหวงยาง (torus) ทมลกษณะเหมอนกบขนมโดนตบนระบบพกดคารทเซยน โดยกาหนดให มความยาวรศมของรปทรงหวงยาง ในระนาบ x–y เทากบ 1.4 หนวย และใน แนวแกน z เทากบ 0.5 หนวย และจดศนยกลางของรป ทรงหวงยาง อยทจดพกด (x, y, z) = (0, 0, 0)

วธทา กอนอนใหพจารณาสมการของรป ทรงหวงยาง บนระบบพกดคารทเซยน ดงน

( )22 2 2 2c x y z 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);

Page 226: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ตวอยางท 7 กาหนดให ( ) ( )( ) ( )-sin xf x = 2+cos x e เมอ 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 ดานขวา

Page 227: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

210

รปท 6.32 รปกราฟของฟงกชน ( ) ( )( ) ( )-sin xf x = 2+cos x e

ผลลพธทไดแสดงในรปท 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

Page 228: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) กราฟเชงเสน

Page 229: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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

Page 230: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

213

6.5 เสนโคงลมาคอน (Limacons) ถกกาหนดโดยสมกา ร ( ) r a bsin θ= ± และ ( ) r a bcos θ= ± เมอ 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

6.7 เสนโคงเลมนสเคต (Lemniscates) ถกกาหนด โดยสมการ ( )2 2r a sin 2θ= และ ( )2 2r a cos 2θ= เมอ a เปนเลขจานวนจรง และ 0 ≤ θ ≤ 2π จงวาดกราฟของสมการตอไปนในระบบพกดเชงขว

6.7.1) ( )2r 4sin 2θ=

6.7.2) ( )2r 9sin 2θ=

Page 231: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

214

6.7.3) ( )2r 4cos 2θ=

6.7.4) ( )2r 9cos 2θ=

6.8 เสนเวยนกนหอย (spirals) ถกกาหนดโดยสมการ r aθ= , aθr e= , และ rθ a= โดยท a เปนเลขจานวนจรง และ 0 ≤ θ ≤ 2π จงวาดกราฟของสมการตอไปนในระบบพกดเชงข ว

6.8.1) r 2θ=

6.8.2) ( )log r 2θe =

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) ( )2 2 2 2x y x y 2 2y 0+ + − − =

6.9.6) ( )22 2 2 3x y 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 แตวาดกราฟแบบผสม โดยผสมระหวางกราฟพนผวและกราฟคอนทวร

Page 232: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 7 พนฐานระบบอนพตและเอาตพต ระบบอนพต (input) และเอาตพต (output) หรอระบบ I/O เปนระบบทเกยวของกบการอาน และเขยนขอมลระหวางโปรแกรม SCILAB กบเครองคอมพวเตอร การอานขอมล หมายถงการอานขอมลจากคยบอรดหรอจากไฟล สวนการเขยนขอมล หมายถงการพมพขอมลเพอแสดงออกทางจอภาพของคอมพวเตอรหรอเปนการเขยนขอมลลงไปเกบไวในไฟลกไ ด ในบทนจะอธบายถง คาสงและหลกการในการเขยนโปรแกรม เพอใชในการอาน และเขยนขอมลระหวางโปรแกรม SCILAB

กบเครอง คอมพวเตอร ซงจะชวยทาใหสามารถพฒนา ฟงกชนแบบ ใหมๆ ได

7.1 คาสงพนฐานสาหรบการตดตอระบบอนพตและเอาตพต การเขยนโปรแกรมเพอทาหนาทในการอาน และเขยนขอมลระหวางโปรแกรม SCILAB กบเครองคอมพวเตอรนน สงท ควรคานงถงคอจะตองทราบวามคาสงอะไรบางท ทาหนาทเกยวของกบระบบ อนพตและเอาตพต รวมทงรปแบบก ารเรยกใชงานของคาสงเหลานน ฉะนน ในสวนนจะขออธบาย ถงคาสงพน ฐานในการตดตอระบบ อนพตและเอาตพตดงตอไป น

7.1.1 คาสง input เปนคาสงทใชในการอานคาจากคยบอรดเขามาเกบไวในตวแปร เพอนาไปประมวลผลในโปรแกรม SCILAB รปแบบการใชงานคาสงน คอ

[x] = input(message, ["string"])

Page 233: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 234: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 235: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) ในตวอยาง ตอไปน

Page 236: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 š

Page 237: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

ตวอยางการใชงานคาสงน เชน

Page 238: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 239: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 โดยเมออานขอมลจากไฟล เสรจแลวกใหทา การปดไฟล ขนตอน ทกลาวมา นสามารถเขยนเปนชดคาสงได คอ

Page 240: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 คอจานวนของตวอกขระทยอมใหมได

Page 241: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

224

o fw.d โดยท f สาหรบเลขจานวนจรง, w คอจานวนของตวอกขระทยอมใหมได, และ

d คอจานวนของจดทศนยม (d ≥ w+3)

o ew.d โดยท e สาหรบเลขจานวนจรงทแสดงในรปของเลขยกกาลง , w คอจานวนของ ตวอกขระทยอมใหมได, และ 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 เรมตนจะ อธบายถงตวอยางฟงกชน สาหรบใชในการคานวณหาพนทของรปสเหลยม, สามเหลยม, และวงกลม ดงตอไป น

Page 242: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 243: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

พจารณาตวอยาง ตอไปน ซงเปนฟงกชน สาหรบการสรางตารางขอมล เพอทจะไดเขาใจถงลกษณะการเขยนโปรแกรมเพอตดตอระบบอนพตและเอาตพตมากยงขน

Page 244: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 หมายถงใหแสดงผลลพธในรปแบบของเลขยกกาลง

Page 245: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 246: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ทาการประมวลผลคาของ สายอกขระ

นอกจากการใชคาสง read เพออานขอมลจากไฟลแลว ผใชยงสามารถใชคาสง fscanf ไดเชนกน ซงมรปแบบการใชงานดงน

Page 247: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 248: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

231

bb =

2.

6.

10.

aa =

1.

5.

9.

7.2.2 การเขยนขอมลลงในไฟล ในสวนนจะขอยกตวอยางการใช งานคาสง write เพอเขยนขอมลเขาไปเกบไวในไฟล ดงตอไป น สมมตวาตองการ สรางฟงกชน ชอ MyWriteToFile1.sci เพอบนทกคาของตวแปร x, x2,

และ x3 สาหรบ x = 1, 2, 3, 4, และ 5 ลงไปเกบไวในไฟลชอ temp1.txt ในสารบบ c:\กสามารถทาไดดงน

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

Page 249: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 250: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 251: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 252: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.2 ทาเหมอนกบขอ 7.1 แตใชคาสง 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.2) ทาเหมอนกบขอ 7.3.1 แตใหอานขอมลจากไฟลโดยใชคาสง fscanf

7.3.3) เปรยบเทยบผลลพธทไดจากขอ 7.3.1 และ 7.3.2

Page 253: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

236

7.4 กาหนดใหตวแปร t = -5:0.2:5

7.4.1) จงเขยนโปรแกรมเพอคานวณหาคา y = sin(t)/t โดยใหแสดงผลลพธของคา y ออกทางหนาตางคาสง พรอมทงเขยนข อมลคาของตวแปร y เขาไปเกบไวในไฟลชอ test2.txt โดยใชคาสง write

7.4.2) ทาเหมอนกบขอ 7.4.1 แตใหเขยนขอมลเขาไปเกบในไฟลชอ test3.txt โดยใชคาสง fprintf

7.4.3) เปรยบเทยบผลลพธทไดจากขอ 7.4.1 และ 7.4.2

7.5 จงเปรยบเทยบขอแตกตางของคาสง scanf, fscanf, และ read

7.6 จงเปรยบเทยบขอแตกตางของคาสง printf, fprintf, และ write

Page 254: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 8 การตรวจสอบหาขอผดพลาดของโปรแกรม การพฒนาโปรแกรมโดยทวไป สงทผ พฒนาโปรแกรมจะตองพบเสมอกคอ โปรแกรมทพฒนาขนมาไมสามารถทางานไดตามทคาดหวงไวอนเน องมาจากมจดบกพรอง (bug) ภายในตวโปรแกรมซงอาจจะเกดจากสาเหต ตางๆ เชน ขอผดพลาดทางดานไวยากรณ (syntax error) และขอผดพลาดจากอลกอรทม เปนตน ขอผดพลาดเหลาน จะทาใหโปรแกรมทพฒนาขนมาไมสามารถทางานได หรอถาทางานไดแตกจะใหผลลพธผดไปจากทคาดหวงไว ดงนน ผพฒนาโปรแกรมมความจาเปนทจะตองเขาใจเกยวกบหลกการทางานของฟงกชนทงหมดทใชภาย ในโปรแกรมอยางถกตอง หรอถามขอผดพลาดเกดขน ผพฒนาโปรแกรมกควรทจะสามารถคนหาไดวา อะไรเปนสาเหตของขอผดพลาดเหลานน (หรอสามารถหาตาแหนงของ จดบกพรองได) เพอทจะไดทาการแกไขตวโปรแกรม ใหถกตอง ซงขนตอนน จะเรยกวาการแกจดบกพรอง (debugging) ดงนนในบทนจะอธบายถงขนตอน และคาสง ตางๆ ทใชในการตรวจสอบหาขอผดพลาดของโปรแกรม

8.1 ขนตอนการตรวจสอบหาขอผดพลาด ในสวนนจะอ ธบายถงขนตอนและคาสงตางๆ ทใชในการตรวจสอบหาขอผดพลาดของโปรแกรมท พฒนาขนมา ใหพจารณาสมการพหนาม 2

ax +bx+c =0 ซงคาตอบของสมการนมสองคาตอบ คอ

2-b± b -4ac

x =2a

ตวอยางเชน ถากาหนดให 2x -3x+2=0 จะไดวาคาตอบของสมการนคอ

x = 1 และ x = 2 ผใชสามารถเขยนโปรแกรมเพอคานวณหาคาตอบของสมการพหนามนไดดงแสดงในรปท 8.1

Page 255: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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 ใสเขาไปในตวโปรแกรม กอนจะทาการประมวลผล

Page 256: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 คาสงในบรรทดทมจดพก จะยงไมถกนาไปประมวลผล

Page 257: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ทางานตอไปจน จบโปรแกรม กสามารถทาไดโดยใชคาสง resume28 ดงแสดงตอไปน

27 ในหนงโปรแกรมสามารถมระดบของการขดจงหวะ (level of interruption) ไดหลายระดบ ถาภายในตวโปรแกรมนนมจด พก (breakpoint) มากกวาหนงจด นอก จากนผใชยงสามารถเรยกดคาของพารามเตอรตางๆ ทอย ในระดบของการขดจงหวะทระดบตากวาไดทงหมด หมายเหต ขณะทอยทระดบของการขดจงหวะ ณ ระดบหนง การทางานโดยใชคาสงตางๆ ทระดบของกา รขดจงหวะน จะไมมผลกระทบตอคาของตวแปรใดๆ ทอยใ นระดบของการขดจงหวะทระดบตากวา 28 ในกรณทโปรแกรมมระดบของการขดจงหวะหลายๆ ระดบ คาสง resume จะทาหนาทในการลดระดบของการขดจงหวะไดเชนกน

Page 258: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

241

-1->resume

x2 = //นนคอ x2 = num2/den

1.

x1 = //นนคอ x1 = num1/den

2.

ผลลพธทไดคอคาของตวแปร x1 และ x2 เปนคาตอบของสมการ 2x -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

Page 259: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

242

x1 = //เนองจาก x1 = num1/den = 3/2 = 1.5 1.5

ผลลพธทไดจะเปนคาตอบทสอดคลองกบค าของ num1 และ num2 ทถกกาหนดคาใหใหม

หมายเหต คาสง return จะทางานไดเหมอนกบคาสง resume ทกประการ

8.1.3 คาสง pause คาสง pause มผลลพธแบบเดยวกนกบการใช คาสง setbpt เพยงแตจะตองนาคาสง pause ไปใสไวในตวโปรแกรม กอนบรรทดทมการกาหนด จดพกดวยคาสง setbpt ยกตวอยางเชน ถาใชคาสง

-->setbpt('MyRoot', 5)

จะมผลลพธเชนเดยวกนกบการนาคาสง pause ไปใสไวในตวโปรแกรม MyRoot กอนคาสงใน บรรทดทหาในรปท 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

Page 260: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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;

Page 261: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 262: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

245

ตารางท 8.1 ตวอยางคาสงพน ฐานสาหรบจดการขอผดพลาด ฟงกชน คาอธบาย

error แสดงขอความออกทางหนาตางคาสง แลวหยดการประมวลผลโปรแกรม

errcatch สงใหการกระทา (action) บางอยางทางาน เมอเกด ประเภทของขอผดพลาด (error type) ตามทกาหนดในระหวาง ทกาลง ทาการประมวลผลโปรแกรม

iserror ตรวจสอบวามขอผดพลาดตามทกาหนดเกดขนภายในโปรแกรมหรอไม errclear ยกเลกการกระทาทเปนผลมาจากประเภทของขอผดพลาดทกาหนดไว

ผลลพธทไดแสดงใหทราบวามการเรยกใชคาสง pause ในโปรแกรม MyRoot2 โดยโปรแกรมจะมาสนสดการประมวลผล ณ บรรทดทหก (คาสงบรรทดทหกยงไมถกนาไปประมวลผล )

นอกจากนโปรแกรม SCILAB ยงไดเตรยมคาสง พนฐาน อนๆ สาหรบจดการขอผดพลาด (error handler) ตารางท 8.1 แสดงคาสงทพบบอยในการเขยนโปรแกรม (ผสนใจสามารถศกษารายละเอยดการใชงานคาสงเหลานไดจากคาสง help)

8.2 สรป ในบทนไดอธบายถง ขนตอน การตรวจสอบหาขอผดพลาดและรปแบบการเรยกใชงานคาสงตางๆ ไดแก คาสง pause, setbpt, และ resume เปนตน เพอใชเปนแนวทางในการตรวจสอบหาขอผดพลาดภายในตวโปรแกรม ซงจะชวย ทาใหผพฒนาโปรแกรมสามารถคนหาขอผดพลาดทเกดขน ภายในตวโปรแกรมไดโดยงาย เพอจะไดดาเนนการแกไข ขอผดพลาดเหลานน ตอไป

8.3 แบบฝกหดทายบท 8.1 จงเปรยบเทยบขอแตกตางระหวางคาสง setbpt และคาสง pause

8.2 การอธบายการใชงานของคาสง dispbpt และคาสง delbpt

8.3 จงเปรยบเทยบขอแตกตางระหวางคาสง quit และคาสง abort

8.4 จงเปรยบเทยบขอแตกตางระหวางคาสง where และคาสง whereami

Page 263: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

246

Page 264: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บทท 9 ตวอยางการประยกตใชงาน ในบทนจะ แสดงตวอยางการใชโปรแกรม SCILAB ในการแกไขปญหาทาง คณตศาสตรลกษณะตาง ๆ เชน การใชงานเวกเตอรและเมทรกซตรรกะ, การดาเนนการเชงสญลกษณ, การหาตวคณรวมนอยและตวหารรวมมาก , การแยกตวประกอบของพหนาม, การลดรปพหนาม, การหาปรพนธจากดเขต , และการแกสมการอนพนธอนดบหนง เปนตน เพอใหผอานทราบถงค วามสามารถของโปรแกรม SCILAB ในการทจะนามาประยกตใชในการเรยนการสอน (ทงในระดบมธยมศกษาและระดบ อดมศกษา) และการทางานวจย โดยเฉพาะงานทางดานวศวกรรมและวทยาศาสตร

9.1 การใชงานเวกเตอรและเมทรกซตรรกะ ตวดาเนนการตรรกะ (logical operator) ไดแก เครองหมาย AND “&”, เครองหมาย OR “|”, และเครองหมาย NOT “~” เปนตวดาเนนการทใชเชอมความสมพนธระหวางคาของตวแปรทเกดขน โดยตวดาเนนการสมพนธ (relational operator) เชน เครองหมายมากกวา “>”, เครองหมายนอยกวา “<”, เครองหมายมากกวาหรอเทาก บ “>=”, เครองหมายนอยกวาหรอเทากบ “<=”, เครองหมายเทากบ “==”, และเครองหมายไมเทากบ “<>” (หรอ “~=”) ถาความสมพนธสอดคลองกนผลลพธทไดกจะมคาเทากบ T (เปนจรง) หรอมคาทางตรรกะเทากบ คา 1 แตถาความสมพนธไมสอดคลอง กนผลลพธท ไดกจะมคาเทากบ F (เปนเทจ) หรอมคาทางตรรกะเทากบ คา 0 โดยทวไปเวกเตอรหรอเมทรกซของขอความแสดงการเปรยบเทยบ (comparison statement) สามารถทจะถกสรางไดเชนเดยวกบการสรางเวกเตอรหรอเมทรกซของคา สเกลารหรอสญลกษณทวไป ตามทไดอธบายในบทท 2 ตวอยางเชน

Page 265: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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.

Page 266: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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, ... ทเปน

Page 267: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

250

รปท 9.1 รปกราฟของฟงกชนตรโกณมต tan(x)

จานวนเตมบวกเนองจาก cos(x) = 0 ดงนน ถาตองการวาดรปกราฟของฟงกชน tan(x) โดยท

x มคาตงแต -3π/2 ถง 3π/2 โดยใชชดคาสงดงน

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

Page 268: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

251

รปท 9.2 รปกราฟของฟงกชน tan(x)หลงจากปรบคาของตวแปร y

-->y = y .* (abs(y) < 1e10); //ปรบคา ของตวแปร y

-->plot(x, y)

-->xtitle('y = tan(x)', 'x', 'y');

คาสงบรรทดทสามเปนการปรบคาของตวแปร y โดยทถาคาสมบรณของตวแปร y มคานอยกวา คา 1010 กจะปรบใหตวแปร y มคาเทากบคาศนย ผลลพธทไดจากการใชชดคาสงน แสดงในรปท 9.2

ซงจะแสดงรายละเอยดของกราฟไดครบถวนตามทตองการ

9.1.1.2 การแกไขปญหาการหารดวยคาศนย

ในกรณทขอมลทใชวาดรปกราฟมคาทเปนคาอนนต (infinity) ทเกดจากการหารคาจานวนจรงดวย คาศนย เชน ถาตองการวาดรปกราฟของฟงกชน ซงก y = sin(x)/x ซงเปนสญญาณทพบมากในระบบการสอสารดจทล ดงนน เมอตวแปร x = 0 จะทาใหตวแปร y มคาเปนคาอนนต ดงแสดง ในตวอยางตอไปน

Page 269: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 270: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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');

คณสมบตของเวกเตอรตรรกะสามารถทจะถกนามาใชในการเปลยนรปกราฟนใหเปนกราฟแบบไม ตอเนอง เชน เปลยนใหเปนรปกราฟทแสดงผลเฉพาะคาบวกของสญญาณ ดงแสดงในตวอยางตอไป น

Page 271: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 272: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

255

รปท 9.6 ตวอยางรป กราฟของฟงกชน sin(x) ทตดขอมลทแสดงผลบางสวนแบบทหนง

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

จากตวอยาง ตางๆ ทแสดงขางตนแสดงใหเหนวาเวกเตอรและเมทรกซตรรกะสามารถทจะนามาประยกตใชในการวาดรปกราฟแบบตางๆ ได ตรงตามความตองการ

Page 273: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

256

รปท 9.7 ตวอยางรป กราฟของฟงกชน sin(x) ทตดขอมลทแสดงผลบางสวนแบบทสอง

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

Page 274: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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)

Page 275: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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. //ผลลพธทไดคอ ( ) ( ) 322 3 3 1 2 3 3 3 6 8 9 27 48 243 195× × − − × + × = × − × = − = −

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

Page 276: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 เปนเมทรกซสามเหลยมดานบนเชงสญลกษณ ตวอยางเชน

Page 277: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

common multiple) และตวหารรวม มาก (great common divisor) ซงจะเปนประโยชนมากในการแกไขปญหาทางคณตศาสตร

Page 278: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

261

9.3.1 ตวคณรวมนอย ตวคณรวมนอย (ค.ร.น.) คอเลขจานวนเตมบวกทมคานอยทสด ซงเมอนาเลขจานวนเตมบวกอนๆ ทกาหนดใหทกจานวน มาหารตวคณรวมนอย นแลว จะไดผลลพธลงตวพอด (หรอสามารถหารลงตวไดทกจานวน) การหาตวคณรวมนอย ในโปรแกรม SCILAB สามารถทาไดโดยใชคาสง lcm ซงมรปแบบการใชงานคอ

pp = lcm(p)

เมอ p คอเวกเตอรของเลขจานวนเตมบวก (positive integer) หรอเวกเตอรของพหนาม (polynomial) และ pp คอตวคณรวมนอย ของสมาชกทงหมดทอยในเวกเตอร p

ตวอยางท 1 จงหาตวคณรวมนอย ของ 12, 15, และ 30

วธทา เนองจาก 12 2 2 3= × × , 15 3 5= × , และ 30 2 3 5= × × ดงนน ตวคณรวมนอย ของ 12,

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. //มจดทศนยมตามหลงตวเลขแสดงวาเปน เลขจานวนจรง

Page 279: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

262

-->pp = lcm(p)

pp =

5400. //ผลลพธทไดคอ 5400 12 15 30= × ×

นอกจากนคาสง lcm ยงสามารถใชหาตวคณรวมนอย ของพหนามได ดงแสดงในตวอยางตอไปน

ตวอยางท 2 จงหาตวคณรวมนอย ของพหนาม x , 2x x+ , และ 2x x−

วธทา เนองจาก ( )2x x x x+1=+ และ ( )2x x x x 1− = − เพราะฉะนน ตวคณรวมนอย ของ x , 2x x+ , และ 2x x− มคาเทากบ ( ) ( ) 3x x+1 x 1 x 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 ซงมรปแบบการใชงานคอ

Page 280: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

263

qq = gcd(q)

เมอ q คอเวกเตอรของเลขจานวนเตมบวกหรอเวกเตอรของพหนาม และ qq คอตวหารรวม มากของสมาชกทงหมดทอยในเวกเตอร q

ตวอยางท 3 จงหาตวหารรวม มากของ 18 และ 84

วธทา เนองจาก 18 2 3 3= × × และ 84 2 2 3 7= × × × ดงนน ตวหารรวม มากของ 18 และ 84 คอ 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 ยงสามารถใชหาตวหารรวม มากของพหนามไดเชนกน ดงแสดงในตวอยาง ตอไปน

Page 281: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

264

ตวอยางท 4 จงหาตวคณรวมนอยและ ตวหารรวม มากของพหนาม 2x 5x 14− − และ 2x 12x 35− +

วธทา เนองจาก ( ) ( )2x 5x 14 x 7 x 2− − = − + และ ( ) ( )2x 12x 35 x 7 x 5− + = − − ดงนน จะ

ไดวาตวคณรวมนอย มคาเทากบ ( ) ( ) ( ) 3 2x 7 x 2 x 5 x 10x 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 โปรแกรม SCILAB สามารถคานวณหาคาดกรของ พหนาม (degree of polynomial) ไดจากคาสง degree

Page 282: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

265

9.4.1 การแยกตวประกอบของพหนาม การแยกตวประกอบของพหนาม (polynomial factorization) คอ การเขยนพหนามใหอยในรปการ

คณของพหนามทมดกรตากวา ตวอยางเชน พหนาม 2x 3x 2− + สามารถทจะแยกตวประกอบได

เปน ( ) ( )x 1 x 2− − นนคอ ( ) ( )2x 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

-->[F, g] = factors(y) //ผลลพธทไดคอ ( ) ( )2x 3x 2 1 x 1 x 2− + = × − × −

g =

1.

F =

F(1)

- 1 + x

F(2)

- 2 + x

-->F = polfact(y) //มผลลพธเทยบเทากบการใชคาสง factors

Page 283: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

266

F =

1 - 2 + x - 1 + x

จะเหนไดวาคาส ง polfact สามารถทาหนาทในการแยกตวประกอบของพหนามไดเชนเดยวกบ คาสง factors แตมรปแบบการเรยกใชงานตางกนเลกนอย นนคอ

P = polfact(y)

เมอ P = [p0 p1 p2 … pN] คอเวกเตอรพหนาม (ทมดกรหนงหรอสองเทานน ) และ p0 เปนคาคงตว (constant) โดยผลลพธทไดจากการใชคาสง polfact คอ

y = p0 × p1 × p2 × … × pN

ตวอยางเชน

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

-->y = 3*x^2 - 9*x + 6;

-->[F, g] = factors(y)

g =

3. //ผลลพธทไดคอ ( ) ( )23x 9x 6 3 x 1 x 2− + = × − × −

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)

Page 284: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

267

เมอ Q คอสมการพหนามทอยในรปของเศษสวน , g คอเลขจานวนจรง, และ N คอเวกเตอรพหนามของตวเศษ (numerator), และ D คอเวกเตอรพหนามของตวสวน (denominator) ในทานองเดยวกนถาให N = [n1 n2 n3 … nk] และ D = [d1 d2 d3 … dm] เมอ ni และ dj คอพหนาม (ทมดกรหนงหรอสองเทานน ) ดงนนผลลพธทไดจากการใชคาสง factors ในกรณนค อ

×⎛ ⎞⎜ ⎟⎝ ⎠

1 2 k

1 2 m

n ×n ×…×nQ = g

d ×d ×…×d

ตวอยางเชน

-->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 = //ผลลพธทไดคอ ( ) ( )( ) ( )

2

2

x-1 × x-23x -9x+6= 3×

x +3x+2 x+1 × x+2

D(1)

1 + x

D(2)

2 + x

N =

N(1)

- 1 + x

N(2)

- 2 + x

Page 285: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

268

9.4.2 การลดรป พหน าม โปรแกรม SCILAB ยงทาการลดรปของพหนามทเปนเศษสวนใหอยในรปแบบทงาย (simple form) โดยใชคาสง 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

n = //ผลลพธทไดคอ ( ) ( )

( ) =

2 23 2 x-1 × 3x-2 9x -12x+49x -21x +16x-4=

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 คาสงทนาสนใจ โปรแกรม SCILAB ยงไดเตรยมคาสงตางๆ ทนาสนใจ ในการทางานกบพหนาม เชน cmndred, pdiv, coffg, และ coeff เปนตน ซงมรายละเอยดดงตอไปน

9.4.3.1 คาสง cmndred เปนคาสงทใชในการจดรปผลบวกของพหนามทอยในรปของเศษสว น ใหเปนผลบวกของพหนามทมตวสวนรวม เหมอนกนทกพจน โดยมรปแบบการเรยกใชงานดงน

Page 286: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

2 2

x +2x-3 x -x-6

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

Page 287: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 288: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 เพอทวา

MIM =

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

Page 289: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

เมอ C คอเมทรกซทมสมาชกเปนคาสมประสทธของพหนาม (เรยงจากดกรนอยไปมาก), M คอเมทรกซพหนามทตองการหาคาสมประสทธ และ 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.

Page 290: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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 ปรพนธจากดเขต จะมชวงของการหาปรพนธกาหนด มาไวให

Page 291: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

274

นอกจากนในกร ณทตองการหาปรพนธจากดเขต ของฟงกชนทสรางขนมา กสามารถทาไดโดยใชคาสง intg ซงมรปแบบการใชงานคอ

I = intg(a, b, f)

เมอ I คอผลลพธทไดจากการหาปรพนธ, a และ b คอคาเรมตน และคาสดทายของ การหาปรพนธ, และ f คอฟงกชนแบบตวแปรเดยว ทตองการหาปรพนธ พจารณาตวอยางตอไปนจะไดเขาใจลกษณะ การใชงานของคาสง integrate และ intg มากขน

ตวอยางท 5 จงหาคาปรพนธของฟงกชน ( ) 2 1f x x= + สาหรบ x = 0 ถง 3

x

y( ) 2 1f x x= +

1

7

0 3

( )( )1 3 1 7 122

+ =

วธทา จากโจทยจะไดวา

( ) ( )3 3

0 0

2 1x x

f x dx x dx= =

= +∫ ∫

( ) ( ) ( )32 2

03 3 0 0 12

xx x

== + − − == +

ผใชสามารถตรวจคาตอบนไดจากการใชคาสงดงน

-->y = integrate('2*x + 1', 'x', 0, 3)

y =

12.

หรอใชคาสง

Page 292: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

275

-->function z = f(x), z = 2*x + 1, endfunction

-->I = intg(0, 3, f)

I =

12. //ใหผลลพธเทากบการใชคาสง integrate

ซงใหผลลพธเทากน

ตวอยางท 6 จงหาคาของฟงกชน ( )3

0

24 x dx−∫

วธทา จากโจทยจะไดวา

( ) ( ) ( ) ( )3 33 3

2

0 0

34 4 4 3 0 0 12 9 3

3 3xx dx x

⎛ ⎞⎛ ⎞− = − = − − − = − =⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

ผใชสามารถตรวจคาตอบนไดจากการใชคาสง

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

ซงใหผลลพธเทากน

Page 293: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

276

ตวอยางท 7 จงหาคาของฟงกชน 9 1cosh 1

4x

x dx=5

⎛ ⎞−⎜ ⎟⎝ ⎠∫

วธทา ถากาหนด ให 1 14

u x= − จะไดวา 14

du dx= และ 4dx du=

ลมตของปรพนธจากดเขตเปนลมตของ x โดยท 1 14

u x= −

เพราะฉะนนจะตองเปลยนลมตเปนดงน

ลมตลาง 5x = เปลยนเปนลมตลาง 1 1(5) 14 4

u = − =

และลมตบน 9x = เปลยนเปนลมตบน 1 5(9) 14 4

u = − =

ดงนน

( ) ( )9 5/ 41cosh 1 4 cosh 4sinh

4x u

x dx u du u5/4

1/4=5 =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

ซงใหผลลพธเทากน

Page 294: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

277

9.6 การแกสมการอนพนธอนดบหนง ในสวนนจะแสดงการใชโปรแกรม SCILAB ในการแกสมการอนพนธอนดบหนง โดยใชคาสง ode ซงมรปแบบการเรยกใชงานดงน

y = ode(y0, x0, x, f)

เมอ y0 คอเวกเตอรเลขจานวนจรงของเงอนไขเรมตน (initial conditions) ของฟงกชน y(x) เมอ x = 0, x0 คอคาเรมตน ของตวแปร x, x = [x(1), x(2), x(3), ...] คอเวกเตอรเลขจานวนจรงทใชคานวณหาคา ของฟงกชน y(x), f คออนพนธอนดบหนงของฟงกชน y(x), และ y คอผลเฉลยทไดจากการแกสมการอนพนธอนดบหนง ซงจะอยในรปของเวกเตอร y = [y(x(1)),

y(x(2)), y(x(3)), ...] ตวอยางการ ใชงานเชน

พจารณาฟงกชน ตอไปน

( ) 2y x = x -3x+1 (1)

สงเกตวาเมอ x = 0 จะไดวา y(x) = 1 โดยทอนพนธของสมการ (1) คอ

dy

ydot = = 2x-3dx

(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');

Page 295: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

278

รปท 9.8 รปกราฟของฟงกชน y(x) (เสนทบ) และรปกราฟทไดจากการแกสมการอนพนธ (เครองหมาย '+')

ผลลพธทไดแสดงในรปท 9.8 ซงแสดงใหเหนวา ผลลพธทไดจากการแกสมการอนพนธ (รปกราฟทแสดงเฉพาะเครองหมาย '+' สแดง) มคาเทากบรปกราฟของฟงกชน y(x) ในสมการ (1) ซงเปนกราฟเสนทบ

หมายเหต การแกสมการอนพนธ dy/dx ดวยคาสง ode จะใหผลลพธเปนคาของฟงกชน y(x) เมอกาหนดคาตวแปร x มาให ไมไดใหผลลพธเปนสมการของฟงกชน y(x)

ตวอยางท 8 จงหาคาตอบของสมการ dy +y = xdx

(เงอนไขเรมตนคอ x = 0 และ y = 1)

สาหรบ x = 0.2, 0.4, 0.6, 0.8, และ 1

วธทา จากการแกสมการอนพนธทกาหนดใหมานจะไดผลลพธ คอ

1−-xy = x+2e

Page 296: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 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 มคาเทากบ ผลลพธจากการสมการ

ผลเฉลย 1−-xy = x+2e

ตวอยางท 9 พจารณาวงจรไฟฟา RL ตอไปน

เมอกาหนดใหคาการเหนยวนาตนเอง L = 5 H, ความตานทาน R = 10 โอหม, และแหลงจายไฟ E = 15 โวลต โดยกอนทจะมการเชอมตอสวทซจะ ไมมกร ะแสไฟฟาไหลในวงจร จงคานวณหาคากระแสไฟฟา I(t) เมอเวลา t = 0.5, 1, 2, และ 4 วนาท หลงจากทาการเชอมตอสวทซ

วธทา จากกฏของเคอรชอฟจะไดสมการแรงดนไฟฟาดงน

dIL +RI = Edt

Page 297: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

280

โดยท I = 0 เมอ t = 0 จากการแกสมการอนพนธนจะไดผลลพธ ค อ

( )-Rt/LEI = 1-e

R

ดงนน กระแสไฟฟาเมอเวลา 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 มคาเทากบ ผลลพธจากการสมการ

ผลเฉลย ( )-Rt/LEI = 1-e

R

9.6 สรป บทนไดแสดงใหเหนวาโปรแกรม SCILAB สามารถนามาประยกตใชงานในการแกไขปญหาทางคณตศาสตรไดหลายอยาง เชน การหาตวคณรวมนอยและ ตวหารรวมมาก , การแยกตวประกอบของพหนาม, การลดรปพหนาม, การหาปรพนธจากดเขต , และการแกสมการอนพนธอนดบหนง เปนตน เพอเปนแนวทางใหผอานไดเหนถงความสามารถของโปรแกรม SCILAB และสามารถนาไปประยกต ใชในการเรยนการสอนและในงานวจยไดอยางมประสทธ ภาพ

Page 298: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

281

นอกจากทกลาวมาในบทนแลว โปรแกรม SCILAB ยงสามารถนาไปประยกตใชงานในลกษณะอนๆ ไดอก เชน การประมาณคาในชวง (interpolation) และการแทนกลมขอมลดวยสมการเสนทเหมาะสม (data fitting), การวเคราะหดานการประมวลผลสญญาณ (signal processing

analysis), การวเคราะหดานระบบควบคม (control system analysis), และการวเคราะหดานการสอสารดจทล (digital communication analysis) เปนตน ผสนใจสามารถศกษารายละเอยดเพมเตมของกลองเครองมอ (toolbox) ทใชกบงานเฉพาะทางเหลานไดจาก http://www.scilab.org โดยผเขยนหวงวาจะไดมโอกาสเขยนหนงสอเกยวกบ การประยกตใชงานเหลาน ในอนาคต

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

Page 299: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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) 3 1y x= − สาหรบ 1 ≤ x ≤ 5

9.6.2) 2y x= สาหรบ –3 ≤ x ≤ 3

9.7 จงหาปรพนธจากดเขตดงตอไปน

9.7.1) 2

1

(2 5)x dx+∫

9.7.2) 3

3

0

(4 )x dx+∫

9.7.3) ( )1

2

0

x x dx+∫

9.7.4) ( )0

sin x dxπ

9.7.5) 2

2

2

(8 sin )y y dyπ

π−

+∫

9.7.6) 1

2

1

( 1)x dx−

+∫

9.7.7) ( ) ( )/ 2

0cos sinx x dx

π

9.8 กาหนดใหสมการอนพนธ ( ) ( )2 sin cosdy y y t tdt

= − + จงหาคา y(t) ทเวลา t = π/4, π/2,

และ π เมอกาหนดเงอนไขเรมตน y(0) = 0

Page 300: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

ภาคผนวก ก ตวอยางการทา symbolic triangularization

ในสวนนจะยกตวอยางการคานวณเชงสญลกษณ สาหรบการทาสามเหลยมบนของเมทรกซสายอกขระหรอทเรยกกนวา “symbolic triangularization” ตามทไดยกตวอยางไวในหวขอท 2.3 กลาว คอ ถากาหนดใ หเมทรกซ X มคาเทากบ

a bc d

= ⎡ ⎤⎢ ⎥⎣ ⎦

X (ก1)

โดยท a, b, c, และ d คอตวแปรคาคงทใดๆ และเมอทา symbolic triangularization ของ เมทรกซ X โดยใชคาสง trianfml(X) จะไดผลลพธเปน

c d0 cb ad

=−

⎡ ⎤⎢ ⎥⎣ ⎦

Y (ก2)

ขนตอนตอไปจะอธบายการทา symbolic triangularization เพอเปลยนเมทรกซ X ใหเปนเมทรกซ Y โดยใชเทคนคการดาเนนการตามแถวขนมลฐาน (elementary row operation) ดงน จา กสมการ (ก1) สามารถทจะสมมตไดวา เมทรกซ X ประกอบไปดวย 2 สมการ คอ

cZ1 + dZ2 = 0 (ก3)

aZ1 + bZ2 = 0 (ก4)

Page 301: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

284

โดยทตวแปร Z1 และ Z2 เปนตวแปรชวคราวทถกกาหนดขนเพอใชในการสรางสมการสองตวแปร จากคณสมบตการดาเนนการตามแถวขนมลฐาน สมการ (ก4) สามารถทจะแทนไดดวยสมการทเปนผลลพธจากการนาตวแปรคาคงท c คณกบสมการ (ก4) แลวลบดวยผลลพธทไดจากการนาตวแปรคาคงท a คณกบสมการ (ก3) นนคอ

c (ก4) – a (ก3) = 0

( ) ( )1 2 1 2c aZ bZ a cZ dZ 0+ − + =

0(Z1) + (cb − ad)Z2 = 0 (ก5)

เพราะฉะนนเมอนาคาสมประสทธของสมการ (ก3) และ (ก5) มาจดรปใหอยในรปของเมทร กซ กจะไดดงน

1

2

Zc d 0Z0 cb ad 0

=−

⎡ ⎤⎡ ⎤ ⎡ ⎤⎢ ⎥⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦⎣ ⎦

Y

ซงกคอ เมทรกซ Y ทสอดคลองกบสมการ (ก2) ตามทตองการ

Page 302: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

ภาคผนวก ข รหสขอผดพลาด

ในสวนนจะขอแสดงรายการของรหสขอผดพลาด (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

Page 303: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 304: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 305: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

211 Argument %d of %s: wrong type argument, expecting a function or string (external 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

Page 306: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 307: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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

Page 308: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

บรรณานกรม [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.

Page 309: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

292

Page 310: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

ประวตผเขยน ผศ.ดร.ปยะ โควนททววฒน URL: http://home.npru.ac.th/~t3058

การศกษา พ.ศ. 2537 ปรญญาตร (เกยร ตนยม) Thammasat University, Bangkok, Thailand พ.ศ. 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.

Page 311: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม

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)

Page 312: E-Book - SCILAB NEW - pathumrat.ptpk.ac.th · สารบัญ บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโปรแกรม