วันศุกร์ที่ 5 มิถุนายน พ.ศ. 2563

สารบัญ ติวเตอร์เรียล ไซแลบ

Table of Contents

Preface................................................................................................................................ii Introduction........................................................................................................................1
Tutorial 1 – Scilab Environment.......................................................................................3
Exercise 1 – Scilab Environment......................................................................................5
Tutorial 2 – The Workspace and Working Directory................................................6
Exercise 2 – The Workspace and Working Directory...............................................8
Tutorial 3 – Creating Matrices and Some Simple Matrix Operations.................9
Exercise 3 – Creating Matrices and Some Simple Matrix Operations..............12
Tutorial 4 – Sub-matrices.................................................................................................13
Exercise 4 – Sub-matrices.................................................................................................15
Tutorial 5 – Statistics..........................................................................................................16
Tutorial 6 – Working with Polynomials......................................................................17
Exercise 6 – Working with Polynomials......................................................................20
Tutorial 7 – Plotting Graphs............................................................................................21
Tutorial 8 – Plotting 3D Graphs......................................................................................24
Tutorial 9 – Scilab Programming Language..............................................................26
Tutorial 10 – Script Files and Function Files.............................................................30
Tutorial 11 – Functions in Scilab...................................................................................32
Tutorial 12 – File Operations..........................................................................................35
Tutorial 13 – Polynomial Curve Fitting.......................................................................37
Tutorial 14 – Reading Microsoft Excel Files..............................................................40
Tutorial 15 – Some Miscellaneous Commands.........................................................42
Tutorial 16 – Data Structures..........................................................................................43
Tutorial 17 – Directed Graphs........................................................................................47
Tutorial 18 – Principal Stresses.....................................................................................51

วันเสาร์ที่ 30 พฤษภาคม พ.ศ. 2563

บทนำ ไซแลยติวเตอร์เรียล 1

ไซแลบติวเตอร์เรียล 1

บทนำ

ไซแลบ(Scilab) เป็นโปรแกรมสำเร็จรูปสำหรับการคำนวณเชิงจำนวนตัวเลข ที่ได้จัดสิ่งแวดล้อมการคำนวณที่มีประสิทธิภาพสำหรับการประยุกต์ทางวิศวกรรมและวิทยาศาสตร์  พัฒนาขึ้นตั้งแต่ปี 1990 โดยนักวิจัยจากสถาบัน
อินเรีย (INRIAFrench National Institute for Research in Computer Science and Control) และ อีเอ็นพีซี (ENPC:National School of Bridges and Roads),  ขณะนี้ได้ดูแลพัฒนาผ่านทางสมาคมไซแลบ(Scilab Consotiumในเดือนพฤษภาคม 2003 ผนวกรวมเข้ากับมูลนิธิ ดิจิจีโอ(Digigeo)  ในเดือนกรกฏาคม 2008 ไซแลบ รุ่นที่ใช้กันในปัจจุบัน คือเวอร์ชั่น 5 ขึ้นไป   ตั้งแต่ปี 1994 ได้เผยแพร่ไปทางอินเตอร์เน็ตอย่างอิสระพร้อมด้วย ซอร์สโค๊ด  มีการนำไปใช้กันมากในทางการศึกษา และสภาพแวดล้อมทางอุตสาหกรรมทั่วโลก ตั้งแต่เวอร์ชั่น เป็นต้นไป ที่เผยแพร่ออกไปนั้นเป็นไปตามการอนุญาตลิขสิทธิ์ซีซิล (CeCill License ) เที่ยบเท่ากับมาตรฐาน GPL

Scilab ได้ผนึกรวมเอาฟังก์ชั่นทางคณิตศาสตร์ไว้นับร้อย ที่นำออกมาใช้ได้อย่างมีปฏิสัมพันธ์กับผู้ใช้ จากภาษาโปรแกรมมิ่งหลายภาษา (เช่น C, Fortran..)   มีโครงสร้างข้อมูลที่ซับซ้อนลุ่มลึก     
(รวมเอา โครงสร้าง  lists,  polynomials, rational functions, linear systems...) และเป็นตัวแปลภาษาตามคำสั่งโดยตรง และเป็นภาษาโปรแกรมระดับสูงอย่างหนึ่ง


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


2-D and 3-D graphics, animationLinear algebra, sparse matricesPolynomials and rational functionsSimulationODE solver and DAE solverScicos a hybrid dynamic systems modeler and simulatorClassic and robust control, LMI optimizationDifferentiable and non-differentiable optimizationSignal processingMetanetgraphs and networksParallel Scilab using PVMStatisticsInterface with Computer Algebra (Maple, MuPAD)
Interface with Tcl/TkAnd a large number of contributions for various domains.

Scilab ทำงานได้บนระบบปฏิบัติการทั้งในระบบ Unixและ GNU/Linux  ระบบวินโดว์Windows9X/NT/2000/XP/Vista/7.  ที่ให้ซอร์ทโค๊ดมาพร้อมด้วยความช่วยเหลือออนไลน์และคู่มือเป็นภาษาอังกฤษ   

บางลักษณะของ scilab ดังรายการต่อไปนี้ชนิดข้อมูลพื้นฐานเป็นแบบ matrix, และการดำเนินการเมตริกทั้งหมด  มีตัวกระทำที่ผนึกรวมอยู่ในตัวมีตัวแปลโปรแกรมภาษาระดับสูงในตัวกราฟิกส์ เช่นกราฟ 2Dและ 3D สร้างขึ้นและส่งผ่านไปเป็นเอกสารรูปแบบต่างๆได้  


ภาพข้างบนนี้เป็นกราฟ 3D สร้างขึ้นโดย Scilab และส่งออกมาในรูปแบบไฟล์ GIF สามารถรวมไว้ในเอกสารเพื่อการนำเสนอ  Scilab สามารถส่งออกรูปแบบไฟล์ ไปยัง Postscript และ GIF รวมทั้งไปยัง Xfig (ซอพท์แวร์ฟรีที่ได้รับความนิยมสำหรับการวาดรูปทรง) และ LaTeX (ระบบฟรีในการเตรียมเอกสารทางวิทยาศาสตร์)

สภาพแวดล้อมไซแลบ
เมื่อเริ่มเข้าสู่โปรแกรม จะเห็นหน้าต่างดังแสดงในรูปที่ 1.1  ผู้ใช้ใส่คำสั่ง Scilab ที่เครื่องหมายเตรียมพร้อม --> แต่ยังมีคำสั่งอื่นอีกมากที่เรียกใช้จากเมนูด้านบนหน้าต่างได้   

รูปที่ 1.1 

ในรูปที่ 1.2  เมนูที่สำคัญมากหนึ่งคือสำหรับผู้เริ่มต้นหนึ่งคือเมนู ความช่วยเหลือ (Help)  ให้คลิกที่ “Help” เมื่อเมนูความช่วยเหลือเปิดออกมาได้หน้าต่าง Help Brower แสดงรายการหัวข้อให้ความช่วยเหลือที่จัดไว้ให้ 

  
รูปที่ 1.2  เบล้าเซอร์แสดงการให้ความช่วยเหลือของไซแลบ (Scilab help browser)

การคลิกที่หัวข้อที่เกี่ยวข้องนำผู้ใช้เข้าสู่การเชื่อมโยงเอกสารคล้ายกับเว็บเพจซ์  โดยที่ Help Brower จะมี รายการหลัก (tabs)คือ  ตารางเนื้อหา และการสืบค้น (Table of Content and Search) ตารางเนื้อหามีหัวข้อเนื้อหาที่เรียงตามลำดับตัวอักษร  การดูรายการของฟังก์ชั่นที่มีใน scilab  การสืบค้นหาฟังก์ชั่นพื้นฐานในหน้าเนื้อหาของ Help Browser  ฟังก์ชั่นที่มีประโยชน์อื่นๆ อาจหาได้ภายใต้หัวข้อที่ต่างกัน เช่นที่ พีชคณิตเชิงเส้นf( Linear Algebra, Signal Processing, Genetic Algorithms, Interpolation, Metanet, Optimization and Simulation,Statistics, Strings, Time and Date etc.)ให้ใช้แท็บ Search เพื่อค้นหาความช่วยเหลือในรูปแบบข้อความ  
            
ความช่วยเหลือด้วยคำสั่งเฉพาะสามารถเข้าดูได้จากบรรทัดคำสั่งได้โดยตรงแทนที่จะสืบค้นผ่านทางการเชื่อมโยงต่างๆ ดังนั้นเพื่อที่จะให้ได้รับความช่วยเหลือในการใช้ บนคำสั่งของ Scilab  คำสั่ง “inv”  ก็เพียงแต่พิมพค่ำสั่งต่อไปนี้ที่เครื่องหมายเตรียมพร้อม
            
-->help inv 
            จะเห็นว่ามีประโยชน์มากเมื่อเรารู้ชื่อของฟังก์ชั่น และต้องการรู้ว่า การนำข้อมูลเข้าออก (
input  and output ) และ arguments ที่เกี่ยวข้อง เพื่อจะเรียนรู้วิธีการใช้
            
Scilab help browse นำเสนอมุมมองเนื้อหาความช่วยเหลือ ในการดูเนื้อหา หัวข้อเรียกรายการให้เห็นในโครงสร้าง แบบที่สามารถขยาย หรือ ยุบลงในการกวาดดูผ่านเนื้อหาความช่วยเหลือ ในอีกทางในมุมมองการค้น(search view) ยอมให้ผู้ใช้พิมพ์ข้อความค้น ตรงกับหัวข้อที่มีรายการ ซึ่งมุมมองเนื้อหาจะให้ภาพรวมที่ดีขณะที่มุมมองการค้นนำผู้ใช้ไปสู่หัวข้อที่ต้องการ
            Scilab สามารถใช้เป็นเครื่องคิดเลขธรรมดาเพื่อคำนวณเชิงตัวเลข และยังมีความสามารถในการกำหนดตัวแปร และเก็บค่าไว้ได้ ที่สามารถนำออกมาใช้ภายหลัง  แสดงให้เห็นดังตัวอย่างดังนี้

ปกติแล้วคำตอบจากการคำนวณจะถูกเก็บไว้ในตัวแปร ดังนั้นจึงสามารถนำออกมาใช้ได้ทันทีในนิพจน์ต่อมา  ถ้าผู้ใช้ไม่ได้กำหนดชื่อตัวแปรให้ชัดเจนที่จะเก็บคำตอบ  ที่จะให้ค่าจากนิพจน์   Scilabใช้ตัวแปรหนึ่งชื่อ ans เพื่อเก็บผลลัพธ์  ถ้าผู้ใช้ระบุตัวแปรในการเก็บผลลัพธ์ของนิพจน์  ผลลัพธ์ก็จะเก็บไว้ในตัวแปรที่ผู้ใช้กำหนดe.
            การจบนิพจน์ด้วยเครื่องหมายเซมิโคลอน (;)  จะกันไม่ให้แสดงผลเอ้าพุทของนิพจน์ที่จอภาพ  นิพจน์ได้รับการคำนวณหาค่า กำหนดผลลัพธ์ แต่ผลลัพธ์ไม่นำออกมาแสดงผล  ให้ทดลองตามคำสั่งต่อไปนี้
-->a = 5;
-->_
และเราจะสังเกตเห็นว่าเครื่องหมายเตรียมพร้อมจะเกิดขึ้นมาทันทีโดยไม่มีผลลัพธ์ a=5 ให้เห็นอีก
เราสามารถที่จะพิมพ์คำสั่งมากกว่าหนึ่งคำสั่งในบันทัดเดียวกันโดยแยกคำสั่งด้วยเซมิโคลอน(;) หรือคอมม่า (,) เซมิโคลอนจะกันไม่ให้แสดงค่ามาที่จอภาพอีกแต่ที่คั่นด้วยคอมม่ายังคงแสดงค่าให้เห็นดังเช่น
นอกจากนี้ยังสามารถที่จะผสมการใช้เซมิโคลอนกับคอมม่าได้  โดยที่นิพจน์ที่ตามด้วยเซมิโคลอนจะไม่แสดงค่า ขณะที่นิพจน์ที่ตามด้วยคอมม่าจะแสดงค่าผลลัพธ์ให้เห็น
-->a=100; b=200, c=300;
b =
200.




แบบฝึกหัดที่1  สิ่งแวดล้อม Scilab
1. แนวทางอื่นที่จะขอความช่วยเหลือใน Scilab มีอะไรบ้าง  นอกจากการพิมพ์  “help” ที่บรรทัดคำสั่งเพียงอย่างเดียว? (Ans: ใช้จากเมนู ? ScilabHelp หรือกดคีย์ F1)
2. โปรแกรมสาธิตอยู่ที่ไหนที่แสดงถึงความสามารถของ Scilab?
(Ans: ไปที่เมนู  Scilab Demos)
3. ที่ใดที่เราสามารถจะค้นหาเอกสารจากผู้ใช้สนับสนุนในการใช้และประยุกต์ Scilab?  มีเอกสารประเภทใดบ้าง ชนิดใดที่ทำให้สนใจบ้าง? (Ans: ไปที่เมนู ? Weblinks  Contributions)
4. ค้นคำหรือวลี ออนไลน์ใน Scilab help browser อย่างไร? (Ans: ให้คลิกที่เครื่องหมายการค้นรูปแว่นขยาย แล้วใส่คำค้นที่ต้องการ
5. การใช้ใช้ตั้วแปรที่ให้มา(build in)ans”  ในการคำนวณได้หรือไม่? ถ้าใช้ได้ เป็นความคิดที่ดีหรือไม่ที่ทำเช่นนั้น  หรือว่าเป็นการดีกว่าถ้าใช้ชื่อตัวแปรอื่นของเราเอง ?(Ans: ไม่ได้แน่นอนโปรแกรมไม่รับ เป็นความคิดที่ไม่ดีเพราะจะทำให้การทำงานสับสนได้)
6.  เมื่อไรที่คิดว่ามีประโยชน์ในการใช้เซมิโคลอนกันไม่ให้แสดงค่าผลลัพธ์จากการปฏิบัติตามประโยคคำสั่งScilab ?
7. มีกฏหรือหลักอะไรในการเลือกชื่อตัวแปรใน Scilab?   เราสามารถใช้อักขระตัวเลขเป็นตัวแรกของชื่อตัวแปรได้หรือไม่?   ใช้ useunderscore (_ ) เป็นอักขระแรกของตัวแปรได้หรือไม่? ใช้อักขระพิเศษเฉพาะ เช่น  -, +, /, ? ในชื่อตัวแปรได้หรือไม่?
8. สามารถที่จะเปลี่ยนแบบอักษร( font ) ที่ใช้ในScilab? (Ans: ไปที่เมนูPreferences--> Choose Font)
9. 
คำสั่งอะไรที่ใช้ล้างจอภาพ? (Ans:clc)
10. 
คีย์ทางลัดในการล้างจอภาพคืออะไร? (Ans:F2 key)
11. ประวัติคำสั่งคืออะไร? คีย์ทางลัดเพื่อเข้าดูประวัติคำสั่งคืออะไร? (Ans: ไปที่เมนู Edit--> History. รวมทั้งสามารถใช้คีย์ลูกศร)
12. ให้เขียนรายการเรื่องที่คุณคิดว่าสามารถนำScilabไปใช้เป็นเครื่องมือให้เกิดประโยชน์ได้ดี
13. มีคำสั่งใดที่ใช้บันทึกทุกคำสั่งที่เราพิมพ์เข้าไปและบันทึกไว้เป็นไฟล์ ที่เราสามารถกลับมาดูได้ภายหลังr? 
(Ans: ให้พิมพ์ help diary)
14. 
ให้อธิบายประโยชน์บางอย่างจากการประยุกต์ใช้คำสั่ง diary?
15. 
สามารถที่จะปรับการทำงานเริ่มต้นไซแลบให้เหมาะกับความต้องการเฉพาะของผู้ใช้ได้หรือไม่?
(ตอบ: การปรับไซแลบตอนเข้าโปรแกรมให้สร้างไฟล์ขึ้นไฟล์หนึ่ง “C:\Documents andSettings\<User>\Scilab\scilab-<version>\ scilab.ini” และนำคำสั่งใดๆที่ใช้ถูกต้องลงไปตามที่ต้องการให้ไซแลบทำงานเมื่อเข้าโปรแกรม. <User>จะต้องแทนที่ login name ของผู้ใช้ และ Scilab<version> ล่าสุดคือis 5.3.ดังนั้น ชื่อโฟนเดอร์คือ5.3.2.  ตามตำแหน่งเป็นของวินโดว์ XP สำหรับวินโดว์ Vista,  คือC:\Users\<User>\AppData\Roaming\Scilab\<scilab-<version>\scilab.ini).



ซับเมทริกซ์ ติวเตอร์เรียล 2

ไซแลบติวเตอร์เรียล 2 พื้นที่ทำงานและไดเร็คทอรีทำงาน 
(The Workspace and Working Directory)

            ขณะที่สิ่งแวดล้อมของ Scilab เป็นด้านที่มองเห็นได้ของ Scilab, ยังมีด้านอื่นที่ไม่สามารถที่มองเห็นได้ นั่นก็คือเนื้อที่ความจำที่ตัวแปรทั้งหมดและฟังก์ชันถูกเก็บไว้  และเรียกบริเวณนี้ว่าพื้นที่ทำงาน (Workspace) มีหลายครั้งที่จำเป็นต้องตรวจสอบเนื้อที่เก็บ เพื่อที่จะตรวจสอบดู่ว่าเป็นตัวแปรหนึ่ง หรือฟังก์ชันหนึ่งได้กำหนดไว้หรือไม่ คำสั่งต่อไปนี้ช่วยให้ผู้ใช้ตรวจสอบเนื้อที่ความจำ ได้แก่  who whos และ who_user() ให้ใช้ความช่วยเหลือออนไลน์เพื่อเรียนรู้มากขึ้นเกี่ยวกับคำสั่งเหล่านี้
            คำสั่ง who แสดงรายการชื่อของตัวแปรในบริเวณทำงาน Scilab   ให้สังเกตว่าชื่อตัวแปรที่นำหน้าด้วย “%”  มีตัวแปรเฉพาะหลายตัวที่ใช้เป็นประจำและดังนั้นได้กำหนดไว้ก่อนใน Scilab.   รวมทั้ง
%pi(π  ), %e ( ), %i (✓-1  ), %inf ( ∞ ), %nan (NaN)  และอื่นๆ

       คำสั่ง whos  แสดงรายการตัวแปร ตามด้วยจำนวนความจำที่ใช้ในบริเวณทำงาน  ตัวแปรที่แสดงรายการสามารถเลือกบนฐานชนิด หรือชื่อ  ดังบางตัวอย่างดังนี้
-->whos()                                 แสดงเนื้อหาทั้งหมดของพื้นที่ทำงาน รวมทั้งฟังก์ชัน ไลบรารี และตัวคงที่

-->whos -type constants          แสดงเฉพาะตัวแปรที่สามารถเก็บตัวคงที่จำนวนจริงและเชิงซ้อน ชนิดอื่น       เป็นบูลีน สตริง ฟังก์ชัน ไลบรารี โพลีโนเมียลและอื่นๆ  สำหรับรายการที่               สมบูรณ์ใช้คำสั่ง -->help typeof.

-->whos -name nam                แสดงรายการตัวแปรทั้งหมด ซึ่งชื่อขึ้นต้นด้วยตัวอักขระ nam
              
           เพื่อที่จะเข้าใจว่า Scilab จัดการอย่างไรกับตัวเลข  ให้ทดลองคำสั่งต่อไปนี้ และตามด้วยการใช้คำสั่ง whos  ดังต่อไปนี้
-->a1=5;                         กำหนดตัวแปรจำนวนจริงด้วยชื่อ 'a1'
-->a2=sqrt(-4)               กำหนดตัวแปรตัวเลขเชิงซ้อนด้วยชื่อ 'a2'
-->a3=[1, 2; 3, 4]           กำหนดเมทริกซ์  2x2  ด้วยชื่อ 'a3'
-->whos -name a           แสดงรายการตัวแปรที่ชื่อขึ้นต้นด้วยตัวอักษร 'a'

Name   Type                 Size     Bytes
a3         constant           2 by 2   48
a2         constant           1 by 1   32
a1         constant           1 by 1   24

ต่อไปให้ทดลองคำสั่งต่อไปนี้:
-->a1=sqrt(-9)               แปลง 'a1'ให้เป็นเลขเชิงซ้อน to a complex number
-->whos -name a           สังเกตว่าตอนนี้t 'a'เป็นตัวเลขเชิงซ้อน
-->a1=a3                        แปลง 'a1ไปเป็นเมทริกซ์
-->whos -name a           สังเกตว่า 'a' ตอนนี้เป็นเมทริกซ์
-->save('ex01.dat')        บันทึกตัวแปรทั้งหมดในพื้นที่ทำงานไปยังไฟล์ในดิสค์ชื่อ ex01.dat
-->load('ex01.dat')        โหลดหรือเรียกตัวแปรทุกตัวจากไฟล์ในดิสค์ex01.dat มายังพื้นที่ทำงาน
ให้สังเกตจุดสำคัญต่อไปนี้
 Scilab จัดให้ตัวเลขสเกลล่าเป็เมทริกซ์ขนาด 1x1 (และไม่เป็นเหมือนตัวเลขธรรมดา)
เพราะว่าชนิดข้อมูลพื้นฐานใน Scilab เป็นเมทริกซ์อย่างหนึ่ง
 Scilab แปลงชนิดของตัวแปรโดยอัตโนมัติตามความต้องการตามสถานะการณ์  จึงไม่จำเป็นต้องมีการกำหนดชนิดของตัวแปร

แบบฝึกหัด 2  พื้นที่ทำงานและไดเร็คทอรีทำงาน                                                                                       
1. ชนิดข้อมูลที่ใช้ได้ในไซน์แลบมีอะไรบ้าง ?
 (ตอบให้พิมพ์คำสั่ง help type ก็จะแสดงรายการชนิดข้อมูลที่มีใช้)2. คำสั่งอะไรที่แสดงรายการตัวแปรทั้งหมดที่มีอยู่ในพื้นที่ทำงานไซแลบที่ขึ้นต้นด้วยอักขระ”sa”?
(ตอบ: whos –name sa)
3. ใช้คำสั่งใดแสดงรายการตัวแปรทั้งหมดในพื้นที่ทำงานไซแลบที่มีชนิดข้อมูลเป็นบูลีน
(ตอบ
: whos –type Boolean)
4. ตัวคงที่ piในไซแลบหาค่าได้อย่างไร ?
(ตอบ 
%pi)
5. คำสั่งใดที่ใช้หาว่าไดเรคทอรีทำงานล่าสุดเป็นอะไรอยู่ที่ไหน?
(ตอบ
: pwd )
6. ที่ใดที่สามารถหาไดเรคทอรีทำงานปัจจุบันล่าสุดได้?
(ตอบ
จากไฟล์เมนู  disp Current Directory)
7. เปลี่ยนไดเรคทอรีทำงานปัจจุบัน/ล่าสุดไปเป็นตำแหน่งที่แตกต่างออกไปได้อย่างไร?
(ตอบ: cd (“chane directory”) หรือไปที่เมนูไฟล์  Change Directory และเลือกไดเรคทอรีที่จะไป ในไดอะล็อกบ็อก)8. ทำไมจึงเป็นเรื่องสำคัญการที่รู้ไดเร็คทอรีทำงานปัจจุบันล่าสุด?
(ตอบ เพราะว่าเป็นตำแหน่งโดยปริยายที่ไซแลบบันทึกไฟล์ทั้งหมดไว้ นอกจากว่าได้ระบุตำแหน่งเส้นทางเต็มในการเข้าถึงไว้อย่างชัดเจน)9. ไซแลบเป็นภาษาที่เน้นการใช้ชนิดข้อมูลหรือไม่
(ตอบ สำหรับภาษาที่เน้นชนิดข้อมูลนั้น แต่ละตัวแปรและชนิดข้อมูลของตัวแปรจะต้องกำหนดก่อนเป็นสิ่งแรก ก่อนที่จะนำไปใช้  ยิ่งกว่านั้น ทันทีที่กำหนดชนิดแล้วมักจะไม่สามารถเปลี่ยนชนิด  ให้ดูในวิกิพีเดียสำหรับนิยามของ การเน้นชนิดข้อมูล (
strongly Typed)  เหมือนกับที่ได้เขียนไว้ หรือไม่ และอะไรคือ static typing และ type safety?)







พื้นที่ทำงานและไดเรคทอรีทำงาน ไซแลบติวเตอร์เรียล 3

ไซแลบติวเตอร์ 3

การดำเนินการเมทริกซ์
การสร้างเมทริกซ์และการดำเนินการเมทริกซ์อย่างง่าย

การดำเนินการเมทริกซ์ สร้างผนึกรวมไว้ในตัวไซแลบ  คือ การบวก การลบ การคูณ ทรานสโพส อินเวิร์สชั่น     ดีเตอร์มีแนนท์ ฟังก์ชันตรีโกณ ล็อก ฟังก์ชันเอ็กโพเนนเชี่ยล และ อื่นๆ อีกมาก  ให้ศึกษาตัวอย่างต่อไปนี้
-->a=[1 2 3]                               สร้างเว็คเตอร์แถวหนึ่ง
-->a=[1; 2; 3]                             สร้างเว็คเตอร์คอลัมน์หนึ่ง
-->a=[1 2 3]'                               สร้างเว็คเตอร์คอลัมน์เหมือนกับทีกล่าวถึงมาแล้วข้างบน
-->x=[1 2 3]; y=[4 5 6 7];           สร้างเมทริกซ์ ซึ่งเกิดจากการรวมของ และ เทียบได้เหมือนกัน -->a=[x y]                                     (จำนวนแถวเท่ากัน)
-->a=[1 2 3; 4 5 6; 7 8 9];           กำหนด 3x3 เมทริกซ์เซมิโคลอนแสดงให้เห็นการจบแถวหนึ่งๆ
-->b=a';                                       ทรานสโพส a และเก็บไว้ใน b. เครื่องหมาย Apostrophe(‘) คือตัวกระทำ
                                                      ทรานสโพส

-->c=a+b                                   บวก กับ bและเก็บผลไว้ใน c.   และ จะต้องมีขนาดเท่ากัน
   
ans   =                                    ถ้าเป็นอย่างอื่นไซแลบจะรายงานข้อผิดพลาด      2     6    10
     6    10    14
    10    14   18
-->d=a-b                                   ลบ ออกจาก และเก็บผลใน d.
-->e=a*b                                   คูณ ด้วย b และเก็บผลไว้ใน e  และ ต้องเทียบได้ตรงกันสำหรับการคูณ
 
  ans   =                                    เมทริกซ์
       14     32     50    
        6      10     14
        50    122   194
-->f=[3 1 2; 1 5 3; 2 3 6];            กำหนด 3x3 เมทริกซ์ด้วชื่อ f.
-->g=inv(f)0.4285714    0.               -0.1428571   อินเวิร์ทเมทริกซ์ และเก็บผลไว้ใน g.  fจะต้องเป็น square และมีค่าบวก
0.                  0.2857143 -0.1428571  แน่นอน(square and positive definite)  การเตือนจะปรากฏขึ้นถ้าไม่ถูกต้อง
-0.1428571 -0.1428571   0.2857143      ตามงื่อนไข
-->f*g                                              คำตอบต้องเป็น identity matrix
-->det(f)                                           Determinant ของ f.
ans  =
      49
-->log(a)                                          เมทริกซ์ของ log ของแต่ละองค์ประกอบของ a.
           
การดำเนินการเมทริกซ์บางอย่างเช่นการคูณ เอ็กโพเนนเชียล สามารถดำเนนการตามลำดับ
องค์ประกอบเป็นหลัก
  
-->a .* b                                    คูณกันแต่ละองค์ประกอบ (Element by element multiplication)ans =
  30   36    42
  66    81    96
 102  126  150
-->a^2                                      ให้ผลเหมือนกันกับ a*a.
ans =
   30    36    42
   66    81    96
   102  126   150
-->a .^2                                     แต่ละองค์ประกอบยกกำลังสอง
ans =
   1     4     9
  16   25   36
  49   64   81

การบวกเมทริก และการลบเมทริกซ์ เป็นการดำเนินการตามองค์ประกอบ ส่วนการบวกและการลบตามองค์ประกอบจะให้ผลเป็นข้อผิดพลาด ดังเช่นa. + b                                        จะให้ข้อผิดพลาด  error
a. - b

มีฟังก์ชันที่อำนวยความสะดวกบางอย่าง เพื่อใช้ในเมทริกซ์ที่ใช้กันทั่วไป เล่น เมทริกซ์ศูนย์ (zero matrices) เมทริกซ์ไอเดนติตี (identity matrices) และอื่นๆ
-->a=zeros(5,8)                          สร้าง 5x8 matrix  ด้วยทุกองค์ประกอบเป็นศูนย์
-->b=ones(4,6)                          สร้าง 4x6 matrix ด้วยทุกองค์ประกอบเป็น 1
-->c=eye(3,3)                             สร้าง 3x3 identity matrix
-->d=eye(3,3)*10                       สร้าง 3x3 diagonal matrix
-->x = rand(3,5)                         สร้างเมทริกซ์ มี3แถว คอลัมน์ องค์ประกอบเมทริกซ์จากการสุ่ม
                                                   ตัวเลขมีค่า 
0 – 1
-->y = int(rand(3,5)*100);           สร้างเมทริกซ์ 3 แถว คอลัมน์องค์ประกอบเป็นเลขจำนวนเต็มสุ่ม
                                                    ระหว่าง  
และ 100

เป็นไปได้ที่จะหาขนาด(size) ความยาว (length) และชนิด(type) ของตัวแปรไซแลบ  เช่น
-->y=[1:5; 6:10;11:15];                size คืนกลับค่าจำนวนแถวและคอลัมน์-->size(y)                                  ในเมทริกซ์ y
ans =
     3.     5.
-->length(y)                               จำนวนองค์ประกอบใน y
ans =
      15
 
สร้างช่วงของตัวเลขที่ที่ทำเป็นเว็คเตอร์  ให้ศึกษาคำสั่งต่อไปนี้
-->a=[1:5]                                 สร้างเว็คเตอร์ มี องค์ประกอบดังนี้ [1, 2, 3, 4, 5]
-->b=[0:0.5:5]                           สร้างเวคเตอร์หนึ่งมี 11 องค์ประกอบดังนี้
                                                     
 [0, 0.5, 1.0,1.5, ... 4.5, 5.0]

 ช่วงที่ต้องการเริ่มจากค่าเริ่มต้น ค่าที่เพิ่ม และ ค่าสุดท้าย แยกด้วยโคลอน (:). ถ้ากำหนดเพียงสองค่า (ให้แยกด้วยเพียงโคลอนเดียว  ด้วยค่าเริ่มต้นและค่าสุดท้าย และคิดให้มีการเพิ่มค่าทีละ 1(a:b เป็นรูปแบบย่อของ a:1:b ซึ่ง a และ b เป็นสเกลล่า)   การเพิ่มจะเป็นค่าลบ หากค่าเริ่มต้นมากกว่าค่าท้าย
ช่วง(range) มีบทบาทสำคัญในการดำเนินการ sub-matrics จะเห็นได้ในในติวเตอเรียลต่อไป


ในการสร้างเมทริกซ์ว่างด้วยคำสั่ง  
-->a=[]
-->size(a)
ans =
     0      0
-->whos - name a
Name                     Type           Size           Bytes   

a                           constant        0x0            0       
ans                        constant       1x2             0     


แบบฝึกหัด 3  การสร้างเมทริกซ์ และการดำเนินการพื้นฐานเมทริกซ์บางอย่าง 

1. สามารถใช้ตัวดำเนินการ .+  เหมือนกับที่ใช้ตัวดำเนินการ .* หรือไม่ ? (Ans: ไม่ได้ จริงแล้วก็ไม่จำเป็นต้องใช้ แทนกัน ).
2. ขนาดของเมทริกซ์ว่างเป็นเท่่าใด  a = []? (Ans: Size 0 x 0)
3. ขณะที่สร้างช่วง สามารถที่จะกำหนดการเพิ่มช่วงแบบลบได้หรือไม่? (Ans: ได้ ถ้าค่าเริ่มต้นมากกว่าค่าท้าย)
4. ใช้คำสั่งใดในการสร้างค่า 0-2pi ที่การเพิ่มขึ้นทีละ p/16? (Ans: 0:%pi/16:2*%pi).
5. คำสั่งใดที่แยกองค์ประกอบทางแนวทะแยง ของเมทริกซ์จรุรัส ให้อยู่ในรูปของเว็คเตอร์? (Ans: a = diag(x) สร้างเวคเตอร์หนึ่งที่มีองค์ประกอบตามแนวทะแยงของเมทริกซ์ x ).
6. กำหนด square matrix a, แล้วสร้างเป็น matrix b ที่องค์ประกอบตามแนวทะแยงที่เหมือนกับใน เมทริกซ์ a แต่องค์ประกอบอื่นทั้งหมดเป็น 0 ? (Ans: b = eye(a) .* a).
7. ให้สกัดเทอม off-diagonal (ที่ offset of 1) ของเมทริกซ์จตุรัส(square matrix)ให้อยู่ในรูปเวคเตอร์
(Ans: b = diag(x, 1)  เพื่อที่จะสะกัดเทอมดังกล่าว ตามแนวทะแยงและ b = diag(x, -1)  เพื่อสะกัด เทอมด้านล่าง ตามแนวทะแยง b = diag(x) คือทางลัดสำหรับ b = diag(x, 0).  ค่าปริยาย offset เป็น zero
8. ให้สร้างเมทริกซ์ขนาด 5x5 ให้มีองค์ประกอบตามที่ต้องการตามแนวทะแยง,  ด้านบนแนวทะแยง และด้านล่างแนวทะแยง (Ans: b = diag([1:5])  สร้างเมทริกซ์ขนาด 5x5 ที่ซึ่งองค์ประกอบตามแนวทะแยงเป็นองค์ประกอบของเว็คเตอร์ [1 2 3 4 5]).
9. ให้สร้างเมทริกซ์ขนาด5x5 ให้มีองค์ประกอบที่ต้องการทางด้านบนของแนวทะแยงหลัก (Ans: b = diag([1:4], 1)  ให้สร้างเมทริกซ์ขนาด 5x5 ของจำนวนศูนย์ และนำองค์ประกอบของเว็คเตอร์ [1 2 3 4] ด้านบนแนวทะแยงหลัก  เพื่อวางเว็คเตอร์ตามด้านล่างของแนวทะแยงหลัก โดยใช้ b= diag([1:4], -1)).
10. ให้สร้างเมทริกซ์แบบ tri-diagonal ขนาด 5x5 ด้วยองค์ประกอบเฉพาะตามด้านบนและล่างตามแนวทะแยง(Ans: b = diag([1:5]) + diag([6:9], 1) + diag([10:13], -1) จะนำเว็คเตอร์ [1 2 3 4 5] บนแนวทะแยงหลัก, [6 7 8 9] อยู่บนแนวทะแยง ด้านบนของแนวทะแยงหลัก      


ไซแลบติวเตอร์เรียล 2 พื้นที่ทำงานและไดเร็คทอรีทำงาน 
(The Workspace and Working Directory)

            ขณะที่สิ่งแวดล้อมของ Scilab เป็นด้านที่มองเห็นได้ของ Scilab, ยังมีด้านอื่นที่ไม่สามารถที่มองเห็นได้ นั่นก็คือเนื้อที่ความจำที่ตัวแปรทั้งหมดและฟังก์ชันถูกเก็บไว้  และเรียกบริเวณนี้ว่าพื้นที่ทำงาน (Workspace) มีหลายครั้งที่จำเป็นต้องตรวจสอบเนื้อที่เก็บ เพื่อที่จะตรวจสอบดู่ว่าเป็นตัวแปรหนึ่ง หรือฟังก์ชันหนึ่งได้กำหนดไว้หรือไม่ คำสั่งต่อไปนี้ช่วยให้ผู้ใช้ตรวจสอบเนื้อที่ความจำ ได้แก่  who whos และ who_user() ให้ใช้ความช่วยเหลือออนไลน์เพื่อเรียนรู้มากขึ้นเกี่ยวกับคำสั่งเหล่านี้
            คำสั่ง who แสดงรายการชื่อของตัวแปรในบริเวณทำงาน Scilab   ให้สังเกตว่าชื่อตัวแปรที่นำหน้าด้วย “%”  มีตัวแปรเฉพาะหลายตัวที่ใช้เป็นประจำและดังนั้นได้กำหนดไว้ก่อนใน Scilab.   รวมทั้ง
%pi(π  ), %e ( ), %i (✓-1  ), %inf ( ∞ ), %nan (NaN)  และอื่นๆ

       คำสั่ง whos  แสดงรายการตัวแปร ตามด้วยจำนวนความจำที่ใช้ในบริเวณทำงาน  ตัวแปรที่แสดงรายการสามารถเลือกบนฐานชนิด หรือชื่อ  ดังบางตัวอย่างดังนี้
-->whos()                                 แสดงเนื้อหาทั้งหมดของพื้นที่ทำงาน รวมทั้งฟังก์ชัน ไลบรารี และตัวคงที่

-->whos -type constants          แสดงเฉพาะตัวแปรที่สามารถเก็บตัวคงที่จำนวนจริงและเชิงซ้อน ชนิดอื่น       เป็นบูลีน สตริง ฟังก์ชัน ไลบรารี โพลีโนเมียลและอื่นๆ  สำหรับรายการที่               สมบูรณ์ใช้คำสั่ง -->help typeof.

-->whos -name nam                แสดงรายการตัวแปรทั้งหมด ซึ่งชื่อขึ้นต้นด้วยตัวอักขระ nam
              
           เพื่อที่จะเข้าใจว่า Scilab จัดการอย่างไรกับตัวเลข  ให้ทดลองคำสั่งต่อไปนี้ และตามด้วยการใช้คำสั่ง whos  ดังต่อไปนี้
-->a1=5;                         กำหนดตัวแปรจำนวนจริงด้วยชื่อ 'a1'
-->a2=sqrt(-4)               กำหนดตัวแปรตัวเลขเชิงซ้อนด้วยชื่อ 'a2'
-->a3=[1, 2; 3, 4]           กำหนดเมทริกซ์  2x2  ด้วยชื่อ 'a3'
-->whos -name a           แสดงรายการตัวแปรที่ชื่อขึ้นต้นด้วยตัวอักษร 'a'

Name   Type                 Size     Bytes
a3         constant           2 by 2   48
a2         constant           1 by 1   32
a1         constant           1 by 1   24

ต่อไปให้ทดลองคำสั่งต่อไปนี้:
-->a1=sqrt(-9)               แปลง 'a1'ให้เป็นเลขเชิงซ้อน to a complex number
-->whos -name a           สังเกตว่าตอนนี้t 'a'เป็นตัวเลขเชิงซ้อน
-->a1=a3                        แปลง 'a1ไปเป็นเมทริกซ์
-->whos -name a           สังเกตว่า 'a' ตอนนี้เป็นเมทริกซ์
-->save('ex01.dat')        บันทึกตัวแปรทั้งหมดในพื้นที่ทำงานไปยังไฟล์ในดิสค์ชื่อ ex01.dat
-->load('ex01.dat')        โหลดหรือเรียกตัวแปรทุกตัวจากไฟล์ในดิสค์ex01.dat มายังพื้นที่ทำงาน
ให้สังเกตจุดสำคัญต่อไปนี้
 Scilab จัดให้ตัวเลขสเกลล่าเป็เมทริกซ์ขนาด 1x1 (และไม่เป็นเหมือนตัวเลขธรรมดา)
เพราะว่าชนิดข้อมูลพื้นฐานใน Scilab เป็นเมทริกซ์อย่างหนึ่ง
 Scilab แปลงชนิดของตัวแปรโดยอัตโนมัติตามความต้องการตามสถานะการณ์  จึงไม่จำเป็นต้องมีการกำหนดชนิดของตัวแปร
แบบฝึกหัด 2  พื้นที่ทำงานและไดเร็คทอรีทำงาน                                                                                       
1. ชนิดข้อมูลที่ใช้ได้ในไซน์แลบมีอะไรบ้าง ?
 (ตอบให้พิมพ์คำสั่ง help type ก็จะแสดงรายการชนิดข้อมูลที่มีใช้)2. คำสั่งอะไรที่แสดงรายการตัวแปรทั้งหมดที่มีอยู่ในพื้นที่ทำงานไซแลบที่ขึ้นต้นด้วยอักขระ”sa”?
(ตอบ: whos –name sa)
3. ใช้คำสั่งใดแสดงรายการตัวแปรทั้งหมดในพื้นที่ทำงานไซแลบที่มีชนิดข้อมูลเป็นบูลีน
(ตอบ
: whos –type Boolean)
4. ตัวคงที่ piในไซแลบหาค่าได้อย่างไร ?
(ตอบ 
%pi)
5. คำสั่งใดที่ใช้หาว่าไดเรคทอรีทำงานล่าสุดเป็นอะไรอยู่ที่ไหน?
(ตอบ
: pwd )
6. ที่ใดที่สามารถหาไดเรคทอรีทำงานปัจจุบันล่าสุดได้?
(ตอบ
จากไฟล์เมนู  disp Current Directory)
7. เปลี่ยนไดเรคทอรีทำงานปัจจุบัน/ล่าสุดไปเป็นตำแหน่งที่แตกต่างออกไปได้อย่างไร?
(ตอบ: cd (“chane directory”) หรือไปที่เมนูไฟล์  Change Directory และเลือกไดเรคทอรีที่จะไป ในไดอะล็อกบ็อก)8. ทำไมจึงเป็นเรื่องสำคัญการที่รู้ไดเร็คทอรีทำงานปัจจุบันล่าสุด?
(ตอบ เพราะว่าเป็นตำแหน่งโดยปริยายที่ไซแลบบันทึกไฟล์ทั้งหมดไว้ นอกจากว่าได้ระบุตำแหน่งเส้นทางเต็มในการเข้าถึงไว้อย่างชัดเจน)9. ไซแลบเป็นภาษาที่เน้นการใช้ชนิดข้อมูลหรือไม่
(ตอบ สำหรับภาษาที่เน้นชนิดข้อมูลนั้น แต่ละตัวแปรและชนิดข้อมูลของตัวแปรจะต้องกำหนดก่อนเป็นสิ่งแรก ก่อนที่จะนำไปใช้  ยิ่งกว่านั้น ทันทีที่กำหนดชนิดแล้วมักจะไม่สามารถเปลี่ยนชนิด  ให้ดูในวิกิพีเดียสำหรับนิยามของ การเน้นชนิดข้อมูล (
strongly Typed)  เหมือนกับที่ได้เขียนไว้ หรือไม่ และอะไรคือ static typing และ type safety?)