บทที่
1
บทนำไซแลบ
1.1 นำไซแลบ
ด้วยแบบฝึกหัดเหล่านี้ตั้งใจเตรียมขึ้นเพื่อนำผู้ใช้เข้าสู่สิ่งแวดล้อมคอมพิวเตอร์ที่จะนำมาใช้
ตอนท้ายของการติวซ่อมเสริมนี้ ผู้ใช้ควรตรวจสอบ
เมื่อทดลองปฏิบัติไปทั้งหมดแล้ว
โดยตอนสุดท้ายของการซ่อมเสริมนี้ ก็จะตรวจสอบได้ว่าบัญชีการใช้คอมพิวเตอร์
(computer account) ทำงานได้ และผู้ใช้ได้รับการฝึกฝนการใช้เอดิเตอร์และไซแลบ ในทางหนึ่งทางใดผู้ใช้ควรจะเพียรพยายามได้ผ่านชุดติวซ่อมเสริมนี้ก่อนที่จะถึงติวซ่อมเสริมต่อไป
ตามที่จะต้องมีงานการเขียนโปรแกรมบางอย่าง ดังนั้นจงอย่าลังเลที่จะถามหาความช่วยเหลือ
หากติดขัด ไม่เข้าใจ
ในการเรียนรู้ตอนนี้
เกือบทั้งหมดจะได้ประสบการณ์เพิ่มบางอย่างกับแพคเกจซ์ของไซแลบ โดยจะพิจารณานิพจน์ไซแลบที่ง่ายบางอย่าง
และใช้ตัวอย่างเหล่านั้นในการพิจารณาปัญหาบางอย่างที่เกี่ยวข้องกับเลขคณิตของจำนวนฟล็อตติงพอยน์
ขณะที่ดำเนินการไป มีการถามคำถาม ผู้ใช้ควรจะหาได้ให้คำตอบคำถามเหล่านั้น ในสมุดปฏิบัติการของผู้ใช้ ทำเครื่องหมายสำหรับส่วนติวซ๋อมเสริมที่จะได้ประโยชน์บนฐานของงานที่นำเสนอไว้ในสมุดปฏิบัติการ
1.2 เริ่มต้นเข้าใช้งาน
ขณะที่ดำเนินการไป มีการถามคำถาม ผู้ใช้ควรจะหาได้ให้คำตอบคำถามเหล่านั้น ในสมุดปฏิบัติการของผู้ใช้ ทำเครื่องหมายสำหรับส่วนติวซ๋อมเสริมที่จะได้ประโยชน์บนฐานของงานที่นำเสนอไว้ในสมุดปฏิบัติการ
1.2 เริ่มต้นเข้าใช้งาน
ขั้นตอนการเริ่มต้นสำหรับการใช้ไซแลบแตกต่างกันเล็กน้อยขึ้นอยู่กับ
ชนิดของคอมพิวเตอร์ที่ใช้ และจะติดตั้งอย่างไร
แต่โดยหลักๆ จำเป็นต้องเริ่มการเข้าใช้งาน
เช่นเดียวกับการใช้เอดิเตอร์
สำหรับการคำนวณเล็กน้อย
ก็เพียงแต่ใช้ไซแลบที่บรรทัดคำสั่งแบบปฏิสัมพันธ์ กล่าวคือเพียงแต่พิมพ์คำสั่งเข้าไปตรงไปตรงมา สำหรับบางอย่างที่ซับซ้อนมากขึ้นนั้น ในการพิมพ์คำสั่งจะต้องมีประสิทธิภาพมากกว่า
ที่บันทึกไว้เป็นไฟล์
(สามารถใช้ตัวช่วยพิมพ์ข้อความที่เรียกว่าเท็กซ์เอดิเตอร์ที่ใช้สะดวกและง่ายตามที่ถนัด)
โดยบันทึกไฟล์และสั่งให้ทำงานตามคำสั่งในไฟล์โดยสั่งให้ชื่อไฟล์คำสั่งทำงานจาก
บรรทัดคำสั่งไซแลบ โดยการขั้นตอนนี้จะมีรายละเอียดเพิ่มขึ้นเล็กน้อยสำหรับการใช้คอมพิวเตอร์บนระบบปฏิบัติการแบบวินโดว์และแมคอินท็อส
ก็ให้เลือกใช้ระบบใดระบบหนึ่งสำหรับ การฝึกปฏิบัติ ส่วนที่ใช้ในเอกสารนี้จะใช้ในระบบปฏิบัติการวินโดว์เป็นหลัก
1.2.1
การเข้าใช้ในระบบปฏิบัติการวินโดว์
การใช้งานไซแลบได้อย่างดี
ในระบบปฏิบัติการวินโดว์ สำหรับระบบปฏิบัติการนี้
ไซแลบได้ผนึกรวมเอาตัวเอดิเตอร์ให้มาด้วย
โดยสั่งให้ไซแลบจากเมนูโปรแกรมประยุกต์ที่เมนูเริ่มต้น (start
menu) ซึ่งตอนติดตั้งไซแลบ จะมีไอคอนสำหรับโปรแกรมไซแลบ เมื่อเริ่มต้นใช้งานก็เพียงแต่คลิกที่ไอคอนนี้
ทันทีที่ไซแลบกำลังทำงานอยู่ จะปรากฏหน้าต่างคำสั่งหรือคอนโซล และ เริ่มใช้เอดิเตอร์ได้จากเมนูบาร์ของไซแลบ
และจากนี้ก็พร้อมที่จะเริ่มเรียนรู้กับไซแลบ ไม่ว่าจากบรรทัดคำสั่งหรือจากเอดิเตอร์ของไซแลบ
1.3 การใช้ไซแลบคอนโซลและเอดิเตอร์
จากคอนไซลไซแลบหรือหน้าต่างคำสั่งไซแลบสามารถจะสั่งให้ทำงานตามคำสั่ง
โดยเฉพาะอย่างยิ่งคำสั่ง pwd จะบอกให้ทราบว่าไดเรคทอรีใดที่กำลังทำงานอยู่ เป็นที่ที่ไซแลบจะไปหาไฟล์ที่จะมาทำงาน
สามารถที่จะเปลี่ยนไดเรคทอรีทำงานภายใต้เมนูไฟล์หรือจากบรรทัดคำสั่งโดยใช้คำสั่ง chdir directory
จากเท็กเอดิเตอร์ที่ใช้
ให้สร้างคำสั่งไซแลบบางอย่างเช่น
A = [ 1 2 3 ; 4 5 6 ; 7 8 9]
แล้วบันทึกไฟล์
(สมมุติ test-01.sce)
ในไดเรคทอรีเดียวกับที่ไซแลบกำลังทำงานด้วย (ตามที่แสดงโดยคำสั่ง pwd)
จากนี้ทำให้สามารถสังให้ทำงานตามคำสั่งในไฟล์ผ่านทางเครื่องหมายเตรียมพร้อมในคอนไซลไซแลบ
exec
test-01.sce
การใช้เอดิเตอร์ทำให้เปลี่ยนแปลงข้อมูลในไฟล์
และจำเป็นต้องบันทึกไฟล์ใหม่อีกครั้งเพื่อให้การเปลี่ยนแปลงส่งผล (สามารถที่จะใช้ลูกศรชี้ขึ้นเพื่อเรียกคำสั่งที่ผ่านมาแก้ไข)
ถ้าใช้เอดิเตอร์ที่ผนึกรวมอยู่ในไซแลบในระบบปฏิบัติการวินโดว์
การทำงานของเอดิเตอร์จะเรียกให้บันทึกไฟล์ที่กำลังทำงานโดยอัตโนมัติและสั่งให้ทำงานในไฟล์โดยอัตโนมัติ
1.4 คำสั่งพื้นฐาน
1.4 คำสั่งพื้นฐาน
จากนี้ให้ทดลองใช้งานไซแลบ โดยเคลื่นไปที่หน้าต่างไซแลบ
และเลือกวินโดว์ (โดยการกดเม้าซ์ปุ่มซ้าย)
จากนี้ควรจะสามารถพิมพ์คำสั่งเข้าไปในหน้าต่างไซแลบ ไซแลบออกแบบมาให้ทำงานกับข้อมูลแบบเว็คเตอร์และเมทริกซ์ ตอนแรกนี้ให้นำเข้าเว็คเตอร์ดังนี้
x = [ 0 ; 2 ; 5]
และนำเข้าเมทริกซ์ ผ่านทางการใช้คำสั่งดังนี้
A = [ 1 3 4 ; -1 2 5 ; 4 -3 5 ]
เซมิโคลอนอาจแทนด้วยการกด
returns.
ในไซแลบนั้นตัวพิมพ์เล็กใหญ่ถือว่ามีความแตกต่างกัน ดังเช่น a และ A จะแทนตัวแปรที่แตกต่างกัน ฟังก์ชันที่ให้มาในไซแลบ เช่น rank หรือ eigenvalues
สกหรับเมทริกซ์ แสดงด้วยตัวพิมพ์เล็กดังเช่น rank(A) หรือ spec(A). ถ้าไม่สามารถจำการใช้คำสั่งเฉพาะในไซแลบให้ทดลองใช้คำสั่งขอความช่วยเหลือ
เช่น
help spec
help spec
ไซแลบได้จัดหาการดำเนินการเว็คเตอร์และเมทริกซ์มากมาย
ตัวอย่างเช่น สามารถที่จะคูณเมทริกซืและเว็คเตอร์
ให้ทดลองตัวอย่างคำสั่งง่ายๆคือ
A*x
A*A
ได้ผลดังนี้
-->A*x
ans =
26
29
19
ได้ผลดังนี้
-->A*x
ans =
26
29
19
-->A*A
ans =
14 -3 39
ans =
14 -3 39
17
-14 31
27
-9 26
ไซแลบคำนวณทุกอย่างได้ผลเป็นความละเอียดสองเท่า
แต่รูปแบบของเอาพุตที่แสดงใช้รูปแบบสั้น
รูปแบบสามารถเปลี่ยนไปเป็นเต็มความละเอียดได้โดยคำสั่งไซแลบดังนี้
format(20,’e’)
ให้ทดลองคำนวณดูผลเมื่อใช้รูแบบที่แตกต่างกัน
รูปแบบสามารถเปลี่ยนกลับมาเหมือนเดิมได้โดยใช้รูปแบบดังนี้
format(10,’v’)
เมื่อมีเครื่องหมายเซมิโคลอนที่ตอนปลายบรรทัดคำสั่ง
ไซแลบจะไม่แสดงผลกำทำงานบรรทัดนั้นเหมือนตามปกติ
ซึ่งมีประโยชน์เมื่อทำงานกับเว็คเตอร์และเมทริกซ์ขนาดใหญ ให้ทดลอง
y = A*x ;
สังเกตได้ว่าคำตอบจะไม่พิมพ์แสดงให้เห็น
หากต้องการดูคำตอบก็เพียงแต่พิมพ์ตัวแปร y
ให้ทดลองสร้างเว็คเตอร์ขนาดใหญ่
จะสร้างได้ง่ายโดยสร้างเวคเตอร์ที่มีองค์ประกอบที่มีการเพิ่มค่าขึ้นเป็นระบบ ทดลองดังนี้
w = 0:0.1:7
จากคำสั่งข้างบนสร้างเว็คเตอร์เริ่มจากเลข 0 และเพิ่มขึ้นทีละ 0.1 จนถึงค่า
7
สังเกตเห็นว่าเครื่องหมายเซมิโคลอนหากมีปิดท้ายก็จะช่วยให้เกิดประโยชน์
สามารถที่จะใช้ฟังก์ชันของเว็คเตอร์หรือเมทริกซ์ เช่นให้ทดลองดังนี้
z = sin(w)
จากนี้ มี 2 เว็คเตอร์คือ w
และ z ที่มีขนาดเท่ากัน สามารถที่จะพล็อตค่าของ w กับค่าของ z ดังนี้
plot2d(w,z)
การพล็อตค่า w กับ z
ควรจะแสดงให้เห็นและบันทึกกราฟไว้เป็นไฟล์ ใช้เมนู file-export toในหน้าต่างกราฟิกส์
ภาพที่ 1. แสดงการพล็อตค่า w,z
1.5 พีชคณิตเชิงเส้น
ไซแลบสามารถแก้ปัญหาสมการเมทริกซ์ โดยทดลองดังนี้
y = A \ x
เว็คเตอร์ y
ควรที่เป็นการแก้สมการเชิงเส้น x = A*y ซึ่งคือการอินเวิร์ทเมทริกซ์สามารถคำนวณได้โดยคำสั่ง
inv ให้ใช้คำสั่ง
inv ในการแก้สมการ Ay =
x.
เปรียบเทียบผล A\x และ inv(A)*x. ปรากฏผลว่าได้ค่าเท่ากัน ทั้งนี้เพราะการสลับแถวกับคอลัมน์ไม่ทำให้ผลการคำนวณเปลี่ยนไป
-->y = A/x
y =
-02375
-0.8375
y =
-02375
-0.8375
0.6875
-->y
= inv(A)*x
Y =
-0.2375
-0.8375
0.6875
คำสั่งไซแลบ rand(n,m) สร้างเมทริกซ์แบบสุ่มขนาด n×m เมื่อกำหนดค่าใหม่ให้ A เป็นเมทริกซ์สุ่มขนาด 5 × 5 และ x เป็นเว็คเตอร์สุ่ม ขนาด 5 × 1 .
คำสั่งไซแลบ rand(n,m) สร้างเมทริกซ์แบบสุ่มขนาด n×m เมื่อกำหนดค่าใหม่ให้ A เป็นเมทริกซ์สุ่มขนาด 5 × 5 และ x เป็นเว็คเตอร์สุ่ม ขนาด 5 × 1 .
คำสั่ง \
โดยที่วไปสามารถใช้ในการแก้ปัญหาระบบที่ over-determined (ระบบที่มีจำนวนสมการมากกว่าค่าตัวแปรที่ไม่ทราบค่า) การหาคำตอบลีสสแคว์
“least squares
solution”.
ส่วนในระบบ under-determined ก็สามารถที่จะรองรับได้.
ให้ทดอลงแก้ปัญญาระบบ
under-determined (เมทริกซ์ที่มีแถวมากกว่าคอลัมน์) ให้ทดลองระบบ over-determined(ที่มีจำนวนแถวมากกว่าจำนวนคอลัมน์ และให้อธิบายการทดลองดังกล่าว
1.6 เงื่อนไขและการทำงานซ้ำเป็นวง (Loops and
Conditionals)
ไซแลบจัดประโยคคำสั่งที่ควบคุมการทำงาน คื for, while และ
if สำหรับควบคุมทิศทางการทำงาน (control flow)
ภายในโปรแกรมหนึ่งๆ พิจารณาตัวอย่างโปแกรมสำหรับการคำนวณ ex.
ans = 0; n = 1; term = 1;
while( ans + term ~= ans )
ans = ans + term;
term = term*x/n;
n = n + 1;
end
ans
จากนี้เครื่อหมาย ~= หมายถึงไม่เท่ากับ “not equal to”.
สามารถที่จะหลีกเลี่ยงการพิมพ์ซ้ำอีก
โดยการบันทึกโปรแกรมให้เป็นไฟล์
โดยเปิดใช้เท็กซ์เอดิเตอร์
ให้พิมพ์โปรแกรมลงไปแล้วบันทึกเป็นไฟล์โดยเข้าใช้เมนูไฟล์
ในการทำงานโปรแกรมจะเรียกหาชื่อไฟ. ให้ใช้ชื่อบันทึกเป็น ex.sci, โดยที่sci
คือนามสกุลแบบมาตรฐานสำหรับไฟล์ฟังก์ชันไซแลบ
ให้กลับไปที่หน้าต่างไซแลบ และทดสอบโปรแกรม ex. ให้พิมพ์ค่าของ
x และเลือกใช้คำสั่ง
exec(’ex.sci’). สำหรับขณะใดๆ ให้ทดลองดังนี้
x = 1.0
exec(’ex.sci’)
เพื่อให้ไซแลบรันโปรแกรมที่ x = 1.0.
การใช้โปรแกรมหาการประมาณการค่า
e1, e10 และ e−10.
การทำให้โปรแกรมเป็นฟังก์ชันหนึ่ง
ให้กลับไปที่หน้าต่างการแก้ไข และเปลี่ยนโปรแกรมเป็นดังนี้:
function x = ex(x)
// EX A simple function to
calculate exp(x)
ans = 0; n = 1; term = 1;
while( ans + term ~= ans )
ans = ans + term;
term = term*x/n;
n = n + 1;
end x = ans // end of
ex
endfunction
บรรทัดที่เริ่มต้นด้วย //เป็นเพียงข้อความอธิบายโปรแกรม ให้บันทึกการเปลี่ยนแปลง
จากนี้สามารถที่จะใช้ ex(x) แต่จำเป็นต้องโหลดการเปลี่ยนแปลง
โดยทดลองดังนี้
exec(’ex.sci’)
ex(1.0)
อัลกอริธึมนี้ไม่มีประโยชน์สำหรับค่าของ x ที่เป็นลบขนาดใหญ่
หรือในอีกทางหนึ่งดังในเลคเชอร์
สามารถใช้อัลกอริธึมนี้เป็นรากฐานสำหรับอัลกอริธึมที่ซับซ้อนขึ้น สิ่งแรกแม้ว่าจำต้องให้คุ้นเคยกับประโยคคำสั่ง if
ประโยคคำสั่ง if มีรูปแบบที่ง่าย กล่วคือ
if expression then
Scilab statements
else
Scilab statements
End
ให้ใช้ฟังก์ชัน ex และประโยคคำสั่ง
if ไปสร้างฟังก์ชันใหม่ชื่อ nesex ซึ่งทำการประมาณอย่างมีเหตุผลของค่า
e^x สำหรับ x
ที่มีค่าเป็นบวกหรือเป็นลบ (ดังที่แสดงไว้ในเล็คเชอร์)
โดยสามารถใช้ไฟล์เดียวกันเพื่อกำหนดทั้งฟังก์ชัน ex และ
newex
แต่ก็ต้องใช้คำสั่ง exec อีกครั้งเพื่อโหลดเข้ามาในฟังก์ชันใหม่คือ.
1.7 ความช่วยเหลือในไซแลบ (Help in Scilab)
1.7.1 คำสั่งของความช่วยเหลือ
คำสั่ง help สามารถหาได้ง่ายกว่าสำหรับที่เป็นคำสั่งพิเศษของไซแลบ หากว่าลืมรายละเอียดบางอย่าง ตัวอย่างเช่น ชื่อคำสั่ง help ให้ข้อสนเทศเกี่ยวกับชื่อคำสั่งของไซแลบนั้น กล่าวคือ
คำสั่ง help สามารถหาได้ง่ายกว่าสำหรับที่เป็นคำสั่งพิเศษของไซแลบ หากว่าลืมรายละเอียดบางอย่าง ตัวอย่างเช่น ชื่อคำสั่ง help ให้ข้อสนเทศเกี่ยวกับชื่อคำสั่งของไซแลบนั้น กล่าวคือ
help sin // ข้อสนเทศเกี่ยวกับ sin.
help + // ให้การเชื่อมโยงความช่วยเหลือต่อชื่อตัวกระทำในชุดความช่วยเหลือของไซแลบ // นี่เป็นข้อสนเทศที่พอเพียงเกี่ยวกับล็อกที่เก็บ
help + // ให้การเชื่อมโยงความช่วยเหลือต่อชื่อตัวกระทำในชุดความช่วยเหลือของไซแลบ // นี่เป็นข้อสนเทศที่พอเพียงเกี่ยวกับล็อกที่เก็บ
// เพื่อแสดงล็อก
หมายถึงล็อกฐาน e .
สังเกตเห็นว่าบ่อยครั้งที่ข้อสนเทศความช่วยเหลือได้จัดตัวอย่างหนึ่งแสดงถึงการใช้คำสั่งอย่างไร
ในเรื่องนี้เป็นประโยชน์เป็นการเฉพาะเมื่อ การทดลองกับคำสั่งใหม่ สามารถการเคลื่อนย้ายและการวาง (
cutting and pasting) เพื่อการรันคำสั่งตัวอย่าง.
ในไซแลบคำสั่ง
apropos สามารถนำไปใช้ค้นหาสำหรับข้อสนเทศที่เกี่ยวข้องอยู่ในประเด็น.
apropos
logarithm //จัดรายการที่สัมพันธ์กับ
logarithms
1.7.2
หน้าต่างความช่วยเหลือ
ยังคงเป็นไปได้ที่จะหาความช่วยเหลือโดยการคลิกที่เมนูความช่วยเหลือ
(help menu) เหนือหน้าต่างคำสั่งวินโดว์ จากเมนูความช่วยเหลือ ให้เลือกส่วนการสอบถามหาที่ต้องการ
และรายการหัวข้อความช่วยเหลือแสดงให้เห็น
ความก้าวหน้าของวิธีการนี้
ทำให้เป็นไปได้ที่จะสืบค้นไปโดยรอบหัวข้อที่แตกต่างกัน และไม่มีอะไรต่อคำสั่งที่มีประโยชน์ ตัวอย่างเลช่นสำหรับหน้าต่างสอบถาม เมื่อคลิกบทr
’Linear Algebra’. แล้วค้นหาคำ ’linsolve’. ทันทีที่พบให้คลิกที่คำว่า ’show’ เพื่อดูหน้าความช่วยเหลือที่อยู่ในประเด็น.
ข้อสังเกตที่การคลิกแบบดับเปิลไม่ทำงานในวินโดว์ไซแลบในไซแลบรุ่น
2.6 มีการทำงานผิดพลาดเล็กน้อยเมื่อเปลี่ยนบทเรียน
และเลื่อนไปยังส่วนหัวข้อใหม่
การลือกหัวข้อในครั้งที่สองดูเหมือนจะทำงานได้
ดดยทั่วไปหน้าต่างความช่วยเหลือเป็นแนวทางที่ดีในการสำรวจคำสั่งของไซแลบ
แบบฝึกหัดที่ 1.
1. อินเวิร์สฟังก์ชันไซน์ เป็นฟังก์พื้นฐานของไซแลบหรือไม่
(อินเวิร์สไซน์รู้จักกันในรูปแบบ
sin−1,
arcsin, หรือ asin.)
(a) หาค่า sin−1(.5) ในไซแลบได้อย่างไร ? ให้ขอความช่วยเหลือ
help .
(b) If x = .5, แล้ว
sin(sin−1(x)) − x exactly zero in Scilab?
(c) If x = π/3, is sin−1(sin(x)) − x exactly
zeros in Scilab? What about
x = 5π/11?
2 ไซแลบมีฟังก์ชันสำหรับแปลงจำนวนเลขไปเป็นเลขฐาน 16
เช่น แปลงไปอยู่ในรูปได้หรือไม่ (แนะ: .ให้ใช้คำสั่ง
เพื่อหาแนวทางในการแปลงตัวเลขทศนิยมไปเป็นตัวเลข(hexadecimal.) ค่าตัวเลขs 61453 ในฐาน 16 มีค่าเท่าใด ? คอมพิวเตอร์เกือบทั้งหมดแทนจำนวนตัวเลขภายในด้วยตัวเลขhexadecimals.
3. เมื่อมองหาข้อสนเทศเกี่ยวกับล็อกการิธึม
สังเกตได้ว่าการสืบค้นสำหรับ logarithms ล้มเหลว
ขณะที่ค้นหา logarithm ประสบผลสำเร็จ มี 8 เรื่องที่นำเข้ามรวมทั้งคำสั่ง
logm, สำหรับคำนวณหาค่า
ล็อกของเมทริกซ์
4. เพื่อที่จะแสดงการใช้เมนูไซแลบในคำสั่ง demos ซึ่งจะนำเมนูการแสดงสาธิต
และตัวอย่างเพื่อสำรวจดู.
(a)
ให้ไปที่ graphics เพื่อดูภาพที่น่าสนใจ.
(b)
การสาธิตเช่นเรื่องรถเทลเลอร์และการจอด ที่น่าสนใจ.
1.8 สรุปย่อ
ความพยายามที่จะให้แนวคิดอย่างรวดเร็วของส่วนช่วยอำนวยความสะดวกที่มีในไซแลบ
และให้แนวคิดในการโปแกรมไซแลบร่วมด้วยกับเท็กซ์เอดิเตอร์ในการทดลองอย่างมีประสิทธิภาพด้วยปัญหาเมทริกซ์
เพื่อให้มีประสบการณ์เพิ่มในไซแลบ
จึงขอแนะนำให้อ่านเอกสารเพิ่มเติมจากเว็บไซต์เพื่อการเรียนรู้ไซแลบ ที่มีการสาธิตตัวอย่างที่จะให้แนวคิดที่ดี
ตอนนี้ให้ดูว่าสามารถที่จะแก้ปัญหาต่อไปนี้ได้หรือไม่
1.9 แบบฝึกหัด
แบบฝึกหัดที่ 2.
จงเขียนโปรแกรมไซแลบเพื่อคำนวนหาค่ารากสมการควอดเดรติก และแสดงค่ารากของสมการ ax2 + bx + c = 0 โดยใช้สูตรดังนี้
จงเขียนโปรแกรมไซแลบเพื่อคำนวนหาค่ารากสมการควอดเดรติก และแสดงค่ารากของสมการ ax2 + bx + c = 0 โดยใช้สูตรดังนี้
ควรจะทำงานได้ภายใต้คำสัง ในลักษณะ quadroots(1,3,2) สำหรับกรณี x2 + 3x + 2 = 0. โดยโปรแกรมดำเนินการให้ได้ค่ารากสมการในรูปเว็คเตอร์ ตัวอย่างเช่น รากที่1 และรากที่
2 ในไฟล์ฟังก์ชัน และเริ่มนิยามฟังก์ชันด้วยบรรทัดดังนี้
function
[root1, root2] = quadroots(a,b,c)
การทำเช่นเก็บค่าไว้ใน 2 ตัวแปร
เช่น r1 และ r2 โดยให้ฟังก์ชันทำงานด้วยคำสั่ง
[r1
r2] = quadroots(1,3,2)
โปรแกรมควรจะได้หลีกเลี่ยงการหารโดยศูนย์ , พิมพ์แสดงข้อความที่เหมาะสมในกรณีนี้
ให้แน่ใจการตัดสินใจของตัวเองถึงสิ่งที่จะต้องทำในกรณีของรากตัวเลขเชิงซ้อน, เนื่องจากไซแลบสามารถคำนวณและพิมพ์ผลค่าตัวเลขเชิงซ้อน ทดสอบ quadroots ดังในตัวอย่างต่อไปนี้,
ตรวจสอบผลลัพธ์ในแต่ละกรณี
ให้ความสนใจเป็นพิเศษกับตัวอย่างสุดท้าย.
1. x2 + 1 = 0
2.
0x2 + 2x + 1 = 0
3. x2 + 3x + 2 = 0
4.
4x2 + 24x + 36 = 0
5.
1018x2 − x − 1 = 0
6.
10−18x2 − x + 1 = 0 (รากสมการโดยประมาณ 1 + 10−18 และ 10 18 − 1),
ข้อใดที่สามารถตรวจสอบด้วยมือ
ตัวอย่างสุดท้ายข้างบนแสดงปัญหา catastrophic cancellation. ให้อธิบายว่าทำไมจึงให้ค่ารากหนึ่งไม่ละเอียด
แต่ค่าอื่นไม่ใช่ และให้ออกแบบอัลกอริธึมที่ดีกว่าในการคำนวณรากทั้งสองอย่างละเอียดถูกต้อง
สามารถที่จะใช้ความจริงที่ว่าราก x1 และ x2 ของ ax2+bx+c = 0 สอดคล้องตาม
สามารถที่จะใช้ความจริงที่ว่าราก x1 และ x2 ของ ax2+bx+c = 0 สอดคล้องตาม
x1x2 = c/a.
จงเขียนและปรับเปลี่ยนโปรแกรมquadroots2
โดยใช้วิธีการที่ปรับปรุง,
และทดสอบ ในกรณีเช่นเดียวกับข้างบนที่ผ่านมา นับว่ามีประโยชน์มากในการเขียนโปรแกรมทดสอบซึ่งการทดสอบโปรแกรมหนึ่งๆ
เทียบกับผลลัพธ์ที่ทราบแล้ว
ให้เขียนโปแปรมชื่อtestQuadroots ซึ่งใช้ฟังก์ชัน
quadroots (quadroots and quadroots2) และทดสอบว่าโปรแกรมตามตัวอย่างที่กำหนดข้างบน เป็นที่รู้จักกันในนามการทดสอบหน่วย.
ไม่มีความคิดเห็น:
แสดงความคิดเห็น