ผลต่างระหว่างรุ่นของ "01204472/การทดลองการคำนวณจำนวนจริง"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) ล (ย้อนการแก้ไขของ CarolAnderson (Talk) ไปยังรุ่นของ 158.108.233.130) |
||
(ไม่แสดง 6 รุ่นระหว่างกลางโดยผู้ใช้ 4 คน) | |||
แถว 4: | แถว 4: | ||
1.1 ทดลองหาค่าต่ำสุดที่จำนวนจริงในภาษาที่ใช้สามารถเก็บได้ (ที่มากกว่า 0) | 1.1 ทดลองหาค่าต่ำสุดที่จำนวนจริงในภาษาที่ใช้สามารถเก็บได้ (ที่มากกว่า 0) | ||
− | 1.2 เนื่องจากรูปแบบในการเก็บจำนวนจริงจะเก็บหลักและเลขนัยสำคัญ ให้เขียนโปรแกรมเพื่อหาจำนวนหลักของเลขนัยสำคัญ | + | 1.2 เนื่องจากรูปแบบในการเก็บจำนวนจริงจะเก็บหลักและเลขนัยสำคัญ ให้เขียนโปรแกรมเพื่อหาจำนวนหลักของเลขนัยสำคัญ (''hint:'' สามารถปรับแก้จากโปรแกรมในข้อ 1.1 ได้ไม่ยากนัก) |
1.3 จากคำตอบในข้อ 1.1 และ 1.2 ลองเทียบตารางใน[http://en.wikipedia.org/wiki/IEEE_754-2008 มาตรฐาน IEEE 754] ว่าการเก็บข้อมูลจำนวนจริงของภาษาที่ใช้เก็บด้วยรูปแบบใด | 1.3 จากคำตอบในข้อ 1.1 และ 1.2 ลองเทียบตารางใน[http://en.wikipedia.org/wiki/IEEE_754-2008 มาตรฐาน IEEE 754] ว่าการเก็บข้อมูลจำนวนจริงของภาษาที่ใช้เก็บด้วยรูปแบบใด | ||
แถว 15: | แถว 15: | ||
เราจะพิจารณาการประมาณค่าสองแบบ โดยทั้งคู่จะมีพารามิเตอร์ <math>h</math> แทนความละเอียด | เราจะพิจารณาการประมาณค่าสองแบบ โดยทั้งคู่จะมีพารามิเตอร์ <math>h</math> แทนความละเอียด | ||
− | * '''แบบที่ 1''' ประมาณด้วย <math> | + | * '''แบบที่ 1''' ประมาณด้วย <math>g_1(x) = \frac{f(x+h)-f(x)}{h}</math> |
* '''แบบที่ 2''' ประมาณด้วย <math>g_2(x) = \frac{f(x+h)-f(x-h)}{2h}</math> | * '''แบบที่ 2''' ประมาณด้วย <math>g_2(x) = \frac{f(x+h)-f(x-h)}{2h}</math> | ||
แถว 60: | แถว 60: | ||
<math>\left[\begin{array}{cc}10^{-k} & 1\\1&1\end{array}\right] | <math>\left[\begin{array}{cc}10^{-k} & 1\\1&1\end{array}\right] | ||
\left[\begin{array}{c}x_1\\x_2\end{array}\right] | \left[\begin{array}{c}x_1\\x_2\end{array}\right] | ||
− | =\left[\begin{array}{c}1\\ | + | =\left[\begin{array}{c}1\\0\end{array}\right] |
</math> | </math> | ||
แถว 74: | แถว 74: | ||
ให้ทดลองปรับค่า k และพิจารณาหลักของคำตอบที่เกิดความคลาดเคลื่อนที่มาจากลำดับของการทำ gaussian elimination | ให้ทดลองปรับค่า k และพิจารณาหลักของคำตอบที่เกิดความคลาดเคลื่อนที่มาจากลำดับของการทำ gaussian elimination | ||
− | + | ลองพยายามอธิบายว่าทำไมการสลับแถวจึงมีผลทำให้ความคลาดเคลื่อนเพิ่มหรือลดลง |
รุ่นแก้ไขปัจจุบันเมื่อ 06:03, 5 สิงหาคม 2555
หน้านี้เป็นรายละเอียดการทดลองเกี่ยวกับข้อจำกัดในการคำนวณด้วยจำนวนจริงบนคอมพิวเตอร์ ประกอบการเรียนวิชา 01204472
ขอบเขตของตัวเลข
1.1 ทดลองหาค่าต่ำสุดที่จำนวนจริงในภาษาที่ใช้สามารถเก็บได้ (ที่มากกว่า 0)
1.2 เนื่องจากรูปแบบในการเก็บจำนวนจริงจะเก็บหลักและเลขนัยสำคัญ ให้เขียนโปรแกรมเพื่อหาจำนวนหลักของเลขนัยสำคัญ (hint: สามารถปรับแก้จากโปรแกรมในข้อ 1.1 ได้ไม่ยากนัก)
1.3 จากคำตอบในข้อ 1.1 และ 1.2 ลองเทียบตารางในมาตรฐาน IEEE 754 ว่าการเก็บข้อมูลจำนวนจริงของภาษาที่ใช้เก็บด้วยรูปแบบใด
ทดลองประมาณค่า
ในการเรียนครั้งก่อนเราเห็นตัวอย่างของการทราบ derivative ของฟังก์ชันที่ต้องการหาค่าต่ำสุด อย่างไรก็ตาม ถ้าเราสามารถทำได้แค่คำนวณค่าฟังก์ชัน แต่เราต้องการใช้งานค่า derivative ที่จุดต่าง ๆ เราจะทำอย่างไร?
ให้ฟังก์ชัน และจำนวนจริง เราต้องการประมาณค่า
เราจะพิจารณาการประมาณค่าสองแบบ โดยทั้งคู่จะมีพารามิเตอร์ แทนความละเอียด
- แบบที่ 1 ประมาณด้วย
- แบบที่ 2 ประมาณด้วย
ในการทดลองสำหรับแต่ละฟังก์ชันต่อไปนี้ ให้วาดกราฟเปรียบเทียบความผิดพลาดของการประมาณแบบที่ 1 และแบบที่ 2 โดยให้เปลี่ยนตามค่า โดยมากให้ k มีค่าตั้งแต่ 1 ถึง 500 ก็น่าจะเห็นความแตกต่าง
- หมายเหตุ 1: ในการสร้างตัวแปร k อย่าลืมว่าต้องให้มีค่าเป็นจำนวนจริง โดยสั่ง k = arange(1.,500.,1) จากนั้นลองสั่ง 1/k เพื่อดูอาร์เรย์ของค่า ที่ได้
- หมายเหตุ 2: ใน pylab เมื่อต้องการลบกราฟ สั่ง clf()
2.1 ให้ ให้ประมาณค่าของ ที่ (สำหรับข้อนี้ คำตอบที่ถูกต้องคืออะไร?)
2.2 ให้ ให้ประมาณค่าของ ที่ (สำหรับข้อนี้ คำตอบที่ถูกต้องคืออะไร?)
2.3 ให้ ให้ประมาณค่าของ ที่ (สำหรับข้อนี้ คำตอบที่ถูกต้องคืออะไร?) สังเกตว่าเราคิดมุมเป็นหน่วยเรเดียล
2.4 ให้ ให้ประมาณค่าของ ที่ (สำหรับข้อนี้คำตอบที่ถูกต้องคืออะไร?)
ความละเอียดกับการประมาณค่า
2.5 (a) ใช้การประมาณค่าแบบที่ 2 กับฟังก์ชันจากข้อ 2.4 ให้ใช้ค่า k ระหว่าง 5000 ถึง 10000 (โดยอาจจะเพิ่มค่าทีละ 100) จากนั้นเขียนกราฟแสดง error
2.5 (b) ทำตามข้อ 2.5(a) แต่ให้ใช้ค่า k ระหว่าง 10000 ถึง 20000 ให้วาดกราฟในอีกรูปหนึ่งแยกกัน จากนั้นให้เปรียบเทียบลักษณะของกราฟทั้งสองเพื่อให้เห็นลักษณะการเปลี่ยนแปลงของค่า error
- หมายเหตุ เราจะสร้างรูปกราฟ (figure) ใหม่โดยสั่ง figure() เมื่อสั่งแล้ว figure ปัจจุบันจะย้ายไปอีกรูปกราฟหนึ่ง
2.6 ใช้การประมาณค่าแบบที่ 2 กับฟังก์ชันจากข้อ 2.4 ให้เพิ่มค่า ขึ้นเรื่อย (นั่นคือการเพิ่มความละเอียด) จากนั้นให้หาขอบเขตที่การเพิ่มค่า ทำให้เราสังเกตเห็น error ที่ไม่ได้เกิดจากอัลกอริทึม (error ถ้าพิจารณาจากกราฟ ให้อธิบายว่าส่วนใดคือ error ที่เกิดจากอัลกอริทึมที่ใช้ประมาณ อะไรไม่ใช่)
2.7 ใช้การประมาณค่าแบบที่ 2 กับฟังก์ชันจากข้อ 2.2 ให้เพิ่มค่า ขึ้นเรื่อย (นั่นคือการเพิ่มความละเอียด) จากนั้นให้หาขอบเขตที่การเพิ่มค่า ทำให้เราสังเกตเห็น error ที่ไม่ได้เกิดจากอัลกอริทึม (error ถ้าพิจารณาจากกราฟ ให้อธิบายว่าส่วนใดคือ error ที่เกิดจากอัลกอริทึมที่ใช้ประมาณ อะไรไม่ใช่)
2.8 เปรียบเทียบขอบเขตที่ได้ในข้อ 2.5 และ 2.6
Gaussian Elimination
- หมายเหตุ: ตัวอย่างนำจากสไล์ดบทที่ 7 จาก [1]
สมมติให้ เป็นค่าคงที่ พิจารณาระบบสมการต่อไปนี้
3.1 ให้แก้ระบบสมการนี้ด้วยมือ และหาค่าของ และ
เมื่อเขียนอยู่ในรูปของเมตริกซ์ ระบบดังกล่าวเขียนได้เป็น
3.2 ในข้อนี้เราจะทดลองโดยปรับค่า ตั้งแต่ 1 และเพิ่มขึ้นเรื่อย ๆ
เปรียบเทียบการแก้ระบบสมการด้วย gaussian elimination โดยพิจารณาการแก้สองแบบดังนี้
- แก้จากเมตริกซ์ดังกล่าวโดยตรง
- ให้สลับแถวแรก กับแถวที่สองก่อน จากนั้นจึงค่อยแก้ด้วย gaussian elimination
ให้เปรียบเทียบผลที่ได้จากการแก้ระบบสมการด้วย gaussian elimination ทั้งสองแบบ และค่าที่คำนวณโดยใช้สูตรโดยตรงจากคำตอบที่ได้จากข้อ 3.1
ให้ทดลองปรับค่า k และพิจารณาหลักของคำตอบที่เกิดความคลาดเคลื่อนที่มาจากลำดับของการทำ gaussian elimination
ลองพยายามอธิบายว่าทำไมการสลับแถวจึงมีผลทำให้ความคลาดเคลื่อนเพิ่มหรือลดลง