Upload
vuthien
View
259
Download
5
Embed Size (px)
Citation preview
คมอโปรแกรมภาษา SCILAB
สาหรบผเรมตน (ฉบบปรบปรงใหม)
ผศ.ดร.ปยะ โควนททววฒน
โปรแกรมวศวกรรมโทรคมนาคม มหาวทยาลยราชภฏนครปฐม
คมอโปรแกรมภาษา SCILAB สาหรบผเรมตน (ฉบบปรบปรงใหม)
สงวนลขสทธตามพระราชบญญตลขสทธ หามลอกเรยนแบบไมวาสวนใด สวนหนงในหนงสอเลมน ไมวาในรปแบบใดๆ นอกจากจะไดรบอนญาตเปนลายลกษณอกษรจากผเขยนเทานน ขอมลทางบรรณานกรมของหอสมดแหงชาต ปยะ โควนททววฒน คมอโปรแกรมภาษา SCILAB สาหรบผเรมตน ./ ปยะ โควนททววฒน. --นครปฐม: โปรแกรมวศวกรรมโทรคมนาคม คณะวทยาศาสตรและเทคโนโลย มหาวทยาลยราชภฏนครปฐม, 2551 310 หนา 1. ภาษาคอมพวเตอร 2. เอสซไอแอลเอบ (ภาษาคอมพวเตอร). 3. ชอเรอง GA 76.73.S3ป621 ISBN 974-620-609-5 หมายเหต หนงสออเลกทรอนกสฉบบนไดถกจดทาขนเพอใชในการศกษาและ การทาวจย ผอานสามารถ
ดาวนโหลดไปใชงานไดโดยไมตองเสยคาใชจายใดๆ ขอขอบคณสานกงานคณะกรรมการวจยแหงชาต (วช.) ทใหทนสนบสนน
สาหรบครอบครว โควนททววฒน
คานา ในปจจบนนความเจรญกาวหนาทางดานเทคโนโลยเปนไปอยางรวดเรว หลายๆ หนวยงานในภาค การศกษาไดมการนาอปกรณคอมพวเตอรและซอฟตแวรตางๆ มาใชชวยในการเรยนการสอนและ ทางานวจยในหลายสาขาวชาเชน วศวกรรมศาสตร และวทยาศาสตร เปนตน โปรแกรม MATLAB ถอวาเปนซอฟตแวรทนยมใชงานกนมาก สาหรบการคานวณเชงตวเลขและการแสดงผลกราฟกท ซบซอน โดยเฉพาะอยางยงสาหรบผททางานทางดานวศวกรรมและวทยาศาสตร ทงนเปนเพราะวา โปรแกรม MATLAB งายตอการเรยนรและทาความเขา ใจ อยางไรกตามโปรแกรม MATLAB เปนโปรแกรมทตองเสยเงนคาลขสทธของซอฟตแวรซงมราคาแพงมาก ทาใหผคนจานวนมากเสย โอกาสทจะศกษาและเรยนรการใชงานโปรแกรมน เพอนามาชวยในการทางานของตนเอง
โปรแกรม SCILAB เปนโปรแกรมทพฒนาโดยกลมของนกวจยจาก INRIA และ ENPC ในประเทศฝรงเศส เมอป ค.ศ. 1990 โดยมจดมงหมายเพอใชในการคานวณเชงตวเลขและแสดงผลกราฟกทซบซอนเชนเดยวกบโปรแกรม MATLAB แตโปรแกรม SCILAB เปนโปรแกรมทใหฟร (ไมเสยเงนคาลขสทธของซอฟตแวร ) ผทสนใจสามารถดาวนโหลดโปรแกรมนไปใชงานไดทนทจากเวบไซต http://home.npru.ac.th/~t3058/Scilab.html หรอ http://www.scilab.org จากทขาพเจาไดศกษาการใชงานโปรแกรม SCILAB พบวาเปนโปรแกรมทสามารถทางานไดอยางม ประสทธภาพใกลเคยงกบโปรแกรม MATLAB ในหลายๆ ดาน ดงนนจะเหนไดวาในป จจบนนมหาวทยาลยหลายแหงทงในประเทศและตางประเทศไดเรมมการนาโปรแกรม SCILAB มาใชชวยในการเรยนการสอนและทางานวจย
หนงสอ “คมอโปรแกรมภาษา SCILAB สาหรบผเรมตน ” มจดมงหมายเพออธบายถงพนฐานการใชงานโปรแกรม SCILAB ในรปแบบทงายตอก ารเขาใจและเรยนรไดดวยตนเอง ทาใหสามารถนาโปรแกรมนไปประยกตใชในการเรยนการสอนของวชาตางๆ ทางดานวศวกรรมและ
วทยาศาสตรไดอยางรวดเรว ซงจะชวยทาใหนกศกษาสามารถเขาใจถงทฤษฏในบทเรยนมากยงขน ฉะนนหนงสอเลมนจงสามารถนามาใชประกอบการเรยน การสอนในระดบมธยมศกษาตอนปลายและระดบอดมศกษาไดเปนอยางด เชน วชาคณตศาสตร, วชาฟสกส, วชาการสอสารดจทล (digital
communication), วชาสญญาณและระบบ (signals and systems), และวชาการประมวลผลสญญาณดจทล (digital signal processing) เปนตน
หนงสอเลมนจะเรมตน อธบายจาก ความรทวไปเกยวกบโปรแกรม SCILAB เชน ประวตความเปนมาของโปรแกรม SCILAB และการใชงานคาสงพนฐานทวไป เปนตน บทท 2 จะกลาวถงประเภทของขอมล เพอทผใชจะไดสามารถสรางตวแปรสาหรบขอมลประเภทตางๆ ไดสอดคลองกบ ความตองการในการใชงาน บทท 3 จะอธบายถงตวดาเนนการทใชสาหรบการคานวณทางคณตศาสตร เชน เครองหมายการบวก การลบ การคณ และการหาร เปนตน บทท 4 จะอธบายถงการใชเรยกงานฟงกชนพนฐานตางๆ สาหรบการคานวณทางคณตศาสตร บทท 5 จะกลาวถงหลกการเขยนโ ปรแกรม SCILAB ซงจะทาใหผใชสามารถพฒนาฟงกชนใหมๆ ขนมาใชงานรวมกบโปรแกรม SCILAB ไดอยางรวดเรวและมประสทธภาพ บทท 6 จะอธบายการนาเสนอผลการวจยหรอผลการทดลองทไดมาโดยใชรปกราฟทงแบบสองมตและสามมต บทท 7 จะอธบายระบบพนฐานอนพตและเอา ตพตของโปรแกรม SCILAB ซงจะทาใหสามารถพฒนาโปรแกรมเพอใชในการอานและเขยนขอมลระหวางเครองคอมพวเตอรกบโปรแกรม SCILAB ได บทท 8 จะกลาว ถงขนตอนพนฐานในการ ตรวจสอบหาขอผดพลาดภายในตวโปรแกรม และบทท 9 ซงเปนบทสดทายจะยกตวอยางการประยกตใชงานของโปรแกรม SCILAB เพอใชแกปญหาเฉพาะดานในรปแบบตางๆ
ขาพเจาไดนาหนงสอเลมนมาทดลองใชกบนกศกษาชนปท 1 และ 2 โปรแกรมวศวกรรมโทรคมนาคม มหาวทยาลยราชภฏนครปฐม พบวานกศกษาทไมเคยรจกโปรแกรม SCILAB มากอน สามารถทาความเขาใจตามเนอหาในแ ตละบทไดโดยงาย และเมอศกษาครบทงเลมแลวกจะชวยทา ใหนกศกษาสามารถพฒนาโปรแกรมพนฐานขนมาใชงานไดอยางรวดเรว และมประสทธภาพ สาหรบผทสนใจรายละเอยดการใชงานและความสามารถของโปรแกรม SCILAB เพมเตม กสามารถศกษาคนควาไดดวยตนเองจากเวบไซต http://www.scilab.org
หนงสอเลมนจะไ มสามารถทาใหสาเรจขนมาได ถาหากขาดบคคลตางๆ ทคอยใหความชวยเหลอและเปนกาลงใจใหขาพเจาตลอดมา ดงนน ขาพเจาขอกราบขอบพระคณอาจารยทกทานทใหความรและคาปรกษาตลอดระยะเวลาการศกษา รวมทง ทกๆ คนในครอบครวของขาพเจา ไดแก
คณเกยรต โควนททววฒน , คณพรรณ โควนททววฒน, คณรชนศ โรจนกจ , คณอนทศน โรจนกจ, คณฉตรชย โควนททววฒน, คณกตตศกด โควนททววฒน , และคณศรสดา โสมนส นอกจากนขาพเจาขอขอบคณมหาวทยาลยราชภฏนครปฐมทใหการสนบสนนและใหความสะดวกแกขาพเจาตลอดระยะเวลาในการเขยนหนงสอเลมน
ทายสดนขาพเจาพยายามอยางยงในการทจะทาใหหนงสอเลมนงายตอการเรยนร เพอให ผอานสามารถทาความเขาใจไดดวยตนเองอยางรวดเรวและมประสทธผล ดงนนหากมขอบกพรอง ประการใด ขาพเจามความยนดและจกขอบพระคณยง ถาทานผใชหนงสอเลมนจะสงขอคดเหนและ คาแนะนาทเปนประโยชนสาหรบการปรบปรงหนงสอเลมนมาทอเมล [email protected] เพอทขาพเจาจะไดดาเนนการปรบปรงและแกไขในการพมพครงตอไป
ผศ.ดร.ปยะ โควนททววฒน โปรแกรมวศวกรรมโทรคมนาคม
มหาวทยาลยราชภฏนครปฐม กรกฎาคม พ.ศ. 2551
สารบญ
บทท 1 ความรเบองตนเก ยวกบโปรแกรม SCILAB.............................................................. 1 1.1 ประวตความเปนมาของโปรแกรม SCILAB.......................................................................... 1 1.2 เรมตนการใชงานโปรแกรม SCILAB .................................................................................... 3
1.2.1 แถบเมนในหนาตางคาสง ................................................................................................ 5 1.3 คาสงพนฐานสาหรบการเรมตนใชงานโปรแกรม SCILAB .................................................. 7 1.4 สรป ....................................................................................................................................... 18 1.5 แบบฝกหดทายบท................................................................................................................. 18
บทท 2 ประเภทของขอมล .................................................................................................. 19 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
2.2.1 สเกลาร............................................................................................................................25 2.2.2 เวกเตอร ..........................................................................................................................26 2.2.3 เมทรกซ ..........................................................................................................................29 2.2.4 การหาทรานสโพสเมทรกซ............................................................................................32 2.2.5 การหาดเทอรมแนนต .....................................................................................................32 2.2.6 การหาอนเวอรสการคณของเมทรกซ .............................................................................33 2.2.7 การสลบตาแหนงสมาชกภายในเมทรกซ .......................................................................35
2.3 เมทรกซของสายอกขระ .........................................................................................................37 2.4 พหนาม...................................................................................................................................39
2.4.1 สมการพหนาม................................................................................................................40 2.4.2 เมทรกซพหนาม .............................................................................................................43
2.5 เมทรกซบลน ..........................................................................................................................44 2.6 เมทรกซเลขจานวนเตม ..........................................................................................................44 2.7 ลตซ ........................................................................................................................................46
2.7.1 ลตซแบบธรรมดา ...........................................................................................................47 2.7.2 ไทพลตซ.........................................................................................................................49
2.8 อารเรยหลายมต ......................................................................................................................50 2.9 การตรวจสอบประเภทของขอมล ..........................................................................................52 2.10 ตวอยางการคานวณ ..............................................................................................................56 2.11 สรป ......................................................................................................................................59 2.12 แบบฝกหดทายบท ...............................................................................................................60
บทท 3 ตวดาเนนการทางคณตศาสตร ................................................................................. 63 3.1 ตวดาเนนการเลขคณต............................................................................................................63
3.1.1 การดาเนนการทางคณตศาสตรทเกยวของกบคาคงท .....................................................63 3.1.2 ลาดบความสาคญของการดาเนนการทางคณตศาสตร ...................................................64 3.1.3 การดาเนนการทางคณตศาสตรทเกยวของกบเมทรกซ ..................................................65 3.1.4 การแกระบบสมการเชงเสน ............................................................................................71
3.1.5 การดาเนนการทางคณตศาสตรทเกยวของกบพหนาม .................................................. 74 3.2 ตวดาเนนการสมพนธและตรรกะ.......................................................................................... 76
3.2.1 ตวดาเนนการสมพนธ .................................................................................................... 76 3.2.2 ตวดาเนนการตรรกะ ...................................................................................................... 77
3.3 ตวดาเนนการระดบบต .......................................................................................................... 80 3.4 ตวอยางการคานวณ ............................................................................................................... 82 3.5 สรป ....................................................................................................................................... 85 3.6 แบบฝกหดทายบท................................................................................................................. 86
บทท 4 ฟงกชนพนฐานทางคณตศาสตร ............................................................................. 89 4.1 ฟงกชนพนฐานทเกยวกบตวเลข ............................................................................................ 89
4.1.1 ฟงกชน abs(x) .......................................................................................................... 89 4.1.2 ฟงกชน sqrt(x) ....................................................................................................... 90 4.1.3 ฟงกชน int(x) .......................................................................................................... 92 4.1.4 ฟงกชน modulo(m,n)............................................................................................. 92 4.1.5 ฟงกชน ceil(x) ....................................................................................................... 93 4.1.6 ฟงกชน floor(x)..................................................................................................... 93 4.1.7 ฟงกชน round(x)..................................................................................................... 93 4.1.8 ฟงกชน fix(x) .......................................................................................................... 93 4.1.9 ฟงกชน rat(x) .......................................................................................................... 94 4.1.10 ฟงกชน sign(x) ..................................................................................................... 95 4.1.11 ฟงกชน roots(x)................................................................................................... 96 4.1.12 ฟงกชน real(x) ..................................................................................................... 96 4.1.13 ฟงกชน imag(x) ..................................................................................................... 96 4.1.14 ฟงกชน conj(x) ..................................................................................................... 96
4.2 ฟงกชนเลขชกาลงและลอการทม .......................................................................................... 97 4.2.1 ฟงกชน exp(x) .......................................................................................................... 97 4.2.2 ฟงกชน log(x) .......................................................................................................... 98
4.2.3 ฟงกชน log2(x) ........................................................................................................98 4.2.4 ฟงกชน log10(x) .....................................................................................................98
4.3 ฟงกชนตรโกณมต ..................................................................................................................99 4.3.1 ฟงกชน sin(x).........................................................................................................100 4.3.2 ฟงกชน cos(x).........................................................................................................101 4.3.3 ฟงกชน tan(x).........................................................................................................101 4.3.4 ฟงกชน asin(y) ......................................................................................................101 4.3.5 ฟงกชน acos(y) ......................................................................................................102 4.3.6 ฟงกชน atan(y) ......................................................................................................102
4.4 ฟงกชนไฮเพอรโบลก ...........................................................................................................103 4.4.1 ฟงกชน sinh(x) ......................................................................................................104 4.4.2 ฟงกชน cosh(x) ......................................................................................................104 4.4.3 ฟงกชน tanh(x) ......................................................................................................104 4.4.4 ฟงกชน asinh(y) ...................................................................................................105 4.4.5 ฟงกชน acosh(y) ...................................................................................................105 4.4.6 ฟงกชน atanh(y) ...................................................................................................106
4.5 ฟงกชนพนฐานทางสถต ......................................................................................................106 4.5.1 ฟงกชน min(x).........................................................................................................106 4.5.2 ฟงกชน max(x).........................................................................................................108 4.5.3 ฟงกชน mean(x) ......................................................................................................108 4.5.4 ฟงกชน median(x).................................................................................................109 4.5.5 ฟงกชน stdev(x) ...................................................................................................109 4.5.6 ฟงกชน sum(x).........................................................................................................110 4.5.7 ฟงกชน cumsum(x).................................................................................................110 4.5.8 ฟงกชน prod(x) ......................................................................................................111 4.5.9 ฟงกชน cumprod(x) ..............................................................................................111 4.5.10 ฟงกชน sort(x) ....................................................................................................112 4.5.11 ฟงกชน histplot(n,x) ....................................................................................113
4.5.12 ฟงกชน variance(x)......................................................................................... 113 4.5.13 ฟงกชน geomean(x) ........................................................................................... 114 4.5.14 ฟงกชน harmean(x) ........................................................................................... 115 4.5.15 ฟงกชน nfreq(x)................................................................................................. 115
4.6 เมทรกซพเศษ ...................................................................................................................... 117 4.6.1 เมทรกซเอกลกษณ ....................................................................................................... 117 4.6.2 เมทรกซคาหนง ............................................................................................................ 118 4.6.3 เมทรกซคาศนย ............................................................................................................ 119 4.6.4 เมทรกซสม .................................................................................................................. 119 4.6.5 เมทรกซทแยงมม ......................................................................................................... 121 4.6.6 เมทรกซสามเหลยมดานลาง ......................................................................................... 123 4.6.7 เมทรกซสามเหลยมดานบน ......................................................................................... 124 4.6.8 เมทรกซรปแบบพเศษ .................................................................................................. 124
4.7 ตวอยางการคานวณ ............................................................................................................. 125 4.8 สรป ..................................................................................................................................... 130 4.9 แบบฝกหดทายบท............................................................................................................... 130
บทท 5 การเขยนโปรแกรมดวย SCILAB ......................................................................... 133 5.1 คาสงวนซา ........................................................................................................................... 133
5.1.1 คาสง for.................................................................................................................... 133 5.1.2 คาสง while .............................................................................................................. 135
5.2 คาสงทดสอบเงอนไข .......................................................................................................... 136 5.2.1 คาสง if ...................................................................................................................... 136 5.2.2 คาสง select-case .............................................................................................. 139
5.3 การพฒนาฟงกชน ............................................................................................................... 140 5.3.1 ไฟลสครปตและไฟลฟงกชน ....................................................................................... 140 5.3.2 รปแบบและขอกาหนดในการเขยนไฟลฟงกชน ......................................................... 141 5.3.3 การใชงานคาสง argn................................................................................................ 145
5.3.4 การเขยนฟงกชนแบบอนไลน ......................................................................................147 5.4 การเขยนไฟลไดอาร.............................................................................................................149 5.5 ความรเพมเตมในการเขยนไฟลฟงกชน ...............................................................................150
5.5.1 การโหลดไฟลฟงกชน ..................................................................................................151 5.5.2 คาสงพนฐานสาหรบการพฒนาฟงกชน .......................................................................151 5.5.3 ขอแนะนาในการพฒนาโปรแกรมใหมประสทธภาพ ..................................................155
5.6 ตวอยางการคานวณ ..............................................................................................................156 5.7 สรป ......................................................................................................................................161 5.8 แบบฝกหดทายบท ...............................................................................................................162
บทท 6 การวาดกราฟดวย SCILAB .................................................................................. 165 6.1 รายละเอยดหนาตางกราฟ ....................................................................................................165 6.2 การวาดกราฟสองมต............................................................................................................168
6.2.1 พนฐานการวาดกราฟสองมต........................................................................................168 6.2.2 การตกแตงรปกราฟ ......................................................................................................179 6.2.3 กราฟเชงขว ...................................................................................................................187 6.2.4 การวาดกราฟสองมตแบบพเศษ ...................................................................................188
6.3 การวาดกราฟสามมต............................................................................................................190 6.3.1 พนฐานการวาดกราฟสามมต ........................................................................................190 6.3.2 กราฟคอนทวร ..............................................................................................................198 6.3.3 การวาดกราฟสามมตแบบพเศษ ...................................................................................200
6.4 การวาดกราฟแบบผสม ........................................................................................................201 6.5 ตวอยางการวาดกราฟ ...........................................................................................................202 6.6 สรป ......................................................................................................................................211 6.7 แบบฝกหดทายบท ...............................................................................................................211
บทท 7 พนฐานระบบอนพตและ เอาตพต .......................................................................... 215 7.1 คาสงพนฐานสาหรบการตดตอระบบอนพตและเอาตพต ....................................................215
7.1.1 คาสง input ...............................................................................................................215
7.1.2 คาสง file ................................................................................................................. 216 7.1.3 คาสง printf............................................................................................................ 217 7.1.4 คาสง fprintf ......................................................................................................... 220 7.1.5 คาสง scanf .............................................................................................................. 221 7.1.6 คาสง fscanf............................................................................................................ 222 7.1.7 คาสง read ................................................................................................................. 223 7.1.8 คาสง write .............................................................................................................. 224
7.2 ตวอยางการเขยนโปรแกรมเพอ ตดตอระบบอนพตและเอาตพต ......................................... 224 7.2.1 การอานขอมลจากไฟล ................................................................................................ 228 7.2.2 การเขยนขอมลลงในไฟล ............................................................................................ 231
7.3 สรป ..................................................................................................................................... 235 7.4 แบบฝกหดทายบท............................................................................................................... 235
บทท 8 การตรวจสอบหาขอผดพลาดของโปรแกรม ......................................................... 237 8.1 ขนตอนการตรวจสอบหาขอผดพลาด ................................................................................. 237
8.1.1 คาสง setbpt............................................................................................................ 239 8.1.2 คาสง resume และ return ................................................................................... 240 8.1.3 คาสง pause .............................................................................................................. 242 8.1.4 คาสงทนาสนใจ ............................................................................................................ 242
8.2 สรป ..................................................................................................................................... 245 8.3 แบบฝกหดทายบท............................................................................................................... 245
บทท 9 ตวอยางการประยกตใ ชงาน ................................................................................... 247 9.1 การใชงานเวกเตอรและเมทรกซตรรกะ .............................................................................. 247
9.1.1 การใชงานเวกเตอรและเมทรกซตรรกะสาหรบวาดรปกราฟ ...................................... 249 9.2 การดาเนนการเชงสญลกษณ ............................................................................................... 256
9.2.1 ฟงกชน addf, subf, mulf, ldivf, และ rdivf.............................................. 256 9.2.2 ฟงกชน cmb_lin ..................................................................................................... 257 9.2.3 ฟงกชน eval และ evstr ....................................................................................... 258
9.2.4 ฟงกชน trianfml ...................................................................................................259 9.2.5 ฟงกชน solve ...........................................................................................................259
9.3 ตวคณรวมนอยและตวหารรวมมาก .....................................................................................260 9.3.1 ตวคณรวมนอย .............................................................................................................261 9.3.2 ตวหารรวมมาก .............................................................................................................262
9.4 พหนาม.................................................................................................................................264 9.4.1 การแยกตวประกอบของพหนาม ..................................................................................265 9.4.2 การลดรปพหนาม .........................................................................................................268 9.4.3 คาสงทนาสนใจ ............................................................................................................268
9.5 การหาปรพนธจากดเขต .......................................................................................................273 9.6 การแกสมการอนพนธอนดบหนง ........................................................................................277 9.6 สรป ......................................................................................................................................280 9.7 แบบฝกหดทายบท ...............................................................................................................281
ภาคผนวก ก ....................................................................................................................... 283 ภาคผนวก ข ....................................................................................................................... 285
บรรณานกรม ..................................................................................................................... 291 ประวตผเขยน .................................................................................................................... 293
บทท 1 ความรเบองตนเกยวกบโปรแกรม SCILAB
ในบทนจะกลาวถงประวตความเปนมาของโปรแกรม SCILAB โครงสรางทวไป และคาสงพนฐาน สาหรบการเรมตนใชงานโปรแกรม SCILAB
1.1 ประวตความเปนมาของโปรแกรม SCILAB SCILAB เปนโปรแกรมภาษาขนสงท ถกพฒนาขนโดย ความรวมมอกนระหวาง นกวจยจากสถาบน Institut National De Recherche En Informatique Et En Automatique (INRIA) และ École
nationale des ponts et chausses (ENPC) ประเทศฝรงเ ศส ตงแตป ค .ศ. 1990 โดยมจดมงหมายเพอใชในการคานวณเชงตวเลขและแสดงผลกราฟรกทซบซอน ดงนนโปรแกรม SCILAB จงเหมาะสาหรบการใชงานทางดานวศวกรรมและวทยาศาสตร นอกจากนโปรแกรม SCILAB ยงเปนโปรแกรมทใหฟร (ไมตองเสยเงนคาลขสทธซอฟตแวร ) และอนญาตใหผใชสามารถนาไปพฒนาตอยอดได ผสนใจสามารถทจะดาวนโหลดตวโปรแกรม SCILAB และขอมลทเกยวของตางๆ ได จากเวบไซต http://home.npru.ac.th/~t3058/Scilab.htm หรอ http://www.scilab.org
สงทสาคญอกประการหนงของโปรแกรม SCILAB กคอความสา มารถในการทางานทใกลเคยงกบโปรแกรม MATLAB1 ซงเปนโปรแกรมทนยมมากสาหรบผใชงานทางดานวศวกรรมและวทยาศาสตร แตคาลขสทธซอฟตแวรของโปรแกรม MATLAB นนมราคาแพง มาก ดงนนในปจจบนนหลายๆ หนวยงานทงภาคอตสาหกรรมและภาคการศกษา ทง ในและนอกประเทศไดเรมนาโปรแกรม SCILAB มาชวยในการทางานและชวยในการเรยนการสอน ทงนเนองจากโปรแกรม 1 ดรายละเอยดของโปรแกรมภาษา MATLAB ไดจากเวบไซต http://www.mathworks.org
2
SCILAB เปนโปรแกรมทสามารถทางานไดอยางมประสทธภาพ และไมตองเสยเงนคาลขสทธ ซอฟตแวร2 โดยทวไปขอดของโปรแกรม SCILAB สามารถสรปไดดงน งายตอการเรยนร และทาความเขาใจ ขนตอนการเขยนโปรแกรมไมยงยาก มฟงกชน (function) สาหรบการคานวณทางคณตศาสตรจานวนมากพรอมใชงาน มกลองเครองมอ (toolbox) จานวนมากทประกอบดวยฟงกชนตางๆ ทจาเปนสาหรบการแกไข
ปญหาทางดานวศวกรรมและวทยาศาสตร เชน กลองเครอง มอทางดานการควบคมทนทาน (robust control), กลองเครองมอ ทางดานการประมวลผลสญญาณ (signal processing), และกลองเครองมอ ทางดานการหาคาเหมาะทสด (optimization) เปนตน
สามารถประมวลผลขอมลทอยในรปเชงสญลกษณ (symbolic) และขอมลทอยในรปของเมทรกซ (matrix) ไดอยางรวดเรวและมประสทธภาพ
สามารถพฒนาฟงกชนใหมๆ ขนมาใชงานรวมกบโปรแกรม SCILAB ไดโดยงาย สามารถใชงานรวม กบโปรแกรมภาษาฟอรแทรน (FORTRAN), ภาษาซ (C) และภาษา
MATLAB ได สามารถใชงานรวมกบโปรแกรม LabVIEW เพอทาการเชอมตอกบอ ปกรณฮารดแวรได สามารถสรางโปรแกรมสาเรจรปสาหรบการจาลองระบบ (system simulation) ไดโดยใช
เครองมอของโปรแกรม SCILAB ทเรยกวา “scicos” สามารถนาไปพฒนาตอยอดได เนองจากมรหสตนฉบบ (source code) และคมอ การใชงานให
ซงสามารถดาวนโหลดไดจากเวบไซต http://www.scilab.org
จากทกลาวมาขางตนนจะเหนไดวาโปรแกรม SCILAB สามารถทางานไดมากมายหลายรปแบบ อยางไรกตาม หนงสอเลมนจะอธบายเฉพาะพนฐานการใชงานทวไปของโปรแกรม SCILAB เพอใหผอานสามารถนาไปใชงา นไดอยางถกตองและรวดเรว พรอมทง เปนแนวทางใหผอานนาโปรแกรมน ไปประยกตใชงานขนสงตอไป ถามโอกาสผเขยนกหวงวาจะไดเขยนหนงสอเกยวกบการใชงานขนสง ของโปรแกรม SCILAB เชน วธการใชงานรวมกบโปรแกรม ภาษาซ, วธการใชงานรวมกบ 2 นอกจากนยงมโปรแกรมอนๆ อกทใหฟร (freeware) และทางานคลายกบโปรแกรม SCILAB เชน โปรแ กรม Octave (http://www.octave.org) และโปรแกรม Rlab (http://rlab.sourceforge.net) เปนตน แตจากทขาพเจาไดศกษาคนควาขอมลของโปรแกรมเหลานดพบวา โปรแกรมภาษา SCILAB สามารถทางานไดอยางรวดเรวและมประสทธภาพมากทสด
3
โปรแกรม LabVIEW, วธการใชงาน scicos, และการประยกตใชโปรแกรม SCILAB ในการแกไขปญหาทาง ดานวศวกรรม เปนตน
สาหรบโปรแกรม SCILAB ททางสถาบน INRIA และ ENPC พฒนาขนมานสามารถ นาไปใชงานไดในหลายระบบปฏบตการ ไดแก ระบบปฏบตการลนกซ (GNU/Linux), ระบบ ปฏบตการวนโดวส (Windows2000/XP/VISTA), ระบบปฏบตการ HP-UX, และระบบปฏบตการ Mac OS X เปนตน โดยหนงสอเลมนจะอางองถง โปรแกรม SCILAB เวอรชน 4.1.1 (เรมตนใชงานเมอวนท 9 พฤษภาคม พ.ศ. 2550) ททางานบนระบบปฏบตการวนโดวส อยางไรกตาม สาหรบผใชงานโปรแกรม SCILAB เวอรชนอนหรอททางานบนระบบปฏบตการอน กยงสามารถใชหนงสอเลมนในการศกษาและทาความเขาใจถงลกษณะการใชงานของโปรแกรม SCILAB ดวยตนเองได ทงนเนองจากรปแบบการใชงานของคาสงตางๆ รวมถงหลกการเขยนโปรแกรม SCILAB ยงคงมลกษณะเหมอนกนในทก เวอรชนและทกระบบปฏบตการ3
1.2 เรมตนการใชงานโปรแกรม SCILAB การเรยกใชงานโปรแกรม SCILAB ใหเรยกจากไฟลทชอวา “WScilex.exe” ซงอยใน สารบบ (directory) “SCIDIR\bin\WScilex.exe” โดยการกดดบเบลคลกทชอไฟลน เมอ SCIDIR คอชอสารบบทตดตงโปรแกรม SCILAB โดยหนาตางแรกทจะถกแสดงขนมา กคอ “หนาตางคาสง (command window)” ตามรปท 1.1 หนาตางนจะเปนสวนทผใชจะ ทาการปอนคาสงตางๆ ลงไป เพอทาการคานวณ และเปนสวนทแสดงผลลพธออก ทางหนาตางคาสง โดยทเครองหมาย SCILAB prompt “-->” เปนตวบอกวาโปรแ กรม SCILAB พรอมทจะรอรบคาสง ณ จดน
จากรปท 1.1 พบวาโปรแกรม SCILAB ไดเตรยมแถบเครองมอ (toolbar) ทรวมฟงกชนทใชงานบอยไวทหนาตางคาสงใน รปของสญรป (icon) ตามทแสดงในรปท 1.1 ขางใตแถบเมน
(menu bar) นนคอ โดยสญรปแตละอนมความหมายดงตอไป น
(New Scilab) สรางหนาตางคาสงข นมาใหมอกหนาตางหนง
(Open Scipad) เรยกใชงานโปรแกรมเอดเตอร (editor) ทชอวา “SciPad” ขนมา ตาม รปท 1.2 เพอใชสาหรบเขยนหรอแกไขโปรแกรม 3 ผใชสามารถดาวนโหลดตวโปรแกรม SCILAB สาหรบระบบปฏบตการตางๆ ไดจาก http://www.scilab.org
4
รปท 1.1 หนาตางคา สงของโปรแกรม SCILAB
รปท 1.2 หนาตาง เอดเตอรทชอ “SciPad” ของโปรแกรม SCILAB
(Open file) เรยกไฟลทมอยในสารบบขนมาใชงาน
(Copy) สาเนาขอมลในสวนทผใชเลอกในหนาตางคาสง
(Paste) นาขอมลทสาเนาไวมาวางในหนาตาง คาสง
5
(Change Directory) เปลยนสารบบทกาลงทางาน 4 (working directory)
(Scilab Output) เรยกหนาตางทชอวา “Console scilab” ขนมาใชงาน
(Choose Font …) เลอกลกษณะของตวอกษรทจะใชในหนาตางคาสง
(Print) พมพขอมลในหนาตางคาส งออกทางเครองพมพ (printer)
(Scilab Help) เรยกหนาตางใหความชวยเหลอทชอวา “Scilab Browse Help” ขนมา
ใชงานเพอคนหาขอมล (มผลลพธเชนเดยวกบการปอนคาสง help ในหนาตางคาสง )
1.2.1 แถบเมนในหนาตางคาสง หนาตางคาสงของโปรแกรม SCILAB จะประกอบไปดวยเมนหลกหลายๆ เมน ซงมรายละเอยด ดงตอไปน
เมน File ประกอบไปดวย
New SCILAB สรางหนาตางคาสงขนมาใหมอกหนาตางหนง Exec … ประมวลผลชดคาสงจากไฟล ซงโดยทวไปจะเปนไฟลทปดทายดวย .sci หรอ .sce Open … เรยกไฟลทมอยในสารบบขนมาใชงาน
Load … เรยกขอมลทบนทกไวในไฟลกลบมาใชงาน ซงโดยทวไปจะ เปนไฟล ทปดทายดวย .sav หรอ .bin Save … บนทกขอมลของตวแปรตางๆ เขาไปเกบไวในไฟลทกาหนด
Change Directory เปลยนสารบบทกาลงทางา น Get Current Directory แสดงสารบบทกาลงทางานอย ณ ขณะนน
Print Setup … กาหนดคา พารามเตอรตางๆ ของเครองพมพ
Print … พมพขอมลออกทางเครองพมพ Exit ปดหนาตางคาสง
4 สารบบทกาลงทางาน คอ สารบบทโปรแกรม SCILAB กาลงทางานอย ณ ขณะนน กลาวคอเปนสารบบท โปรแกรม SCILAB จะทาการคนหาไฟลตางๆ หรอบนทกไฟลลงไป เกบไว
6
เมน Edit ประกอบไปดวย
Select All เลอกขอมลทงหมดในหนาตางคาสง
Copy สาเนาขอมลในสวนทผใชเลอกในหนาตางคาสง
Paste นาขอมลทสาเนาไวมาวางในหนาตางคาสง
Empty Clipboard ลบขอมลทสาเนาไว History เรยกคาสงทเคยใช ในหนาตางคาสง ขนมาใชงานใหม
เมน Preferences ประกอบไปดวย
Language เลอกภาษาทจะใชในหนาตางคาสง (องกฤษหรอฝรงเศส ) Color เลอกสของตวอกษร (text) และสของพนหลง (background) ทตองการ ใชในหนาตางคาสง
Toolbar เปดหรอปดแถบเครองมอ
ทแสดงในหนาตางคาสง Files Association กาหนด ประเภทของไฟลทจะใชในหนาตางคาสง Choose Font เลอกลกษณะของตวอกษรทตองการจะใชในหนาตางคาสง Clear History ลบคาสงตางๆ ทเคยใชในหนาตาง คาสง ทาใหไมสามารถ เรยกใชงาน คาสงเหลานนโดยใชเมนยอย History และแปนลด (hot key) ได Clear Command Window ลบขอความทงหมดท ปรากฎในหนาตางคาสง แลวใหเครองหมาย SCILAB prompt “-->” ไปปรากฎอยทบรรทดแรกสดของ หนาตางคาสง Console เรยกหนาตาง Console scilab ขนมาใชงาน
เมน Control ประกอบไปดวย
Resume เรยกใชคาสง resume ของโปรแกรม SCILAB
Abort เรยกใชคาสง abort ของโปรแกรม SCILAB
Interrupt Ctrl+C หยดการประมวลผลชวคร าว (เทยบเทากบ การกดปม Ctrl+C)
เมน Editor
เปนการเรยกใชคาสง scipad เพอทาการเรยกหนาตางเอดเตอร SciPad ขนมา (ตามรปท 1.2) เพอใชในการเขยนหรอแกไขโปรแกรม
7
เมน Applications ประกอบไปดวย
Scicos เรยกใชคาสง scicos ของโปรแกรม SCILAB
EditGraph เรยกรปกราฟทเกบไวมาทาการปรบปรงหรอแกไข
m2sci เรยกใชคาสง mfile2sci เพอทาการแปลง M-file (ไฟลฟงกชน 5 ของโปรแกรม MATLAB) ใหเปนไฟลฟงกชนของ โปรแกรม SCILAB
ทเรยกวา “SCI-file”
Browser Variables เรยกใชคาสง browsevar ของโปรแกรม SCILAB เพอดวา ณ ตอนนมตวแปรอะไรบางทไดมการสรางขน หรอมการเรยกใชงานในหนาตางคาสงทกาลงใชงานอย
เมน ? ประกอบไปดวย
Scilab Help F1 เรยกหนาตาง Scilab Browse Help ขนมาใชงาน Configure กาหนดรปแบบของหนาตาง Scilab Browse Help ทตองการจะใชงาน
ในโปรแกรม SCILAB
Scilab Demos เรยกดตวอยางการใชงานชดคาสงตางๆ ทโปรแกรม SCILAB ไดจด เตรยมไวให
Web Links เปดใชงานเวบไซตทเกยวของกบโปรแกรม SCILAB About เรยกดขอมลทวไปของโปรแกรม SCILAB เชน เวอรชนของโปรแกรม SCILAB ทกาลงใชงานอย (เทยบเทากบการปอน คาสง about ท หนาตางคาสง )
1.3 คาสงพนฐานสาหรบการเรมตนใชงานโปรแกรม SCILAB โดยทวไป การเรยนรวธการใชงานโปรแกรมตางๆ นนไมยาก ถาผอาน ศกษาคมอการใชงานของโปรแกรมทตองการเรยนร พรอมทง ทดลองทาตามตวอยางทงหมดทปรากฎอยในคมอการใชงานของโปรแกรม เลมนน ดงนนรปแบบการอธบายหลกการใชงานโปรแก รมภาษา SCILAB ของหนงสอเลมนจะเนน การใชตวอยางประกอบคาอธบายเปนหลก เพอใหผอานสามารถเขาใจ ลกษณะการใชงานคาสงตางๆ ไดอยางรวดเรวและมประสทธผล 5 ศกษารายละเอยดเกยวกบไฟลฟงกช น (file function) ไดในหวขอท 5.3
8
ในสวนนจะ อธบายถงคาสงพนฐานสาหรบการเรมตนใชงานโปรแกรม SCILAB เพอเปนแนวทางสาหรบการเรยนรในบทตอ ไป เรมตนจะขอแสดงการกาหนดคาคงทใหกบตวแปร เชน ถาตองการกาหนดใหตวแปร 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 “_” (สญลกษณอนหามใช) ชวยในการกาหนดชอของ ตวแปรกได
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 จะไดผลลพธเปน
10
-->who
your variables are...
x scipad y scicos_pal %scicos_menu
%scicos_short %scicos_help %scicos_display_mode
modelica_libs scicos_pal_libs %helps WSCI home
SCIHOME PWD TMPDIR MSDOS SCI guilib
sparselib xdesslib percentlib polylib intlib
elemlib utillib statslib alglib siglib optlib autolib
roblib soundlib metalib armalib tkscilib tdcslib s2flib
mtlblib %F %T %z %s %nan %inf
COMPILER %gtk %gui %pvm %tk $ %t
%f %eps %io %i %e
using 16563 elements out of 5000000.
and 58 variables out of 9231
your global variables are...
LANGUAGE %helps demolist %browsehelp LCC
%toolboxes %toolboxes_dir TMPDIR
using 1185 elements out of 11000.
and 8 variables out of 767
ซงจะพบวามตวแปร x และ y รวมอยในผลลพธดวย ทงนเนองจาก ไดมการกาหนดคา ของตวแปร x และ y ไวกอนการเรยกใชคาสง who นอกจากนยงพบตวแปรอนอกดวย ไดแก scipad,
scicos_pal, %scicos_menu, %help, และ MSDOS เปนตน ซงเปนตวแปรทโปรแกรม SCILAB ไดทาการโหลด (load) เขาไปเกบไวในหนวยความจา ของเครองคอมพวเตอรโดยอตโนมตตงแตเรมเปดเรยกใช งานโปรแกรม SCILAB โดยทตวแปรเหลานจะ เกยว ของกบค าเรมตนของโปรแกรม เชน ไลบราร (library), คาโดยปรยาย (default) ตางๆ ของสารบบ, เดโม (demo), และคาคงทพเศษ 6 เปนตน
ในขณะทการใชคาสง whos จะใหผลลพธทแสดงขอมลมากกวาการใชคาสง who เชน บอกวาตวแปรแตละตวเปนขอมลประเภท (type) ใด, มขนาดเทาใด , และใชหนวยความจากไบต (byte) ในการเกบตวแปรตวนน ๆ ดงแสดงในตวอยาง ตอไป น
6 คาคงทพเศษของ โปรแกรม SCILAB จะเปนตวอกขระทเรมตนดวยเครองหมายเปอรเซนต “%” (สาหรบรายละเอยดเพมเตมของคาคงทพเศษนจะมอธบายในหวขอท 2.1)
11
-->whos
Name Type Size Bytes
whos function 8512
x constant 1 by 1 24
scipad function 14312
y constant 1 by 1 24
scicos_pal string 12 by 2 2048
%scicos_menu list 2440
%scicos_short string 12 by 2 408
%scicos_help sch ? 62440
%scicos_display_mode constant 1 by 1 24
modelica_libs string 1 by 3 528
scicos_pal_libs string 1 by 11 376
%helps *string 28 by 2 16
WSCI string 1 by 1 144
home string 1 by 1 144
SCIHOME string 1 by 1 224
PWD string 1 by 1 144
TMPDIR string 1 by 1 200
MSDOS boolean 1 by 1 16
SCI string 1 by 1 112
guilib library 288
sparselib library 280
xdesslib library 3176
percentlib library 13120
polylib library 880
intlib library 1368
elemlib library 2024
utillib library 4688
statslib library 1280
alglib library 1336
siglib library 1768
optlib library 608
autolib library 2144
roblib library 1192
soundlib library 464
metalib library 3928
armalib library 488
tkscilib library 848
[More (y or n ) ?]
นอกจากนยง สามารถทจะตรวจสอบดไดวา ขอมลแตละตวทใชเปนขอมลประเภทใดโดยใชคาสง typeof (ดรายละเอยดการใชงานคาสงนไดในหวขอท 2.9)
12
ถาตองการทจะทราบเพยงวาม ตวแปรอะไรบางทไดถกสรางขนมา โดยผใช กสามารถทา ไดโดยการใชคาสง who_user ซงจะใหผลลพธดงน
-->who_user
User variables are:
whos x scipad y modelica_libs
using 2925 elements out of 4984207
ผลลพธทแสดงออกมามตวแปร x, y, scipad, และ whos ปรากฎอยดวย เนองจากมการกาหนด คาตวแปร x และ y และมการเรยกใชคาสง scipad และ whos กอนทจะทาการเรยกใชคาสง who_user สวนคาสง who ทไดมการเรยกใชกอนหนานโปรแกรม SCILAB ไมถอวาเปน ตวแปร ในทานองเดยวกนตวแปร modelica_libs ถอวาเปนคาเรมตนของโปรแกรม SCILAB
ในกรณทตองการทราบวาคาสงแตละคาสง ทาหนาทอะไร และมลกษณะการเรยกใชงานอยางไร กสามารถทาไดโดยการใชคาสง help เชน ถาตองการทราบวาคาสง who มหนาทอะไร กใหปอนคาสงดงน
-->help who
เมอกดปม Enter กจะปรากฎหนาตาง Scilab Browse Help ขนมา ตามรปท 1.4 ซงจะแสดงขอความอธบายรปแบบการใชงานของคาสง who จะเหนไดวาคาสง help มประโยชนมากสาหรบการเขยนโปรแกรม เพราะวาคาสงแตละคาส งมลกษณะการเรยกใชงานทตางกน นอกจากน คาสงหนงคาสงอาจจะมรปแบบการใชงานหลายแบบกได ดงนนผใช จะตองศกษาลกษณะการใชงานคาสง ตางๆ ใหเขาใจเพอทจะไดสามารถนาคาสงเหลานน มาใชงานไดอยาง ถกตอง และตรงตามความตองการของงานประยกต (application) ทกาลงพฒนา
หากตองการทราบวาโปรแกรม SCILAB ไดเตรยมฟงกชนอะไรไวใหบางใน แตละไลบราร กสามารถทาไดโดยการพมพชอไลบราร นนลงทหนาต างคาสงแลวกด Enter เชน ถาตองการทราบวา ไลบรารสาหรบฟงกชนพนฐาน (elementary function) มฟงกชน อะไรบาง กใหปอนคาสงดงน
13
รปท 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) มฟงกชนอะไรบาง กใหปอนคาสงดงน
14
-->siglib
siglib =
Functions files location :SCI\macros\signal\
%asn analpf bilt buttmag casc cepstrum cheb1mag
cheb2mag chepol convol cspect czt dft detrend
ell1mag eqfir eqiir faurre findm find_freq
frfit frmag fsfirlin ffilt fftshift fft2 group
hank hilb iir iirgroup iirlp iirmod intdec
ifft jmat %k kalm lattn lev levin
lgfft lindquist mese mfft mrfit phc
pspect remezb %sn system sskf sincd srfaur
srkf trans wigner wiener wfir window yulewalk
zpch1 zpbutt zpell zpch2
ผลลพธทไดจะบอกวาไลบรารนอยท สารบบใด (เมอ SCI คอสารบบทเกบโปรแกรม SCILAB ไว) พรอมทงแสดงฟงกชนทงหมดทมอยใน สารบบน ในทางกลบกนถาหากตองการทราบวา ฟงกชน น อยใน ไลบรารใด กสามารถทาไดโดยใชคาสง whereis ตามตวอยางตอไปน
-->whereis('log10')
ans =
elemlib
-->whereis('convol')
ans =
siglib
ในกรณทตองการจะบนทกขอมลของตวแปรตางๆ เขาไปเกบไวในไฟล กสามารถทาไดโดยการใชคาสง save ซงมรปแบบการใชงาน คอ
save('filename', [list_of_variables])
เมออนพตอารกวเมนต (input argument) หรอตวแปรสงผาน filename คอชอไฟลทใชในการเกบขอมลของตวแปรซงจะตองเขยนใหอยภายในเครองหมาย single quote “'...'” หรอเครองหมาย double quote “"..."” โดยจะตองระบเสนทาง (path) ของไฟลทจะบนทกขอมลให
15
ชดเจนดวย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;
16
-->MSDOS
MSDOS =
T
ผลลพธทไดคอ T หรอเปนจรง (True) ซงหมายความวาโปรแกรม SCILAB กาลง ทางานอยบนระบบ MSDOS จรง ในกรณทตองการทราบวาโปรแกรม SCILAB กาลงทางานอย ในสารบบใด กสามารถตรวจสอบไดโดยใชคาสง pwd ดงน
-->pwd
ans =
C:\Documents and Settings\User
ผลลพธทไดบอกใหทราบวา สารบบทกาลงทางานคอ “C:\Documents and Settings\User” ซงหมายความวาเมอใชคาสง save('test.dat') ตามตวอยางทผานมา ไฟล test.dat กจะถกนาไปเกบไวใน สารบบน ในกรณทตองการเปลยนสารบบทกาลงทางานใหเปน สารบบอน กสามารถทาไดโดยการใชคาสง chdir เชน ถาตองการเปลยนสารบบทกาลง ทางานใหเปนสารบบ “C:\” กทาไดโดยใชคาสงตอไปน
-->chdir('C:\'); //เปลยนสารบบทกาลงทาง านใหเปนสารบบ “C:\”
-->pwd
ans =
C:\
ขอใหยอนกลบมาทสารบบทกาลงทางานเปน “C:\Documents and Settings\User” เนองจากไฟล test.dat อยทสารบบน ดงนนถาตองการเรยกตวแปรทเกบไวในไฟล test.dat กลบมาใชงาน กสามารถทาไดโดยการใชคาสง load ซงมรปแบบการใชงาน คอ
load('filename')
โดยพารามเตอร filename คอชอไฟล (จะตองระบเสนทางของไฟลทตองการเรยกมาใชงานใหถกตองครบถวน) ภายในเครองหมาย '…' หรอเครองหมาย "…" ตวอยางเชน
17
-->load('test.dat'); //เรยกตวแปรทเกบไวในไฟล test.dat ในสารบบทกาลง
-->x //ทางานกลบมาใชงาน x =
5.
-->y
--error 4
undefined variable : y
หลงจากใชคาสง load แลวจะพบวา คราวนผใชสามารถนาคาของตวแปร x มาใชงานไดแลว แตไมสามารถนาคาของตวแปร y มาใชงานได เนองจากไฟล test.dat ไมไดเกบขอมลของ ตวแปร y ไว
หากตองการลบคาสงและ ขอความทงหมดท ปรากฎบนหนาตางคาสง แลวใหเครองหมาย SCILAB prompt “-->” ไปปรากฎอยทบรรทดแรกสดของหนาตางคาสง กสามารถทาไดโดยใชคาสง clc ซงยอมาจากคาวา “Clear Command Window” (แตคา ของตวแปรตางๆ ทผใชกาหนดไวยงสามารถเรยกใชงานได ) และในกรณทตองการเลกใชงานโปรแกรม SCILAB กใหทาการปดหนาตางคาสงโดยการใชคาสง quit หรอ exit
สดทายนจะขอกลาวถงเครองหมายขนบรรทดใหม “...” ซงมลกษณะเปนจดทเรยงตอกนสามจด เครองหมายนมประโยชนมากในการเขยนโปรแกรมโดยเฉพาะอยางยงเมอคาสงทใชม ความยาวมาก เครองหมายนเอาไวใชตอทายคาสง เพอบอกโปรแกรม SCILAB วาคาสงในบรรทด นนยงไมสนสด ดงนน ถงแมวาจะ กดปม Enter หลงเครองหมายจดสามจดน โปรแกรม SCILAB กจะยงไมนาคาสงนนไปประมวลผล แตจะรอรบขอมลสวนทเหลอทจะเขยนตอไปในบรรทดใหม จนกระทงหมดคาสงแลวกดปม Enter อกครง จากนนโปรแกรม SCILAB จงจะเอาขอความทงหมดมารวมกนเปนประโยคคาสงเดยวแลว คอย นาเอาไปประมวลผล ใหพจารณาตวอยางตอไป น จะไดเขาใจถงลกษณะการทางานของเครองหมายขนบรรทดใหม
-->x = 5;
-->y = 3;
-->z = x + y //หาผลบวกของตวแปร x กบตวแปร y z = //แลวนาผลลพธทไดไปบรรจไวในตวแปรใหมทชอตวแปร z 8.
18
-->z = x + ... //หมายถงยงไมสนสดคาสง โปรแกรม SCILAB จะยงไมนาขอมลนไปประมวลผล
-->y //เมอกดปม Enter กถอวาเปนการสนสดคาสงทปอนจากบรรทดกอนหนาน
z = //โปรแกรม SCILAB จะนาคาสงทงหมดคอ z = x + y ไปประมวลผล 8.
จะเหนไดวาผลลพธทได มคาเทากน
1.4 สรป ในบทนไดกลาวถงประวตความเปนมาและ การใชงานคาสงพนฐานทวไป ของโปรแกรม SCILAB
เพอเปนแนวทางเบองตน ในการเรยนรในบทตอๆ ไป เนองจากโปรแกรม SCILAB เปนโปรแกรมทใหฟรและอนญาตใหผใชสามารถนาไปพฒนาตอยอดได ดงนนโปรแกรม SCILAB จงถอไดวา เปนทางเลอกใหมของผทตองการจะ ใชงานโปรแกรมทมความสามารถในการคานวณทางเชงตวเลขและแสดงผลกราฟรกทซบซอน เพอใชในการแกไขปญหาทางดานวศวกรรมและวทยาศาสตร ไดอยางรวดเรวและมประสทธภาพ เชนเดยวกนกบโปรแกรม MATLAB
1.5 แบบฝกหดทายบท 1.1 จงอธบายคณสมบตของโปรแกรม SCILAB
1.2 จงเปรยบเทยบขอแตกตางระหวางโปรแกรม SCILAB และโปรแกรม MATLAB
1.3 จงเปรยบเทยบขอแตกตางระหวางคาสง who และคาสง whos
1.4 จงอธบายหนาทการทางานของคาสง who_users
1.5 จงทดสอบการใชงานคาสง save และคาสง load
1.6 จงอธบายหนาทการทางานของคาสง clear
บทท 2 ประเภทของขอมล ในบทนจะอธบายถงประเภทของขอมลประเภทตางๆ ทสามารถใชงาน ไดในโปรแกรม SCILAB
เชน คาคงท พเศษ (special constant), เมทรกซคาคงท (constant matrix), เมทรกซของสายอกขระ (matrix of character strings), พหนาม (polynomial), และเมทรกซบลน (Boolean matrix)
เพอทผใชจะไดสามารถนาขอมลแตละประเภท มาใชในการพฒนาโปรแกรมไดอยางถกตอง
2.1 คาคงทพเศษ คาคงทพเศษ (special constant) เปนคาคงททตดตงมา พรอมกบตวโปรแกรม SCILAB (built-in
constant) ไมสามารถลบท งได10 เชน %i, %pi, %e, %inf, %nan, %eps, และ ans เปนตน จะเหนไดวาคาคงทพเศษเหลานจะเรมตนดวยเครองหมายเปอรเซนต “%” แลวตามดวยตวอกขระ ในสวน นจะขอสรปการใชงานของคาคงทพเศษตางๆ ตามตารางท 2.1 ดงตอไป น
2.1.1 คาคงทพเศษ %i คาคงทพเศษ %i คอ คาคงท ทใชในการแสดงตวเลขเชงซอน โดยจะมคาเทากบ คาหนวยจนตภาพ (imaginary unit) นนคอ = −i 1 เชน ถาตองการกาหนดใหตวแปร a มคาเทากบตวเลข เชงซอน
2 + 3i กสามารถกาหนดคาตวแปร a ในโปรแกรม SCILAB ไดดงน
10 สามารถดรายละเอยดของคาคงทพเศษตางๆ ทใชในโปรแกรม SCILAB วามอะไรบาง ไดจากไฟลเรมตน (start-up file) ซงอยทสารบบ “SCIDIR/scilab.star”
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
21
2.1.3 คาคงทพเศษ %e คาคงท พเศษ %e คอ คาคงทตรโกณมต (trigonometric constant) มคาเทากบ e = 2.7182818... ในโปรแกรม SCILAB คา %e จะมคาดงน
-->%e
%e =
2.7182818
2.1.4 คาคงทพเศษ %inf คาคงท พเศษ %inf มาจากคาวา “infinity” ใชแทนตวเลขทมคาเปนอนนต นนคอ %inf = ∞ เชน ผลลพธทไดจากการหารคาจานวนจรงดวยคาศนย (เชน 1/0) ในโปรแกรม SCILAB คา %inf จะมคาดงน
-->%inf
%inf =
Inf
-->1/%inf
ans =
0.
2.1.5 คาคงทพเศษ %nan คาคงท พเศษ %nan มาจากคาวา “Not-A-Number” หมายถงคาคงทนนไมสามารถแสดงใหอย ในรปของตวเลขได ในโปรแกรม SCILAB คา %nan จะมคาดงน
-->%nan
%nan =
Nan
2.1.6 คาคงทพเศษ %eps คาคงท พเศษ %eps มาจากคาวา “epsilon” คอ คาหนวยยอยขนาดเลกทสดทโปรแกรม SCILAB
22
สามารถรองรบได โดยจะมคาเทากบ e ≈ 2.22*10-16 นนคอ คาจานวนจรงทมคานอยกวาคา %eps โปรแกรม SCILAB จะถอวาเปนคาศนย หรออาจจะกลาวไดวา %eps เปนคาทมากทสดททาให x + %eps = x เมอ x > 0 ตวอยางเชน
-->%eps
%eps =
2.220D-16 //ตวแปร D-16 หมายถงใหคณกบเลขสบยกกาลง ลบสบหก นนคอ 2.22*10-16
-->2 + %eps
ans =
2.
-->0 + %eps
ans =
2.220D-16
คาคงท พเศษ %eps มประโยชนในการหลกเลยงปญหาทเกดขนจากการหารดวยตวเลขท มคาเปนศนย เชน ในกรณทตองการวาดกราฟของรปสญญาณ y = sin(t)/t ซงเปนสญญาณทพบมากในระบบสอสารดจทล (digital communication) ตวอยางเชน
-->t = -1:0.5:1 //กาหนดให ตวแปร t มคาตงแตคา -1 เพมขน ทละ +0.5 จนถงคา +1
t =
- 1. - 0.5 0. 0.5 1.
-->sin(t)./t
--error 27
division by zero... //เนองจาก ณ ตาแหนงท t = 0 จะไดวา sin(0)/0
-->t(3) = %eps //กาหนดให สมาชกตวทสามของตวแปร t มคาเปน %eps t =
- 1. - 0.5 2.220D-16 0.5 1.
-->y = sin(t)./t //ตามนยามจะไดวา sin(0)/0 = 1
y =
0.8414710 0.9588511 1. 0.9588511 0.8414710
23
สงเกตจะพบวาตวเลขทมคามากๆ หรอนอย ๆ สามารถทจะเขยนใหอยในรปของเลขยกกาลงได โดยใชพารามเตอร d, e, D, หรอ E เขาชวย ดงตวอยางตอไปน
-->y = [1e - 2 1d - 3 1D - 5 1E - 6 10e - 4]
y =
0.01 0.001 0.00001 0.000001 0.001
-->z = [1e + 2 1d + 3 1D + 5 1E + 6 10e + 4]
z =
100. 1000. 100000. 1000000. 100000.
2.1.7 คาคงทพเศษ ansคาคงทพเศษ ans คอ ตวแปรชวคราว (temporary variable) ของโปรแกรม SCILAB ทใชในการเกบผลลพธทไดจากการคานวณของคาสงแตละคาสง ในหนาตางคาสง โดยตวแปร ans จะถกนามาใชอตโนมตในกรณทไมมการระบตวแปรรบคาของผลลพธ เชน
-->3 + 2
ans = //คาคงทพเศษ ans ถกนามาใชโดยอตโนมต เนองจากไมมการ กาหนดตวแปร รบคาผลลพธ 5.
2.1.8 คาคงทพเศษ %t, %T, %f, และ %F คาคงท พเศษ %t หรอ %T คอ คาคงทบลน (Boolean constant) ทบอกวาความสมพนธ เปนจรง (True) หรอมคาทางตรรกะเปนคา 1 สวนคาคงท พเศษ %f หรอ %F คอคาคงทบลนท บอกวา ความสมพนธเปนเทจ (False) หรอมคาทางตรรกะเปนคา 0 ตวอยาง เชน
-->[%t, %T, %f, %F, ~%t, ~%f]
ans =
T T F F F T
โดยทเครองหมายทวดา (tilda) “~” เปนตวดาเนนการตรรกะ (logical operator) ทแสดงถงการปฏเสธ นนคอ ~%t = F และ ~%f = T (ดรายละเอยดในหวขอท 3.2.2)
24
2.1.9 คาคงทพเศษ %s และ %z คาคงท พเศษ %s และ %z คอ ตวแปรทใชในการกาหนดสมการ พหนาม มคาเทากบการใชคาสง s = poly(0, 's') หรอ z = poly(0, 'z') ในโปรแกรม SCILAB (ดรายละเอยดของการใชงานคาสง poly ไดในหวขอท 2.4.1) เชน
-->%s
%s =
s
-->%z
%z =
z
-->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 ตวอยางการใชงานของคาสงน เชน
25
-->%io %io =
5. 6. //เวกเตอรขนาด 1×2 คา 5 สาหรบอนพต และคา 6 สาหรบเอาตพต
-->%io(1) //คา 5 สาหรบอนพต ans =
5.
-->%io(2) //คา 6 สาหรบเอาตพต ans =
6.
นอกจากคาคงทพเศษทงหมดทกลาวมานแลว ผใชยงสามารถทจะกาหนดคาคงทพเศษอนๆ ขนมาใหม ไดโดยใชคาสง predef ในโปรแกรม SCILAB สาหรบผสนใจลองใชคาสง help เพอศกษารปแบบการใชงานของคาสง predef
2.2 เมทรกซคาคงท เมทรกซคาคงท (constant matrix) คอ เมทรกซทมสมาชกแตละ ตวเปนเลขจานวนจรง (real number) หรอเลขจานวนเชงซอน (complex number) โดยทวไป แลวคา สเกลาร (scalar) และเวกเตอร (vector) กถอ วาเปนเมทรกซแบบหนง ดงนนในสวนนจะขออธบายถงการสรางตวแปร สเกลาร เวกเตอร และเมทรกซ ดงน
2.2.1 สเกลาร สเกลาร คอ คาทเปนไดทงจานวนจรง หรอจานวนเชงซอน คาสเกลารสามารถทจะถกกาหนด ลงในตวแปรใดๆ ตามทตองการไดทนท เชน
-->a = 2 + 3*%i a
2. + 3.i
-->b = 3
b =
3.
26
ตวแปรสเกลารถอไดวาเปนเมทรกซขนาด 1×1 นนคอมขนาด 1 แถว (row) และ 1 แนวตง (column) ดงนน ถาตองการตรวจสอบวาตวแปร สเกลาร a และ b มขนาดเทาใด กสามารถทาไดโดยการใชคาสง size ซงมรปแบบการใชงานคอ
[m, n] = size(X)
โดยทพารามเตอร X คอตวแปรคาคงทใดๆ (เปนไดทงคา สเกลาร เวกเตอร และเมทรกซ) m และ n คอขนาด m×n ของพารามเตอร X เมอ m บอกจานวนแถวของ X และ n บอก
จานวนแนวตง ของ X
ตวอยางการใชงานคาสง size เชน
-->size(a)
ans =
1. 1.
-->size(b)
ans =
1. 1.
ผลลพธทไดหมายความวาตวแปร a และ b มขนาด 1×1 (หรอขนาด 1 แถว และ 1 แนวตง )
2.2.2 เวกเตอร เวกเตอร คอ เมทรกซขนาดหนงแถวหรอเมทรกซขนาดหนงแนวตง เวกเตอรแถว (row vector) สามารถสรางไดโดยการใชเครองหมายคอมมา (comma) “,” หรอชองวาง (space) เปนตวแยกสมาชกแตละ สมาชกในเวกเตอรแถว เชน
-->v = [1, 2, -3]
v =
1. 2. - 3.
-->v = [1 2 -3]
v =
1. 2. - 3.
27
ผลลพธทไดคอเวกเตอรแถว v ทมสมาชกอยสาม ตว (หรอมขนาดเทากบ 1×3) มคาเทากบ 1, 2, และ -3 ตามลาดบ เชนเดยวกนถาตองการทราบวาเวกเตอร v มขนาดเทาใดกสามารถทาไดโดย การใชคาสง size ดงน
-->size(v)
ans =
1. 3.
ซงบอกวาเวกเตอร v มขนาดเทากบ 1×3 (หรอ 1 แถว และ 3 แนวตง ) และถาตองการทราบวา เวกเตอร v มความยาวเทาใดหรอมจานวน สมาชกทงหมดเทาใด กสามารถทาไดโดยการใชคาสง length ดงน
-->length(v) ans =
3. //หมายความวาเวกเตอร v มสมาชกสามตว
หมายเหต การใชชองวางในการแยก สมาชกของเวกเตอรแถวมขอควรระวง ดงแสดงในตวอยางตอไปน
-->v = [1 +2]
v =
1. 2.
-->v = [1 + 2]
v =
3.
-->v = [1 +2 5 - 4]
v =
1. 2. 1.
กลาวคอ ถาเครองหมายบวก (หรอเครองหมายลบ) อยตดกบตวเลข โปรแกรม SCILAB จะถอวา เครองหมายบวก (หรอเครองหมายลบ) นนเปนเครองหมายแสดงคาบวก (หรอคาลบ ) ของตวเลข แตถาเครองหมายบวก (หรอเครองหมายลบ) ไมไดอยตดกบตวเลข จะหมายความวาใหนาตวเลขทอยระหวาง เครองหมายบวก (หรอเครองหมายลบ) มาทาการบวก (หรอการลบ) กน
28
ในขณะทเวกเตอรแนวตง (column vector) สามารถสรางไดโดยการหาทรานสโพส11 (transpose) ของเวกเตอรแถวโดยใชเครองหมาย single quote “ ' ” ตามหลงตวแปรเวกเตอรแถว หรอสามารถสรางเวกเตอรแนวตง ขน ใหมได โดยตรงโดยการใชเครองหมายเซมโคลอนเปนตวแยกสมาชกแตละ สมาชกในเวกเตอรแนวตง เชน
-->v = [1 2 3]; //สรางเวกเตอรแถว v
-->v' //ใชทรานสโพสกบเวกเตอรแถ วเพอใหไดเปนเวกเตอรแนวตง ans =
1.
2.
3.
-->w = [1; 2; -3] //สรางเวกเตอรแนวตง ขนมาโดยใชเครองหมายเซมโคลอน
w =
1.
2.
- 3.
นอกจากการกาหนดคาโด ยตรงใหกบเวกเตอรแลว ผใชยงสามารถกาหนดคาของเวกเตอร ใหมคาเพมขนหรอลดลงแบบอตโนมตได โดยการใชเครองหมายโคลอน (colon) “ : ” เขาชวย ซงมรปแบบการใชงานดงน
ชอตวแปร = คาเรมตน : คาทเพมขน (หรอคาทลดลง ) : คาสดทาย
ในกรณทไมมการกาหนดคาทเพมขน (หรอคาทลดลง ) โปรแกรม SCILAB จะกาหนดใหเปน คาทเพมขนเทากบ +1 โดยอตโนมต (คาโดยปรยาย ) ตวอยางเชน
-->z = 1:2:10 //เรมตนทคา 1 แลวเพมขน ทละ +2 จนกระทงถงคาทมากทสดทไมเกน 10 z =
1. 3. 5. 7. 9.
11 ทรานสโพสของเวกเตอร เปนการเปลยนเวกเตอรแนวตงใหเปนเวกเตอรแถว หรอ การเปลยนเวกเตอรแถวใหเปนเวกเตอรแนวตง (ดรายละเอยดของการทรานสโพสเพมเตมในหวขอท 2.2.3.1)
29
-->z = 10:-2.5:0 //เรมตนทคา 10 แลวลดลงทละ -2.5 จนกระทงถงคาทนอยทสดทไมเกน 0 z =
10. 7.5 5. 2.5 0.
-->z = 0:5 //เรมตนทคา 0 แลวคาเพมขน ทละ +1 จนกระทงถง 5
z =
0. 1. 2. 3. 4. 5.
-->z = 5:0 //คาเรมตนท 5ไมสามารถเพมขน ทละ +1 จนถง 0 ได ดงนนผลลพธ ทไดจงเปน
z = //เมทรกซวาง (empty matrix) นนคอมจานวนแถวกบจานวน แนวตง เทากบศนย
[]
2.2.3 เมทรกซ เมทรกซขนาด m×n คอ เมทรกซทมจานวนจานวน m แถว และ n แนวตง เชน ถาตองการสราง เมทรกซขนาด 2×3 สามารถสรางได เชน
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
โดยทเครองหมายเซมโคลอนจะทาหนาทระบวาเปนจดสนสดของขอมล ในแตละแถว หากตองก ารทราบวาเมทรกซ A มขนาดเทาใด กสามารถทาไดโดยใชคาสง size ดงน
-->size(A)
ans =
2. 3.
ซงบอกวาเมทรกซ A มขนาด 2×3 (หรอ 2 แถว และ 3 แนวตง )
นอกจากนผใชสามารถทจะอางถงสมาชกแตละตวในเมทรกซได โดยตรงตามรปแบบการใชงานดงน
-->b = A(2, 3)
b =
6.
30
คาสงนเปน การบอกโปรแกรม SCILAB ใหนาคาของ สมาชกในแถวทสองและแนวตง ทสามของเมทรกซ A ไปบรรจไวในตวแปร b ในทานองเดยวกนผใชยงสามารถทจะกาหนดคาใหแก สมาชกแตละตวในเมทรกซไดโดยตรง เชน
-->A(2, 3) = 10
A =
1. 2. 3.
4. 5. 10.
ซงเปนการกาหนดให คาของ สมาชกในแถวทสองและแนวตง ทสามของเมทรกซ A มคาเปน คา 10ดงนนเมทรกซ A จงมผลลพธตามทแสดงไวขางตน
ในกรณทตองการแสดงคาของ สมาชกทงหมดเฉพาะในแถวทหนงของเมทรกซ A กทาไดโดยใชเครองหมายโคลอน เชน
-->A(1, :)
ans =
1. 2. 3.
โดยทเครองหมายโคลอนจะทาหนาทระบชวง ทงหมด ของแนวตง (หรอของแถว ทงนขนอยกบวา เครองหมายโคลอนอย ณ ตาแหนงใดในการอาง องถง) และเพอใหเขาใจลกษณะการใชงานของเครองหมายโคลอนมากขน ใหพจารณาตวอยางตอไปน
-->A(:, 2) //แสดงขอมลทกแถวเฉพาะในแนวตง ทสอง
ans =
2.
5.
-->A(1:2, 2:3) //แสดงขอมลเฉพาะในแถวทหนงถงแถวทสอง ans = //และแนวตง ทสองถงแนวตง ทสาม 2. 3.
5. 10.
-->A(:, [1 3 3]) //แสดงขอมลทกแถวเฉพาะในแนวตง ทหนง แนวตง ทสาม ans = //และแนวตง ทสามซาอกครง 1. 3. 3.
4. 10. 10.
31
-->A(:, 3) = [] //ทาการลบขอมลทกแถวเฉพาะในแนวตง ทสาม A =
1. 2.
4. 5.
สงเกตจะพบวา ณ ตอนนเมทรกซ A จะมจานวนแถวและแนวตง เทากน นนคอเปนเมทรกซขนา ด 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 เมทรกซจตรส คอ เมทรกซทมจานวนแถวเทากบจานวนแนวตง
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
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)
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 วาอยดานไหน
35
ของเครองหมายหาร (ตามทแสดงในตวอยางขางตน ) การใชเครองหมายหารในการหาอนเวอรส การคณของเมทรกซมประโยชนมากในการเขยนโปรแกรม เพราะชวยทาใหโปรแกรมมความกะทดรดและประมวลผลไดเรวขน
การหาอนเวอรสการคณของเมทรกซบางครงผลลพธทไดของ สมาชกบางตวทมคานอยมาก
ดงนนโปรแกรม SCILAB จงไดเตรยมคาสง clean เพอทาหนาทปรบคาทนอยมากเหลานน (ถาคาสมบรณนอยกวาคา 10−10) ใหมคาเปนคา 0 ดงแสดงในตวอยางตอไปน
-->A = [1 2 1; 2 3 2; 1 4 2];
-->X = A*inv(A) //จากคณสมบตอนเวอรสการคณของเมทรกซจะไดวา AA-1 = I X =
1. 2.220D-16 0.
0. 1. 0.
0. 0. 1.
-->Y = clean(X)
Y =
1. 0. 0.
0. 1. 0.
0. 0. 1.
2.2.7 การสลบตาแหนงสมาชกภายในเมทรกซ
การทางานกบเมทร กซบางครง มความจาเปนทจะตองสลบตาแหนง สมาชกภายในเมทรกซ (หรอเปลยนรปรางของเมทรกซ ) ใหอยในรปแบบทตองการเพอนาไปใชงานเฉพาะดาน คาสงททาหนาทในลกษณะนไดแก
2.2.7.1 คาสง mtlb_fliplr เปนคาสงทใชในการสลบตาแหนงของสมาชกใน เมทรกซจากซายไปขวา สงเกตจะพบวาคาสงนจะ เรมตนดวยคาวา “mtlb” ซงเปนตวทบอกวาคาสงนมาจากโปรแกรม MATLAB14 (ในกรณนมาจากคาสงในโปรแกรม MATLAB ทชอวา fliplr) ตวอยางเชน 14 โปรแกรม SCILAB มฟงกชน ในการแปลงโปรแกรมทเขยนโดยภาษา MATLAB ใหอยในรปของโปรแกรมทสามารถนามาใชงานในโปรแกรม SCILAB ไดตามขอกาหนดของโปรแกรม SCILAB (ดรายละเอยดเพมเตมท
36
-->A = [1 2 3 4; 5 6 7 8]
A =
1. 2. 3. 4.
5. 6. 7. 8.
-->B = mtlb_fliplr(A) //เมทรกซ B กคอเมทรกซ A ทสลบตาแหนงของ สมาชก B = //ในแตละแถว จากซายไปขวา 4. 3. 2. 1.
8. 7. 6. 5.
2.2.7.2 คาสง matrix เปนคาสงทใชในการเปลยนขนาดของเม ทรกซ โดยจานวนสมาชกของเมทรกซใหมจะ ยงคงเทากบ จานวนสมาชกของเมทรกซเดม รปแบบการใชงานของคาสงน คอ
matrix(X, m, n)
โดยทพารามเตอร X คอ เมทรกซขนาด a×b m และ n คอ ขนาด m×n (หมายถง m แถวและ n แนวตง ) ของเมทรกซใหม โดยท ผลคณ
ของ a กบ b จะตองมคาเทากบผลคณของ m กบ n
กอนทจะศกษา ตวอยางการใชงานคาสง matrix จะขอกลาวถงลกษณะการจดเกบขอมลของ เมทรกซในโปรแกรม SCILAB กอน โดยทวไปแลว ขอมลในเมทรกซจะถกจดเกบใหอยในรปของ เวกเตอร โดยทสมาชกในเมทรกซจะถกเกบเรยงจากบนลงลางและจากซายไปขวา เชน ถาเมทรกซ A = [1 2 3; 4 5 6] ขอมลทโปรแกรม SCILAB จดเกบจะอยในรปของเวกเตอร ชวคราว [1 4 2 5 3 6] ดงนนเมอใชคาสง matrix โปรแกรม SCILAB กจะดงขอมลทจดเกบไวในรปของเวกเตอร ชวคราว ทละตวจากซายไปขวามาสรางเปนเมทรกซใหม ใหพจารณาตวอยางตอไปนจะไดเขาใจถงการใช งานคาสงนมากขน
เมนหลก Applications และเมนยอย m2sci ในแถบเมนของหนาตางคาสง ) นอกจากนในโปรแกรม SCILAB จะมคาสงทขนตนดวย mtlb หลายคาสง (ศกษารายละเอยดเพมเตมไดจากการใชคาสง help mtlb)
37
-->A = [1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6. //ขอมลทถกจดเกบไวในเวกเตอรชวคราว คอ [1 4 2 5 3 6]
-->B = matrix(A, 1, 6) //สรางเมทรกซ B ขนาดหนงแถวและหกแนวตง จากเมทรกซ A B =
1. 4. 2. 5. 3. 6.
-->C = matrix(A, 3, 3) //จานวนสมาชกของเมทรกซ C ไมเทากบของ เมทรกซ A !--error 60
argument with incompatible dimensions
-->D = matrix(A, 3, 2) //สรางเมทรกซ D ขนาดสามแถวและสองแนวตง จากเมทรกซ A D =
1. 5.
4. 3.
2. 6.
คาสงสดทาย จะเปนการนาเอาขอมลในเวกเตอรชวคราวมาสรางเปนเมทรกซใหมขนาด 3×2 โดยขอมลทนามาใชในเมทรกซใหมจะถกเรยงจากบนลงลางแล ะจากซายไปขวา
2.3 เมทรกซของสายอกขระ สายอกขระ (character string) สามารถสรางไดโดยการเขยนตวอกขระภายในเครองหมาย single
quote '…' หรอเครองหมาย double quote "…" เชน
--> x = 'Piya'
x =
Piya
-->y = "_Kovintavewat"
y =
_Kovintavewat
ผใชสามารถทจะนาสายอกขระสองอนมาตอกนเปนอนเดยวได โดยการใชเครองหมายบวก “+” ดงแสดงในตวอยางตอไปน
38
-->x + y
ans =
Piya_Kovintavewat
การสรางเมทรกซของสายอกขระ (matrix of character strings) กสามารถทาไดโดยวธการเดยวกนกบการสรางเมทรกซทวไปตา มทอธบายไวในหวขอทผานมา เชน
-->X = ['a' "b"; "c" 'd'] //สรางเมทรกซของสายอกขระ X ขนาด 2×2
X =
!a b !
! !
!c d !
ขอดของโปรแกรม SCILAB อกประการหนงกคอ ความสามารถในการนาเมทรกซข องสายอกขระมาทาการประมวลผลได เชน โปรแกรม SCILAB สามารถทา symbolic triangularization ของเมทรกซ X โดยใชคาสง trianfml(X) นนคอ การทาใหสมาชกของเมทรกซ X ทอยใตเสนทแยงมมหลก (main diagonal) มคาเปน คา ศนย โดยใชเทคนคทางคณตศาสตรทเรยกวา “การดาเนนการตามแถวขนมลฐาน (elementary row-operation)” ตวอยางเชน
-->Y = trianfml(X) //ผลลพธจากการทา symbolic triangularization ของเมทรกซ X15
Y =
!c d !
! !
!0 c*b-a*d !
ถาตองการทราบวาเมทรกซ X และ Y จะมคาเทากบเทาใด หากมการกาหนดคาของตวแปร a, b,
c, และ d กสาม ารถทาไดโดยการใชคาสง evstr เชน
-->a = 1; b = 2; c = 3; d = 4; //กาหนดคา ของตวแปรตางๆ
-->evstr(X) //ประเมนคา (evaluate) ของเมทรกซ X ตามคาของตวแปรทกาหนด ให ans =
15 สามารถดรายละเอยดวธการทา symbolic triangularization ของตวอยางนไดในภาคผนวก ก
39
1. 2.
3. 4.
-->evstr(Y) //ประเมนคาของเมทรกซ Y
ans =
3. 4.
0. 2.
หรอสามารถใชคาสง eval แทนคาสง evstr กไดดงน
-->eval(X) //ใหผลลพธเทยบเทากบคาสง evstr ans =
1. 2.
3. 4.
-->eval(Y) ans =
3. 4.
0. 2.
2.4 พหนาม พหนาม (polynomial) คอ ผลรวมของจานวนทเขยนในรปการคณของคาคงทกบตวแปรตงแต 1 ตวขนไป โดยทเลขชกาลงของตวแปรแตละตว มคาเปนศนยหรอจานวนเตมบวก อยางไรกตามหนงสอ เลมนจะพจารณาเฉพาะกรณทพหนามเปนฟงกชนของ ตวแปรเพยงตวเดยวเทานน นนคอ โปรแกรม SCILAB จะรองรบพหนามทมรปแบบดงน
2 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) คอคาเลขชกาลงทมากทสดของพหนามนน
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. //ดกรของพหนาม
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
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) จะพบมากในงานทางดานวศวกรรมตางๆ
43
2.4.2 เมทรกซพหน าม เมทรกซพหนาม (polynomial matrix) คอ เมทรกซทมสมาชกเปนพหนาม โปรแกรม SCILAB อนญาตใหมการนาตวแปรพหนามมาจดใหอยในรปของเมทรกซไดเชนเดยวกนกบคา สเกลาร ซงมประโยชนมากสาหรบการใชงานทางดานวศวกรรม โดยวธการสรางเมทรกซพหนามกจะเหมอนกบการสรางเมทรกซคาคงท ดงแสดงในตวอยางตอไปน
-->s = poly(0, 's');
-->A = [1, s; s, 1 + s^2]
A =
1 s
2 s 1 + s
-->B = [1/s, 1/(1+s); 1/(1+s), 1/s^2]
B =
1 1 - ----- s 1 + s
1 1 ----- - 2 1 + s s
นอกจากนยงสามารถนาสมการพหนามมาดาเนนการทางคณตศาสตร เชน นามาบวก ลบ คณ และหารได เชน (ศกษารายละเอยดเพมเตมได ในหวขอท 3.1.4)
-->C = A + B
C =
2 1 + s 1 + s + s ----- --------- s 1 + s
2 2 4 1 + s + s 1 + s + s --------- --------- 2 1 + s s
44
2.5 เมทรกซบลน คาคงทพเศษ %t และ %f สามารถนามาสรางเปนเมทรกซบลน (Boolean matrix) ไดดงแสดงในตวอยางตอไปน
-->B = [%t, %T, %f, %F; ~%t, ~%T, ~%f, ~%F]
B =
T T F F
F F T T
-->[1 2 3] == [2 2 3] //นาเวกเตอรสองเวกเตอรมาเปรยบเทยบกนวา
ans = //ทตาแหนงใดบางทมคาเทากน F T T
-->a = 1:5
a =
1. 2. 3. 4. 5.
-->a > 2 //ตรวจสอบดวาสมาชกใดของเวกเตอร a ทมคามากกวาคา 2 ans =
F F T T T
-->a(ans) //แสดงคาของ สมาชกในเวกเตอร a ทมคามากกวาคา 2 ans =
3. 4. 5.
จากผลลพธทไดพบวา มการนาเอาตวดาเนนการสมพนธ (relational operator) ไดแก เครองหมายเทากบ “==” และเครองหมายมากกวา “>” เปนตน มาใชในการสรางเมทรกซบลน (ดรายละเอยดการใชงานตวดาเนนการสมพนธไดในหวขอท 3.2.1)
2.6 เมทรกซเลขจานวนเตม โปรแกรม SCILAB รองรบขอมลทเปนตวเลขจานวนเตม (integer number) ซงมอยดวยกนทงหมด 6 แบบ ดงน
1) เลขจานวนเตมขนาด 8 บต มคาตงแต -128 ถง 127 (-27 ถง 27 - 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
46
-->uint16([-3 -1 0 65535 65536 65538])
ans =
65533 65535 0 65535 0 2
-->int32([-2147483648 0 2147483647 2147483648 2147483649])
ans =
-2147483648 0 2147483647 -2147483648 -2147483648
-->uint32([-3 -1 0 4294967295 4294967296 4294967298])
ans =
4294967293 4294967295 0 4294967295 0 2
จะเหนไดวาเมอใชตวเลขทมคาเกนกวาชวงทกาหนดไวในคาสงแตละแบบ กจะทาใหเกดขอผดพลาดของขอมลซงมอยสองรปแบบคอ คามากเกนชวงทกาหนด (overflow) และคานอยเกนชวงทกาหนด
(underflow) โดยผลลพธทไดนนจะสอดคลองกบรปท 2.1
จากผลลพธทไดจากการใชคาสงตางๆ ขางตน ถาสงเกต จะพบวาไมมจดทศนยมตามหลง ผลลพธเหลานน ซงทางโปรแกรม SCILAB จะหมายถงคา เหลา นนเปนเลขจานวนเตม (ถามจดทศนยมตามหลงตวเลขจะถอวาตวเลขนนเปนเลขจานวนจรง ) ถาหากตองการเปลยนเลขจานวนเตมใหเปนเลขจานวนจรงทมความแมนยาเปนสองเทา (double-precision floating point) กสามารถทาไดโดยใชคาสง double เชน
-->uint8([-3 -1 0 255 256 258])
ans =
253 255 0 255 0 2
-->double(ans)
ans =
253. 255. 0. 255. 0. 2. //มจดทศนยมตามหลง
2.7 ลตซ ลตซ (list) คอ กลมของขอมลประเภทตางๆ ทอยรวมกนในตวแปรตวเดยว ตวแปรประเภทลตซจะ สามารถอางถงขอมลไดหลายประเภทตามทกาหนด ซงจะมประโยชนมากในการเขยนโปรแกรม โดยเฉพาะอยางยงเมอตองการจดกลมของขอมลประเภทตางๆ ใ หอยภายในชอตวแปรชอเดยวกน คาสงทใชในกา รกาหนดตวแปรประเภทลตซมอยสอง แบบดงน
47
2.7.1 ลตซแบบธรรมดา ลตซแบบธรรมดา (ordinary list) สามารถกาหนดใหสมาชกตวแรกของตวแปรประเภทลตซเปนขอมลประเภทไหนกได การกาหนดลตซแบบนจะใชคาสง list ซงมลกษณะการใชงาน คอ
list(a1, ..., an)
โดยทพารามเตอร ai (สาหรบ i = 1,2,3,...,n) คอ ขอมลประเภทตางๆ ทสามารถใชไดในโปรแกรม SCILAB พจารณาตวอยาง ตอไปน จะไดเขาใจลกษณะการทางานของลตซแบบน
-->L = list(1, 'Piya', [1 2; 3 4])
L =
L(1) //เปนขอมลสเกลาร
1.
L(2) //เปนขอมลสายอกขระ Piya
L(3) //เปนขอมลเมทรกซ 1. 2.
3. 4.
จะเหนไดวาตวแปร L ประกอบไปดวยสมาชกสามตว โดยทสมาชกแตละตวเปนขอมลคนละประเภท นอกจากนผใชสามารถทจะเรยกดสมาชกแตละตวไดดงน
-->L(2) //ดคาของสมาชกตวทสองในตวแปร L
ans =
Piya
-->L(3)(1,2) //ดคาของ สมาชกในแถวทหนงแนวตง ทสองของสมาชกตวทสามในตวแปร L ans =
2.
ถาตองการกาหนดคา ใหมใหกบสมาชกบางตวในตวแปร L กสามารถทาได ดงน
48
-->L(1) = 1 + 2*%s - 3*%s^2; //กาหนดใหสมาชกตวทหนงเปน พหนาม
-->L
L =
L(1)
2 1 + 2s - 3s
L(2)
Piya
L(3)
1. 2.
3. 4.
นอกจากนยงสามารถกาหนดตวแปร L ใหซบซอนมากขนไดโดยการกาห นดใหสมาชกบางตวในตวแปร L เปนขอมลประเภทลตซ ซงลตซลกษณะนจะถกเรยกวา “nested-list” ดงแสดงในตวอยางตอไปน
-->L(1) = list('W', [1 2 3 4 5]);
-->L(2) = list('Piya', 'Kovintavewat');
-->L
L =
L(1)
L(1)(1)
W
L(1)(2)
1. 2. 3. 4. 5.
L(2)
L(2)(1)
Piya
L(2)(2)
Kovintavewat
L(3)
1. 2.
3. 4.
49
2.7.2 ไทพลตซ ไทพลตซ (typed-list) เปนลตซทสมาชกตวแรกจะตองเปนสายอกขระหรอเวกเตอรของสายอกขระเทานน สวน สมาชกตวอนจะเปนขอมลประเภทใดกได พจารณาตวอยางการใชงานของลตซแบบน จะไดเขาใจมากขน -->L = tlist(['Car'; 'Name'; 'Dimensions'], 'Toyota', [1 2; 3 4])
L =
L(1)
!Car !
! !
!Name !
! !
!Dimensions !
L(2)
Toyota
L(3)
1. 2.
3. 4.
ในทานองเดยวกนผใช สามารถทจะเรยกดสมาชกแตละตวไดดงน
-->L(1) //เรยกดคาของสมาชกตวทหนงในตวแปร L
ans =
!Car !
! !
!Name !
! !
!Dimensions !
-->L(2) //เรยกดคาของสมาชกตวท สองในตวแปร L ans =
Toyota
-->L.Name //สามารถเรยกดคาของสมาชกตวทสองในตวแปร L ลกษณะนไดเชนกน
ans =
Toyota
50
-->L(3)(2,2)
ans =
4.
-->L.Dimensions(2,2) //ไดผลลพธเชนเดยวกนก บการใชคาสง L(3)(2,2)
ans =
4.
2.8 อารเรยหลายมต ในการทางานทซบซอนบางครง อาจมความจาเปนทจะตองกาหนดรปแบบของขอมลใหเปนแบ บอารเรยหลายมต (N-dimension array) ซงโดยทวไปแลวการสร างอารเรยหลายมตมลกษณะคลายกบการสรางเมทรกซท วไป ดงแสดงในตวอยางตอไปน
-->M(1,3,2) = 8 //กาหนดให สมาชกในแถวทหนงและแนวตง ทสาม
M = //ของเมทรกซชดทสองมคาเทากบ 8
(:,:,1) //เมทรกซชดทหนง
0. 0. 0.
(:,:,2) //เมทรกซชดทสอง
0. 0. 8.
-->M(:, :, 1) = [4 5 6] //กาหน ดใหเมทรกซชดทหนงมคาเทากบ [4 5 6] M =
(:,:,1)
4. 5. 6.
(:,:,2)
0. 0. 8.
-->M(1, 3, :) //แสดงขอมลในแถวทหนงและแนวตง ทสามของเมทรกซทงสองชด
ans =
(:,:,1)
6.
(:,:,2)
8.
51
-->size(M)
ans =
1. 3. 2.
นอกจากนยงสามารถสรางเมทรกซหลายมตไดโดยใชคาสง hypermat ซงมรปแบบการเรยกใชงาน คอ
M = hypermat(dims, [entries])
โดยทพารามเตอร dims คอ เวกเตอรแสดงขนาดของเมทรกซหลายมต entries คอ เวกเตอรทเกบคาของ สมาชกแตละ ตวในเมทรกซหลายมต (คาโดยปรยาย คอ 0)
นอกจากนผลคณของขนาดทงหมดของเมทรกซหลายมตจะตอง เทากบจานวน ของขอมลในเวกเตอร entries
ตวอยาง การใชงานคาสงน เชน
-->M = hypermat([2 3 2], 1:12) //ผลคณของขนาด 2*3*2 = 12
M =
(:,:,1)
1. 3. 5.
2. 4. 6.
(:,:,2)
7. 9. 11.
8. 10. 12.
ในโปรแกรม SCILAB เมทรกซหลายมตจะถกเขารหสเปนขอมลประเภท mlists โดยทมตวอางองแบบอตโนมตอยสองตว คอ dims ซงเปนพารามเตอรทใชแสดงขนาดของเมทรกซหลายมต และ entries ซงเปนพารามเตอรทใชแสดงขอมลทงหมดทอยใน เมทรกซหลายมต ตวอยาง เชน
-->M = hypermat([2 3 2], 1:12);
-->M.dims //แสดงขนาด (dimension) ของเมทรกซ M
52
ans =
2 3 2
-->M.entries //แสดงขอมลทงหมดภายใน เมทรกซ M ans =
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
2.9 การตรวจสอบประเภทของขอมล จากทกลาวมาในบทนจะพบวาโปรแกรม SCILAB สามารถทางานกบขอมลไดหลายประเภท เชน คาคงท , เมทรกซพหนาม, เมทรกซบลน, และลตซ เปนตน โดยทวไป ผใชสามารถทจะตรวจสอบดไดวาตวแปรแตละตว เปนขอมลประเภทใด โดยใชคาสง typeof ซงมลกษณะการใชงานดงน
t = typeof(object)
โดยทพารามเตอร object คอ ตวแปรทตองการจะตรวจสอบวาเปนประเภทใด ส วนเอาตพตอารกวเมนต (output argument) t จะแสดงประเภทของตวแปร ซงคาทเปนไปได มดงน
1) "constant" ถา object เปนเมทรกซคาคงท (จานวนจรงหรอจานวนเชงซอน) 2) "polynomial" ถา object เปนเมทรกซพหนาม 3) "function" ถา object เปนฟงกชน 4) "handle" ถา object เปนตวควบคมระบบอนพตและเอาตพต 5) "string" ถา object เปนเมทรกซสายอกขระ
53
6) "boolean" ถา object เปนเมทรกซบลน 7) "list" ถา object เปนขอมลประเภทลตซ (ถาหาก object เปนขอมล
แบบ tlist คาพารามเตอร t ทไดจะเปนตวอกขระตวแรกของ สมาชกตวแรกในลตซนน )
8) "hypermat" ถา object เปนขอมลประเภท mlist 9) "rational" ถา object เปนเมทรกซตรรกยะ (rational matrix) โดยทวไป มกจะ
ใชแสดงถงฟงกชนถายโอน (transfer function) ซงใชงานกนมากใน ทางวศวกรรมระบบควบคม
10) "state-space" ถา object เปนขอมลประเภทปรภมสถานะ19 11) "sparse" ถา object เปนเมทรกซมากเลขศนย20 12) "boolean sparse" ถา object เปนเมทรกซ Boolean sparse
ตวอยางการใชงานคาสง typeof มดงน
-->typeof(3)
ans =
constant
-->typeof(poly(0, 'x'))
ans =
polynomial
-->deff('y=f(x)', 'y=2*x') //นยามฟงกชน ขนมาใชงาน (ดรายละเอยดในหวขอท 5.3.4)
-->typeof(f)
ans =
function
-->typeof('Piya Kovintavewat')
ans =
string
-->typeof(1/poly(0, 'x'))
19 ปรภมสถานะ (state-space) คอ เทคนคการคานวณทางคณตศาสตรแบบหนงซงใชมากในทางวศวกรรม 20 เมทรกซมากเลขศนย (sparse matrix) คอ เมทรกซทมสมาชกทมคาเทากบคา 0 อยเปนจานวนมาก
54
ans =
rational
-->typeof(%t)
ans =
boolean
-->m = sprand(50, 50, 0.001); //สรางเมทรกซมากเลขศนยแบบสมขนาด 50×50
-->typeof(m)
ans =
sparse
-->typeof(m > m)
ans =
boolean sparse
-->L = tlist(['V', 'A', 'B'], 10, 'Piya');
-->typeof(L) ans =
V //แสดงอกขระตวแรกของสมาชกตวแรกใน tlist
-->M = hypermat([2 3 2], 1:12);
-->typeof(M)
ans =
hypermat
นอกจากนยงมคาสงททาหนาทคลายกบคาสง typeof นนคอ คาสง type ซงมรปแบบการใชงานดงน
n = type(object)
โดยผลลพธทไดจะเปนเลขจานวนเตม n ทแสดงถงประเภทของขอมล ตามทโปรแกรม SCILAB กาหนดไวดงน
n = 1 ถา object เปนเมทรกซคาคงท (จานวนจรงหรอจานวนเชงซอน) n = 2 ถา object เปนเมทรกซพหนาม (polynomial matrix)
n = 4 ถา object เปนเมทรกซบลน (Boolean matrix)
55
n = 5 ถา object เปนเมทรกซมากเลขศนย (sparse matrix)
n = 6 ถา object เปนเมทรกซ Boolean sparse
n = 8 ถา object เปนเมทรกซของเลขจานวนเตมทใชพนทของ หนวยความจาใน การเกบขอมลเทากบ 1, 2, หรอ 4 ไบต
n = 9 ถา object เปนเมทรกซของตวควบคมกราฟรก (graphic handles)
n = 10 ถา object เปนเมทรกซสายอกขระ n = 11 ถา object เปนฟงกชนทยงไมได แปลโปรแกรม (un-compiled function)
n = 13 ถา object เปนฟงกชนท ถกแปลโปรแกรมแลว (compiled function)
n = 14 ถา object เปนฟงกชน ไลบราร (library function)
n = 15 ถา object เปนขอมลประเภท list n = 16 ถา object เปนขอมลประเภท tlist
n = 17 ถา object เปนขอมลประเภท mlist
n = 128 ถา object เปนตวชหรอ พอยตเตอร (pointer)
ตวอยางการใชงานคาสง type เชน
-->type(3)
ans =
1.
-->type(poly(0, 'x'))
ans =
2.
-->type([%t %f])
ans =
4.
-->m = sprand(50, 50, 0.001);
-->type(m)
ans =
5.
-->type(m>m)
ans =
6.
56
-->type('Piya Kovintavewat')
ans =
10.
-->deff('y=f(x)', 'y=2*x');
-->type(f)
ans =
13.
-->type(elemlib)
ans =
14.
-->L = tlist(['V', 'A', 'B'], 10, 'Piya');
-->type(L)
ans =
16.
-->type(hypermat([2 3 2], 1:12))
ans =
17.
2.10 ตวอยางการคานวณ ในสวนนจะยกตวอยางการแกไข ปญหาโจทยทางคณตศาสตรโดยใชโปรแกรม SCILAB ดงตอไปน
ตวอยางท 1 จงหาคาของฟงกชน ( )f x = 2x-3 เมอ x มคาเทากบ −5, 0, และ 5
วธทา คาตอบของโจทยขอนหาไดจากการใชชดคาสงดงน
-->x = [-5 0 5];
-->fx = 2*x - 3
fx =
- 13. - 3. 7.
นนคอ f(x) มคาเทากบ -13, -3, และ 7 เมอ x มคาเทากบ −5, 0, และ 5 ตามลาดบ
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];
58
-->d = det(A) //หาดเทอรมแนนต d =
8.
-->Ai = inv(A) //หาอนเวอรสการคณของเมทรกซ A Ai =
- 0.375 0.5 0.125
0.5 - 1. 0.5
0.125 0.5 - 0.375
-->I = clean(A*Ai) //ตรวจคาตอบอนเวอรสการคณของเมทรกซ I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->y = poly(A, 'x') //หาสมการลกษณะเฉพาะ y =
2 3
- 8 - 14x - 3x + x
-->z = roots(y) //หาคาตอบของสมการลกษณะเฉพาะ
z =
- 0.7015621
- 2.
5.7015621
-->z2 = spec(A) //หาคาตอบของสมการลกษณะเฉพาะโดยใชคาสง spec
z2 =
- 2.
- 0.7015621
5.7015621
ตวอยางท 4 จงหาคาตอบของสมการพหนาม x4 – 10x3 + 35x2 – 50x + 24 = 0
วธทา คาตอบของสมการพหนามนหาไดจากการใชชดคาสงดงน
-->x = poly(0, 'x');
59
-->y = x^4 - 10*x^3 + 35*x^2 - 50*x + 24; // “^ ” คอเครองหมายเลขชกาลง
-->z = roots(y)
z =
1.
2.
3.
4.
ดงนน คาตอบของสมการพหนามนคอ x = 1, 2, 3, และ 4
ตวอยางท 5 จงหาสรางสมการพหนามใหอยในรปของตวแปร x โดยใหคาตอบของสมการนมคา
เทากบ x = {2, -2, 1 + i, 1 – i} เมอ i = -1
วธทา สมการพหนามทมคาตอบตามทโจทยกาหนด สามารถหาไดดงน
-->x = [2, -2, 1 + %i, 1 - %i]
x =
2. - 2. 1. + i 1. - i
-->y = poly(x, 'x')
y =
2 3 4 - 8 + 8x - 2x - 2x + x
นนคอ x = {2, -2, 1 + i, 1 – i} คอ คาตอบของสมการ x4 – 2x3 - 2x2 + 8x - 8 = 0
2.11 สรป ในบทนไดอธบายวธการสรางขอมลประเภทตางๆ เชน คาคงท พเศษ, เมทรกซคาคงท , เมทรกซสายอกขระ, พหนาม, เมทรกซบลน, และลตซ เปนตน พรอมทงแสดงตวอยางการใชโปรแกรม SCILAB ในการแกไขปญหาโจทยทางคณตศาสตร ซง เมอเขาใจถงลกษณะของขอมลแตละประเภทแลว กจะทาให สามารถสรางตวแปรสาหรบจดเกบขอมลแตละประเภทได อยางถกต องและตรงกบความตองการในการใชงาน
60
2.12 แบบฝกหดทายบท 2.1 จงคานวณหาคาของฟงกชน ( )f x = 5x 3− + เมอ x มคาเทากบ −10, −5, 0, 5, และ 10
2.2 กาหนดให
5 8 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
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= − จงคานวณหาคาตอไปนพรอมทงอธบายผลลพธทได
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 พรอมทงอธบายขอแตกตางระหวาง ขอมลแตละประเภท
บทท 3 ตวดาเนนการทางคณตศาสตร
ตวดาเนนการ (operator) หมายถงตวกระทาทมผลตอคาของขอมล ในทางปฏบตสามารถแบงตวดาเนนการทใชสาหรบการคานวณทางคณตศาสตรในโปรแกรม SCILAB ไดเปนสามประเภท คอ ตวดาเนนการเลขคณต (arithmetic operator), ตวดาเนนการสมพนธและตรรกะ (relational and
logical operators), และตวดาเนนการระดบบต (bit-wise operator) ในบทนจะอธบายถง ลกษณะการทางานของตวดาเนนการแตละประเภท พรอมทงแสดงตวอยางการใชงานของ ตวดาเนนการเหลานในการคานวณทางคณตศาสตร
3.1 ตวดาเนนการเลขคณต การทางานของตวดาเนนการจะเรยกวาการดาเนนการ (operation) ในสวนนจะ อธบายถงการใชงานตวดาเนนการเลขคณต (arithmetic operator) ลกษณะตางๆ ดงตอไปน
3.1.1 การดาเนนการทางคณตศาสตรทเกยวของกบคาคงท ในการคานวณทางคณตศาสตรระหวางคา สเกลารกบคา สเกลาร เครองหมายทใชในการคานวณกบเครองหมายทใชในโปรแกรม SCILAB จะตางกนเลกนอย ดงทแสดงในตารางท 3.1 ตวอยางเชน ถาปอนคาสง y = a + b ลงในหนาตางคาสง โปรแกรม SCILAB จะพจารณาประโยคคาสงทางดานขวามอของเครองหมายเทากบ “=” กอน แลวจงคอยเอาผลลพธทไดไปบรรจไวในตวแปร ทอยทางดานซายมอของเครองหมายเทากบ “=” ซงในทนหมายความวาให นาคา a มาบวกรวมกบคา b แลวเอาผลลพธทไดไปบรรจไวในตวแปร y สาหรบตวอยางการ คานวณทางคณตศาสตรระหวางคา สเกลารกบค าสเกลารมดงน
64
ตารางท 3.1 การดาเนนการทใชในการคานวณทางคณตศาสตรของคา สเกลาร
การดาเนนการ รปแบบพชคณต รปแบบของ SCILAB
การบวก (addition) a + b a + b
การลบ (subtraction) a – b a – b
การคณ (multiplication) a × b a * b
การหารซาย (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 ตวอยางเชน
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 การบวกและการลบ และเรยงจากซายไปขวา
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)
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.
68
3.1.3.3 การหาร ในโปรแกรม SCILAB จะมการหารอยสองรปแบบคอ การหารซาย “\” และการหารขวา “/” ตวอยางการใชงาน ของเครองหมายหารทงสองแบบมดงน
-->A = [1 2; 3 4];
-->B = [1 1; -1 -2];
-->A/B //เมทรกซ A เปนตวตง สวนเมท รกซ B เปนตวหาร
ans =
0. - 1.
2. - 1.
-->A*inv(B) //ใหผลลพธเหมอนกบการใชคาสง A/B
ans =
0. - 1.
2. - 1.
-->A\B //เมทรกซ B เปนตวตง สวนเมทรกซ A เปนตวหาร
ans =
- 3. - 4.
2. 2.5
-->inv(A)*B //ใหผลลพธเหมอนกบการใชคาสง A\B
ans =
- 3. - 4.
2. 2.5
สาหรบการใชเครองหมายหารซายในระดบสมาชก “.\” และเครองหมายการหารขวาในระดบสมาชก “./” มหลกการใชงานเชน เดยวกนกบเครองหมายการคณในระดบ สมาชก “.*”
กลาวคอ จะนาสมาชกทอยใน ตาแหนงเดยวกน ของทงสองเมทรกซมาหารกน ดงนนการหารในระดบ สมาชกจะเกดขนไดกตอเมอเมทรกซทงสองมขนาดเทากนเทานน ตวอยางเชน
-->A = [1 2; 3 4];
-->B = [2 1; 6 8];
-->A ./ B
ans =
69
0.5 2.
0.5 0.5
-->A .\ B
ans =
2. 0.5
2. 2.
-->2 .\ A //เอาคา 2 ไปหารทกสมาชกในเมทรกซ A
ans =
0.5 1.
1.5 2.
-->2 ./ A //เทากบการใชคาสง A .\ 2
ans =
- 4. 2.
3. - 1.
3.1.3.4 การคณและการหาร แบบโครเนคเกอร โปรแกรม SCILAB ไดเตรยมการคณและการหารแบบโครเนคเกอรไวใชงานกบเมทรกซ ซงมประโยชนมากในการใชงานทางดานวศวกรรม
การคณแบบ โครเนคเกอร เครองหมายทใชสาหรบการคณแบบโครเนคเกอร คอ “.*.” หรอสามารถใชคาสง kron กได โดยผลลพธทไดจะเปนผลคณแบบโครเนคเกอรของสองเมทรกซ กลาวคอ ถาใหเมทรกซ A มขนาด m×n โดยท A(i,j) คอสมาชกของแถวท i และแนวตง ท j และเมทรกซ B มขนาด p×q ดงนน A.*.B จะมคาเทากบ
| A(1,1)B ..... A(1,n)B |
| . . |
A.*.B = kron(A,B) = | . . |
| . . |
| A(m,1)B ..... A(m,n)B |
ซงจะไดเปนเมทรกซใหมทมขนาดเทากบ (m*p)×(n*q) ตวอยางเชน
70
-->A = [1 2; 3 4];
-->B = [1 1; -1 -1];
-->A.*.B
ans =
1. 1. 2. 2.
- 1. - 1. - 2. - 2.
3. 3. 4. 4.
- 3. - 3. - 4. - 4.
-->kron(A, B) //มคาเทากบการใชคาสง A.*.B ans =
1. 1. 2. 2.
- 1. - 1. - 2. - 2.
3. 3. 4. 4.
- 3. - 3. - 4. - 4.
การหารแบบโครเนคเกอร นอกจากนในโปรแกรม SCILAB ยงไดเตรยมการหารแบบโครเนคเกอรไวซงมทงแบบการหารซาย “.\.” และแบบการหารขวา “./.” สาหรบผทสนใจลองศกษารายละเอยดการใชงานเครองหมายการหารแบบโครเนคเกอรดวยตนเองจากโปรแกรม SCILAB
3.1.3.5 การยกกาลง การใชงานเครองหมายยกกาลงกบเมทรกซสามารถทาไดหลายรปแบบ ดงแสดง ในตวอยาง ตอไปน
-->A = [1 2; 3 4];
-->A^2 //มคาเทากบการใชคาสง A*A ans =
7. 10.
15. 22.
-->A**2 //มคาเทากบการใ ชคาสง A^2 ans =
7. 10.
15. 22.
71
-->A.^2 //การยกกาลงในระดบสมาชก มคาเทากบ ans = //[1^2 2^2; 3^2 4^2] 1. 4.
9. 16.
สงเกตวาคาสง A^2 คอการนาเอาเมทรกซ A มาคณกนสองครง นนคอ A*A ดงนน การใชเครองหมายยกกาลง กบเมทรกซ จงใชไดกบเมทรกซจตรสเทานน ในขณะทคาสง A.^2 คอการยกกาลงในระดบ สมาชกกบคา สเกลาร ซงในทนหมายถงใหทาการยกกาลงสองใหกบ สมาชกแตละตวในเมทรกซ A ฉะนนการยกกาลงในระดบ สมาชกกบคา สเกลารสามารถใชกบเมทรกซข นาดใดกได
นอกจากนเครองหมายยกกาลงกบเมทรกซยงสามารถใชงานในรปแบบอนไดอก เชน
-->2.^A //คาสงนมผลเทยบเทากบการใชคาสง 2^A
ans =
2. 4.
8. 16.
-->B = [1 1; -1 -1];
-->A.^B //มคาเทากบ [1^2, 2^1; 3^(-1), 4^(-1)] ans =
1. 2.
0.3333333 0.25
-->A^B //การนาเอาเมทรกซ 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)
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 ได
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) ไดคอ
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]
75
X =
2 2 2 3 3 - s + s 1 - 5s + s 2 + s - 5s + 2s
--------- ---------- ---------------
1 1 1
2 2 - 3s + s 1 + 2s 0
---------- ---------- -
2 1 + 2s 2 - 3s + s 1
ถากาหนดใหตวแปรทใชในสมการ พหนามมคาเปน เลขจานวนจรงหรอเลขจานวนเชงซอน ผลลพธของสมการพหนามสามารถหาคาไดจากการใชคาสง horner ซงมรปแบบการใชงาน คอ
horner(P, y)
โดยทพารามเตอร P คอ สมการพหนามทเปนฟงกชนของ ตวแปร x y คอ คาจาน วนจรงของตวแปร x
ตวอยางการใชงานคาสงน เชน
-->s = poly(0, 's');
-->A = [1, s; -s, 1 + s^2]
A =
1 s
2 - s 1 + s
-->B = horner(A, 2) //แทนคา s = 2 ลงในเมทรกซ A กจะไดผลลพธ เปนเมทรกซ B
B =
1. 2.
- 2. 5.
-->C = horner(A, 3 + 4*%i)
76
C =
1. 3. + 4.i
- 3. - 4.i - 6. + 24.i
นอกจากนโปรแกรม SCILAB ยงไดเตรยมชดคาสงอนๆ ทเกยวของกบการประมวลผลของ พหนามไวจานวนมาก ลองใชคาสง help polynomial เพอดลกษณะการใชงานของคาสงเหลานน
3.2 ตวดาเนนการสมพนธและตรรกะ ตวดาเนนการสมพนธและตรรกะ (relational and logical operator) จะใชในการเปรยบเทยบความสมพนธของคาของตวแปรทง ทเปนสเกลารและเมทรกซ โดยตวแปรทงสอง ทใชในการเปรยบเทยบจะตองมขนาด (หรอมต) เทากน ในกรณทตวแปรทตองการเปรยบเทยบเปนเมทร กซ การเปรยบเทยบจะกระทาในระดบสมาชกแบบหนงตอหนง
3.2.1 ตวดาเนนการสมพนธ ตวดาเนนการสมพนธ (relational operator) เปนตวดาเนนการทใชในการตรวจสอบความสมพนธระหวาง คาของตวแปร โดยท
ถาความสมพนธเปนจรง ผลลพธทไดจะมคาเทากบ T (True) หรอมคาทางตรรกะเทากบคา 1 ถาความสมพนธเปนเทจ ผลลพธทไดจะมคาเทากบ F (False) หรอมคาทางตรรกะเทากบคา 0
โปรแกรม SCILAB ไดเตรยมตวดาเนนการทใชตรวจสอบความสมพนธไวทงหมด หกแบบ ตามทแสดงในตารางท 3.4 ตวอยางการใชงาน เชน
-->x = [1 2 3];
-->y = [-1 2 5];
-->x == y //เปนการเปรยบเทยบคาใน แตละ สมาชก
ans =
F T F
-->x < y
ans =
F F T
77
ตารางท 3.4 ตวดาเนนการสมพนธ (relational operator)
-->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)
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)
79
-->P | Q //ไดผลลพธเหมอนตาราง P OR Q ในรปท 3.1
ans =
T T T F
-->~P //ไดผลลพธเหมอนตาราง NOT P ในรปท 3.1
ans =
F F T T
-->P + 1 //เวกเตอร P เปรยบเสมอนมคาเทากบ P = [1 1 0 0]
ans =
2. 2. 1. 1.
-->2 * Q //เวกเตอร Q เปรยบเสมอนมคาเทากบ Q = [1 0 1 0]
ans =
2. 0. 2. 0.
-->P + Q //ตวแปรบลน T จะเปรยบเสมอนมคาเทากบคา 1
ans = //และตวแปรบลน F จะเปรยบเสมอนมคาเทากบคา 0
2. 1. 1. 0.
จะเหนไดวาเมอนา เวกเตอรตรรกะมาดาเนนการทางคณตศาสตร (เชน การบวก, การลบ, การคณ, และการหาร) กบคา สเกลารแลว เวกเตอรตรรกะสามารถทจะแทนไดดวยเวกเตอรของคาสเกลารทมสมาชกเปนคา 0 กบคา 1 โดยทคา 0 จะใชแทนขอความ (statement) ทเปนเทจ และคา 1 จะใชแทนขอความทเปนจรง (ศกษาตวอยางการประยกตใชงาน เวกเตอรตรรกะเพมเตม ไดในบทท 9)
นอกจากนตวดาเนนการตรรกะยงสามารถนามาใชเชอมรวมการทดสอบความสมพนธทางตรรกะหลายๆ เงอนไขเขาดวยกนได โดยผลลพธทไดจะเปนไปตามลาดบความสาคญของตวดาเนนการตางๆ ตามทแสดงในตาร างท 3.6 ตวอยาง เชน
-->x = 1;
-->y = 2;
-->(x + 2 * y < 1) & (4 / 2 == 1)
ans =
F
-->x > 5 & y == 10 //เหมอนกบการใช (x > 5) & (y ==10)
ans =
F
80
ตารางท 3.6 ลาดบการทางานของตวดาเนนการตาง ๆ
-->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 ตรรกะ & |
81
รปท 3.2 ตวอยางการดาเนนการในระดบบตของตวแปร x และ y
-->[x|y, x&y, ~x, ~y]
ans =
15 4 248 243
ผลลพธทไดคอการนาคาตวแปร x และ y มาดาเนนการในระดบบต ตามทแสดงในรปท 3.2
หมายเหต ถาตวแปร x และ y ไมไดเปนเลขจานวนเตม ผลลพธทไดจะเปรยบเสมอนกบการใช ตวดาเนนการตรรกะ ตวอยาง เชน
-->x = 7
x =
7. //ตวแปร x เปนเลขจานวนจรง (สงเกตจาก มจดทศนยมตามหลงตวเลข)
-->y = 12
y =
12. //ตวแปร y เปนเลขจานวนจรง
-->[x|y, x&y, ~x, ~y]
ans =
T T F F
ผลลพธทไดคอคาแสดงความสมพนธวาเปนจรงหรอเปนเทจ ทงนเนองจากตวแปร x และ y ไมไดเปนเลขจานวนเตม สาเหตทไดผลลพธเปน [T T F F] เนองมาจากโปรแกรม SCILAB จะถอวาคาคงท ตางๆ ทนามาใชในการทดสอบ หาความสมพนธจะมคาเปนจรง (เทากบ T) เสมอ เชน
82
-->x = -1;
-->[x|2, x&3, ~4, ~x]
ans =
T T F F
3.4 ตวอยางการคานวณ ในสวนนจะยกตวอยางการแกไขปญหาโจทยทางคณตศาสตรโดยใชโปรแกรม SCILAB ดงตอไปน
ตวอยางท 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.
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 จากระบบสมการเชงเสน
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;
85
-->M = [p + q, p - q, p * q; p/q, q/p, (p^2 - 2*q)/(3*p + q)]
M =
2 2 2 3 2 + 2x + x - 4 - 2x + x - 3 - 2x + 3x + 2x
---------- ---------- ----------------
1 1 1
2 2 4 - 1 + x 3 + 2x - 5 - 4x - 2x + x
----- ------ ---------------
2 2 3 + 2x - 1 + x 2x + 3x
-->y = horner(M, -2)
y =
2. 4. - 3.
- 3. - 0.3333333 1.375
-->y = horner(M, 1 + %i)
y =
4. + 4.i - 6. - 9. + 8.i
- 0.0344828 + 0.4137931i - 0.2 - 2.4i - 1.3235294 + 1.2941176i
3.5 สรป ในบทนไดอธบายถงลกษณะการใชงานของ ตวดาเนนการแบบตางๆ ไดแก ตวดาเนนการเลขคณต,
ตวดาเนนการสมพนธ, ตวดาเนนการตรรกะ, และตวดาเนนการระดบบต พรอมทงแสดงตวอยาง การใชงานตวดาเนนการตางๆ ในการแกไขปญหาโจทยทางคณตศาสตร เมอเขาใจถงลกษณะการทางานของตวดาเนนการเหลานแลว กจะ ชวยทาให สามารถนาตวดาเนนการเหลาน ไปใชในการพฒนาโปรแกรมทซบซอนไดอยางถกตองตามทตองการ
86
3.6 แบบฝกหดทายบท 3.1 จงคานวณหาคาของฟงกชน ตอไปน
3.1.1) ( ) 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
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 คอ ทรานสโพสของเมทรกซแบบธรรมดา
88
3.5.6) xTy <> yTx
3.6. กาหนดให x = 2 และ y = 3 จงคานวณหาคาตอไปน พรอมทงอธบายผลลพธทได
3.6.1) x * y < 2 | 3 3.6.2) x > 3 & y == 5 3.6.3) (x + 2 * y > 3) & ~ (6 | 3 == 2) 3.6.4) x + 1 >= y – 3 & 2 * x == 2 3.6.5) ~ (x > 2) & (y – 3 == 2) | x * y <= 1
3.7. กาหนดให x = 121 และ y = 19 เปนเลขจานวนเตม จงคานวณหาคาตอไปน พรอมทงอธบายผลลพธทได
3.7.1) x | y
3.7.2) x & y 3.7.3) ~ x 3.7.4) ~ y
3.7.5) x & y | ~ y
บทท 4 ฟงกชนพนฐานทางคณตศาสตร
ในบทนจะอธบายถงฟงกชนพนฐานทวไป ทใชในการคานวณทางคณตศาสตร เชน ฟงกชนพนฐาน ทเกยวกบตวเลข , ฟงกชนตรโกณมต , ฟงกชนไฮเพอรโบลก , ฟงกชนพนฐานท างสถต รวมทงฟงกชน สาหรบการสรางเมทรกซพเศษ เพอใหเขาใจถงรปแบบการใชงานของฟงกชนตางๆ ทจาเปนสาหรบ การพฒนาโปรแกรม
4.1 ฟงกชนพนฐานทเกยวกบตวเลข ในสวนนจะกลาวถงฟงกชนพนฐานทเกยวกบตวเลข (elementary number function) ทพบมากในโปรแกรม SCILAB ตามทแสดงในตารางท 4.1 ซงมลกษณะการใชงานดงตอไปน
4.1.1 ฟงกชน abs(x) เปนฟงกชนทใชในการหาคาสมบรณ (absolute value) ของตวแปร x ซงแบงไดเปน 2 กรณ คอ 1) ถาตวแปร x เปนเลขจานวนจรง คาสมบรณของตวแปร x จะมคาเทา กบ
{ ≥=
− <x ,x 0
xx ,x 0
2) ถาตวแปร x เปนเลขจานวนเชงซอนทสามารถเขยนใหอยในรปของ x = a + bi โดยท
ตวแปร a และ b เปนเลขจานวนจรง และ i = −1 เปนหนวยจนตภาพ ดงนนคาสมบรณของ ตวแปร x จะมคาเทากบ
= +2 2x a b
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
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
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)
93
ans =
- 1. 0. - 1. 0. 1. 0. 1.
-->r = m - n.*int(m./n) //ไดผลลพธเทากบคาสง modulo(m,n) r =
- 1. 0. - 1. 0. 1. 0. 1.
4.1.5 ฟงกชน ceil(x) เปนฟงกชนทใชในการหาคาจานวนเตมท มคาใกลกบคา x ไปทางคา +∞ มากทสด ตวอยางเชน
-->ceil([1.9 -2.5 2.1*%i -3.8*%i -%inf])
ans =
2. - 2. 3.i - 3.i -Inf
4.1.6 ฟงกชน floor(x) เปนฟงกชนทใชในการหาคาจานวนเตมทมคาใกลกบคา x ไปทางคา −∞ มากทสด ตวอยางเชน
-->floor([1.9 -2.5 2.1*%i -3.8*%i %inf])
ans =
1. - 3. 2.i - 4.i Inf
4.1.7 ฟงกชน round(x) เปนฟงกชนทใชในการหาคาจานวนเตมทมคาใกลกบคา x มากทสด ตวอยางเชน
-->round([1.9 -2.5 2.5 2.1*%i -3.8*%i %inf])
ans =
2. - 3. 3. 2.i - 4.i Inf
4.1.8 ฟงกชน fix(x) เปนฟงกชนทใชในการหาคาจานวนเตมทมคาใกลกบคา x ไปทางคา 0 มากทสด นนคอมคาเทากบ
fix(x) = sign(x).*floor(abs(x))
ตวอยางเ ชน
94
-->x = [-2.9 -1.1 1.5 3.8*%i -5.2*%i]
x =
- 2.9 - 1.1 1.5 3.8i - 5.2i
-->fix(x)
ans =
- 2. - 1. 1. 3.i - 5.i
-->sign(x).*floor(abs(x))
ans =
- 2. - 1. 1. 3.i - 5.i
4.1.9 ฟงกชน rat(x) เปนฟงกชนทใชในการประม าณคาจานวนจรงใหอยในรปของเลขเศษสวน มลกษณะการเรยกใชงานดงน
[num, den] = rat(x, [tolerance])
โดยทพารามเตอร x คอ เลขจานวนจรงใดๆ tolerance คอ คาความคลาดเคลอนทยอมรบได โดยทคาโดยปรยาย มคาเทากบ
1.e-6*norm(x,1) num และ den คอ เลขจานวนเตมซงเปนผลลพธของฟงกชนน เมอ num./den จะม
คาใกลเคยงกบคา x มากทสดในลกษณะทวา abs(num./den-x) <= tolerance*abs(x)
ตวอยาง การใชงานคาสงน เชน
-->[num, den] = rat(0.333333333) //นนคอ 1/3 = 0.3333333...
den =
3.
num =
1.
-->[num, den] = rat(%pi) den =
113.
95
num =
355.
-->[355/113-%pi, 22/7-%pi] //ตรวจสอบผลลพธทไดวามคาใกลเคยงกบคา π หรอไม
ans = //จะพบวา 355/113 มคาใกลเคยงคา π มากกวาคา 22/7 0.0000003 0.0012645
-->[num, den] = rat(%pi, 1.D-12)
den =
364913.
num =
1146408.
-->num/den - %pi //คาความคลาดเคลอนเทากบทกาหนดไว
ans =
1.611D-12
4.1.10 ฟงกชน sign(x) ถาตวแปร x เปนคาจานวนจรง ฟงกชน sign(x) จะมคาดงน
+ >= =
− <
⎧⎪⎨⎪⎩
1 ,x 0
sign(x) 0 ,x 0
1 ,x 0
กลาวคอฟงกชนนจะใหผลลพธเปนคา +1 ถาตวแปร x มคามากกวาศนย , ใหผลลพธเปนคา 0 ถาตวแปร 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
96
4.1.11 ฟงกชน roots(x) เปนฟงกชนทใชในการหารากหรอคาตอบ ของสมการพหนาม โปรแกรม SCILAB สามารถรองรบพหนามทมดกรนอยกวาหรอเทากบ 100 เทานน ตวอยางเชน
-->y = poly([1 3 5], 'x', 'r') //สรางสมการพหนามจากคาตอบของสมการ
y =
2 3 - 15 + 23x - 9x + x
-->roots(y)
ans =
1.
3.
5.
4.1.12 ฟงกชน real(x) เปนฟงกชนทใชในการหาคาจานวนจรง (real number) ของตวแปร x ตวอยางเชน
-->real([0.1, %i, -1.5 + 2*%i, 2 - %i])
ans =
0.1 0. - 1.5 2.
4.1.13 ฟงกชน imag(x) เปนฟงกชนทใชในการหาคาจานวนจนตภาพ (imaginary number) ของตวแปร x ตวอยางเชน
-->imag([0.1, %i, -1.5 + 2*%i, 2 - %i])
ans =
0. 1. 2. - 1.
4.1.14 ฟงกชน conj(x) เปนฟงกชนทใชในการทาสงยคของจานวนเชงซอน (complex conjugate) ของตวแปร x ตวอยางเชน
-->conj([0.1, %i, -1.5+2*%i, 2-%i])
ans =
0.1 - i - 1.5 - 2.i 2. + i
97
ตารางท 4.2 ตวอยาง ฟงกชนเลขชกาลง และลอการทม
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
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.
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 จะไดความสมพนธของฟงกชนตรโกณมต ตางๆ ดงน
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 คาอตราสวนระหวาง ความยาวสวนโคงของวงกลมตอความยาวของรศมของวงกลม
101
ตารางท 4.3 ฟงกชนตรโกณมต และฟงกชนตรโกณมต ผกผน
ฟงกชน คาอธบาย sin(x) หาคา sine ของตวแปร x cos(x) หาคา cosine ของตวแปร x tan(x) หาคา tangent ของตวแปร x asin(y) หาคา sine inverse ของตวแปร y acos(y) หาคา cosine inverse ของตวแปร y atan(y) หาคา tangent inverse ของตวแปร y
สงเกตจะพบวาคาสดทายมคานอยมากหรอสามารถประมาณไดเทากบคาศนย (ใชคาสง clean ชวยในการปดคาได ) ซงจะทาใหสอดคลองกบหลกความจรงทวา sin(180º) = 0 ตามทตองการ
4.3.2 ฟงกชน cos(x) เปนฟงกชนทใชในการหาคา cosine ของคา x โดยท x คอมมทมหนวยเปนเรเดยน ตวอยางเชน
-->y = clean(cos([0, 1, %pi/2, %pi]))
y =
1. 0.5403023 0. - 1.
4.3.3 ฟงกชน tan(x) เปนฟงกชนทใชในการหาคา tangent ของคา x โดยท x คอมมทมหนวยเปนเรเดยน ตวอยางเชน
-->y = tan([0, 1, %pi/2, %pi])
y =
0. 1.5574077 1.633D+16 - 1.225D-16
4.3.4 ฟงกชน asin(y) เปนฟงกชนทใชในการหาคา arcsine(y) นนคอถา y = sin(x) จะไดวา x = asin(y) โดยท y
จะมคาอยระหวางคา -1 ถง 1 และ x คอผลลพธทไดซงจะเปนมมทมคาอย ระหวาง –π/2 ถง π/2
เรเดยน ตวอยางเชน
102
-->y = sin([0, 1, %pi/2, -%pi/2]);
-->x = asin(y)
ans =
0. 1. 1.5707963 - 1.5707963
4.3.5 ฟงกชน acos(y) เปนฟงกชนทใชในการหาคา arccosine(y) นนคอถา y = cos(x) จะไดวา x = acos(y) โดยท y จะมคาอยระหวางคา -1 ถง 1 และ x คอผลลพธทไดซงจะเปนมมทมคาอยระหวาง 0 ถง π เรเดยน ตวอยางเช น
-->y = cos([0, 1, %pi/2, %pi]);
-->x = acos(y)
ans =
0. 1. 1.5707963 3.1415927
4.3.6 ฟงกชน atan(y) เปนฟงกชนทใชในการหาคา arctangent(y) นนคอถา y = tan(x) จะไดวา x = atan(y)
โดยท y เปนจานวนจรงใดๆ และ x คอผลลพธทไดซงจะเปนมมทมคาอยระหวาง –π/2 ถง π/2 เรเดยน ตวอยางเชน
-->y = tan([0, 1, %pi/2, -%pi/2]);
-->x = atan(y)
ans =
0. 1. 1.5707963 - 1.5707963
นอกจากนคาสง atan ยงสามารถเรยกใชงานในอกลกษณะหนงไดคอ atan(y, x)ซงใชในการหาคา arctangent (หรอคาอนเวอรส ของ tangent) ของคา y หารดวยคา x ซงผลลพธทไดจะเปนมมทมคาอยระหวาง –π ถง π เรเดยน โดยจะขนอยกบเครองหมายของตวแปร y และ x เชน
-->x = [1, %i, -1, -%i];
-->phase = atan(imag(x), real(x))
phase =
0. 1.5707963 3.1415927 - 1.5707963
103
สาหรบคาตรโกณมตอนๆ ไดแก secant, cosecant, cotangent, arcsecant, arccosecant, และ arccotangent สามารถคานวณหาไดโดยการดดแปลงจากฟงกชนทโปรแกรม SCILAB มอยแลว ตามทอธบายไวขางตน
4.4 ฟงกชนไฮเพอรโบลก ฟงกชนไฮเพอรโบลก (hyperbolic function) เปนฟงกชนทเปนผลมาจากการรวมกนของฟงกชน ลอการทมธรรมชาต ex ประกอบดวย 6 ฟงกชน คอ hyperbolic sine (sinh), hyperbolic cosine (cosh), hyperbolic tangent (tanh), hyperbolic secant (sech), hyperbolic cosecant (csch), และ hyperbolic cotangent (coth) ซงมรปแบบดงน
( )x 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 ซงแตละฟงกชนมลกษณะการใชงานดงตอไปน
104
ตารางท 4.4 ฟงกชนไฮเพอรโบลก และฟงกชนไฮเพอรโบลก ผกผน
ฟงกชน คาอธบาย sinh(x) ใชหาคา hyperbolic sine ของตวแปร x cosh(x) ใชหาคา hyperbolic cosine ของตวแปร x tanh(x) ใชหาคา hyperbolic tangent ของตวแปร x asinh(y) ใชหาคา hyperbolic sine inverse ของตวแปร y acosh(y) ใชหาคา hyperbolic cosine inverse ของตวแปร y atanh(y) ใชหาคา hyperbolic tangent inverse ของตวแปร y
4.4.1 ฟงกชน sinh(x) เปนฟงกชนทใชในการหาคา hyperbolic sine ของคา x ตวอยางเชน
-->y = sinh([0, 1, -1])
y =
0. 1.1752012 - 1.1752012
4.4.2 ฟงกชน cosh(x) เปนฟงกชนทใชในการหาคา hyperbolic cosine ของคา x ตวอยางเชน
-->y = cosh([0, 1, -1])
y =
1. 1.5430806 1.5430806
4.4.3 ฟงกชน tanh(x) เปนฟงกชนทใชในการหาคา hyperbolic tangent ของคา x ตวอยางเชน
-->y = tanh([0, 1, -1])
y =
0. 0.7615942 - 0.7615942
105
4.4.4 ฟงกชน asinh(y) เปนฟงกชนทใชในการหาคาอนเวอรสของ hyperbolic sine ของ y ซงมคาเทากบ
( )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.
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.
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
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
109
ans =
1. 3. 3. 3.
-->mean(x, 'c') //หาคา เฉลยของตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
2.5
2.25
2.75
4.5.4 ฟงกชน median(x) เปนฟงกชนทใชในการหาคามธยฐาน (median) ของตวเลขทงหมดในตวแปร x ตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->median(x) //หาคา มธยฐานของตวเลขทงหมดในเมทรกซ x
ans =
2.
-->median(x, 'r') //หาคา มธยฐานของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
1. 2. 3. 3.
-->median(x, 'c') //หาคา มธยฐานของตวเลขทงห มดในแตละ แนวตง ของเมทรกซ x ans =
2.5
2.
2.
4.5.5 ฟงกชน stdev(x) เปนฟงกชนทใชในการหาคาเบยงเบนมาตรฐาน (standard deviation) ของตวเลขทงหมดในตวแปร x ตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->stdev(x) //หาคา เบยงเบนมาตรฐานของตวเลขทงหมดในเมทรกซ x
ans =
1.7837652
110
-->stdev(x, 'r') //หาคา เบยงเบนมาตรฐานของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
1. 2.6457513 2. 1.
-->stdev(x, 'c') //หาคาเบยงเบนมาตรฐานของตวเลขทงหมดในแตละ แนวตงของเมทรกซ x ans =
1.2909944
2.2173558
2.2173558
4.5.6 ฟงกชน sum(x) เปนฟงกชนทใชในการหาคาผลบวกของตวเลขทงหมดในตวแปร x ตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->sum(x) //หาคา ผลบวกของตวเลขทงหมดในเมทรกซ x
ans =
30.
-->sum(x, 'r') //หาคา ผลบวกของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
3. 9. 9. 9.
-->sum(x, 'c') //หาคา ผลบวกของตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
10.
9.
11.
4.5.7 ฟงกชน cumsum(x) เปนฟงกชนทใชในการหาคาผลบวกสะสม (cumulative sum) ของตวเลขทงหมดในตวแปร x
ตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->cumsum(x) //หาคา ผลบวกสะสมของตวเลขทงหมดในเมทรกซ x
111
ans =
1. 5. 15. 25.
1. 6. 20. 28.
3. 12. 21. 30.
-->cumsum(x, 'r') //หาคา ผลบวกสะสมของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
1. 2. 3. 4.
1. 3. 8. 7.
3. 9. 9. 9.
-->cumsum(x, 'c') //หาคา ผลบวกสะสมของตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
1. 3. 6. 10.
0. 1. 6. 9.
2. 8. 9. 11.
4.5.8 ฟงกชน prod(x) เปนฟงกชนทใชในการหาคาผลคณของตวเลขทงหมดในตวแปร x ตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->prod(x) //หาคา ผลคณตวเลขทงหมดในเมทรกซ x
ans =
0.
-->prod(x, 'r') //หาคา ผลคณของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
0. 12. 15. 24.
-->prod(x, 'c') //หาคา ผลคณของตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
24.
0.
24.
4.5.9 ฟงกชน cumprod(x) เปนฟงกชนทใชในการหาคาผลคณสะสม (cumulative product) ของตวเลขทงหมดในตวแปร x
ตวอยางเชน
112
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->cumprod(x) //หาคา ผลคณสะสมตวเลขทงหมดในเมทร กซ x ans =
1. 0. 0. 0.
0. 0. 0. 0.
0. 0. 0. 0.
-->cumprod(x, 'r') //หาคา ผลคณสะสมของตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
1. 2. 3. 4.
0. 2. 15. 12.
0. 12. 15. 24.
-->cumprod(x, 'c') //หาคา ผลคณสะสมของตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
1. 2. 6. 24.
0. 0. 0. 0.
2. 12. 12. 24.
4.5.10 ฟงกชน sort(x) เปนฟงกชนทใชในการเรยงลาดบตวเลขท งหมดในตวแปร x จากคามากไปหาคานอยตวอยางเชน
-->x = [1 2 3 4; 0 1 5 3; 2 6 1 2];
-->sort(x) //เรยงลาดบตวเลขทงหมดในเมทรกซ x โดยผลลพธทได
ans = //จะเรยงจากบนลงลาง และจากซายไปขวา
6. 3. 2. 1.
5. 3. 2. 1.
4. 2. 1. 0.
-->sort(x, 'r') //เรยงลาดบตวเลขทงหมดในแตละแถวของเมทรกซ x
ans =
2. 6. 5. 4.
1. 2. 3. 3.
0. 1. 1. 2.
-->sort(x, 'c') //เรยงลาดบตวเลขทงหมดในแตละ แนวตง ของเมทรกซ x ans =
113
4. 3. 2. 1.
5. 3. 1. 0.
6. 2. 2. 1.
ถาตองการเรยงลาดบขอมลแบบอนๆ เชน เรยงลาดบจากคานอยไปหาคามาก กสามารถทาไดโดย ใชคาสง gsort ซงมลกษณะการใชงานหลายรปแบบ (ศกษารายละเอยดในคาสง help)
4.5.11 ฟงกชน histplot(n,x) เปนฟงกชนทใชในการวาดรปฮสโตแกรม (histogram) ของคาทงหมดในเวกเตอร x เปนจานวน n ชวงระหวางคาตาสดและคาสงสดของเวกเตอร x ตวอยางเชน
-->d = rand(1, 10000, 'normal');
-->subplot(1,2,1); histplot(10, d); //รปท 4.1 ดานซาย
-->subplot(1,2,2); histplot(20, d); //รปท 4.1 ดานขวา
คาสงแรกจะทาการสรางจานวนสม (random number) จานวน 10000 ตว (บรรจไวในเวกเตอรขนาด 1×10000) โดยมลกษณะการแจกแจงปรกต (normal distribution) หรอการแจกแจงแบบเกาสเซยน (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
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)
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 =
116
2. 1.
8. 2. //บอกวามเลข 8 อย 2 ตว
0. 1.
3. 1.
7. 3. //บอกวามเลข 7 อย 3 ตว 6. 1.
9. 1.
ผลลพธทไดบอกใหทราบวาเวกเตอร x มเลข 8 อย 2 ตว, เลข 7 อย 3 ตว, และตวเลขทเหลอมอยอยางละ 1 ตว
นอกจากนโปรแกรม SCILAB ยงมฟงกชน ทางสถตทนาสนใจอกจานวนมากในไลบราร statslib ซงสามารถเรยกดไดดงน
-->statslib
statslib =
Functions files location :SCI\macros\statistics\
center correl cmoment covar ftest ftuneq geomean
harmean iqr mvvacov meanf mvcorrel moment mean
median msd mad nfreq nanmeanf nand2mean
nansum nanmean nancumsum nanstdev nanmin
nanmedian nanmax perctl pca quart regress
strange samplef sample samwr st_deviation stdev
stdevf trimmean thrownan tabul variance variancef
wcenter
ตวอยาง ฟงกชนทนาสนใจ เชน
perctl ทาหนาทคานวณหาเปอรเซนไทล (percentile) quart ทาหนาทคานวณหาควอรไทล (quartile) correl ทาหนาทคานวณหาคาสหสมพนธ (correlation) covar ทาหนาทคานวณหาคาความแปรปรวนรวมเกยว (covariance) moment ทาหนาทคานวณหาคาโมเมนต (moment) msd ทาหนาทคานวณหาคาเบยงเบนกาลงสองเฉลย (mean squared deviation)
สาหรบผสนใจสามารถศกษารายละเอยดเพมเตมของฟงกชนทางสถตตางๆ ไดจากคาสง help
117
ตารางท 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 เชน
118
-->A = eye(3) //สรางเมทรกซเอกลกษณทมขนาดเทากบคาสเกลาร
1. //นนคอเมทรกซขนาด 1×1
-->A = eye(3,3) //สรางเมทรกซเอกลกษณทมขนาด 3×3
A =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->B = [1 2; 3 4];
-->C = eye(B) //สรางเมทรกซเอกลกษณขนาดเทาเมทรกซ B
C =
1. 0.
0. 1.
-->B*eye(B) //ผลลพธทไดคอเมทรกซ B ans =
1. 2.
3. 4.
-->A = eye(3,4) //เมทรกซเอกลกษณไมจาเปนตองเปนเมทรกซจตรส กได A =
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
4.6.2 เมทรกซคาหนง เมทรกซคาหนง (one matrix) เปนเมทรกซทสมาชกทกตวในเมทรกซมคาเปนคา 1 การสรางเมทรกซคาหนง ในโปรแกรม SCILAB สามารถทาไดโดยใชคาสง ones ตวอยาง เชน
-->A = ones(2, 3) //สรางเมทรกซคาหนง ขนาด 2 แถวและ 3 แนวตง A =
1. 1. 1.
1. 1. 1.
-->A = ones(1:3) //สรางเมทรกซคาหนง ขนาด 1 แถวและ 3 แนวตง A =
1. 1. 1.
119
-->v = [1 2 3 4];
-->A = ones(v) //สรางเมทรกซคาหนง ขนาดเทากบเวกเตอร v
ans =
1. 1. 1. 1.
4.6.3 เมทรกซคาศนย เมทรกซคาศนย (zero matrix) เปนเมทรกซทสมาชกทกตวในเมทรกซมคาเปนคา 0 มลกษณะการทางานเหมอนกบเมทรกซคาหนง ทกประการ การสรางเมทรกซคาศนย ในโปรแกรม SCILAB สามารถทาไดโดยใชคาสง zeros เชน
-->A = zeros(2, 3)
A =
0. 0. 0.
0. 0. 0.
4.6.4 เมทรกซสม เมทรกซสม (random matrix) เปนเมทรกซทมสมาชกเปนจานวนสม (random number) การสรางเมทรกซสม ในโปรแกรม SCILAB สามารถทาไดโดยใชคาสง rand ซงมลกษณะการเรยกใชงานหลายรปแบบ ดงน
rand(m1, m2, ..., [key])
rand(X, [key])
โดยทพารามเตอร mi คอ เลขจานวนเตมบวก (เมอ i = 1,2,3,...) ใชกาหนดขนาดของเมทรกซ
สมทจะสรางขนมา เชน rand(m1, m2) หมายถงสรางเมทรกซสมขนาด m1 แนวนอน และ m2 แนวตง
X คอ เมทรกซใดๆ (นนคอสงใหสราง เมทรกซสม ขนาดเทากบเมทรกซ X) key เปนตวเลอกทกาหนดลกษณะการแจกแจง (distribution) ของจานวนสมท สราง
กลาว คอ ถา
120
o key = "uniform" จานวนสมทสรางขนมาจะ มลกษณะการแจกแจงเอกรปมคาอย ระหวาง 0 ถง 1 (เปนคาโดยปรยาย )
o key = "normal" จานวนสม ทสรางขนมาจะมลกษณะ การแจกแจงปรกต (หรอแบบเกาสเซยน) ทมคาเฉลยเทากบ คา 0 และมคาความแปรปรวน 22 (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 คาความแปรปรวน มคาเทากบคาเบยงเบนมาตรฐานยกกาลงสอง
121
-->rand('seed')
ans =
1.473D+09
เมทรกซสม มประโยชนมากโดยเฉพาะอยางยงในทางวศวกรรมไฟฟาสอสาร เนองจากสญญาณในระบบสอสารดจทลสวน ใหญจะเปนสญญาณสมทมลกษณะการแจกแจงเปน แบบเกาสเซยน ดงนนสญญาณทตองการสามารถทจะถกสรางขนได จากเมทรกซสม น
นอกจากนถาตองการสรางเมทรกซสมทม ลกษณะการแจกแจงแบบอนๆ เชน การแจกแจงทวนาม (binomial distribution), การแจกแจงเรขาคณต (geometric distribution), การแจกแจงเอกรป (uniform distribution), การแจกแจงไคกาลงสอง (chi-square distribution), การแจกแจงแกมมา (gamma distribution), การแจกแจงปวซง (Poisson distribution) และการแจกแจงมารคอฟ (Markov distribution) เปนตน กสามารถทาไดโดยใชคาสง grand ตวอยาง เชน (ศกษารายละเอยดรปแบบการเรยกใชงานคาสง grand ไดจากคาสง help)
-->Y = grand(2, 8, 'uin', 1, 9) //สรางเมทรกซสมขนาด 2×8 ของเลขจานวนเตมระหวาง
Y = //คา 1 ถง 9 โดยมลกษณะการแจกแจงเอกรป
5. 1. 9. 6. 3. 7. 1. 2.
7. 8. 1. 7. 6. 8. 8. 9.
-->Y = grand(3, 5, 'unf', -0.5, 1.5) //สรางเมทรกซสมขนาด 3×5 ของเลขจานวนจรงระหวาง
Y = //คา -0.5 ถง 1.5 โดยมลกษณะการแจกแจงเอกรป
0.4010832 1.325155 1.3266747 0.5063800 0.5766849
0.9409869 - 0.0420461 0.6165375 1.1516339 0.5931839
- 0.3323572 0.5109970 - 0.1952440 0.4249484 1.4922694
4.6.5 เมทรกซทแยงมม เมทรกซทแยงมม (diagonal matrix) เปนเมทรกซทมสมาชกทมคาตามทกาหนดเฉพาะ ในแนวเสนทแยงมมหลก สวน สมาชกทตาแหนงอนๆ จะมคาเปนคา 0 ในโปรแกรม SCILAB สามารถสรางเมทรกซทแยงมมไดโดยใชคาสง diag ซงมลกษณะการใชงานหลายรปแบบ ดงน
diag(vm, [k])
122
ถาพารามเตอร vm เปนเวกเตอรของคาทจะแสดงในแนวเสนทแยงมม สวนคาพารา มเตอร k จะเปนตวบอกวาเปน แนวเสนทแยงมมไหน นนคอถา o k < 0 หมายถง เสนทแยงมมลาดบท |k| ทอยใตเสนทแยงมม หลก o k = 0 หมายถง เสนทแยงมมหลก (เปนคาโดยปรยาย ) o k > 0 หมายถง เสนทแยงมมลาดบท k ทอยเหนอเสนทแยงมม หลก
ตวอยางการใชงาน คาสงน เชน
-->diag([1 2 3]) //คา 1, 2, และ 3 อยทเสนทแยงมมหลก
ans =
1. 0. 0.
0. 2. 0.
0. 0. 3.
-->diag([1 2 3], 1) //คา 1, 2, และ 3 จะอยเหนอเสนทแยงมมหลกหนงลาดบ ans =
0. 1. 0. 0.
0. 0. 2. 0.
0. 0. 0. 3.
0. 0. 0. 0.
-->diag([1 2 3], -2) //คา 1, 2, และ 3 จะอยใตเสนทแยงมมหลกสองลาดบ ans =
0. 0. 0. 0. 0.
0. 0. 0. 0. 0.
1. 0. 0. 0. 0.
0. 2. 0. 0. 0.
0. 0. 3. 0. 0.
ถาพารามเตอร vm เปนเมทรกซ ผลลพธทไดจะเปนเวกเตอรแนวตง ทมสมาชกเปนคาทอยใน แนวเสนทแยงมมลาดบท |k| ของเมทรกซ vm ตวอยางการใชงานคาสง เชน
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A =
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
123
-->y = diag(A)
y =
1.
6.
11.
-->z = diag(A, 2)
z =
3.
8.
4.6.6 เมทรกซสามเหลยมดานลาง เมทรกซสามเหลยมดานลาง (lower triangular matrix) สามารถสรางไดโดยใชคาสง tril(X, k) ซงเปนฟงกชนทใช ในการสรางเมทรกซใหมทมขนาดเทากบเมทรกซ X โดยจะดงเฉพาะสมาชกในบรเวณสามเหลยมดานลางของเมทรกซ X มาใส สวน สมาชกในตาแหนง อนๆ จะมคาเปนคา 0 สาหรบพารามเตอร k จะเปนตวบอกวาใหเรมดง ขอมลในแนวเสนทแยงมมไหน กลาวคอมลกษณะการใชงานเหมอนพารามเตอร k ทใชในเมทรกซทแยงมม นนคอ k = 0 หมายถงแนวเสนทแยงมมหลก (เปนคาโดยปรยาย ) ลองศกษาการใชงานคาสง tril จากตวอยาง ตอไป นจะไดเขาใจลกษณะการใชงานของคาสง tril มากขน
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
-->B = tril(A) //ดงสมาชกทงหมดทอยในแนวตงแตเสนทแยงมมหลกลงมา
B = //ของเมทรกซ A มาสรางเปนเมทรกซ B
1. 0. 0. 0.
5. 6. 0. 0.
9. 10. 11. 0.
-->C = tril(A, 2) //ดงสมาชกทงหมดทอยในแนวตงแตเสนทแยงมมทอยเหนอ
C = //เสนทแยงมมหลกขนไปสองลาดบลงมา
1. 2. 3. 0.
5. 6. 7. 8.
9. 10. 11. 12.
-->D = tril(A, -1) //ดงสมาชกทงหมดทอยในแนวตงแตเสนทแยงมมทอยใต
124
D = //เสนทแยงมมหลกขนไปหนงลาดบลงมา
0. 0. 0. 0.
5. 0. 0. 0.
9. 10. 0. 0.
4.6.7 เมทรกซสามเหลยมดานบน เมทรกซสามเหลยมดานบน (upper triangular matrix) สามารถสรางไดโดยใชคาสง triu(X, k) ซงเปนฟงกชนทใช ในการสรางเมทรกซใหมทมขนาดเทากบเมทรกซ X โดยจะดงเฉพาะสมาชกในบรเวณสามเหลยมดานบนของเมทรกซ X มาใส สวน สมาชกอนๆ จะมคาเปนคา 0 คาสงนมรปแบบ การใชงานเหมอนกบคาสง tril(X, k) ทกประการ เพยงแตผลลพธทไดจะเปนเมทรกซสามเหลยมดานบน ตวอยางเชน
-->A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
-->triu(A)
ans =
1. 2. 3. 4.
0. 6. 7. 8.
0. 0. 11. 12.
-->triu(A, 2)
ans =
0. 0. 3. 4.
0. 0. 0. 8.
0. 0. 0. 0.
-->triu(A, -1)
ans =
1. 2. 3. 4.
5. 6. 7. 8.
0. 10. 11. 12.
4.6.8 เมทรกซรปแบบพเศษ เมทรกซรปแบบพเศษ ไดแก เมทรกซกล (magic matrix), อนเวอรสของเมทรกซฮลเบรต (Hilbert
matrix), และเมทรกซ Franck โดยเมทรกซเหลานสามารถสรางได จากการใชคาสง testmatrix ซงมรปแบบการเรยกใชงานดงน
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 ดงตอไปน
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 เรเดยน
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
128
-->y = clean(cos(theta ).^3 - cos(theta ).^2 - 4*cos(theta ) + 4)
y =
0
0
0
คาตอบของสมการคอ θ = 0, 1.3169579i, และ 3.1415927-1.3169579i
ตวอยางท 5 กาหนดใหคะแนนสอบวชา การสอสารดจทลของนกศกษาจานวน 30 คนมดงน (จากคะแนนเตม 100 คะแนน)
68 45 93 76 80 85 78 85 88 90 50 55 65 68 70 90 75 82 67 45 88 90 64 78 75 59 60 73 78 65
จงหาคาตอไปน
1) คาคะแนนตาสดขอ งนกศกษาในหอง และมนกศกษากคนทไดคะแนนตาสด 2) คาเฉลย เลขคณต, คาเฉลย เรขาคณต, และคาเฉลย ฮารมอนก ของคะแนนในหอง 3) จงเรยงลาดบคะแนนของนกศกษาในหองจากคามากไป หาคานอย
วธทา การแกปญหา โจทยขอนใหเรมตนจากการนาขอมล คะแนนสอบของนกศกษาจานวน 30 คน มาจดใหอยในรปของเวกเตอร ดงน
-->x = [68 45 93 76 80 85 78 85 88 90 ...
--> 50 55 65 68 70 90 75 82 67 45 ...
--> 88 90 64 78 75 59 60 73 78 65];
-->
จากนน กสามารถหาคาตอบทตองการไดดงตอไปน
1) คะแนนตาสดและจานวนนกศกษาทไดคะแนนตาสด สามารถหาไดจาก
-->xmin = min(x) //หาคะแนนตาสด xmin =
45.
129
-->index = find(x == xmin) //หาตาแหนง ของขอมลทมคาเทากบ คะแนนตาสด index =
2. 20.
-->Nmin = length(index) //หาจานวนนกศกษาทไดคะแนนตาสด Nmin =
2.
นนคอคะแนนตาสดมคาเทากบ 45 และมนกศกษาจานวน 2 คนทไดคะแนนตาสด
2) คาเฉลย เลขคณต, คาเฉลย เรขาคณต, และคาเฉลย ฮารมอนก สามารถหาไดจาก
-->am = mean(x)
am =
72.833333
-->gm = geomean(x)
gm =
71.501303
-->hm = harmean(x)
hm =
70.047351
ผลลพธทไดคอ คาเฉลย เลขคณตมคาเทากบ 72.833333, คาเฉลย เรขาคณตมคาเทากบ 71.501303, และคาเฉลย ฮารมอนกมคาเทากบ 70.047351
3) จงเรยงลาดบคะแนนของนกศกษาในหองจากคามากไป หาคานอย สามารถหาไดจาก
-->MaxToMin = sort(x)
MaxToMin =
column 1 to 9
93. 90. 90. 90. 88. 88. 85. 85. 82.
column 10 to 18
80. 78. 78. 78. 76. 75. 75. 73. 70.
column 19 to 27
68. 68. 67. 65. 65. 64. 60. 59. 55.
column 28 to 30
50. 45. 45.
130
4.8 สรป ในบทนไดอธบายถงฟงกชนพนฐานทใชสาหรบการคานวณทางคณตศาสตร เชน ฟงกชนพนฐานท เกยวกบตวเลข , ฟงกชนตรโกณมต , ฟงกชนไฮเพอรโบลก , และฟงกชนพนฐานทางสถต เปนตน ซงเปนประโยชนมากในการแกไขปญหาทางวศวกรรมและวทยาศาสตร โดยเมอเขาใจถงรปแบบการใชงานของฟงกชนตางๆ แลว กจะทาให สามารถพฒนาโปรแกรมทมการคานวณทซบซอนได นอกจากฟงกชนทกลาวมาในบทน โปรแกรม SCILAB ยงไดเตรยมฟงกชนอนๆ อก จานวนมากทใชในการคานวณเฉพาะทาง สาหรบผสนใจสามารถศกษารายละเอยดเพมเตมได จากคาสง help
4.9 แบบฝกหดทายบท 4.1 จงคานวณหาคาของฟงกชน f(x) ตอไปน เมอ x = −2, 0, 2, −2i, และ 2i
4.1.1) ( )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=
−
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+ ≤ +
132
4.6 กาหนดใหคะแนนสอบวชาการเขยนโปรแกรม ภาษา SCILAB ของนกเรยนในหองจานวน 45 คนมดงน (จากคะแนนเตม 10 คะแนน)
8.3 7.2 8.9 9.2 9.6 5.1 7.4 7.5 8.1 5.8 6.9 8.4 7.8 9.3 9.5
5.3 5.8 7.3 6.9 8.4 8.1 7.9 7.5 8.5 6.5 5.5 7.8 7.7 9.2 8.5
7.1 9.7 7.8 8.2 7.2 9.1 8.7 8.2 7.4 8.3 7.6 8.9 8.7 8.4 7.6
จงหาคาตอไปน
4.6.1) คาคะแนนตาสดของนกเรยนในหอง และมนกเรยนกคนทไดคะแนนตาสด
4.6.2) คาคะแนนสงสดของนกเรยนในหอง และมนกเรยนกคนทไดคะแนนสงสด
4.6.3) คาเฉลยของคะแนนในหอง คาเฉลย เลขคณตและคาเฉลย เรขาคณตของคะแนนในหอง
4.6.4) คามธยฐานของคะแนนในหอง
4.6.5) คาเบยง เบนมาตรฐานของคะแนนในหอง
4.6.6) จงวาดรปฮสโตแกรมเพอดการแจกแจงของคะแนนสาหรบนกเรยนในหองน
4.6.7) จงเรยงลาดบคะแนนของนกเรยนในหองจากคามาก ไปหาคานอย
บทท 5 การเขยนโปรแกรมดวย SCILAB ในบทนจะอธบายถงคาสงตางๆ ทใชบอยในการพฒนาฟงกชนขนมาใช งาน ไดแก คาสง วนซา และคาสงทดสอบเงอนไข เปนตน รวมถงหลกการเขยนโปรแกรมดวย SCILAB เพอเปนแนวทางใหผอานสามารถพฒนาฟงกชนใหมๆ ขนมาใชงานรวมกบ โปรแกรม SCILAB ไดดวยตนเองอยางรวดเรวและมประสทธผล
5.1 คาสงวนซา บอย ครง ในการเขยนโปรแกรมมความจาเปนทจะตองคานวณชดคาสงบางอยาง ซาเปนจานวนหลายๆ รอบซงในกรณนการใชคาสง วนซ าจงมความจาเปนมาก โดยโปรแกรม SCILAB ไดเตรยมคาสงสาหรบการวนซ าไวอยสอ งรปแบบ คอ คาสง for และคาสง while ซงมหลกการใชงานดงน
5.1.1 คาสง for คาสง for เหมาะสาหรบการใชงานทตองการใหโปรแกรมทาซาชดคาส งเดมทอยภายในลป (loop) เปนจานวนรอบตามทกาหนด ไวในนพจน (expression) คาสง for มรปแบบการใชงาน ดงน
for variable = expression
instruction_1;
instruction_n;
end
134
กลาวคอโปรแกรม จะทาซาคาสง (instruction) ทงหมด ภายในลปเปนจานวนรอบตามทกาหนดโดยตวแปรทเปนไปตามเงอนไขของนพจน ตวอยางการใชงานคาสง for ตวอยาง เชน
-->L = 5;
-->x = [];
-->for i = 1:L
--> x(i) = i;
-->end
ชดคาสงนหมายความวา เมอเรมตน ใชงาน ตวแปร L จะมคาเทากบ 5 และ x เปนเมทรกซวาง (empty matrix) จากนนกทาการ วนซ าโดยใชตวแปร i เปนตวนบจานวนซา นนคอตวแปร i จะเรมจากคา 1 แลวเพมขนทละ +1 จนไปถงคา 5 โดยทคาของตวแปร i แตละคาจะถกบรรจไวใน สมาชกลาดบท i ของเวกเตอร x ผลลพธของการประมวลผลชดคาสงนคอ
-->x'
ans =
1. 2. 3. 4. 5.
ลองศกษาตวอยางตอไปนสาหรบการประยกตการใชงานคาสง for
ตวอยางท 1 จงหาผลรวมของเลขจานวนเตมค (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
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
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
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
138
นนคอถาผลการทดสอบเงอนไขในนพจน expression_1 เปนจรง โปรแกรม SCILAB จะทาชดคาสง instructions_set1 แตถาผลการทดสอบเปนเทจ โปรแกรม SCILAB กจะทาการทดสอบเงอนไขในนพจน expression_2 ตอไปทนท โดยทถาผลการทดสอบใน นพจน expression_2 เปนจรง โปรแกรม SCILAB กจะทาชดคาสง instructions_set2 แตถาผลการทดสอบเปนเทจ กจะ ทาชดคาสง instructions_set3
พจารณาตวอยางโปรแกรมการสรางเมทรกซจตรสขนาด N×N (ถากาหนดให N = 3) โดยสมาชกทกตวทอยใตเสนทแยงมมหลกม คาเทากบ 1 สวน สมาชกทกตวทอยในแนวเสนทแยงมมหลกมคาเทากบ 2 และสมาชกทกตวทอยเหนอเสนทแยงมมหลกมคาเทากบ 3 ดงนน เมทรกซนสามารถเขยนเปนชดคาสงในโปรแกรม SCILAB ได คอ
-->N = 3;
-->A = [];
-->for i = 1:N
--> for j = 1:N
--> if i < j then
--> A(i, j) = 3;
--> elseif i == j then
--> A(i, j) = 2;
--> else
--> A(i, j) = 1;
--> end
--> end
-->end
เมอทาการประมวลผลชดคาสงนแลวจะพบวาผลลพธทไดคอ เมทรกซตามทกาหนด นนคอ
-->A
A =
2. 3. 3.
1. 2. 3.
1. 1. 2.
139
5.2.2 คาสง select-case การทดสอบเงอนไขความสมพนธสามารถทาไดอกรปแบบหนงคอ การใชคาสง select รวมกบ case โดยมรปแบบการใชงาน ดงน
กลาวคอโปรแกร ม 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
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) ซงหมายความวา ถาตวแปรตางๆ ทใชในหนาตางคาส งกอนการเรยกใชงานไฟลสครปต มชอซ ากบตวแปรทอยใ นไฟลสครปตแลว คาของตวแปรเหลานนกสามารถทจะถกเปลยนไป ไดตามคาสง ทอยในไฟลสครปต
141
5.3.1.2 ไฟลฟงกชน ถาตองการสรางไฟลททาหนาทเสมอนเปนฟงกชนหนงใน ตวโปรแกรม SCILAB ขนมาใชงานเอง โดยมลกษณะการทางานเหมอนกบฟงกชน ในตว (built-in function) ของโปรแกรม SCILAB กลาว คอมการสงผานคาของตวแปรตางๆ ไปใหก บฟงกชน จากนน ฟงกชนกจะ นาคาของตวแปรเหลานไปประมวลผลตามคาสงท มอยภายในตวฟงกชน แลวกสงผลลพธทไดออกมาจากตวฟงกชน ไฟลลกษณะนในโปรแกรม SCILAB จะเรยกวา ไฟลฟงกชน หรอ “Sci-file” ขอดของไฟลฟงกชนคอการชวยทาใหผใชงานโปรแ กรม SCILAB สามารถพฒนาฟงกชนรปแบบใหมๆ ทไมมอยใน โปรแกรม SCILAB ขนมาใชงานเฉพาะดาน ไดตามความตองการ ดงนนไฟลฟงกชนจงมประโยชน มากในการเขยนโปรแกรมทซบซอน
ในทางปฏบตไฟลฟงกชน จะเปนไฟลทปดทายดวย .sci และสามารถใชคาสง exec หรอ getf ในการประมวลผลไฟลฟงกชน ขอแตกตางทสาคญระหวางไฟลสครปตและไฟลฟงกชน กคอ ตวแปรทงหมด ทใชในไฟลฟงกชนจะถอวาเปน ตวแปรโลคอล (local variable) ซงหมายความวา ถงแมวาตวแปรตางๆ ทใชในไฟลฟงกชนจะมชอซากนกบตวแปรทใชอยใน หนาตางคาสง (หรอนอกไฟลฟงกชน ) การเปลยนแปลงคาของตวแปรทใชอยในหนาตางคาสงจะไมมผลกระทบ ตอตวแปรทมชอซากนทใช อยภา ยในไฟลฟงกชน ดงนนผ พฒนาไฟลฟงกชนขนมาใหมจงไมตอง กงวล กบการ กาหนดชอตวแปร ทซากนกบต วแปรทใชอยในหนาตางคาสง หรอในไฟลฟงกชนอ นๆซงจะชวย ทาใหผใชสามารถสรางไฟลฟงกชน รปแบบใหมๆ ขนมาใชงานไดอยางเปนอสระจากผอน กลาวคอ ผใชสามารถนาไฟลฟงกชน ของผอนมาใชกบงานของตนเองได เพยงแตปอนคา ของตวแปรตางๆ ใหสอดคลองกบรปแบบและข อกาหนดของไฟลฟงกชนนน
5.3.2 รปแบบและขอกาหนด ในการเขยนไฟลฟงกชน โปรแกรม SCILAB มฟงกชนสาเรจรปทสามารถนาม าใชงานมากมาย แตในกรณทผใชตองการสรางฟงกชน ใหมๆ ขนมาใชงานเฉพาะทาง กสามารถทาไดเชนกนโดยใชโปรแกรม เอดเตอรทวไปในการเขยนไฟลฟงกชน แตโครงสรางของฟงกชนตองสอดคลองกบรปแบบของโปรแกรม SCILAB ดงตอไป น
142
ขอกาหนดในการเขยนไฟลฟงกชน มดงน ไฟลฟงกชนทสรางขนมาจะตองเรมตนดวยคาวา “function” เสมอ สวนคาปดทาย
“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
143
OddSum = 0;
i = StartNumber;
while i <= x2
OddSum = OddSum + i;
i = i + 2;
end
endfunction
เมอเขยนไฟลฟงกชนเสร จแลวจะตองบนทกไฟลนในชอของ MySum.sci เทานน กอนทจะนา ไฟลฟงกชน นมาใชงานเสมอนหนงวาเปนฟงกชนมาตรฐานของโปรแกรม SCILAB จะตองทาการโหลด (load) ไฟลฟงกชนน กอน โดยใชคาสง exec หรอ getf ดงแสดงในตวอยางตอไปน
--> y = MySum(1,10) !--error 4
undefined variable : MySum //หมายความวายงไมสามารถใชงานฟงกชน MySum ได
-->exists('MySum') //ตรวจสอบดวามตวแปรชอ MySum ในพนทใชงาน หรอไม ans =
0. //คา 0 หมายถงไมม ตวแปรชอ MySum ในพนทใชงาน
-->exec('MySum.sci'); //เทยบเทากบการใชคาสง getf('MySum.sci')
-->exists('MySum')
ans =
1. //คา 1 หมายถงมตวแปรชอ MySum ในพนทใชงาน
คาสง exists เปนคาสงทใชในการยนยนการมอยจรง 24 (existence) ของชอตวแปรนนๆ กลาวคอ ถามชอตวแปรนนอย ในพนทใชงาน (workspace) จรง กจะใหผลลพธเปนคา 1 แตถาไมมชอตวแปร นนอย กจะใหผลลพธเปนคา 0 เมอทาการโหลดไฟลฟงกชน โดยใชคาสง exec หรอ getf แลว โปรแกรม SCILAB กจะมองเหน ไฟลฟงกชนท สรางขนมา นเปนเสมอนตวแปรตวหนงทสามารถเรยกมาใชงานไดทนท เชน 24 เมอทาการโหลดไฟลฟงกชนแลว โปรแกรม SCILAB จะถอวาชอ ไฟลฟงกชนนนเปนเสมอนตวแปรตวหนง ภายในโปรแกรม SCILAB
144
-->y = MySum(2, 10) //ในทนจะหมายถง x1 = 2 และ x2 = 10 y =
24. //ผลลพธคอ 3 + 5 + 7 + 9 = 24
-->y = MySum(1, 10) //ในทนจะหมายถง x1 = 1 และ x2 = 10 y =
25. //ผลลพธคอ 1 + 3 + 5 + 7 + 9 = 25
จะเหนไดวาเมอปอนอนพตพารามเตอร x1 และ x2 ใหกบไฟลฟงกชน MySum แลว โปรแกรม
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 ดงแสดงในตวอยางตอไปน
145
-->clear;
-->x2
!--error 4
undefined variable : x2 //ไมมชอตวแปร x2 ในพนท ใชงาน
-->exists('MySum')
ans =
0. //ไมมชอไฟลฟงกชน MySum ในพนทใช งาน
5.3.3 การใชงานคาสง argn จากตวอยางทแสดงขางตน ในกรณทผใชลมปอนอนพตพารามเตอรบางตวใหกบไฟลฟงกชนทสรางขนมา แตชอของอ นพตพารามเตอรเหลาน นไปซ ากบชอของตวแปรท เคยเรยกใชอยในพนทใชงาน ไฟลฟงกชน กจะนาเอาคาของตวแปร ทมชอซากบช อของอนพตพารามเตอรไปใชในการประมวลผลภายในตวไฟลฟงกชน ซง การทางานในลกษณะนเปนสงทควรหลกเลยงเนองจากอาจจะเปนการใช คาของอนพตพารา มเตอรทผดจดประสงค อนจะสง ผลทาใหโปรแกรมทงหมดเกดความเสยหายได เพราะวาใชคาทไมถกตองในการคานวณ
ดงนนโปรแกรม SCILAB จงไดเตรยมคาสง argn เพอใหผพฒนาไฟลฟงกชนสามารถตรวจสอบไดวา โปรแกรมภายนอกทกาลง เรยกใชไฟลฟงกชนน ไดปอนอนพตอารกวเมนตกตวแล ะตองการเอาตพตอารกวเมนตกต ว เพอใหผพฒนาไฟลฟงกชน จะไดสามารถเขยนโปรแกรมใหทาหนาทสอดคลองกบจานวนอารกว เมนตทรบเขามาและทสงออกไป รปแบบการใชงานของคาสง argn มดงน
[lhs, rhs] = argn()
โดยทพารามเตอร lhs เปนเลขจานวนเตมบวกทแสดงถงจานวนเอาตพตอารกวเมนตของ ไฟลฟงกชน rhs เปนเลขจานวนเตมบวกทแสดงถงจานวนอนพตอารกวเมนตของ ไฟลฟงกชน
คาสง argn นจะตองถกใชภายในตว ไฟลฟงกชนทพฒนาขนมาเทานน ใหพจารณาตวอยางตอไปน จะไดเขาใจถงการทางานของคาสง argn มากขน
146
function [OddSum, EvenSum] = MySum2(x1, x2)
//[OddSum, EvenSum] = MySum2(x1, x2) finds the summation of
//odd numbers and even numbers between x1 and x2.
[lhs, rhs] = argn(); //คานวณหาคาจานวน เอาตพตอารกวเมน ตและอนพตอารกวเมนต
if rhs < 2 then x2 = 10; end
if modulo(x1, 2) == 1 then
StartOddNumber = x1;
StartEvenNumber = x1 + 1;
else
StartOddNumber = x1 + 1;
StartEvenNumber = x1;
end
OddSum = 0;
i = StartOddNumber;
while i <= x2
OddSum = OddSum + i;
i = i + 2;
end
if lhs == 2 then
EvenSum = 0;
i = StartEvenNumber;
while i <= x2
EvenSum = EvenSum + i;
i = i + 2;
end
end
endfunction
ไฟลฟงกชนน จะหาผลบวกของเลขจานวนคและจานวนคทงหมด ทอยระหวางคา x1 และคา x2 โดยผลบวกของเลขจานวนคจะถกบรรจไวในตวแปรชอ OddSum และผลบวกของเลขจานวนค
147
จะถกบรรจไวในตวแปรชอ EvenSum เมอพจารณาดขอมลภายในไฟลฟงกชนจะพบวา มการกาหน ดจานวนอนพตอารกวเมนตและเอาตพตอารกวเมนต โดยทถาจานวนอนพตอารกวเมนตนอยกวา สองตว (นนคอ ไมมการปอนคา x2 ใหกบไฟลฟงกชน MySum2) ไฟลฟงกชน นกจะกาหนดให x2 = 10 โดยอตโนมต เชน เดยวกนถาจานวนเอาตพตอารกวเมนตนอยกวาสอง ตว ไฟลฟงกชน นกจะไม ทาการคานวณหาคาผลรวมของเลขจา นวนคทอยระหวางคา x1 และคา x2 ดงนน เมอเขยนไฟลฟงกชน นเสรจแลวกใหบนทกไฟลฟงกชน นในชอของ MySum2.sci และกอนทจะนาไฟลฟงกชน นมาใชงาน กจะตองทาการโหลดไฟลฟงกชน นกอน ดงแสดงในตวอยางตอไปน
-->getf('MySum2.sci')
-->[y1, y2] = MySum2(1,10)
y2 =
30.
y1 =
25.
-->[y1, y2] = MySum2(1) //ไฟลฟงกชน MySum2 จะใชคา x2 = 10 โดยอตโนมต
y2 =
30.
y1 =
25.
-->y1 = MySum2(1,10) //ไฟลฟงกชน MySum2 จะไมแสดงผลรวมของเลขจานวนค y1 =
25.
-->y1 = MySum2(1) //ไฟลฟงกชน MySum2 จะใชคา x2 = 10 โดยอตโนมต
y1 = //แตจะไมแสดงผลรวมของเลขจานวนค 25.
5.3.4 การเขยนฟงกชนแบบอนไลน การพฒนาฟงกชน รปแบบใหมขนมาใชงาน สามารถทาไดตามทอธบายไวขางตน เชน ถาตองการสรางฟงกชนเพ อหาคาสงสดของเลขสองจานวน กสามารถเขยนฟงกชนในโปรแกรม SCILAB ไดดงน
148
function [y] = MyMax(x1, x2)
if x1 >= x2 then
y = x1
else
y = x2;
end
endfunction
จากนน ใหทาการบนทกฟงกชนนลงในไฟล โดยทชอไฟลจะตองเปนชอเดยวกนกบชอขอ งฟงกชน นนคอชอไฟล MyMax.sci นอกจากนกอนจะใชงานฟงกชนนได กจะตองทาการโหลดฟงกชนโดยใชคาสง exec หรอ getf กอน
สงเกตจะพบวาวธการสรางฟงกชน ขางตนคอนขางจะเสยเวลา เนองจากมการทางานหลายขนตอน ในกรณทฟงกชนท พฒนาขนมามขนาด เลกและถกใชงานเฉพาะภายในโปรแกรมหลกเพยงโปรแกรมเดยว โปรแกรม SCILAB อนญาตใหมการกาหนดฟงกชนแบบ อนไลน (in-line function) ทหนาตางคาสงไดโดยตรง ดง แสดงในตวอยางตอไปน (ยงคงเรมตนฟงกชนดวยคาวา function และจะตองลงทายดวยคาวา endfunction เสมอ)
-->function [y] = MyMax(x1, x2), if x1 >= x2 then y = x1, ...
-->else y = x2; end; endfunction;
-->y = MyMax(1, 5)
y =
5.
วธการนจะทาใหสามารถนาฟงกชนทสรางขนมา ไปใชงานไดทนท เนองจากโปรแกรม SCILAB จะทาการโหลดฟงกชนน โดยอตโนมต (ไมตอง เรยกผานคาสง exec หรอ getf) วธการสรางฟงกชนแบบนจะสะดวกในกรณทจานวนคาสงภายในฟงกชนมไมมาก นอกจากวธการนแลว ผใชยงสามารถใชคาสง deff ในการสรางฟงกชนแบบอ นไลนไดเชนกน ซงมรปแบบการใชงาน คอ
deff('[เอาตพต] = function_name(อนพต)', 'ชดคาสง ')
149
ตวอยางการใชงานคาสง deff เชน
-->deff('[y] = MyMax(x1, x2)', 'if x1 > x2 then y = x1; ...
-->else y = x2; end');
-->y = MyMax(1,5)
y =
5.
จะเหนไดวาการสรางฟงกชน ใหมขนมาใชงาน ในโปรแกรม SCILAB สามารถทาไดหลายลกษณะ ทาใหสะดวกตอการใชงานตามทตองการ
5.4 การเขยนไฟลไดอาร ไฟลไดอาร (diary file) เปนไฟลขอมลทจะบนทกขอมลทงหมดทแสดงผลออกทางหนาตางคาสง ตงแตมการเรยกใชคาสง diary ไปเรอยๆ จนถงคาสง diary(0) รปแบบการเรยกใชงานของคาสง diary มดงน
diary('output_filename')
โดยพารามเตอร output_filename คอ ชอไฟลทจะทาการบนทกขอมลลงไป ตวอยางการใชงานคาสงน เชน
-->diary('mydiary.txt')
-->x = [1 2 3 4];
-->y = [5 6 7 8];
-->z = x+y
z =
6. 8. 10. 12.
-->z.^2
ans =
36. 64. 100. 144.
-->diary(0)
150
รปท 5.1 รายละเอยดของขอมลภายในไฟล mydiary.txt โดยใชโปรแกรมเอดเตอร WordPad
เมอใชคาสง diary(0) กจะถอวาเปนการสนสดการ บนทกขอมลและทาใหไดไฟลเอาตพตออกมาทชอวา “mydiary.txt” ในสารบบทกาลงทางานอย ณ ขณะนน เมอลองใชโปรแกรมเอดเตอร ทชอวา “WordPad” เปดอานไฟลนด กจะไดตามทแสดงในรปท 5.1 ซงจะพบวาขอมลทอยใน ไฟลนจะเหมอนกบขอมลท ปรากฎอยใน หนาตางคาสง ตงแต มการเรยกใชคาสง diary จนถงคาสง diary(0)
ประโยชนของไฟลไดอารกเพอทาหนาทเกบบนทก ขอมลตางๆ ทแสดงผลออกทาง หนาตางคาสง เพอทจะ ไดนาขอมลเหลานไปวเคราะหและประมวลผลในขนตอนตอไป
5.5 ความรเพมเตมในการเขยน ไฟลฟงกชน ในสวนนจะกลาว ถงการโหลดไฟลฟงกช น คาสงพนฐานท ใชบอยสาหรบการพฒนา ไฟลฟงกชน พรอมทงแนะนา เทคนคการเขยนโปรแกรมใหมประสทธภาพ
151
5.5.1 การโหลดไฟลฟงกชน ตอนนเปนททราบกนดแลววา กอนทจะนาไฟลฟงกชน ทพฒนาขน มาใชงานในโปรแกรม SCILAB ผใชจะตองทาการโหลดไฟลฟงกชนน นกอ นโดยใชคาสง exec หรอ getf โดยไฟลฟงกชน ทถกโหลดเขาไปในโปรแกรม SCILAB จะถอวาเปนตวแปรตวหนงของโปรแกรม แตถามการใชคาสง clear ในหนาตางคาสง กจะทาให ไฟลฟงกชน นนถกลบออกจากโปรแกรม SCILAB
โดยทวไป ฟงกชน มาตรฐานตางๆ ทเกยวขอ งกนในโปรแกรม SCILAB จะถกรวบรวมเกบไวในไลบราร (library) โดยไลบรารทโปรแกรม SCILAB เตรยมไวให ไดแก ไลบรารสาหรบฟงกชนพนฐาน (elemlib), ไลบรารทางดานสถต (statslib), และไลบรารสาหรบการประมวลผลสญญาณ (siglib) เปนตน จะถกเกบไวในสารบบ ทชอวา “SCIDIR/macros/” เมอ SCIDIR คอสารบบทเกบโปรแกรม SCILAB
ถาตองการสรางไลบรารใหมเพอเกบ ไฟลฟงกชน ตางๆ ทผใชพฒนาขนมา กสามารถทาได โดยใชคาสง genlib เพอทวาไฟลฟงกชน เหลานสามารถทจะถกเรยกใชงานไดตลอดเวลาเสมอน เปนฟงกชน ในตว (built-in function) ของโปรแกรม SCILAB (ไมตองมการโหลด ไฟลฟงกชนกอนการเรยกใชงาน ) ทงนเปนเพราะวา โปรแกรม SCILAB จะทาการโหลดไลบรารตางๆ ทกครงเมอเรมใชงานโปรแกรม SCILAB สาหรบผสนใจสามารถศกษารายละเอยดการใชงานคาสง genlib ไดจากคาสง help
5.5.2 คาสงพนฐานสาหรบการพฒนาฟงกชน ในสวนนจะกลาวถงคาสงพนฐานทใชบอยในการพฒนาฟงกชน ซงมดงตอไปน
5.5.2.1 ฟงกชน disp คาสงนมการเรยกใชงานอยหลายรปแบบ เชน
disp(x) เปนคาสงทใชในการแสดงผลของตวแปร x ตวอยางการ ใชงาน เชน
-->x = [2 4 6 8];
-->disp(x([1 3])) //แสดงขอมลสมาชกตวทหนงและตวทสามของเวกเตอร x
2. 6.
152
disp("string") เปนคาสงทใชในการแสดงขอความในเครองหมาย "..." ออกมาทหนาตางคาสง
-->disp("Piya Kovintavewat")
Piya Kovintavewat
นอกจากนคาสง disp ยงมการใชงานในรปแบบอนอก เชน
-->A = 3.5; disp(A, "A = ")
A =
3.5
-->X = 3.5; Y = 2; disp(Y, "Y = ", X, "X = ")
X =
3.5
Y =
2.
-->Z = -5.2; disp("Z = " + string(Z))
Z = -5.2
5.5.2.2 ฟงกชน error รปแบบการใชงานของคาสงน คอ error('string') ซงจะทาหนาทในการแสดงขอความทอยในเครองหมาย '...' ออกทางหนาตางคาสง และหยดการทางานของโปรแกรมนน
5.5.2.3 ฟงกชน warning รปแบบการใชงานของคาสงน คอ warning('string')ซงจะทาหนาทในการแสดงขอความทอยในเครองหมาย '...' ออกทางหนาตางคาสง คลายกบคาสง error แตจะไมมการหยดการทางานของโปรแกรม
5.5.2.4 ฟงกชน pause เปนคาสงทใชในการ หยดจงหวะการประมวลผลของโปรแกรม โดยโปรแกรม SCILAB จะแสดงเครองหมาย SCILAB prompt “-->” พรอมทงแสดง ระดบของการหยดจงหวะ (level of the
153
pause) คาสงนมประโยชนมาก สาหรบการตรวจสอบและแกไขโปรแกรม (debugging program) ตวอยางเชน (ศกษารายละเอยดเพมเตมไดในหวขอ ท 8.1.3)
-->pause //หยดจงหวะการประมวลผลของโปรแกรม
-1->pause //ระดบทหนงของการหยดจงหวะ
-2->pause //ระดบทสองของการหยดจงหวะ
-3-> //ระดบทสามของการหยดจงหวะ
5.5.2.5 ฟงกชน abort เปนคาสงทใชในการขดจงหวะการประมวลผล ของโปรแกรม โดยโปรแกรม SCILAB จะแสดงเครองหมาย SCILAB prompt “-->” และทาใหระดบของการหยดจงหวะลดลงจนเปนศนย ตวอยางเชน (ศกษารายละเอยดเพมเตม ไดในหวขอท 8.1.4.1)
-->pause
-1->pause
-2->pause
-3->abort //ทาการขดจงหวะการประมวลผลของโปรแกรม
--> //พรอมทงทาให ระดบของการหยดจงหวะลดลงเปนศนย
5.5.2.6 ฟงกชน break เปนคาสงทใชใ นการหยดการทางานของลป (loop) นนคอถาคาสงนอยภายในชดคาสง for หรอ while จะสงผล ทาใหลปหยดการทางาน
5.5.2.7 ฟงกชน exit เปนคาสงทใชในการหยดการทางานของโปรแกรม SCILAB นนคอหนาตางคาสงของโปรแกรม SCILAB กจะหายไปดวย
154
5.5.2.8 ฟงกชน quit เปนคาสงทใช ในการหยดการทางานของโปรแกรม SCILAB หรอใชการลดระดบของการหยดจงหวะ (pause) ตวอยางเชน
-->pause
-1->pause
-2->pause
-3->quit //ลดระดบของการหยดจงหวะลงสองระดบ
-1->quit
-->
5.5.2.9 ฟงกชน resume และ return เปนคาสงท ทาใหโปรแกรมทถกขดจงหวะกอนหนานกลบ มาทางานตออกครง พรอมทง สาเนา (copy) ตวแปรโลคอลมาใชในพนทใชงาน ณ ขณะนน (ศกษารายละเอยดการใชงานคาสง resume และ
return เพมเตมไดในหวขอ ท 8.1.2)
5.5.2.10 ฟงกชน tic และ toc ฟงกชน tic เปนคาสงทใชในการจบเวลาเรมตนการทางานของชดคาสง โดยทวไปจะ ใชงานรวมกบ ฟงกชน toc ซงจะทาหนาทในการหยดเวลาทตงไวจากการใชคาสง tic พรอมทงแสดงผล ลพธของเวลาทใชไป (มหนวยเปนวนาท ) ออกทางหนาตางคาสง ตวอยางเชน
-->tic //เรมจ บเวลา
-->deff('[y] = fsum(N)', 'y=0; for i=1:N, y=y+1; end');
-->y = fsum(2000000)
y =
100.
-->toc //สนสดการจบเวลา ในทนไดใชเวลาไปประมาณ 5.719 วนาท
ans =
5.719
155
5.5.3 ขอแนะนาในการพฒนาโปรแกรมใหมประสทธภาพ การพฒนาโปรแกรมเพอใหสอดคลองกบขอกาหนดทตองการสามารถทจะทาไดหลายวธ ทงน จะขนอยกบทกษะและความถนดของผพฒนา โปรแกรมแตละคน โดยทวไป ผพฒนาโปรแกรมจะพยายามทจะทาใหไดโปรแกรมทสามารถทางานไดอยาง ถกตองและรวดเรว
เนองจากโปรแกรม SCILAB เปนโปรแกรมททางานบนพนฐานของเมทรกซ ดงนน หลกการเขยนโปรแกรมทดคอ ควรจะพยายามใชประโยชนจากโครงสรางของเมทรกซและพยายามหลกเลยงการใชคาสง วนซ าตางๆ ใหมา กทสด ลองพจารณตวอยางกา รคานวณหาคาผลรวมของ
ฟงกชน ( )2
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 วนาท อยางไรกตาม ผใชสามารถทจะพฒนาชดคาสง ใหมใหมผลลพธเทาเดม แตใชความเรว ในการประมวลผลนอยลงไดโดยใชประโยชนจากโครงสรางของเมทรกซ ดงตอไปน
156
-->tic
-->i = 1:200000;
-->y = sum((3*i.^2 + 2*i - 1)./(5*i.^2));
-->toc
ans =
0.234
-->y
y =
120004.78
จะเหนไดวาชดคาสงนจะใชเวลา ในการประมวลผลเพยง 0.234 วนาท ซงเรวกวาชดคาสงเดม มาก ดงนน ผพฒนาโปรแกรมควรทจะใชประโยชนจากโครงสรางของเมทรกซในการสรางโปรแกรมใหมากทสด เพอทจะทาใหไดโปรแกรมทสามารถทางานไดอยาง รวดเรวและมประสทธผล
5.6 ตวอยางการคานวณ ในสวนนจะยกตวอยางการแกไขปญหาโจทยทางค ณตศาสตรโดยใชโปรแกรม SCILAB ดงตอไปน
ตวอยางท 2 จงเขยนโปรแกรมเพอเรยงลาดบเลขจานวนเตมใดๆ 3 จานวน เพอใหแสดงผลลพธจากคานอยไปหาคามาก โดยกาหนดให มรปแบบการเรยกใชงานดงน
y = MinToMax(a, b, c)
เมอ a, b, และ c คอเลขจานวนเตม และ y คอเวกเตอรทมสมาชกเรยงลาดบจากคานอยไปหาคามาก
วธทา โปรแกรมนสามารถสรางไดดงน
function y = MinToMax(a, b, c)
x = [a, b, c];
m1 = min(x);
x(find(x == m1)) = [];
m2 = min(x);
157
x(find(x == m2)) = [];
m3 = x;
y = [m1, m2, m3];
endfunction
เมอเขยนไฟลฟงกชนเสร จกทาการ บนทกไฟลนในชอ MinToMax.sci ตวอยาง การใชงานเชน
-->getf('MinToMax.sci') //ทาการโหลดไฟลฟงกชน กอนเรยกใชงาน
-->y = MinToMax(3, -3, 1)
y =
- 3. 1. 3.
-->y = MinToMax(-0.2, 99, 0.45)
y =
- 0.2 0.45 99.
ตวอยางท 3 จงเขยนโปรแกรมเพอคานวณหาระยะทางทสนทสด d ระหวางจดสองจด ในระบบพกดคารทเซยน นนคอ P1(x1, y1) และ P2(x2, y2) โดยมรปแบบการเรยกใชงาน คอ
d = FindDistance(x1, y1, x2, y2)
วธทา เนองจากระยะทางระหวางจดสองจ ดหาไดจาก ( ) ( )2 2d = x1-x2 + y1-y2 ดงนน
โปรแกรมนสามารถสรางไดดงน
function [d] = FindDistance(x1, y1, x2, y2)
d = sqrt((x1-x2)^2 + (y1-y2)^2)
endfunction
เมอเขยนไฟลฟงกชนเสร จกทาการ บนทกไฟลนในชอ FindDistance.sci ตวอยาง เชน
158
-->getf('FindDistance.sci') //ทาการโหลดไฟลฟงกชน กอนเรยกใชงาน
-->d = FindDistance(2, 3, 5, 7)
d =
5.
-->d = FindDistance(0, 0, 5, 0)
d =
5.
-->d = FindDistance(0, 0, 1, 1)
d =
1.4142136
ตวอยางท 4 จงเขยนโปรแกรมเพอหาผลรวมของเลขจานวนเตมบวกตงแต n1 ถง n2 ทหารดวยเลขจานวนเตมบวก m ลงตว โดยกาหนดให มรปแบบการเรยกใชงานดงน
y = MySumMod(n1, n2, m)
วธทา โปรแกรมนสามารถสรางไดดงน
function y = MySumMod(n1, n2, m)
x = n1:n2;
temp = modulo(x, m);
index = find(temp == 0);
y = sum(x(index))
endfunction
เมอเขยนไฟลฟงกชนเสร จกทาการ บนทกไฟลนในชอ MySumMod.sci ตวอยาง การใชงานเชน
-->getf('MySumMod.sci') //ทาการโหลดไฟลฟงกชน กอนเรยกใชงาน
-->y = MySumMod(1, 9, 2)
y =
20.
159
-->y = MySumMod(1, 13, 3)
y =
30.
-->y = MySumMod(3, 50, 7)
y =
196.
ตวอยางท 5 จงเขยนโปรแกรมเพอหาคาของ ฟงกชน
( )( )
( )( )
,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 ตวอยาง การใชงานเชน
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.
161
-->fn = MyFN(20)
fn =
2240.
หรออาจจะเขยนโปรแกรมนโดยใชคาสง while แทนคาสง for ไดดงน
function fn2 = MyFN2(N)
fn2 = 0;
i = 0;
while i <= N
fn2 = fn2 + (i^2 - 3*i);
i = i + 1;
end
endfunction
เมอเขยนไฟลฟงกชนเสร จกทาการ บนทกไฟลนในชอ MyFN2.sci ตวอยาง การใชงานเชน
-->getf('MyFN2.sci') //ทาการโหลดไฟลฟงกชน กอนเรยกใชงาน
-->fn2 = MyFN2(3)
fn2 =
- 4.
-->fn2 = MyFN2(20)
fn2 =
2240.
ซงใหผลลพธเทากนกบโปรแกรมทคาสง for
5.7 สรป ในบทนไดอธบายถง คาสงตางๆ ทใช เปนองคประกอบในการพฒนาโปรแกรม ไดแก คาสง วนซา (for และ while) ซงเปนตวสงใหโปรแกรมทาซาชดคาสงเดมภายในลปเปนจานวนรอบตามท กาหนด และคาสงทดสอบเงอนไข (if-then-end, if-then-else-end, if-then-
162
elseif-else-end, และ select-case) นอกจากนยงไดอธบายถง หลกการพฒนาฟงกชน ขอแตกตางระหวางไฟลสครปตและไฟลฟงกชน การสรางไฟลไดอาร รวมทงใหขอแนะนาในการพฒนาโปรแกรมใหมประสทธภาพ และแสดงตวอยางการ เขยนโปรแกรมเพอใชในการแกไขปญหาโจทยทางคณตศาสตร ดงนน จากทอธบายในบทนจะ เหนไดวาการพฒนาฟงกชน รปแบบใหมๆ ขนมาใชงานรวมกบโปรแกรม SCILAB สามารถทาไดโดยงาย
5.8 แบบฝกหดทายบท 5.1 กาหนดใหตวแปร N เปนเลขจานวนเตมบวกใดๆ จงเขยนโปรแกรมโดยใชคาสง for เพอ
คานวณหาคาตอไปน
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==
+ +∑
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 คาอนๆ ใหโปรแกรมหยด
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 พรอมแสดงตวอยางการใชงานคาสงน
บทท 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)
166
รปท 6.1 ตวอยางหนาตางกราฟทใชแสดงผลรปภาพของโปรแกรม SCILAB
รปท 6.2 รายละเอยดของเมนหลกแตละอนในหนาตางกราฟ
Save … บนทกรปกราฟลงไปเกบไว ในไฟลตามรปแบบของโปรแกรม SCILAB (โดยทวไป จะเปนไฟลทปดทายดวย .scg)
Export บนทกรปกราฟลงไปในไฟลทเปนรปแบบเฉพาะ (specific format) เชน Postscript, Xfig, GIF, BMP, และ PPM เปนตน
167
Copy to clipboard สาเนารปกราฟเพอนาไปวาง (paste) ไวในทอน
Print Setup … กาหนดคา พารามเตอรตางๆ ของเครองพมพ
Print พมพรปกราฟออกทางเครองพมพ
Close ปดหนาตางกราฟ ททางานอย
เมน Tools ประกอบไปดวย
ToolBar เปดหรอปดแถบเครองมอทใชในการเรยกดภาพหรอแกไขภาพ ตาม ท แสดงในรปของสญรป (icon) ทงหา ตวบนมมบนซายของหนาตางกราฟ
นนคอ
Zoom ขยายขนาดของรปกราฟเฉพาะสวนทตองการ สามารถทาไดโดย การใชเมาส (mouse) เลอนเคอรเซอร (cursor) ไปทสญรปน แลวกด คลกหนงครง จากนนกใชเมาสเลอนเคอรเซอรมายงตาแหนงแรกท ตองการจะขยายรปกราฟ กดคลกหนงครง แลวกใชเมาสเลอน เคอรเซอร เคอรเซอรไปยงตาแหนงสดทายทตองการจะขยายรปกราฟ แลวกดคลก อกหนงครง กจะไดรปกราฟในสวนทตองการขยายตามทตองการ
UnZoom ทาใหรปกราฟทไดจากการขยาย กลบไปเปนรปกราฟเหมอนเดม กอนทจะทาการขยาย
2D/3D Rotation หมนรปกราฟใหอยในตาแหนงและลกษณะทตองการ
Graphical Editor เปดหนาตางเอ ดเตอรเพอใชในการจดรปแบบการแสดงผลของ รปกราฟ เชน กาหนดชอเสนแกน x และเสนแกน y, เปลยนรปแบบ ของเสนกราฟ, และเปลยนสของกราฟ เปนตน
Entity Picker เปดและปดการเลอกตาแหนงของรปกราฟเพอทาการแกไข
เมน Edit ประกอบไปดวย Select figure as current สารองไวใชในโปรแกรม SCILAB เวอรชนถดไป Redraw figure สารองไวใชในโปรแกรม SCILAB เวอรชนถดไป Erase figure ลบรปกราฟทแสดงอยในหนาตางกราฟ
168
Figure properties เปดหนาตางเอดเตอรเพอใชในการ จดรปแบบการแสดงผล ของรปกราฟเมนยอย นจะมประโยชนมาก โดยเฉพาะในกรณ ทผใชไมสามารถจดจาคา พารามเตอรตางๆ ทใชในคาสง สาหรบจดรปแบบการแสดงผลของรปกราฟ Current axes properties เปดหนาตางเอดเตอรเพอ แสดงสถานะของเสนแกน (axes) ทใชอยในหนาตางกราฟ
Start entity picker เรมตนการเลอกตาแหนงของรปกราฟเพอทาการแกไข
Stop entity picker หยดการเลอกตาแหนงของรปกราฟเพอทาการแกไข
6.2 การวาดกราฟสองมต ในสวนนจะอธบายถงพนฐานในการวาดกราฟสองมต และคาสง ตางๆ ทใชในการวาดกราฟสองมต พรอมทงแสดงตวอยา งการวาดกราฟสองมตแบบตางๆ
6.2.1 พนฐานการวาดกราฟสองมต สมการคณตศาสตรแบบสองตวแปรใดๆ สามารถทจะแสดงใหอยในรปของกราฟสอง มตได เพอใชแสดงความสมพนธของตวแปรทงสอง การวาดกราฟสองมตในโปรแกรม SCILAB นนไมยาก เพยงแตจะตองเขาใจถงรปแบบของขอมลทจะตองปอนใหกบคาสง วาดกราฟตางๆ กอน คาสงพนฐานสาหรบการวาดกราฟสองมตบนระบบพกดฉาก x-y คอคาสง plot ซงมรปแบบการเรยกใชงาน ดงน
plot(x, y)
โดยตวแปรหลกทจะตองปอนใหกบคาสง plot ประกอบดวยเวกเตอรสองชด คอ เวกเตอร x ซงเปนตวแปรอสระทกาหนดคาในเสนแกน x และเวกเตอร y ซงเปนตวแปรตามทกาหนดคาใน เสนแกน y (โดยทเวกเตอร y จะตองมขนาดเทากนกบเวกเตอร x เสมอ) นอกจากนคาสง plot ยงสามารถทจะถกเรยกใชงานไดในอกรปแบบหนง คอ
plot(y)
169
ซงในกรณนโปรแกรม SCILAB จะสมมตวาพารามเตอร x มคาเทากบคา 1 ถงจานวนสมาชกทงหมด ของเวกเตอร y นนคอ x = 1:length(y) โดยอตโนมต
ตวอยางท 1 จงวาดกราฟของรปสญญาณไซนซอยด (sinusoid waveform) ตามสมการ y = sin(2πft)
สาหรบเวลาท t = 0 ถง 2 วนาท ถากาหนดใหค วามถ f = 1 เฮตรซ (Hertz)
วธทา จากโจทยสามารถเขยนเปนชดคาสงของโปรแกรม SCILAB ไดดงน
-->t = 0:0.01:2;
-->f = 1;
-->y = sin(2*%pi*f*t);
-->plot(t, y)
-->xtitle('A sinusoidal wave','Time (t)','Amplitude')
คาสงแรกเปนการกาหนดใหตวแปร t ใหมคาอยระหวาง 0 ถง 2 โดยทสมาชกแตละตวทอยตดกน จะมคาหางกนคงทเทากบ 0.01 (ขนาดของตวแปร t คอ 1×201) จากนนกกาหนดคาความถ f ใหเทากบหนง แลวกหาคาของสญญาณ y โดยคา y ทหามาไดจะมขนาดเทากบตวแปร t จากนนกสงใหวาดกราฟข นมาซงผลลพธทไดจะเปนกราฟตามรปท 6.3 สวนคาสง xtitle เปนคาสงทใชในการกาหนดชอของกราฟ , ชอของเสนแกน x, และชอของเสนแกน y
ในกรณทพารามเตอร y เปนเมทรกซ สมาชกทงหมดในแตละแนวตงของเมทรกซ y จะ
ถกนามาใชวาดกราฟแตละเสน ดงตวอยาง ตอไปน
-->clf; t = 0:0.01:2; //คาสง clf ทาหนาทลบรปกราฟในหนาตางกราฟ
-->f = 1;
-->y = [sin(2*%pi*f*t)' cos(2*%pi*f*t)'];
-->plot(t, y) //วาดกราฟสองเสนพรอมกน
-->xtitle('Two sinusoidal waves', 'Time (t)', 'Amplitude')
โดยผลลพธทไดเปนไปตามรปท 6.4
170
รปท 6.3 สญญาณไซนซอยด y = sin(2πft)
รปท 6.4 สญญาณ sin(2πft) และ cos(2πft)
171
คาสงวาดกราฟสองมตอก รปแบบหนงทนาสนใจ กคอ
plot2di([x], y, [options])
ซงมทงหมด 4 รปแบบตามทกาหนดโดยคาพารามเตอร i ดงน
1) ไมม i วาดกราฟเชงเสนโดยใชสเกลแบบธรรมดาหรอสเกลแบบลอการทม (logarithm scale)
2) i = 2 วาดกราฟขนบนได (step function) 3) i = 3 วาดกราฟแทง (vertical bar) 4) i = 4 วาดกราฟเชงเสนโดยใชลกศร (arrow) แสดงทศทางของเสนโคง (curve)
ตวอยางเชน
-->clf; t = (1:0.2:7)';
-->subplot(2, 2, 1); //รป 6.5 ดานบนซาย
-->plot2d(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d - Piecewise linear');
-->subplot(2, 2, 2); //รป 6.5 ดานบนขวา
-->plot2d2(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d2 - Piecewise constant');
-->subplot(2, 2, 3); //รป 6.5 ดานลางซาย
-->plot2d3(t, [1.5+0.2*sin(t) 2+cos(t)])
-->xtitle('Plot2d3 - Vertical bar plot')
-->subplot(2, 2, 4); //รป 6.5 ดานลางขวา
-->plot2d4(t, [1.5+0.2*sin(t) 2+cos(t)]);
-->xtitle('Plot2d4 – Arrow-style plot')
ซงจะไดผลลพธตามรปท 6.5 จะเหนไดวาชดคาสงขางตน มการเรยกใชคาสง subplot(m,n,i) เพอชวยทาใหสามารถวาดกราฟไดหลาย ๆ กราฟในหนาตางกราฟเดยวกน โดยคาสง subplot
172
รปท 6.5 ตวอยางรปกราฟแบบตางๆ ทไดจ ากการใชคาสง plot2di
จะทาหนาทในการแบงหนาตางกราฟออกเปนเมทรกซขนาด m×n (m แถว และ n แนวตง ) สาหรบหนาตาง กราฟยอยแตละอน โดยหนาต างกราฟยอยอนท i (เมอ i = 1, 2, ..., m*n) จะเปนหนาตาง กราฟยอยทถกเรยกใชงาน
พารามเตอร x ในคาสง plot2di คอ ตวแปรอสระทกาหนดคาในเสนแกน x ซงจะมหรอไมมกได ในขณะทพารามเตอร y จะตองอยในรปของเมทรกซ ทมขนาด nc×nl เมอ nc คอจานวนจดทจะวาดกราฟในแตละเสนกราฟ ซงจะตองมคาเทากบจานวนสมาชกของพารามเตอร x และ nl คอจานวนเสนกราฟทจะวาด ในกรณทเปนการวาดกราฟเพยงหนงเสนกสามารถทจะกาหนดใหพารามเตอร x และ y เปนเวกเตอรแถวหรอเวกเตอรแนวตง กได ซงจะใหผลลพธออกมาเทากน เชน คาสง plot(t, cos(t)), plot(t', cos(t)'), หรอ plot(t, cos(t)') จะใหผลลพธเหมอนกน
173
ตารางท 6.1 การกาหนดลกษณะของจดบนเสนกราฟ style = [j] ลกษณะของจด คาอธบาย
j = 0 . จด (point) j = -1 + บวก (plus) j = -2 × กากบาท (x-mark) j = -3 วงกลมบวก (plus-circle) j = -4 ♦ สเหลยมรปเพชรแบบทบ (black diamond) j = -5 สเหลยมรปเพชรแบบธรรมดา (diamond) j = -6 Δ สามเหลยมชขน (triangle up) j = -7 สามเหลยมชลง (triangle down) j = -8 สเหลยมรปเพชรบวก (plus-diamond) j = -9 ○ วงกลม (circle)
สวนพารามเตอร options จะมหรอไมมกได แตถามการเรยกใชงาน options จะมลกษณะการใชงานดงน
options = [style, axesflag, leg, rect, logflag, nax, frameflag]
โดยท
style มลกษณะการใชงานคอ style = [j] เมอคาของพารามเตอร j จะเปนตวกาหนดรปแบบของเสนกราฟแบบตางๆ ดงแสดงในตารางท 6.1 ตวอยางการใชงานเชน
-->x = 0:0.1:5; //เวกเตอร x มขนาด 1×51
-->u = [-0.8+sin(x); -0.4+sin(x); sin(x); ...
-->0.4+sin(x); 0.8+sin(x)]'; //เมทรกซ u มขนาด 51×5
-->plot2d(x, u, style=[-9, -7, -5, -3, -1])
-->x = 0:0.2:5; //เวกเตอร x มขนาด 1×26
-->y = [1.4+sin(x); 1.8+sin(x)]'; //เมทรกซ y มขนาด 26×2
-->plot2d(x, y, style=[-4, -6])
174
รปท 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]);
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 มดงน
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
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
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
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')
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) เขาไปในรปกราฟ
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
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 มรปแบบการใชงานอยสามแบบ คอ
183
o flags เปนเวกเตอรของตวแปรบลน (%t หรอ %f) ขนาด 1×2 ประกอบไปดวย [wantgrids, findbounds] โดยท wantgrids หมายถงตองการใหใสเสนกรดเขาไปในรปกราฟหรอไม และ findbounds หมายถงตองการใหมการปรบคาขอบเขตของกรอบรปภาพทกาหนดใน rect โดยอตโนมตหรอไม
o captions เปนเวกเตอรขนาด 1×3 ประกอบดวย [title, x-leg, y-leg] ใชกาหนดชอเรอง , ชอเสนแกน x, และชอเสนแกน y ของรปกราฟ โดยจะทาหนาทเทยบเทากบการใชคาสง xtitle
o subwins เปนเวกเตอรขนาด 1×4 ประกอบดวย [x, y, w, h] ใชในการกาหนดหนาตางกราฟยอย (sub-window) โดยท พารามเตอร x และ y แสดงตาแหนง จดพกดของหนาตางกราฟยอย w แสดงขนาดความกวาง (width) และ h แสดงขนาดความสง (height) ของหนาตางกราฟยอย
ตวอยางตอไปนแสดงลกษณะการใชงานของคาสง plotframe
-->clf; x = [0:0.2:9];
-->y = rand(x);
-->rect = [min(x), min(y), max(x), max(y)];
-->tics = [1, 10, 1, 5];
-->plotframe(rect, tics, [%f, %f], ["My plot", "x", "y"], ...
-->[0, 0, 0.5, 0.5])
-->plot2d(x, y, 2, "000") //รปท 6.14 ดานบนซาย
-->plotframe(rect, tics, [%t, %f], ["My plot with grids", ...
-->"x","y"],[0.5,0,0.5,0.5])
-->plot2d(x, y, 3, "000") //รปท 6.14 ดานบนขวา
-->plotframe(rect, tics, [%t, %t], ["My plot with grids and ...
-->automatic bounds", "x", "y"], [0, 0.5, 0.5, 0.5])
-->plot2d(x, y, 4, "000") //รปท 6.14 ดานลางซาย
-->plotframe(rect, tics, [%f, %t], ["My plot without grids ...
-->but with automatic bounds", "x", "y"], [0.5, 0.5, 0.5, 0.5])
-->plot2d(x, y, 5, "000") //รปท 6.14 ดานลางขวา
184
รปท 6.14 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง plotframe
โดยทคาสง tics = [1, 10, 1, 5] หมายถงกาหนด ใหเสนแกน x มสบขดหลกและมหนงขดยอยระหวางขดหลก สวนเสน แกน y มหาขดหลกและมหนงขดยอยระหวางขดหลก ผลลพธทไดจากชดคาสงน แสดงในรปท 6.14
6.2.2.5 คาสง xstring เปนคาสงทใชบรรจ สายอกขระเขาไปในรปกราฟตามรปแบบและตาแหนงทกาหน ด มลกษณะการใชงานดงน
xstring(x, y, str, angle, box)
โดยทพารามเตอร
185
x และ y เปนเลขจานวนจรงทใชบอกจดพกด (coordinate point) เรมตนของสาย อกขระ โดยจดพกดเรมตน x = 0 และ y = 0 จะอยทมมลางดานซายของกรอบรปกราฟ
str เปนเมทรกซของสายอกขระทจะปรากฎในรปกราฟตามจดพกดทกาหนด angel เปนเลขจานวนจรงทใชแสดงมมองศา (ระดบความเอยง) ของตวสายอกขระใน
ทศทางตามเขมนาฬกา (คาโดยปรยาย คอ คา 0) box เปนเลขจานวนเตมทใชในการสรางกลองสเหลยม (box) มาครอบสายอกขระ
(คาโดยปรยาย คอ คา 0 ซงหมายถงไมตองมกลองสเหลยมมาครอบสายอกขระ )
ตวอยางการใชคาสง xstring มดงน
-->clf;
-->alphabet = ["P i y a K o v i n ta v e w a t"];
-->plot2d([0;0.6], [0;1.5], 0); //สรางรปกราฟขนมา โดยไมตองใหแสดงเสนกราฟ
-->xstring(0.1, 1.3, alphabet) //แสดงชอ "Piya" ทจดพกด x = 0.1 และ y = 1.8
-->xstring(0.2, 1.1, alphabet, 0, 1) //แสดงชอ "Piya" ในกลอง
-->xstring(0.3, 0.9, alphabet, 20) //ใหชอทแสดงออกมามมมเอยงเทากบ 20º
-->xset("font", 1, 1) //กาหน ดใหใชตวอกษรแบบสญลกษณ
-->xstring(0.1, 0.5, alphabet)
-->xset("font", 1, 3) //เปลยนขนาดของตวอกษร
-->xstring(0.2, 0.3, alphabet)
ผลลพธทไดแสดงในรปท 6.15
6.2.2.6 คาสง scf(j) เปนคาสงทใชกาหนดหนาตางกราฟหมายเลข j ใหเปนหนาตางกรา ฟทจะทางาน (active graphic
window) โดยท j เปนเลขจานวนเตมบวก แตถาหนาตางหมายเลขนนยงไมมหรอไมมการกาหนด คา พารามเตอร j) โปรแกรม SCILAB กจะสรางหนาตางกราฟหมายเลข j ขนมาใหม คาสง scf(j) จะทาหนาทเทยบเทากบการใชคาสง xset("window", j)
186
รปท 6.15 รปกราฟแสดงผลลพธจากการใชคาสง xstring
6.2.2.7 คาสง clf(j)
เปนคาสงทมาจากคาวา “Clear current graphic figure” โดยจะทาหนาทลบรปกราฟทแสดงอยในหนาตางกราฟหมายเลข j ในกรณทไมมการกาหนดคาพารามเตอร j โปรแกรม SCILAB จะทาการลบรปกราฟทแสดงอยในหนาตางกราฟทกาลงทางานอย
ถาไมใชคาสง clf(j) กอนท จะสงใหโปรแกรม SCILAB วาดรปกราฟใหมลงไปในหนาตางกราฟหมายเลข j ผลลพธทไดคอ รปกราฟใหมทส งใหวาดจะไปทบซอนกบรปกราฟ เดมทแสดงอยในหนาตางกราฟหมายเลข j
6.2.2.8 คาสงอนๆ
คาสง xbasc ใชลบรปกราฟทแสดงอยในหนาตางกราฟ คาสงนมผล ลพธเทยบเทา กบการใชคาสง clf
คาสง xdel(j) ใชลบหนาตางกราฟหมายเลข j ในกรณทไมมการกาหนด คา j โปรแกรม SCILAB กจะทาการลบหนาตางกราฟทกาลงทางานอย
187
x
y
( )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) ในระบบพกดฉากไดจากความสมพนธ ดงน
188
( )x r cos θ= และ ( )y r sin θ=
การวาดกราฟเชงขวในโปรแกรม SCILAB สามารถทาไดโดยการใชคาสง
polarplot(theta, r, [options])
เมอพารามเตอร theta คอคามม θ (มหนวยเปนเรเดยน ), พารามเตอร r คอคาความยาวของรศม ,
และพารามเตอร options มรปแบบการใชงานคอ
options = [style, strf, leg, rect] โดยท style, leg, และ rect มลกษณะการใชงานตามทไดกลาวไวแลวในหวขอทผานมา strf = "xy0" (คาโดยปรยาย คอ strf = "030") โดยท
o x เปนตวควบคมการแสดงผลของคาอธบายในรปกราฟ (caption) มคาดงน x = 0 ไมตองม คาอธบายในรปกราฟ x = 1 แสดงคาอธบายในรปกราฟ ทกาหนดโดยพารามเตอร leg
o y มลกษณะการใชงานเหมอนพารามเตอร frameflag ตามทไดกลาวไวแลว ในหวขอทผานมา
ตวอยางการใชงานคาสง polarplot เชน
-->clf; t = 0:0.01:2*%pi;
-->polarplot(sin(7*t), cos(8*t))
ผลลพธแสดงในรปท 6.17
6.2.4 การวาดกราฟสองมตแบบพเศษ นอกจากนโปรแกรม SCILAB ยงไดเตรยมคาสงสาหรบการวาดกราฟสองมตแบบอนๆ ไวใช งานเฉพาะดานมากมายดงแสดงในตารางท 6.5 (ผสนใจสามารถศกษารายละเอยดเพมเตมของคาสงวาด กราฟสองมตเหลานไดจากคาสง help) ตวอยางการใชงานคาสงเหลาน เชน
189
รปท 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)
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
191
รปท 6.18 ตวอยางรปกราฟแสดงผลลพธจากการใชชดคาสง สาหรบวาดกราฟสองมตทใชงานเฉพาะดาน
คาสงพนฐานสาหรบการวาดกราฟแบบสามมตในโปรแกรม SCILAB มรปแบบดงน
plot3d(x, y, z, [options])
โดยทพารามเตอร x และ y คอเวกเตอรทมขนาดเทากน และพารามเตอร z คอตวแปรตามทขนกบ คาของ x และ y ซงจะมจานวนเทากบผลคณของจานวนขอมลในเวกเตอร x กบจานวนขอมลในเวกเตอร y สาหรบพารามเตอร options มลกษณะการใชงานคอ
options = [alpha, theta, leg, flag, ebox]
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]
โดยท
193
o mode เปนเลขจานวนเตมทใชกาหนดสของพนผวในรปกราฟ เมอ mode > 0 พนผวในรปกราฟจะเปนสตามหมายเลขของ mode ตามตารางท 6.2
mode = 0 พนผวในรปกราฟจะไมมสหรอโปรงแส ง (transparent) mode < 0 พนผวในรปกราฟจะเปนสตามหมายเลขของ |mode| แตเสนแสดง
ขอบเขตของรปกราฟจะไมถกแสดง o type เปนเลขจานวนเตมทใชกาหนดสเกลของรปกราฟ เมอ
type = 0 สเกลทใชวาดกราฟสามมตเปนแบบธรรมดา type = 1 สเกลแบบอตโนมต โดยเสนแสดงขอบเขตจะถกกาหนดโดย คา พารามเตอร ebox type = 2 สเกลแบบอตโนมต โดยเสนแสดงขอบเขตจะถกกาหนดจาก ขอมลท
ใชในการวาดกราฟ (เปนคาโดยปรยาย ) type = 3 สเกลแบบสมมต โดยเสนแสดงขอบเขตจะถกกาหนดโดย คา
พารามเตอร ebox (คลาย type = 1) type=4 สเกลแบบสมมต โดยเสนแสดงขอบเขตจะถกกาหนดจากขอมลทใช
ในการวาดกราฟ (คลาย type = 2) type = 5 ความหมายเหมอนกบ type = 3 แตจะมขนาดใหญกวา type = 6 ความหมายเหมอนกบ type = 4 แตจะมขนาดใหญกวา
o box เปนเลขจานวนเตมทใชกาหนด ลกษณะของกรอบรปภาพ เมอ box = 0 ไมตองแสดงเสนแกนของรปกราฟ box = 1 เหมอนกบ box = 0
box = 2 เฉพาะเสนแกนทอยหลงพนผวของรปกราฟจะถกแสดงออกมา
box = 3 มการสรางกลองขนมาครอบรปกราฟ พรอม ทง ใสชอของเสน แกน (x, y, และ z) ลงไป box = 4 มการสรางกลองขนมาครอบรปกราฟ พรอม ทง ใสชอและสเกลของ
เสนแกนลงไป (เปนคาโดยปรยาย ) ebox เปนเวกเตอรทประกอบไปดวยพารามเตอรหกตวดงน
ebox = [xmin, xmax, ymin, ymax, zmin, zmax]
194
ซงจะถกใชเพอกาหนดขอบเขตของรปกราฟ เมอ o xmin และ xmax คอ คาตาสดและคาสงสดของเสนแกน x o ymin และ ymax คอ คาตาสดและค าสงสดของเสนแกน y o zmin และ zmax คอ คาตาสดและคาสงสดของเสนแกน z
โดยทวไปแลว ebox มกใชในกรณท flag ถกกาหนดใหมคาเปน 1, 3, และ 5 ถาไมม การใช flag ในคาสง plot3d พารามเตอร ebox จะถกเพกเฉย
ตวอยางท 2 กาหนดให ตวแปร x และ y มคา ระหวาง 0 ถง 1 จงวาดกราฟสามมตจากสมการ
( ) ( )z 0.5 cos 2xπ cos 2yπ=
วธทา จากโจทย สามารถวาดกราฟสามมตไดโดยใชชดคาสงของโปรแกรม SCILAB ดงน
-->clf; x = linspace(0, 1, 21);
-->y = linspace(0, 1, 21);
-->z = abs(0.5 * cos(2*%pi*x)' * cos(2*%pi*y));
-->subplot(1, 2, 1); plot3d(x, y, z, flag = [4, 2, 4]); //รปท 6.20 ดานซาย
-->subplot(1, 2, 2); plot3d(x, y, z, alpha = 35, theta = 45, ...
-->flag = [0, 2, 3]); //รปท 6.20 ดานขวา
ผลลพธทไดจากชดคาสงเหลานแส ดงในรปท 6.2025
จากรปท 6.20 ดานซาย ถาตองการใหมการไลโทนสตามขนาดของคาในแกน z กสามารถทาไดโดยการใชคาสง plot3d1 ดงน
-->clf; plot3d1(x, y, z, theta = 35, alpha = 25, flag = [0, 2, 4]);
25 รปท 6.20 ดานขวามรปรางลกษณะเหมอนกบรปพนผวรางแห (mesh surface plot) ดงนนผใชสามาร ถวาดรปพนผวรางแหไดจากคาสงนเชนกน
195
รปท 6.20 ตวอยางรปกราฟแสดงผลลพธจากการ ใชคาสง plot3d
รปท 6.21 ตวอยางรปกราฟแสดงผลลพธจากการใชคาสง plot3d1
ซงจะไดผลลพธตามรปท 6.21
นอกจากนถาตองการทราบความสมพนธระหวางสกบขนาดของคาในแกน z กสามารถทาไดโดยใชคาสง colorbar ซงมรปแบบการใชงานคอ
196
colorbar(umin, umax, [colminmax])
โดยทพารามเตอร umin เปนเลขจานวนจรงของคาตาสดขอ งขนาดของคาในแกน z umax เปนเลขจานวนจรงของคาสงสดของ ขนาดของคาในแกน z colminmax เปนตวเลอกทมรปแบบการใชงาน คอ
colminmax = [1 nb_colors]
เปนเวกเตอรขนาด 1×2 โดยท nb_colors คอจานวนสทจะใชในรปกราฟ
ตวอยางการใชงานคาสงน เชน (ตอเนองจากรปท 6.21)
-->clf; zmin = min(z);
-->zmax = max(z);
-->colorbar(zmin, zmax, [1 30]);
-->plot3d1(x, y, z, theta = 35, alpha = 25, flag = [0, 2, 4]);
ผลลพธทไดแสดงในรปท 6.22 ซงจะมแถบสแสดงความสมพนธระหวางสตางๆ กบขนาดของคา ในแกน z
นอกจากนโปรแกรม SCILAB ยงมคาสงทใชในการวาดภาพสามมตแบบอนอก มากมายตามทแสดงในตารางท 6.6 ตวอยางการใชงานคาสงเหลานเชน
-->clf; u = linspace(-%pi/2, %pi/2, 20);
-->v = linspace(0, 2*%pi, 10);
-->X = cos(u)' * cos(v);
-->Y = cos(u)' * sin(v);
-->Z = sin(u)' * ones(v);
-->subplot(2, 2, 1);
-->plot3d2(X, Y, Z); xtitle('plot3d2'); //รปท 6.23 ดานบนซาย
197
รปท 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;
198
รปท 6.23 ตวอยางรป กราฟสามมตแบบทวไป
-->y = x;
-->subplot(2, 2, 4);
-->fplot3d(x, y, f, alpha=5, theta=30); //รปท 6.23 ดานลางขวา
-->xtitle('fplot3d');
ผลลพธทไดจากชดคาสงเหลานแสดงในรป ท 6.23 สาหรบผสนใจสามารถศกษารายละเอยดการใชงานคาสงเหลานเพมเตมไดในคาสง help
6.3.2 กราฟคอนทวร กราฟคอนทวร (contour plot) หรอกราฟเสนชนความสง เปนกราฟทเกดจากการเฉอนรปกรา ฟสามมตแลวมองจากดานบนลงมาจะไดออกมาเปนเสนชนความสง โดยแตละเสน ชนความสง ทมส
199
เดยวกนจะแสดงถงระดบความสงทเทากนในรปกราฟสามมต การวาดรปกราฟคอนทวรในโปรแกรม SCILAB สามารถทาไดโดยการใชคาสง
contour(x, y, z, nz, [options])
โดยทพารามเตอร x, y, และ z แสดงคาในเสนแกน x, เสนแกน y, และเสนแกน z ตามลาดบ สวน พารามเตอร nz เปนเลขจานวนเตมบวกทใชกาหนดจานวนระดบความสง (หรอจานวนเสน) ทตองการใหแสดงในรปกราฟคอนทวร และพารามเตอร options จะมรปแบบการใชงานคอ
options = [theta, alpha, leg, flag, ebox, zlev]
เมอ theta, alpha, leg, flag, ebox มรปแบบเหมอนกบทกลาวมาแลวขางตน zlev เปนเลขจานวนจรงทใชในการปรบขนาดคาของ เสนแกน z กลาวคอคาของ สมาชก
ทกสมาชกในตวแปรของเสนแกน z จะถกนาไปบวกรวมกบคา zlev กอนทจะ นาคา ของผลลพธทไดไปใชกาหนดขนาดคาของ เสนแกน z ในการแสดงผลของรปกราฟ
ตวอยางเชน ถาตองการวาดรปคอนทวรของกราฟสามมตในรปท 6.21 กสามารถทาไดโดยการใชคาสงตอไปน
-->clf; x = linspace(0, 1, 21);
-->y = linspace(0, 1, 21);
-->z = abs(0.5*cos(2*%pi*x)'*cos(2*%pi*y));
-->contour(x, y, z, 4)
ผลลพธทไดแสดงในรปท 6.24 สงเกตจะพบวาสวนทนนขนมาแตละอนในรปท 6.21 จะแสดงดวยเสนสสเสน (เนองจาก nz = 4) โดยทแตละเส นสจะแสดงคาระดบความสง (หรอขนาดของคาในแกน z) ทเทากน
200
รปท 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);
201
-->param3d(sin(t), cos(t), t/10, 35, 45, "X@Y@Z", [2,3]);
-->xtitle('param3d'); //รปท 6.25 ดานบนซาย
-->subplot(2, 2, 2);
-->param3d1([sin(t), sin(2*t)], [cos(t),cos(2*t)], ...
-->list([t/10, sin(t)], [3,2]), 35, 45, "X@Y@Z", [2,3]);
-->xtitle('param3d1'); //รปท 6.25 ดานบนขวา
-->subplot(2, 2, 3);
-->hist3d(6*rand(6,6));
-->xtitle('hist3d'); //รปท 6.25 ดานลาง ซาย
-->deff("[z] = f(x, y)", "z = sin(x)*cos(y)");
-->t = %pi*[-10:10]/10;
-->subplot(2, 2, 4);
-->fcontour(t, t, f, 4, ebox = [-4 4 -4 4 -1 1], flag = [0 1 4]);
-->xtitle('fcontour'); //รปท 6.25 ดานลางขวา
ผลลพธทไดจากชดคาสงเหลานแสดงในรป ท 6.25
6.4 การวาดกราฟแบบผสม ในการวาดกราฟบางครงมความจาเปนตองวาดกราฟสองแบบผสมกน เพอทจะไดสามารถอธบาย ความหมายของรปกราฟนนไดครบถวน โปรแกรม SCILAB สามารถทจะวาดกราฟลกษณะนได โดยการวาดกราฟทละรปลงไปทบซอนกน ดงแสดงในตวอยางตอไปน
-->clf; x = linspace(0, 1, 21);
-->y = linspace(0, 1, 21);
-->z = 2*abs(cos(2*%pi*x)'*cos(2*%pi*y));
-->rect = [min(x), max(x), min(y), max(y), min(z)-5, max(z)+1];
-->plot3d(x, y, z, theta = 35, alpha = 15, flag = [2,1,4], ebox = rect);
202
รปท 6.25 ตวอยางรปกราฟแสดงผลลพธจากการใชชดคาสง สาหรบวาดกราฟสามมตทใชงานเฉพาะดาน
-->contour(x, y, z, 4, theta = 35, alpha = 15, flag = [1,1,4], ...
-->ebox = rect, zlev = -5);
ผลลพธทไดแสดงในรปท 6.26 ซงจะเหนไดวาการวาดกราฟแบบผสมนไมยงยาก ดงนนผใชสามารถ ทจะวาดกราฟแบบผสมใดๆ กไดโด ยใชคาสงวาดกราฟตางๆ ตามทไดอธบายไวขางตน เพอทจะได รปกราฟในแบบทตองการ
6.5 ตวอยางการวาดกราฟ ในสวนนจะยกตวอยางการวาดกราฟแบบตางๆ เพอใหเขาใจถงขนตอนในการวาดกราฟทมคณสมบต ตามทระบไว ดงตอไปน
203
รปท 6.26 ตวอยางการวาดรป กราฟแบบผสม
ตวอยางท 3 ในเรองการสอสารดจทล (digital communication) ฟงกชนของรปสญญาณทพบบอย คอฟงกชน ซงก (sinc function) ซงมรปแบบตามสมการ
( )sin 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); //ใสเสนกรดสแดงในหนาตางกราฟ
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 ไดดงน
205
รปท 6.28 รปสญญานของฟงกชน ซงกแบบสามมต
-->clf; x = -6:0.5:6;
-->y = -6:0.5:6;
-->[XX, YY] = ndgrid(x, y);
-->d = sqrt(XX.^2 + YY.^2);
-->d(find(d == 0)) = %eps;
-->ZZ = sin(d) ./ d;
-->zmin = min(ZZ);
-->zmax = max(ZZ);
-->colorbar(zmin, zmax, [1, 20]);
-->surf(XX, YY, ZZ);
คาสง ndgrid (บรรทดทสามของชดคาสงน ) จะทาหนาทในการสรางจดพกด (x,y) ทงหมดในชวงคาของเสนแกน x และเสนแกน y ผลลพธทไดจากชดคาสงนแสดงใน รปท 6.28
206
φ
θ
x
y
z
ρ
( )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 ถง π
207
รปท 6.30 ตวอยางรป กราฟทรงกลม
ดงนนเมอเขาใจถงความสมพนธระหวาง ระบบพกดคารทเซยนและระบบพกดทรงกลมแลว กจะทาใหสามารถวาดรปทรงกลมทมความยาวรศมเทาก บ 1 หนวยได โดยใชชดคาสงของโปรแกรม SCILAB ดงน
-->clf;
-->phi = linspace(0, %pi, 16);
-->theta = linspace(0, 2*%pi, 31);
-->rho = 1;
-->[PHI, THETA] = ndgrid(phi, theta);
-->X = rho * cos(THETA) .* sin(PHI);
-->Y = rho * sin(THETA) .* sin(PHI);
-->Z = rho * cos(PHI);
-->plot3d2(X,Y,Z,alpha=60)
ผลลพธทไดแสดงในรปท 6.30
208
ตวอยางท 6 จงวาดรปกราฟพนผวแบบมสของรป ทรงหวงยาง (torus) ทมลกษณะเหมอนกบขนมโดนตบนระบบพกดคารทเซยน โดยกาหนดให มความยาวรศมของรปทรงหวงยาง ในระนาบ x–y เทากบ 1.4 หนวย และใน แนวแกน z เทากบ 0.5 หนวย และจดศนยกลางของรป ทรงหวงยาง อยทจดพกด (x, y, z) = (0, 0, 0)
วธทา กอนอนใหพจารณาสมการของรป ทรงหวงยาง บนระบบพกดคารทเซยน ดงน
( )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);
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 ดานขวา
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
211
รปท 6.32 รปกราฟเสนโคงกลบกหลาบ ( )r 5cos 4θ=
6.6 สรป ในบทนไดอธบายถงการใชคาสงตางๆ ทใชในการวาดกราฟสองมต (เชน คาสง plot, plot2d,
polarplot, contour2d, และ plzr เปนตน) และกราฟสามมต (เชน คาสง plot3d,
countour, และ hist3d) พรอมทง กลาวถง พารามเตอรตางๆ ทใชใน คาสงเหลาน เพอ ใหสามารถนาไปประยกตใชงานไดอยางถกตองและตรง ตามความตองการ
ดงนน จะเหนไดวาโปรแกรม SCILAB สามารถวาดกราฟไดหลายรปแบบจงเหมาะอยางยง สาหรบการนามาใชในการวาดรปกราฟ เพอใชในการนาเสนอผลงานวจยและผลงานทางวชาการ โดยเฉพาะอยางยงงานทางดานวศวกรรมและวทยาศาสตร
6.7 แบบฝกหดทายบท 6.1 กาหนดให y = 4x2 โดยท 1 ≤ x ≤ 100 จงวาดกราฟทมรปแบบตางๆ ดงน
6.1.1) กราฟเชงเสน
212
6.1.2) กราฟลอการทมในแนวแกน x
6.1.3) กราฟลอการทมในแนวแกน y
6.1.4) กราฟลอการทมทงในแนวแกน x และแกน y
6.2 กาหนดให y = 10 log10(3x) โดยท 1 ≤ x ≤ 100
6.2.1) วาดกราฟเชงเสน
6.2.2) วาดกราฟลอการทมทงในแนวแกน x และแกน y
6.2.3) เปรยบเทยบขอแตกตางของกราฟทไดทงสองรป
6.3 กาหนดให y = (ex − e-x)/2 โดยท −10 ≤ x ≤ 10
6.3.1) วาดกราฟเชงเสน
6.3.2) วาดกราฟลอการทมทงในแนวแกน x และแกน y
6.3.3) เปรยบเทยบขอแตกตางของกราฟทไดทงสองรป
6.4 จงวาดกราฟของภาพตดกรวยจากสมการตอไปน
6.4.1) x2 + y2 – 9 = 0
6.4.2) x2 + y2 – 8x + 10y + 5 = 0
6.4.3) x2 – 4x – 2y + 10 = 0
6.4.4) y2 – 2y – 8x + 9 = 0
6.4.5) y2 + 4y + 20x + 4 = 0
6.4.6) x2 + 4y2 – 64 = 0
6.4.7) 9x2 + y2 – 18 = 0
6.4.8) 4x2 + y2 + 8x – 4y – 8 = 0
6.4.9) 5x2 – 2y2 – 10 = 0
6.4.10) 9x2 – 16y2 – 90x + 64y + 17 = 0
6.4.11) 7y2 – 9x2 – 70y – 54x + 31 = 0
6.4.12) 17x2 + 12xy + 8y2 – 20 = 0
6.4.13) 3x2 – xy + 4y2 – 16x – 3y = 0
6.4.14) 153x2 – 192xy + 97y2 – 30x - 40y – 200 = 0
213
6.5 เสนโคงลมาคอน (Limacons) ถกกาหนดโดยสมกา ร ( ) r a 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θ=
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 แตวาดกราฟแบบผสม โดยผสมระหวางกราฟพนผวและกราฟคอนทวร
บทท 7 พนฐานระบบอนพตและเอาตพต ระบบอนพต (input) และเอาตพต (output) หรอระบบ I/O เปนระบบทเกยวของกบการอาน และเขยนขอมลระหวางโปรแกรม SCILAB กบเครองคอมพวเตอร การอานขอมล หมายถงการอานขอมลจากคยบอรดหรอจากไฟล สวนการเขยนขอมล หมายถงการพมพขอมลเพอแสดงออกทางจอภาพของคอมพวเตอรหรอเปนการเขยนขอมลลงไปเกบไวในไฟลกไ ด ในบทนจะอธบายถง คาสงและหลกการในการเขยนโปรแกรม เพอใชในการอาน และเขยนขอมลระหวางโปรแกรม SCILAB
กบเครอง คอมพวเตอร ซงจะชวยทาใหสามารถพฒนา ฟงกชนแบบ ใหมๆ ได
7.1 คาสงพนฐานสาหรบการตดตอระบบอนพตและเอาตพต การเขยนโปรแกรมเพอทาหนาทในการอาน และเขยนขอมลระหวางโปรแกรม SCILAB กบเครองคอมพวเตอรนน สงท ควรคานงถงคอจะตองทราบวามคาสงอะไรบางท ทาหนาทเกยวของกบระบบ อนพตและเอาตพต รวมทงรปแบบก ารเรยกใชงานของคาสงเหลานน ฉะนน ในสวนนจะขออธบาย ถงคาสงพน ฐานในการตดตอระบบ อนพตและเอาตพตดงตอไป น
7.1.1 คาสง input เปนคาสงทใชในการอานคาจากคยบอรดเขามาเกบไวในตวแปร เพอนาไปประมวลผลในโปรแกรม SCILAB รปแบบการใชงานคาสงน คอ
[x] = input(message, ["string"])
216
โดยทพารามเตอร message คอ สายอกขระ (character string) ทตองการใหแสดงผลออกทางหนาตางคาสง "string" (หรอ "s") เปนตวกาหนดวา ขอมลทพารามเตอร x จะเกบไวเปนสายอกขระ x คอ ผลลพธทไดจากคยบอรด ซงเปนไดทงเลข จานวนจรงหรอสายอกขระ
ตวอยางการใชงานคาสงน เชน
-->x = input("How many iterations?")
How many iterations?-->5
x =
5.
-->y = input("What is your name?", "s")
What is your name?-->Piya Kovintavewat
y =
Piya Kovintavewat
7.1.2 คาสง file เปนคาสงทใชในการเปดหรอปดแฟมขอมลหรอไฟล โดยมรปแบบการใชงานทวไปดงน
unit = file('open', filename, [status])
โดยทพารามเตอร 'open' เปนการบอกโปรแกรมใหเปดไฟล filename ขนมาใชงาน filename เปนชอไฟลขอมลทตองการจะเรยกขนมาใชงาน status เปนการกาหนดสถา นะของไฟลทเปดขนม าใชงาน ซงมอย 4 รปแบบคอ
o "new" หมายถงไฟลทเปดขนมาจะตองไมเคยมอยใน สารบบทางาน o "old" หมายถงไฟลทเปดขนมาจะตองมอยแลวใน สารบบทางาน o "unknown" หมายถงไฟลทเปดขนมาจะมอยหรอไมมอยใน สารบบทางานกได
o "scratch" หมายถงไฟลทเปดขนมาจะถกลบทงหลงจากเสรจสนการทางาน
unit เปนเลขจานวนเตมทโปรแกรมใชอางถงชอไฟล filename นน
217
หลงจากเสรจสนการใชงาน ไฟลทเปดขนมาแลว จะตองทาการปดการทางานของไฟลนนดวย เสมอ โดยใชคาสงดงน
file('close', unit)
ในทางปฏบตคาสงทงสองนมกจะใช งานคกนเสมอ นอกจากนคาสง file ยงสามารถใชงานในลกษณะอนไดอก (ลองศกษารายละเอยดการใชงานคาสง file ในคาสง help)
7.1.3 คาสง printf เปนคาสงทใชในการพมพคาของตวแปรออกมาทหนาตางคาสง ซงมรปแบบการใชงานดงน
printf(format, value_1 , ..., value_n)
โดยทพารามเตอร format คอ สายอกขระทตองการใหแสดงผลออกทางหนาตางคาสง value_i เปนตวกาหนดวาจะใหขอมลใดแสดงผลออกมาทหนาตางคาสง
ตวอยางการใชงานคาสงน เชน
-->printf('Result is: alpha = %d", 2.535) //พมพเลขจานวนเตม Result is: alpha = 2
-->printf('Result is:\nalpha = %f", 2.535) //พมพเลขจานวนจรง Result is:
alpha = 2.535000
สงเกตจะพบวาในคาสงแรกจะ มการใชรหสรปแบบ (format) %d ซงเปนตวบอกวาใหแสดงขอมลออกมาในรปของจานวนเตม สวนรหสรป แบบ %f จะเปนตวบอกวาใหแสดงขอมล ออกมาในรปของจานวนจรง รหสรปแบบนจะเหมอนกบรหสรปแบบทวไปทใชในโปรแกรมภาษาซ ตามทแสดงในตารางท 7.1 สวนในคาสงทสอง จะมการใชรหสบงคบการพมพ (escape sequence) \n ซงเปนตวบอกวาใหขนบรรทดใหม รหสบงค บการพมพนจะเหมอนกบรหสบงคบการพมพทวไปทใชในโปรแกรมภาษาซเชนกน ดงแสดงในตารางท 7.2
218
ตารางท 7.1 รหสรปแบบในโปรแกรม SCILAB
รหสรปแบบ คาอธบาย %d แสดงผลเปนเลขจานวนเตมฐานสบแบบมเครองหมาย (signed integer) %u แสดงผลเปนเลขจานวนเตมฐานสบแบบไมมเครองหมาย (unsigned integer) %x หรอ %X แสดงผลเปนเลขจานวนเตมฐานสบหกแบบไมมเครองหมาย %f แสดงผลเปนเลขจานวนจรง %e แสดงผลเปนเลขจานวนจรงในรปของเลขยกกาลง %c แสดงผลตวอกขระ %s แสดงผลสายอกขระ
ตารางท 7.2 รหสบงคบการพมพในโปรแกรม SCILAB
รหสบงคบการพมพ คาอธบาย \n ขนบรรทดใหม \t แทป (tab) ในแนวนอน \v แทปในแนวตง \b เลอนเคอรเซอรไปลบตวอกขระทางซายมอหนงตวอกขระ \r เครองหมาย return เหมอนกบการกดป ม Enter \f ขนหนาใหม \a สงเสยงดงออกลาโพงหนงครง \\ เครองหมาย \ (backslash) \’ เครองหมาย ’ (single quote) \” เครองหมาย ” (double quote) \? เครองหมาย ? (question mark) \ooo พมพตวอกขระทมเลขฐานแปดตรงกบคา ooo \xhh พมพตวอกขระทมเลขฐานสอบหกตรงกบคา hh
ลองศกษาการใชงานคาสง printf จากฟงกชน ทใชสรางตารางรหสแอสก (ASCII code) ในตวอยาง ตอไปน
219
function [] = MyASCIITable()
printf("Generating an ASCII table:\n");
printf("===============================================\n");
for j = 19:9:255
printf('%3d %s %3d %s %3d %s %3d %s %3d %s %3d %s ' + ...
'%3d %s %3d %s %3d %s %3d %s\n',...
j,ascii(j),j+1,ascii(j+1),j+2,ascii(j+2),j+3,ascii(j+3),...
j+4,ascii(j+4),j+5,ascii(j+5),j+6,ascii(j+6),...
j+7,ascii(j+7),j+8,ascii(j+8),j+9,ascii(j+9))
end
printf("===============================================\n");
endfunction
หลงจากเขยนฟงกชนเสรจแลว กใหบนทกลงในไฟลทชอวา MyASCIITable.sci จากนน ใหทาการโหลดชอไฟลนเพอเรยกใชงานฟงกชน MyASCIITable โดยใชคาสง exec หรอ getf
ตวอยาง การใชงาน เชน
-->getf('MyASCIITable.sci')
-->MyASCIITable
Generating an ASCII table:
===========================================================
� � � � � � � � � 19 20 21 22 23 24 25 26 27 28
28 29 30 - 31 32 33 34 " 35 # 36 $ 37 %
37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 .
46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7
55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @
64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I
73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R
82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [
91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d
100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m
109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v
118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127
127 128 € 129 130 ‚ 131 ƒ 132 „ 133 … 134 † 135 ‡ 136 ˆ
136 ˆ 137 ‰ 138 Š 139 ‹ 140 Œ 141 • 142 Ž 143 • 144 • 145 ‘
145 ‘ 146 ’ 147 “ 148 ” 149 • 150 – 151 — 152 ˜ 153 ™ 154 š
220
154 š 155 › 156 œ 157 • 158 ž 159 Ÿ 160 161 ¡ 162 ¢ 163 £
163 £ 164 ¤ 165 ¥ 166 ¦ 167 § 168 ¨ 169 © 170 ª 171 « 172 ¬
172 ¬ 173 - 174 ® 175 ¯ 176 ° 177 ± 178 ² 179 ³ 180 ´ 181 µ
181 µ 182 ¶ 183 · 184 ¸ 185 ¹ 186 º 187 » 188 ¼ 189 ½ 190 ¾
190 ¾ 191 ¿ 192 À 193 Á 194 Â 195 Ã 196 Ä 197 Å 198 Æ 199 Ç
199 Ç 200 È 201 É 202 Ê 203 Ë 204 Ì 205 Í 206 Î 207 Ï 208 Ð
208 Ð 209 Ñ 210 Ò 211 Ó 212 Ô 213 Õ 214 Ö 215 × 216 Ø 217 Ù
217 Ù 218 Ú 219 Û 220 Ü 221 Ý 222 Þ 223 ß 224 à 225 á 226 â
226 â 227 ã 228 ä 229 å 230 æ 231 ç 232 è 233 é 234 ê 235 ë
235 ë 236 ì 237 í 238 î 239 ï 240 ð 241 ñ 242 ò 243 ó 244 ô
244 ô 245 õ 246 ö 247 ÷ 248 ø 249 ù 250 ú 251 û 252 ü 253 ý
� � � � � �253 ý 254 þ 255 ÿ 256 257 258 259 260 261 262
===========================================================
โดยทคาสง ascii จะทาหนาทแปลงรหสแอสกไปเปนตวอกขระของโปรแกรม SCILAB หรอใหในการแปลงตวอกขระของโปรแกรม SCILAB ไปเปนรหสแอสกไดเชนกน ตวอยาง เชน
-->ascii(91)
ans =
[
-->ascii('[')
ans =
91.
7.1.4 คาสง fprintf เปนคาสงททาหนาทคลายกบคาสง printf แตจะทาการพมพคาของตวแปรลงไปเกบไวในไฟล แทนทจะแสดงผลออกมาทหนาตางคาสง รปแบบการใชงานของคาสงนคอ
fprintf(file, format, value_1, ..., value_n)
โดยทพารามเตอร file เปนชอของไฟลทตองการจะใหเกบคาของตวแปร value_i format และ value_i ทาหนาทเหมอนกนกบทใชในคาสง printf
ตวอยางการใชงานคาสงน เชน
221
รปท 7.1 ใชโปรแกรม Notepad ในการเรยกดขอมลภายในไฟล results.txt
-->u = file('open', 'results.txt', 'unknown');
-->for t = 0:%pi/10:%pi
--> fprintf(u, 'time = %6.3f value = %6.3f\n', t, cos(t));
-->end
-->file('close', u);
ผลลพธทไดคอโปรแกรม SCILAB จะทาการสรางไฟลทชอวา results.txt ในสารบบทกาลง ทางานอยซงจะมขอมลทกาหนดโดยคาสง fprintf ปรากฎอย ถาลองใช โปรแกรมเอดเตอรเชน Notepad หรอ WordPad เปดไฟล results.txt ขนมาด กจะพบขอมลตามทกาหนดไวดงแสดงในรปท 7.1
7.1.5 คาสง scanf เปนคาสงทใชในการ รบคาจากคยบอรดมาเกบไวในตวแปร ซงมรปแบบการใชงานดงน
-->printf('Enter x and y in the same line: X Y\n');
Enter x and y in the same line: X Y
222
รปท 7.2 ขอมลภายในไฟล MyData.txt
-->[x,y] = scanf('%f %f')
-->2.3 -3.3 //เวนวรรคหนงชองไฟ ระหวางขอมลแตละตว
y =
- 3.3
x =
2.3
7.1.6 คาสง fscanf เปนคาสงทใชในการอานคาจากไฟลไปเกบไวในตวแปร โดยมรปแบบการใชงาน ตามตวอยาง ทจะแสดงตอไปน เรมตนใหทาการสรางไฟล MyData.txt ในสารบบ c:\ เพอเกบขอมลตวเลข 1 ถง 6 ตามทแสดงในรปท 7.2 โดยใชชดคาสงดงน
--> u = file('open', 'c:\MyData.txt', 'unknown');
-->fprintf(u, '1 2 3\n');
-->fprintf(u, '4 5 6\n');
-->file('close', u);
จากนนให ทาการเปดไฟล MyData.txt แลวใชคาสง fscanf เพอทาการอานขอมลในไฟลน มาเกบไวในตวแปร a, b, และ c โดยเมออานขอมลจากไฟล เสรจแลวกใหทา การปดไฟล ขนตอน ทกลาวมา นสามารถเขยนเปนชดคาสงได คอ
223
-->w = file('open', 'c:\MyData.txt', 'old');
-->aa = []; bb = []; cc = [];
-->for j = 1:2
--> [a b c] = fscanf(w, '%f %f %f');
--> aa = [aa; a];
--> bb = [bb; b];
--> cc = [cc; c];
-->end
-->file('close', w);
ซงเมอทดลองเรยกดขอมลของตวแปร aa, bb, และ cc จะพบวาไดขอมลครบถวนเหมอนกบขอมลทอยใน ไฟล MyData.txt นนคอ
-->[aa bb cc]
ans =
1. 2. 3.
4. 5. 6.
7.1.7 คาสง read เปนคาสงทใชในการอานข อมลจากไฟลมาเกบไวในตวแปร ซงมรปแบบการใชงานดงน
[x] = read(file_desc, m, n, [format])
โดยทพารามเตอร file_desc คอ ตวแปรทใชอางองถงชอของไฟลทตองการจะอานขอมล
m คอ จานวนแถวของขอมลในไฟลทตองการจะอานขอมล (ใช m = -1
ถาตองการใหอานขอมลทกแถว ) n คอ จานวนแนวตง ของขอมลในไฟลทตองการจะอานขอมล format เปนตวเลอกทกาหนดลกษณะการอานขอมลจากไฟลตามรปแบบของ
ภาษาฟอรแทรน (FORTRAN) โดยมรปแบบดงน o iw โดยท i สาหรบเลขจานวนเตม และ w คอจานวนของตวอกขระทยอมใหมได
224
o fw.d โดยท f สาหรบเลขจานวนจรง, w คอจานวนของตวอกขระทยอมใหมได, และ
d คอจานวนของจดทศนยม (d ≥ w+3)
o ew.d โดยท 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 เรมตนจะ อธบายถงตวอยางฟงกชน สาหรบใชในการคานวณหาพนทของรปสเหลยม, สามเหลยม, และวงกลม ดงตอไป น
225
function [] = MyArea()
disp("=============================")
disp(" Area calculation")
disp("=============================")
disp("Select an option:")
disp(" 1 - Rectangular")
disp(" 2 - Triangular")
disp(" 3 - Circular")
disp("=============================")
itype = input("")
select itype
case 1 then
id = "rectangular";
w = input("Enter the width:")
h = input("Enter the height:")
A = w*h;
case 2 then
id = "triangular";
b = input("Enter the width:")
h = input("Enter the height:")
A = b*h/2;
case 3 then
id = "circular";
r = input("Enter the radius:")
A = %pi*r^2;
else
error("Must choose only 1, 2 or 3 ")
end
printf("The area for a "+id+" cross-section is %10.6f .",A)
endfunction
226
เมอเขยนฟงกชนเสรจแลวกใหบนทกลงในไฟลทชอวา MyArea.sci จากนนทาการโหลด ไฟลน เพอเรยกใชงานฟงกชน MyArea โดยใชคาสง exec หรอ getf ตวอยางเชน
-->getf('MyArea.sci')
-->MyArea
=============================
Area calculation
=============================
Select an option:
1 - Rectangular
2 - Triangular
3 - Circular
=============================
-->2
Enter the width:-->10
Enter the height:-->5
The area for a triangular cross-section is 25.000000 .
-->MyArea
=============================
Area calculation
=============================
Select an option:
1 - Rectangular
2 - Triangular
3 - Circular
=============================
-->4
!--error 10000
Must choose only 1, 2 or 3
at line 27 of function MyArea called by :
MyArea
พจารณาตวอยาง ตอไปน ซงเปนฟงกชน สาหรบการสรางตารางขอมล เพอทจะไดเขาใจถงลกษณะการเขยนโปรแกรมเพอตดตอระบบอนพตและเอาตพตมากยงขน
227
function [] = MyTable()
printf("==============================================\n");
printf(" a b c d \n");
printf("==============================================\n");
for j = 1:8
a = sin(2*j);
b = cos(2*j);
c = a + b;
d = a - b;
printf("%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
end
printf("==============================================\n");
endfunction
เมอเขยนฟงกชนเสรจแลว กใหบนทกลงในไฟลทชอวา MyTable.sci จากนน ใหทาการโหลดไฟลนเพอเรยกใชงานฟงกชน MyTable โดยใชคาสง exec หรอ getf ตวอยางเชน
-->getf("MyTable.sci")
-->MyTable
================================================
a b c d
================================================
+0.90930 -0.41615 +4.93151e-001 +1.32544e+000
-0.75680 -0.65364 -1.41045e+000 -1.03159e-001
-0.27942 +0.96017 +6.80755e-001 -1.23959e+000
+0.98936 -0.14550 +8.43858e-001 +1.13486e+000
-0.54402 -0.83907 -1.38309e+000 +2.95050e-001
-0.53657 +0.84385 +3.07281e-001 -1.38043e+000
+0.99061 +0.13674 +1.12734e+000 +8.53870e-001
-0.28790 -0.95766 -1.24556e+000 +6.69756e-001
================================================
สงเกตจะพบวาในฟงกชน MyTable มการใชรหสบงคบการพมพ %+6.5f เพอเปนการบอกวา ใหแสดงเครองหมายบวกหรอลบหนาผลลพธดวย สวนร หสบงคบการพมพ %+6.5e หมายถงใหแสดงผลลพธในรปแบบของเลขยกกาลง
228
รปท 7.3 ขอมลภายในไฟล table1.txt
7.2.1 การอานขอมลจากไฟล ในสวนนจะอธบายตวอยางการใชงานคาสง read เพออานขอมลจากไฟลมาเกบไวในตวแปร สมมตวามไฟลทชอ table1.txt ในสารบบ c:\ ซงมขอมลภายในไฟลตามรปท 7.3 ถาตองการสรางฟงกชนเพอนาขอมลแตละ แนวตง ในไฟลนมาบรรจไวในตวแปร x1, x2, x3, และ x4 กสามารถทาไดดงน
function [x1, x2, x3, x4] = MyReadTable1()
//|------------------------------------------------|
//| The name of a file contains a table. |
//| This function reads the table out of the file. |
//|------------------------------------------------|
printf("Reading a table from a file\n");
printf("===========================\n");
filename = input("Enter filename between quotes:\n");
u = file('open', filename, 'old');
Table = read(u, -1, 4); //ไมรวามขอมลกแถว แตรวามขอมล 4 แนวตง
[n, m] = size(Table);
printf("There are %d columns in the table\n", m);
for j = 1:m
execstr('x' + string(j) + ' = Table(:,j)'); end
file('close', u);
endfunction
229
เมอเขยนฟงกชนเสร จแลวกใหบนทกลงในไฟลทชอวา MyReadTable1.sci จากนนทาการ โหลดไฟลนเพอเรยกใชงานฟงกชน MyReadTable1 โดยใชคาสง exec หรอ getf ตวอยางเชน
-->getf('MyReadTable1.sci')
-->[x1, x2, x3, x4] = MyReadTable1()
Reading a table from a file
===========================
Enter filename between quotes:
-->'c:\table1.txt'
There are 4 columns in the table
x4 =
4.
8.
12.
x3 =
3.
7.
11.
x2 =
2.
6.
10.
x1 =
1.
5.
9.
หมายเหต คาสง Table = read(u, -1, 4) หมายถงใหทาการอานขอมลในไฟลทกาหนดโดย พารามเตอร u สวนอนพตอารกวเมนตตวทสองท มคาเทากบ -1 หมายถงใหโปรแกรม SCILAB อานขอมลทกแถว ในไฟล สวน อนพตอารกวเมนตตวทสาม ทมคาเทากบ 4 หมายถงใหโปรแกรม
SCILAB อานขอมลเปนจานวนหา แนวตง ในไฟล สาหรบคาสง execstr เปนคาสงทบอกใหโปรแกรม SCILAB ทาการประมวลผลคาของ สายอกขระ
นอกจากการใชคาสง read เพออานขอมลจากไฟลแลว ผใชยงสามารถใชคาสง fscanf ไดเชนกน ซงมรปแบบการใชงานดงน
230
function [aa, bb, cc, dd] = MyReadTable2()
//|------------------------------------------------|
//| This function is similar to MyReadTable1() but |
//| using fscanf() instead of read() to read data. |
//|------------------------------------------------|
filename = input("Enter filename between quotes:\n");
u = file('open', filename, 'old');
aa = []; bb = []; cc = []; dd = [];
for j = 1:3
[a, b, c, d] = fscanf(u,'%f %f %f %f');
aa = [aa; a];
bb = [bb; b];
cc = [cc; c];
dd = [dd; d];
end
file('close', u);
endfunction
เมอเขยนฟงกชนเสรจแลวกใหบนทกลงในไฟลทชอวา MyReadTable2.sci จากนนทาการโหลดไฟลนเพอเ รยกใชงานฟงกชน MyReadTable2 โดยใชคาสง exec หรอ getf ตวอยาง เชน
-->getf('MyReadTable2.sci')
-->[aa, bb, cc, dd] = MyReadTable2()
Enter filename between quotes:
-->'c:\table1.txt' //สมมตวาไฟลนอยในสารบบ c:\ และมขอมลตามรปท 7.3
dd =
4.
8.
12.
cc =
3.
7.
11.
231
bb =
2.
6.
10.
aa =
1.
5.
9.
7.2.2 การเขยนขอมลลงในไฟล ในสวนนจะขอยกตวอยางการใช งานคาสง write เพอเขยนขอมลเขาไปเกบไวในไฟล ดงตอไป น สมมตวาตองการ สรางฟงกชน ชอ MyWriteToFile1.sci เพอบนทกคาของตวแปร x, x2,
และ 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
232
รปท 7.4 ขอมลภายในไฟล temp1.txt
เมอเขยนฟงกชนเสรจแลวกใหบนทกลงในไฟลทชอวา MyWriteToFile1.sci จากนนทาการโหลดไฟลนเพอเรยกใชงานฟงกชน MyWriteToFile1 โดยใชคาสง exec หรอ getf ตวอยางเชน
-->getf('MyWriteToFile1.sci')
-->MyWriteToFile1
Printing to a file
==================
Enter file to write to (between quotes):
-->'c:\temp1.txt'
-->
ผลลพธทไดคอขอมลทตองการจะถกเขยนเขาไปเกบไวในไฟลชอ temp1.txt ซงเมอใชโปรแกรม Notepad เปดไฟลนกจะไดตามรปท 7.4
นอกจากการใชคาสง write เพอเขยนขอมลลงไปเกบไวในไฟล แลว ผใชยงสามารถใชคาสง fprintf ไดเชนกน โดยมรปแบบการเรยกใชงานทแตกตาง กนเลกนอยดงแสดงในตวอยางตอไปน (ศกษารายละเอยดการใชงานคาสง write และ fprintf ไดจากคาสง help)
233
function [] = MyWriteToFile2()
//|---------------------------------------------|
//| This function write the data into a file. |
//|---------------------------------------------|
printf("Printing to a file\n");
printf("==================\n");
filname = input("Enter file to write (between quotes):\n");
u = file('open', filname, 'new');
printf("=====================================\n");
fprintf(u, "=====================================\n");
printf(" a b c d \n");
fprintf(u, " a b c d \n");
printf("=====================================\n");
fprintf(u, "=====================================\n");
for j = 1:10
a = sin(2*j);
b = cos(2*j);
c = a + b;
d = a - b;
printf("%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
fprintf(u,"%+6.5f %+6.5f %+6.5e %+6.5e\n", a, b, c, d);
end
printf("=====================================\n");
fprintf(u, "=====================================\n");
file('close', u)
endfunction
เมอเขยนฟงกชนเสรจแล วกใหบนทกลงในไฟลทชอวา MyWriteToFile2.sci จากนนทาการโหลดไฟลนเพอเรยกใชงานฟงกชน MyWriteToFile2 โดยใชคาสง exec หรอ getf ตวอยางเชน
-->getf('MyWriteToFile2.sci')
-->MyWriteToFile2
234
รปท 7.5 ขอมลภายในไฟล temp2.txt
Printing to a file
==================
Enter file to write (between quotes):
-->'c:\temp2.txt'
================================================
a b c d
================================================
+0.90930 -0.41615 +4.93151e-001 +1.32544e+000
-0.75680 -0.65364 -1.41045e+000 -1.03159e-001
-0.27942 +0.96017 +6.80755e-001 -1.23959e+000
+0.98936 -0.14550 +8.43858e-001 +1.13486e+000
-0.54402 -0.83907 -1.38309e+000 +2.95050e-001
-0.53657 +0.84385 +3.07281e-001 -1.38043e+000
+0.99061 +0.13674 +1.12734e+000 +8.53870e-001
-0.28790 -0.95766 -1.24556e+000 +6.69756e-001
-0.75099 +0.66032 -9.06705e-002 -1.41130e+000
+0.91295 +0.40808 +1.32103e+000 +5.04863e-001
================================================
ซงผลลพธทไดนจะถกนาไปเกบไว ในไฟลทชอวา temp2.txt ในสารบบ c:\ ดงนน ถาเรยกดขอมลในไฟลนโดยใชโปรแกรม Notepad กจะไดผลลพธตามรปท 7.5
235
7.3 สรป ในบทนไดอธบายถงรปแบบการใชงานคาสงตางๆ เชน คาสง input, file, read, write,
printf, และ scanf เปนตน เพอใชในการตดตอระบบอนพตและเอาตพต ซงเปนระบบทเกยวของกบการอาน และเขยนขอมลระหวางโปรแกรม SCILAB กบเครองคอมพวเตอร กลาวคอผใชสามารถทจะอานขอมลจากไฟลมาเกบไวในตวแปร ทใชภายในโปรแกรม SCILAB หรอเขยนขอมลคาของตวแปรจากโปรแกรม SCILAB เขาไปเกบไวในไฟลกได ดงนนเมอเขาใจถงลกษณะ การใชงานคาสงตางๆ ทใช ในการตดตอ ระบบอนพตและเอาตพตของโปรแกรม SCILAB แลว กจะทาใหสามารถออกแบบและพฒนาฟงกชนใหมๆ ใหมความสามารถในการโตตอบกนระหวางตวโปรแกรม SCILAB กบผพฒนา โปรแกรมได
7.4 แบบฝกหดทายบท 7.1 จงเขยนโปรแกรมเพอหาผลลพธของ การบวก การลบ การคณ และการหาร ของเลขสอง
จานวน x และ y โดยใหตวโปรแกรมรบคาของตวแปร x และ y จากคยบอรด โดยใชคาสง input และแสดงผลลพธทไดออกมาทหนาตางคาสง ผานทางคาสง printf
7.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
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
บทท 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
238
function [x1, x2] = MyRoot(a, b, c) //บรรทดท 1 num1 = -b + sqrt(b^2 - 4*a*c); //บรรทดท 2 num2 = -b - sqrt(b^2 - 4*a*c); //บรรทดท 3 den = 2*a; //บรรทดท 4 x1 = num1/den; //บรรทดท 5 x2 = num2/den; //บรรทดท 6 endfunction //บรรทดท 7
รปท 8.1 รายละเอยดชดคาสงภายใน ไฟลฟงกชน MyRoot.sci
เมอเขยนโปรแกรมเสรจแลวกทาการ บนทกฟงกชนนลงในไฟลทชอ วา MyRoot.sci จากนนใหทาการโหลดชอไฟลนเพอเรยกใชงานฟงกชน นโดยใชคาสง exec หรอ getf ดงน
-->getf('MyRoot.sci');
-->a = 1; b = -3; c = 2;
-->[x1, x2] = MyRoot(a, b, c) x2 =
1.
x1 =
2.
ซงจะไดผลลพธถกตองตามทตองการ
ในการหาขอผดพลาดภายในตวโปรแกรม ขนตอนแรกคอ ผใชจะตองทาการขดจงหวะ (interruption) การประมวลผลของโปรแกรมเพอตรวจสอบดคาของตวแปรตางๆ ณ เวลาขณะนนวามคาเปนไปตามท คาดหวงไวจากตวโปรแกรมหรอไม ถาผลลพธทไดผดไปจากทคาดหวงไวแสดงวาอาจจะมขอผดพลาดเกดขนภายในตวโปรแกรม กอนจะถงตาแหนงท ทาการขดจงหวะ แตถา หากผลลพธทไดเปนไปตามทคาดหวงไวกแสดงวา ไมมขอผดพลาดภายในตวโปรแกรม กอนทจะถงตาแหนงท ทาการขดจงหวะ ในทางปฏบตการขดจงหวะโปรแกรมสามารถทาได 3 วธ คอ
1) กดปม Ctrl-C จากคยบอรด 2) ใชคาสง setbpt (มาจากคาวา set breakpoint) ทหนาตางคาสง 3) ใชคาสง pause ใสเขาไปในตวโปรแกรม กอนจะทาการประมวลผล
239
ขอแตกตางทเหนไดชดระหวางคาสง setbpt และ pause คอคาสง setbpt จะไมไปเปลยนแปลงตวโปรแกรมทพฒนาขนมา ในขณะทคาสง pause จะไปเปลยนแปลงตวโปรแกรมเนองจากคาสง pause จะตองถกใสเขาไปในตวโปรแกรมนนกอนจะทาการประมวลผล
8.1.1 คาสง setbpt คาสง setbpt เปนคาสงท ใชในการกาหนดตาแหนงของ จดพก26 (breakpoint) วาจะใหอยท บรรทดใดในตวโปรแกรมเพอทวาเวลาประมวลผลโปรแกรมนนแลว ตวโปรแกรมจะมาหยดแบบชวคราว ณ บรรทดทมจดพก เพอใหผใชสามารถเปลยนแปลงคาพารามเตอรหรอ ตรวจสอบความถกตองของตวโปรแกรมตงแตบรรทดแรก (หรอบรรทดทมจดพกกอนหนาน ) จนถงบรรทดกอนทจะมจดพกนนได ใหพจารณาชดคาสง ตอไปนจะไดเขาใจถงหลกการใชงานคาสง setbpt
-->clear;
-->getf('MyRoot.sci');
-->a = 1; b = -3; c = 2;
-->setbpt('MyRoot', 5) //บรรทดทหาในโปรแกรม MyRoot จะยงไมถก นาไปประมวลผล
ชดคาสงนจะทาการลบขอมลทงห มดในหนาตางคาสง โดยใชคาสง clear จากนนกทาการโหลด ไฟล MyRoot.sci เพอเรยกใชงานโปรแกรม MyRoot พรอมทง กาหนดคาของตวแปร a, b, และ c สวน คาสงสดทายเปนการ กาหนดตาแหนงของจด พกใหอยในบรรทดทหา ภายในโปรแกรม MyRoot หลงจากนน ถาทาการประมวลผลโปรแกรม MyRoot จะไดผลดงน
-->[x1, x2] = MyRoot(a, b, c) Stop after row 5 in function MyRoot :
-1-> //เครองหมายแสดงระดบการขดจงหวะ ณ ระดบท 1
ผลลพธทไดคอโปรแกรม MyRoot จะถกขดจงหวะแบบชวคราว ณ บรรทดทหาของตว โปรแกรม MyRoot (นนคอ บรรทดทหาจะยงไมถก นาไปประมวลผล) โดยจะแสดงเครองหมาย Interruption
26 คาสงในบรรทดทมจดพก จะยงไมถกนาไปประมวลผล
240
prompt27 “-1->” เพอเปนการบอกวาตอนนโปรแกรม MyRoot ไดอยทระดบท 1 ของการขดจงหวะ ซง ณ ตาแหนงนผใชสามารถตรวจสอบความถกตองของขอมลตงแตบรร ทดทหนงจนถงบรรทดทสได ตวอยางเชน ผใชสามารถเรยกดคาพารามเตอรตางๆ ทไดมการกาหนดภายใน โปรแกรม MyRoot ตงแตบรรทดทหนงจนถงบรรทดทส ซงถาพารามเตอรเหลานมคาตรงตามท คาดหวงไวกแสดงวาคาสงทงหมดตงแตบรรทดทหนงจนถงบรรทดทสมความถกตอง เ ชน
-1->[num1 num2 den]
ans =
4. 2. 2.
-1->[x1 x2]
[x1 x2]
--error 4
undefined variable : x1 //ตวแปร x1 อยใน คาสงบรรทดทหาซงยงไมไดถกนาไปประมวลผล
ผลลพธทไดแสดงใหเหนวาผใชสามารถเรยกดคาของพารามเตอร num1, num2, และ den ไดและมผลลพธตามทคาดหวงไว อยางไรกตาม ณ จดน ผใชยงไมสามารถเรยกดคาของพารามเตอร
x1 และ x2 ไดเนองจากโปรแกรม MyRoot ยงไมได ทาการประมวลผลคาสงในบรรทดทหาและบรรทดหก (ดรปท 8.1)
8.1.2 คาสง resume และ return จากตวอยาง ในหวขอ 8.1.1 ถาตองการใหโปรแกรม MyRoot ทางานตอไปจน จบโปรแกรม กสามารถทาไดโดยใชคาสง resume28 ดงแสดงตอไปน
27 ในหนงโปรแกรมสามารถมระดบของการขดจงหวะ (level of interruption) ไดหลายระดบ ถาภายในตวโปรแกรมนนมจด พก (breakpoint) มากกวาหนงจด นอก จากนผใชยงสามารถเรยกดคาของพารามเตอรตางๆ ทอย ในระดบของการขดจงหวะทระดบตากวาไดทงหมด หมายเหต ขณะทอยทระดบของการขดจงหวะ ณ ระดบหนง การทางานโดยใชคาสงตางๆ ทระดบของกา รขดจงหวะน จะไมมผลกระทบตอคาของตวแปรใดๆ ทอยใ นระดบของการขดจงหวะทระดบตากวา 28 ในกรณทโปรแกรมมระดบของการขดจงหวะหลายๆ ระดบ คาสง resume จะทาหนาทในการลดระดบของการขดจงหวะไดเชนกน
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
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
243
function [x1, x2] = MyRoot2(a, b, c) //บรรทดท 1
num1 = -b + sqrt(b^2 - 4*a*c); //บรรทดท 2
num2 = -b - sqrt(b^2 - 4*a*c); //บรรทดท 3
den = 2*a; //บรรทดท 4
pause; //บรรทดท 5
x1 = num1/den; //บรรทดท 6
x2 = num2/den; //บรรทดท 7
endfunction //บรรทดท 8
รปท 8.2 รายละเอยดชดคาสงภายในโปรแกรม MyRoot2.sci
8.1.4.3 คาสง delbpt เปนคาสงทใชในการลบจด พกออกจากตวโปรแกรม ตวอยาง เชน
-->delbpt('MyRoot', 5)
-->dispbpt
-->
จะเหนไดวาหลงจากลบจด พกแลว เมอใชคาสง dispbpt กจะไมพบอะไร
8.1.4.4 คาสง whereami ในระหวาง การประมวลผลของตวโปรแกรม ถากดปม Ctrl-C หรอมคาสง pause อยภายในตวโปรแกรมเพอทาหนาทขดจงหวะการประมวลผลของโปรแกรม ผใชสามารถทจะหาตาแหนงของการขดจงหวะไดโดยใชคาสง whereami ดงแสดงในตวอยางตอไปน
ใหพจารณาฟงกชน MyRoot2.sci ตามรปท 8.2 ซงมคาสง pause อยในบรรทดทหา เมอเรยกใชงานโปรแกรมนจะได ผลลพธคอ
-->exec('MyRoot2.sci');
-->a = 1; b = -3; c = 2;
244
-->[x1, x2] = MyRoot2(a, b, c)
-1->
จะพบวาโปรแกรม MyRoot2 ถกขดจงหวะการประมวลผลแตไมรวา ถกขดจงหวะ ณ บรรทดใด ในกรณนถาตองการทราบวาโปรแกรม MyRoot2 ถกขดจงหวะทบรรทดใดกสามารถทาไดโดยใชคาสง whereami ดงแสดงตอไปน
-1->whereami
whereami called under pause
pause called at line 6 of macro MyRoot2
-1->[num1 num2 den]
ans =
4. 2. 2.
-1->[x1 x2] [x1 x2]
!--error 4
undefined variable : x1
ผลลพธทไดแสดงใหทราบวาโปรแกรม MyRoot2 ถกขดจงหวะโดยคาสง pause เมอประมวลผลมาจนถงบรรทดทหก (คาสงบรรทดทหกยงไมถกนาไปประมวลผล ) ดงนนจงสามารถเรยกดคาของ ตวแปร num1, num2, และ den ได แตไมสามารถเรยกดคาของตวแปร x1 และ x2
8.1.4.5 คาสง where คาสงนทาหนาทคลายกบคาสง whereami เพยงแตจะบอกรายละเอยดทงหมดในรปของตวแปร เวกเตอร ดงแสดงในตวอยางตอไปน
-1->[linenum, mac] = where()
mac =
!pause !
! !
!MyRoot2 !
linenum =
0.
6.
245
ตารางท 8.1 ตวอยางคาสงพน ฐานสาหรบจดการขอผดพลาด ฟงกชน คาอธบาย
error แสดงขอความออกทางหนาตางคาสง แลวหยดการประมวลผลโปรแกรม
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
246
บทท 9 ตวอยางการประยกตใชงาน ในบทนจะ แสดงตวอยางการใชโปรแกรม SCILAB ในการแกไขปญหาทาง คณตศาสตรลกษณะตาง ๆ เชน การใชงานเวกเตอรและเมทรกซตรรกะ, การดาเนนการเชงสญลกษณ, การหาตวคณรวมนอยและตวหารรวมมาก , การแยกตวประกอบของพหนาม, การลดรปพหนาม, การหาปรพนธจากดเขต , และการแกสมการอนพนธอนดบหนง เปนตน เพอใหผอานทราบถงค วามสามารถของโปรแกรม SCILAB ในการทจะนามาประยกตใชในการเรยนการสอน (ทงในระดบมธยมศกษาและระดบ อดมศกษา) และการทางานวจย โดยเฉพาะงานทางดานวศวกรรมและวทยาศาสตร
9.1 การใชงานเวกเตอรและเมทรกซตรรกะ ตวดาเนนการตรรกะ (logical operator) ไดแก เครองหมาย AND “&”, เครองหมาย OR “|”, และเครองหมาย NOT “~” เปนตวดาเนนการทใชเชอมความสมพนธระหวางคาของตวแปรทเกดขน โดยตวดาเนนการสมพนธ (relational operator) เชน เครองหมายมากกวา “>”, เครองหมายนอยกวา “<”, เครองหมายมากกวาหรอเทาก บ “>=”, เครองหมายนอยกวาหรอเทากบ “<=”, เครองหมายเทากบ “==”, และเครองหมายไมเทากบ “<>” (หรอ “~=”) ถาความสมพนธสอดคลองกนผลลพธทไดกจะมคาเทากบ T (เปนจรง) หรอมคาทางตรรกะเทากบ คา 1 แตถาความสมพนธไมสอดคลอง กนผลลพธท ไดกจะมคาเทากบ F (เปนเทจ) หรอมคาทางตรรกะเทากบ คา 0 โดยทวไปเวกเตอรหรอเมทรกซของขอความแสดงการเปรยบเทยบ (comparison statement) สามารถทจะถกสรางไดเชนเดยวกบการสรางเวกเตอรหรอเมทรกซของคา สเกลารหรอสญลกษณทวไป ตามทไดอธบายในบทท 2 ตวอยางเชน
248
-->v = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2 2 ~= 2]
v =
F T F T F T F
ผลลพธทไดคอเวกเตอร v ทมสมาชกทงหมด เปนตวแปรบลน (Boolean) หรอผลลพธทไดจากการเปรยบเทยบ โดยทวไป ตวแปรลกษณะนจะเรยกกนวา เวกเตอรตรรกะ (logical vector)
ในสวนตอไปนจะกลาวถงการดาเนนการทางค ณตศาสตรกบเวกเตอรและเมทรกซ ตรรกะ ดงแสดงในตวอยาง ตอไปน
-->x = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2];
x =
F T F T F T
-->2*x
ans =
0. 2. 0. 2. 0. 2.
-->2*[0 1 0 1 0 1] ans =
0. 2. 0. 2. 0. 2.
ผลลพธทไดแสดงใหเหนวา ผลคณของคาสเกลารกบตวแปรบลนทเปนจรงจะมคาเทากบคา สเกลารนนสวนผลคณของคา สเกลารกบตวแปรบลนทเปนเทจจะมคาเทากบคา ศนย ดงนนสามาร ถทจะสรปไดวาเมอนาเวกเตอรและเมทรกซตรรกะมาดาเนนการทางคณตศาสตรกบคา สเกลาร เวกเตอรและเมทรกซเหลานสามารถแทนไดดวย เวกเตอรและเมทรกซของคาสเกลารทมสมาชกเปนคา 0 กบคา 1 โดยทคา 0 จะใชแทนตวแปรบลนทเปนเทจ และคา 1 จะใชแทนตวแปรบลนทเปนจรง เพราะฉะนนจากตวอยางขางตนจะไดวา เวกเตอร x มคาเทยบเทากบเวกเตอร [0 1 0 1 0 1]
เมอเขาใจถงหลกการพนฐาน ในการดาเนนการทางคณตศาสตรกบเวกเตอรและเมทรกซตรรกะของโปรแกรม SCILAB แลว กจะชวยทาใหสามารถนา เวกเตอรและเมทรกซตรรกะมาประยกตใชงานในลกษณะตางๆ ได อยางถกตอง ตวอยาง เชน
-->v = [1 > 2 1 < 3 2 >= 3 3 <= 3 2 == 3 1 <> 2];
-->v + [1 2 3 4 5 6] //เวกเตอร v เปรยบเสมอนมคาเทากบ v = [0 1 0 1 0 1]
ans =
1. 3. 3. 5. 5. 7.
249
-->v .* [1 2 3 4 5 6] ans =
0. 2. 0. 4. 0. 6.
เมทรกซตรรกะ คอ เมทรกซทสมาชกทงหมดภาย ในเมทรกซเปนตวแปรบลน (T หรอ F) ในทานองเดยวกนผใชสามารถดาเนนการทางคณตศาสตรกบเมทรกซ ตรรกะไดเหมอนกบเวกเตอร ตรรกะ ดงแสดงในตวอยางตอไปน
-->A = [1 2; 3 4] //เมทรกซคา สเกลาร
A =
1. 2.
3. 4.
-->B = [1 < 2 2 > 3; 2 == 3 2 <> 3] //เมทรกซตรรกะเทยบเทากบเมทรกซ [1 0; 0 1]
B =
T F
F T
-->A + B ans =
2. 2.
3. 5.
-->A .* B ans =
1. 0.
0. 4.
9.1.1 การใชงานเวกเตอรและเมทรกซตรรกะสาหรบวาดรป กราฟ เวกเตอรและเมทรกซตรรกะมประโยชนมากในการชวยวาด รปกราฟแบบตางๆ ดงแสดงตอไปน
9.1.1.1 การแกไขปญหาคาอนนต ในกรณทขอมลทจะนามาใชในการวาดรปกราฟมคาทเปนคาอนนต (infinity) รวมอยดวย ถา วาดรปกราฟโดยใชขอมลนกจะ ไดรปกราฟทไมสวยงาม ตวอยาง เชน จากคณสมบตของฟงกชนตรโกณมต
จะไดวา tan(x) = sin(x)/cos(x) = ±∞ เมอ x = ±nπ/2 สาหรบ n = 1, 2, 3, ... ทเปน
250
รปท 9.1 รปกราฟของฟงกชนตรโกณมต tan(x)
จานวนเตมบวกเนองจาก cos(x) = 0 ดงนน ถาตองการวาดรปกราฟของฟงกชน tan(x) โดยท
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);
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 มคาเปนคาอนนต ดงแสดง ในตวอยางตอไปน
252
รปท 9.3 รปกราฟของฟงกชน sin(x)/x หลงจากปรบคาของตวสวนทมคาเปนคาศนย
-->x = [-15:0.1:15];
-->y = sin(x)./x;
--error 27
division by zero...
วธการแกปญหา การหารคาจานวนจรงดวยคาศนยในโปรแกรม SCILAB สามารถทาไดโดยการแทนคาตวสวน (denominator) ทมคาเปนคาศนยดวยคา %eps = 2.220D-16 วธการหาตาแหนงของตวสวน ทมคาเปนคาศนยสามา รถทาไดหลายวธ เชน การใชคาสง find หรอการใชคณสมบตของเวกเตอรตรรกะ ดงแสดงในตวอยาง ตอไปน
-->clf; x = [-15:0.1:15];
-->x = x + (x == 0)* %eps; //ปรบคา ของตวแปร x
-->y = sin(x) ./ x;
-->plot(x, y)
-->xtitle('y = sin(x)/x', 'x', 'y');
ผลลพธทไดแสดงในรปท 9.3
253
รปท 9.4 รปกราฟของฟงกชน sin(x)
9.1.1.3 การสรางกราฟแบบไมตอเนอง
ในการทางานบางครงมความจาเปนตองเปลยนแปลงรปกราฟ แบบตอเนอง (continuous graph)
ใหอยในรป กราฟแบบไมตอเนอง (discontinuous graph) เพอนาเสนอผลการทดลองตามทกาหนด ตวอยางเชน รปกราฟของฟงกชนตรโกณมต sin(x) เปนกราฟแบบตอเนองซงมคาทงดานบวก และดานลบตามรปท 9.4
-->clf; x = [-15:0.1:15];
-->y = sin(x);
-->plot(x, y)
--> xtitle('y = sin(x)', 'x', 'y');
คณสมบตของเวกเตอรตรรกะสามารถทจะถกนามาใชในการเปลยนรปกราฟนใหเปนกราฟแบบไม ตอเนอง เชน เปลยนใหเปนรปกราฟทแสดงผลเฉพาะคาบวกของสญญาณ ดงแสดงในตวอยางตอไป น
254
รปท 9.5 รปกราฟของฟงกชน sin(x) ทแสดงผลเฉพาะคาบวก
-->clf; x = [-15:0.1:15];
-->y = sin(x);
-->y = y .* (y >= 0);
-->plot(x, y)
-->xtitle('Modified function of sin(x)', 'x', 'y');
ผลลพธทไดแสดงในรปท 9.5 ซงเปนรปสญญาณทพบมากในงานทางดานวศวกรรมไฟฟา เชน รปสญญาณของวงจรเรยงกระแสตรงแบบครงคลน (half-wave rectifier) เปนตน
9.1.1.4 การขรบขอมลบางสวนของกราฟ
ในทานองเดยวกนกบหวขอท 9.1.1.3 ผใชสามารถทจะขรบหรอเลม (clip) ขอมลทแสดงผลบางสวน ของรปกราฟไดโดยใชคณสมบตของเวกเตอรตรรกะ ดงแสดงในตวอยางตอไปน
-->clf; x = [-15:0.01:15];
-->y = sin(x);
255
รปท 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
จากตวอยาง ตางๆ ทแสดงขางตนแสดงใหเหนวาเวกเตอรและเมทรกซตรรกะสามารถทจะนามาประยกตใชในการวาดรปกราฟแบบตางๆ ได ตรงตามความตองการ
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
257
-->addf('x+2', 'y-3') //การบวกเชงสญลกษณ ans =
x+y-1
-->subf('x+2', 'y-3') //การลบเชงสญลกษณ ans =
x-y+5
-->mulf('x+2', 'y-3') //การคณเชงสญลกษณ ans =
(x+2)*(y-3)
-->ldivf('x+2', 'y-3') //การหารซายเชงสญลกษณ ans =
(x+2)\(y-3)
-->rdivf('x+2', 'y-3') //การหารขวาเชงสญลกษณ ans =
(x+2)/(y-3)
9.2.2 ฟงกชน cmb_lin เปนฟงกชนททาหนาทในการสรางสมการเชงเสนเชงสญลกษณ (symbolic linear equation) โดยมรปแบบการเรยกใชงานคอ
z = cmb_lin(a, x, b, y)
ผลลพธทไดคอ z = a*x – b*y เมอพารามเตอร z, a, x, b, และ y เปนสายอกขระ ตวอยาง เชน
-->z = cmb_lin('3', 'x', '2', 'y')
z =
3*x-2*y
-->z = cmb_lin('A', 'x^2+x+1', '2*B', '2*y-1')
z =
A*(x^2+x+1)-2*B*(2*y-1)
258
9.2.3 ฟงกชน eval และ evstr เปนฟงกชนททาหนาทในการคานวณหาคาผลลพธของสมการ เชงเสนเชงสญลกษณทสรางขน เมอกาหนดคาจานวนจรงใหกบสญลกษณทใชในสมการเชงเสน ตวอยางเชน
-->y = cmb_lin(mulf('2', 'x'), 'x^2 - 1', addf('3','2*x'), 'x^3') y =
2*x*(x^2-1)-(2*x+3)*x^3 //ตวแปร y เปนสายอกขระ
-->x = 3; //กาหนดใหตวแปร x มคาเทากบค า 3
-->eval(y)
ans =
- 195. //ผลลพธทไดคอ ( ) ( ) 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.
259
9.2.4 ฟงกชน trianfml เปนฟงกชนททาหนาทในการทา symbolic triangularization ของเมทรกซ นนคอการทาใหสมาชกของเมทรกซทอยใตเสนทแยงมม หลก (main diagonal) มคาเปน คาศนย หรออาจจะกลาวไดวาเปน การทาใหเมทรกซเชงสญลกษณเปนเมทรกซสามเหลยมดานบน (upper triangular matrix) โดยวธทางคณตศาสตรทเรยกวาการดาเนนการตามแถวขนมลฐาน (elementary row operation) ตวอยางเชน (ดรายละเอยดเพมเตมในหวขอท 2.3)
-->A = ['a11', 'a12'; 'a21', 'a22']
A =
!a11 a12 !
! !
!a21 a22 !
-->B = trianfml(A)
B =
!a21 a22 !
! !
!0 a21*a12-a11*a22 !
-->a11 = 1; a12 = 2; a21 = 3; a22 = 4;
-->evstr(A)
ans =
1. 2.
3. 4.
-->evstr(B)
ans =
3. 4.
0. 2.
9.2.5 ฟงกชน solve เปนฟงกชนททาหนาทในการหาผลเฉลยเชงสญลกษณ (หาคาของตวแปร x) ของสมการทอยในรปของเมทรกซ Ax = b โดยท b เปนเวกเตอรเชงสญลกษณ และ A เปนเมทรกซสามเหลยมดานบนเชงสญลกษณ ตวอยางเชน
260
-->A = ['a11', 'a12'; '0', 'a22']
A =
!a11 a12 !
! !
!0 a22 !
-->b = ['b1'; 'b2']
b =
!b1 !
! !
!b2 !
-->x = solve(A, b)
x =
!a11\(b1-a12*(a22\b2)) !
! !
!a22\b2 !
-->a11 = 1; a12 = 1; a22 = 2; b1 = 2; b2 = 5;
-->evstr(x)
ans =
- 0.5
2.5
จากตวอยาง ทแสดงขางตนพบวาโปรแกรม SCILAB สามารถทางานกบขอมลเชงสญลกษณไดอยางมประสทธภาพ ซงจะชวยทาใหนกพฒนาโปรแกรมสามารถ ทจะพฒนาโปรแกรมแบบใหมๆ ขนมา ใชงานไดอยางมประสทธภาพ
9.3 ตวคณรวมนอย และตวหารรวมมาก ในสวนนจะแสดงการใชงานคาสงของ โปรแกรม SCILAB สาหรบการหาคาตวคณรวมนอย (least
common multiple) และตวหารรวม มาก (great common divisor) ซงจะเปนประโยชนมากในการแกไขปญหาทางคณตศาสตร
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. //มจดทศนยมตามหลงตวเลขแสดงวาเปน เลขจานวนจรง
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 ซงมรปแบบการใชงานคอ
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 ยงสามารถใชหาตวหารรวม มากของพหนามไดเชนกน ดงแสดงในตวอยาง ตอไปน
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
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
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)
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
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 เปนคาสงทใชในการจดรปผลบวกของพหนามทอยในรปของเศษสว น ใหเปนผลบวกของพหนามทมตวสวนรวม เหมอนกนทกพจน โดยมรปแบบการเรยกใชงานดงน
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
270
-->[n, d] = cmndred([x – 1, x + 2], [x - 3 x - 3])
d =
- 3 + x
n =
- 1 + x 2 + x
-->[n, d] = cmndred([x - 1 x + 2 x - 3], [x - 3 x + 2 x - 3])
d =
2 - 6 - x + x
n =
2 2 2 - 2 + x + x - 6 - x + x - 6 - x + x
9.4.3.2 คาสง pdiv เปนคาสงทใช ในการคานวณหาผลลพธทไดจากการหารพหนาม p1 ดวยพหนาม p2 ซงมรปแบบการเรยกใชงานดงน
[r, q] = pdiv(p1, p2)
เมอ r คอผลลพธทไดจากการหาร และ q คอเศษทไดจากการหาร ตวอยางเชน
-->x = poly(0, 'x');
-->p1 = (x^2 + 1)*(x - 1)
p1 =
2 3 - 1 + x - x + x
-->p2 = x - 1
p2 =
- 1 + x
-->[r, q] = pdiv(p1, p2)
q =
2 1 + x
271
r =
0.
-->[r, q] = pdiv((x^3 + 3*x^2 - 3*x + 5), (x + 2))
q =
2 - 5 + x + x
r =
15.
9.4.3.3 คาสง coffg เปนคาสงทใชใน การหาคาอนเวอรสการคณของเมทรกซพหนาม ซงมรปแบบการเรยกใชงานดงน
[MI, d] = coffg(M)
เมอ M คอเมทรกซพหนามทตองการหาคาอนเวอรส การคณ (ตองเปนเมทรกซจตรสเทานน ), MI คออนเวอรสการคณของเมทรกซ M, และ d คอตวหารรวมของเมทรกซ MI เพอทวา
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
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.
273
-->M = [6*x^3 + 4*x^2 + 2*x + 1, 3*x^2 - 5; -x^2 + 3, 3*x^3 + 2*x^2 + x]
M =
2 3 2 1 + 2x + 4x + 6x - 5 + 3x
2 2 3 3 - x x + 2x + 3x
-->C = coeff(M)
C =
1. - 5. 2. 0. 4. 3. 6. 0.
3. 0. 0. 1. - 1. 2. 0. 3.
จากผลลพธจะเหนไดวาในกรณทเปนการหาคาส มประสทธของเมทรกซพหนาม คาสงนจะนาเอา พหนามในแตละแถวมาหาคา สมประสทธ โดยจะแสดงคาสมประสทธของพหนามทมดกรนอยทสดในแตละแนวตง (เชน ในทนมสองแนวตงกจะไดเปน แนวตงทหนง แนวตงท สอง, แนวตงท หนง แนวตงท สอง, สลบกนไ ป) เรยงไปจนถงคาสมประสทธของพหนามทมดกรมาก ตามทแสดงในตวอยางขางตน (สงเกตสวนทแรเงาจะไดเขาใจมากขน )
นอกจากนโปรแกรม SCILAB ยงไดเตรยมคาสงอนๆ ทเกยวของกบการจดการพหนาม ซงผสนใจสามารถศกษารายละเอยดเพมเตมของคาสงตางๆ ไดจากคาสง help polynomial
9.5 การหาปรพนธจากดเขต ปรพนธ (integral) คอ ฟงกชนทใชหา พนท , มวล, ปรมาตร, หรอผลรวมตางๆ โปรแกรม SCILAB มคาสงทเกยงของกบการหา ปรพนธหลายคาสง แตในทนจะอธบายเฉพาะ การหาปรพนธจากดเขต 30
(definite integral) ซงมรปแบบการใชงานดงน
y = integrate('fx', 'x', x0, x1)
เมอ y คอผลลพธทไดจากการหาปรพนธ, fx คอฟงกชน ทตองการหาปรพนธ, x คอตวแปรของการหาปรพนธ, x0 และ x1 คอคาเรมตน และคาสดทายของ ตวแปร x ทใชหาปรพนธ
30 ปรพนธจากดเขต จะมชวงของการหาปรพนธกาหนด มาไวให
274
นอกจากนในกร ณทตองการหาปรพนธจากดเขต ของฟงกชนทสรางขนมา กสามารถทาไดโดยใชคาสง intg ซงมรปแบบการใชงานคอ
I = intg(a, b, f)
เมอ I คอผลลพธทไดจากการหาปรพนธ, a และ b คอคาเรมตน และคาสดทายของ การหาปรพนธ, และ f คอฟงกชนแบบตวแปรเดยว ทตองการหาปรพนธ พจารณาตวอยางตอไปนจะไดเขาใจลกษณะ การใชงานของคาสง integrate และ intg มากขน
ตวอยางท 5 จงหาคาปรพนธของฟงกชน ( ) 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.
หรอใชคาสง
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
ซงใหผลลพธเทากน
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
ซงใหผลลพธเทากน
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');
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
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
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 และสามารถนาไปประยกต ใชในการเรยนการสอนและในงานวจยไดอยางมประสทธ ภาพ
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
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
ภาคผนวก ก ตวอยางการทา 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)
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) ตามทตองการ
ภาคผนวก ข รหสขอผดพลาด
ในสวนนจะขอแสดงรายการของรหสขอผดพลาด (error list) ของโปรแกรม SCILAB เพอใชเปนขอมลอางองใหนกพฒนาโปรแกรมสามารถเขาใจวารหสข อผดพลาดมอะไรบาง และเลขรหสแตละหมายเลขหมายถงอะไร ดงแสดงในตารางตอไปน
เลขรหส คาอธบาย 1 incorrect assignment 2 invalid factor 3 waiting for right parenthesis 4 undefined variable : %s 5 inconsistent column/row dimensions 6 inconsistent row/column dimensions 7 dot cannot be used as modifier for this operator 8 inconsistent addition 9 inconsistent subtraction
10 inconsistent multiplication 11 inconsistent right division 12 inconsistent left division 13 redefining permanent variable 14 eye variable undefined in this context 15 submatrix incorrectly defined 16 incorrect command! 17 stack size exceeded! (Use stacksize function to increase it) 18 too many variables! 19 Problem is singular 20 %dth argument must be square matrix 21 invalid index 22 recursion problems. Sorry.... 23 Matrix norms available are 1, 2, inf, and fro 24 convergence problem... 25 bad call to primitive :%s
286
เลขรหส คาอธบาย 26 too complex recursion! (recursion tables are full) 27 division by zero... 28 empty function... 29 matrix is not positive definite 30 invalid exponent 31 incorrect string 32 singularity of log or tan function 33 too many "":"" 34 incorrect control intruction syntax 35 Syntax error in an if,a while or a select instruction 36 %dth argument is incorrect here 37 incorrect function at line %d 38 file name incorrect 39 incorrect number of arguments 40 waiting for end of command 41 incompatible LHS 42 incompatible RHS 43 not implemented in scilab.... 44 %dth argument is incorrect 45 null matrix (argument # %d) 46 incorrect syntax 47 end or else is missing... 48 input line longer than buffer size %d 49 incorrect file or format 50 subroutine not found : %s 52 %dth argument must be a real matrix 53 %dth input is invalid (waiting for real or complex matrix) 54 %dth argument type must be polynomial 55 %dth argument type must be character string 56 %dth argument must be a list 57 problem with comparison symbol... 58 incorrect number of arguments in function call... 59 incorrect # of outputs in the function 60 argument with incompatible dimensions 61 direct acces file : give format 62 end of file at line %d 63 %d graphic terminal? 64 integration fails 65 %d: logical unit already used 66 no more logical units available! 67 unknown file format 69 floating point exception 70 too many arguments in fort (max 30) 71 this variable is not valid in fort
287
เลขรหส คาอธบาย 72 %s is not valid in this context 73 error while linking 74 Leading coefficient is zero 75 Too high degree (max 100) 76 for x = val with type(val) = %d is not implemented in Scilab 77 %s : wrong number of rhs arguments 78 %s : wrong number of lhs arguments 80 incorrect function (argument n:%s) 81 Argument %d of %s: wrong type argument, expecting a real or complex matrix 82 Argument %d of %s: wrong type argument, expecting a real matrix 83 Argument %d of %s: wrong type argument, expecting a real vector 84 Argument %d of %s: wrong type argument, expecting a scalar 85 host does not answer... 86 uncontrollable system 87 unobservable system 88 sfact : singular or assymetric problem 89 %dth argument has incorrect dimensions 90 %dth argument must be a transfer matrix 91 %dth argument must be in state space form 92 %dth argument must be a rational matrix 93 %dth argument must be in continuous time 94 %dth argument must be in discrete time 95 %dth argument must be SISO 96 time domain of %dth argument is not defined 97 %dth argument must be a system in state space or transfer matrix form 98 variable returned by scilab argument function is incorrect 99 elements of %dth argument must be in increasing order! 100 the elements of %dth argument are not in (strictly) decreasing order 101 last element of %dth argument is not equal to the first 102 variable or function %s is not in file %s 103 variable %s is not a valid rational function 104 variable %s is not a valid state space representation 105 undefined fonction 106 function name already used 107 too many functions are defined (maximum #:%d) 108 too complex for scilab, may be a too long control instruction 109 too large, can't be displayed 110 %s was a function when compiled but is now a primitive! 111 trying to re-define function %s 112 Cannot allocate more memory 113 too large string 114 too many linked entry points 115 Stack problem detected within a loop 116 %dth argument has incorrect value
288
เลขรหส คาอธบาย 117 list element number %d is Undefined 118 %dth argument must be a named variable not an expression 119 indices for non-zero elements must be given by a 2 column matrix 121 incompatible indices for non-zero elements 122 logical unit number should be larger than %d 123 fonction not bounded from below 124 problem may be unbounded :too high distance between two consecutive iterations 126 Inconsistent constraints 127 no feasible solution 128 degenerate starting point 129 no feasible point has been found 130 optimization fails: back to initial point 131 optim: stop requested by simulator (ind=0) 132 optim: incorrect input parameters 133 too small memory 134 optim: problem with initial constants in simul 135 optim : bounds and initial guess are incompatible 136 optim : this method is NOT implemented 137 NO hot restart available in this method 138 optim : incorrect stopping parameters 139 optim : incorrect bounds 141 incorrect function (argument n:%d) 142 hot restart : dimension of working table (argument n:%d) 143 optim : df0 must be positive ! 144 Undefined operation for the given operands check or define function %s for overloading 201 Argument %d of %s: wrong type argument, expecting a real or complex matrix 202 Argument %d of %s: wrong type argument, expecting a real matrix 203 Argument %d of %s : wrong type argument, expecting a real vector 204 Argument %d, wrong type argument: expecting a scalar 205 Argument %d of %s: wrong matrix size (%d) expected 206 Argument %d of %s: wrong vector size (%d) expected 207 Argument %d of %s: wrong type argument, expecting a matrix of strings 208 Argument %d of %s: wrong type argument, expecting a booleen matrix 209 Argument %d of %s: wrong type argument, expecting a matrix 210 Argument %d of %s: wrong type argument, expecting a list
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
289
เลขรหส คาอธบาย 219 %dth argument must be a sparse or full scalar matrix 220 null variable cannot be used here 221 A sparse matrix entry is defined with two differents values 222 lusolve not yet implemented for full RHS 223 It is not possible to redefine the %s primitive this way (see clearfun). 224 Type data base is full 225 This data type is already defined 226 Inequality comparison with empty matrix 227 Missing index 228 reference to the cleared global variable %s 230 semidef fails 231 First argument must be a single string 232 Entry name not found 233 Maximum number of dynamic interfaces reached 234 link: expecting more than one argument 235 link: problem with one of the entry point 236 link: the shared archive was not loaded 237 link: Only one entry point allowed On this operating system 238 link: First argument cannot be a number 239 You cannot link more functions, maxentry reached 240 File %s already exists or directory write access denied 241 File %s does not exist or read access denied 242 binary direct acces files must be opened by ""file"" 243 C file logical unit not allowed here 244 Fortran file logical unit not allowed here 245 No input file associated to logical unit %d 246 function not defined for given argument type(s) 248 %dth argument is not a valid variable name 249 %dth argument must not be an empty string 250 Recursive extraction is not valid in this context 251 bvode: ipar dimensioned at least 11 252 bvode: ltol must be of size ipar(4) 253 bvode: fixpnt must be of size ipar(11) 254 bvode: ncomp must be less than 20 255 bvode: m must be of size ncomp 256 bvode: sum(m) must be less than 40 257 bvode: sum(m) must be less than 40 258 bvode: input data error 259 bvode: no. of subintervals exceeds storage 260 bvode: Th colocation matrix is singular 261 Interface property table is full 262 too many global variables!,max number is %d 263 Error while writing in file,(disk full or deleted file) 264 %dth argument must not contain NaN or Inf
290
เลขรหส คาอธบาย 265 A and B must have equal number of rows 266 A and B must have equal number of columns 267 A and B must have equal dimensions 268 invalid return value for function passed in argument %d 269 %dth argument eigenvalues must have negative real parts 270 %dth argument eigenvalues modulus must be less than one 271 Size varying argument aeye(), (arg %d) not allowed here 272 endfunction is missing 273 Instruction left hand side: waiting for a dot or a left parenthesis 274 Instruction left hand side: waiting for a name 275 varargout keyword cannot be used here 276 Missing operator, comma, or semicolon 277 Too many commands defined
บรรณานกรม [1] Stephen J. Chapman, MATLAB Programming for Engineers, 2nd Edition, Thomson-
Engineering, 2001.
[2] Gilberto E. Urroz, Elementary Mathematical Functions in SCILAB, September
2002.
[3] Gilberto E. Urroz, Programming with SCILAB, September 2002.
[4] Gilberto E. Urroz, Input/Output and File Handling Functions in SCILAB,
September 2001.
[5] Gilberto E. Urroz, SCILAB: A Free Software for Scientific Calculations Part V:
Breakpoints and Debugging in SCILAB, September 2002.
[6] Gilberto E. Urroz, Some Symbolic Operations in SCILAB, September 2002.
[7] Introduction to Scilab, Scilab Group, 1994
[8] Retrieved from http://www.scilab.org
[9] Retrieved from http://www.engineering.usu.edu/cee/faculty/gurro/Scilab.html
[10] ลญจกร วฒสทธกลกจ , MATLAB การประยกตใชงานทางวศวกรรมไฟฟา, สานกพมพแหง จฬาลงกรณมหาวทยาลย, พ.ศ. 2547. [11] สธรรม ศรเกษม, เมธนทร ทรงชยกล, และ สงา ศรศภปรดา , MATLAB เพอการแกปญหาทาง วศวกรรม, สานกพมพมหาวทยาลยรงสต, พ.ศ. 2521.
292
ประวตผเขยน ผศ.ดร.ปยะ โควนททววฒน URL: http://home.npru.ac.th/~t3058
การศกษา พ.ศ. 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.
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)