Tutorial 4 – Sub-matrices
เป็นไปได้ที่จะสะกัดแยก หรือแทนที่องค์ประกอบในเมทริกซ์ โดยอ้างถึงอินเด็กของแถวและคอลัมน์ของเมทริกซ์
-->a = [1 2 3; 4 5 6 ] สร้างเมทริกซ์ 2 แถว 3 คอลัมน์
-->b = a(2,2)
b =
5
-->a(2, 2) = 100 แทนที่องค์ประกอบของ a ที่คอลัมน์ที่ 2 แถวที่2 ด้วยจำนวน 100
a =
1 2 3
4 100 6
การดำเนินการที่คล้ายคลึงกันที่ทำต่อซับเมทริกซ์ของเมทริกซ์หนึ่งที่มีซับเมทริกซ์สามารถแยกแยะโดยจำนวนแถวและคอลัมน์ ที่ซึ่งมีจุดเริ่มต้นและจุดปลาย ให้เราพิจารณาการสร้างเมทริกซ์แรกขนาด 5x8.ดังนี้
-->a=rand(5,8)*100 เป็นการสร้างเมทริกซ์ขนาด 5x8 ที่องค์ ประกอบเป็นตัวเลขที่เกิดจากการสร้างเลขสุ่ม
โดย สุ่มจำนวนเต็ม ระหว่าง 0 และ 100
เนื่องจากองค์ประกอบเป็นจำนวนสุ่ม แต่ละคนที่สร้างเมทริกซ์นี้จะได้ เมทริกซ์ที่แตกต่างกัน ให้เราคิดว่าต้องการแยกซับเมทริกซ์ขนาด 2x4 ออกจากเมทริกซ์ a กำหนดขอบเขตช่วงโดยแถว 3 ถึง 4 คอลัมน์ 2 ถึง 5 จะได้เมทริกซ์เป็น a(3:4, 2:5). ช่วงของแถวและคอลัมน์แทนได้ด้วยคำสั่ง range 3:4 และ 2:5 ตามลำดับ ดังนั้น 3:4 กำหนดช่วง 3,4 ขณะที่ 2:5 กำหนดช่วง 2,3,4,5 อย่างไรก็ตามเมทริกซ์ a ยังคงมีอยู่ไม่ได้รับผลกระทบใด
-->b=a(3:4, 2:5)
คำสั่งนี้สำเนา ซับเมทริกซ์ ไปเป็นเมทริกซ์ 'b'. ซับเมทริกซ์สามารถเขียนทับไปแทนที่ได้ ง่ายเท่าๆกับการสำเนา การทำให้ทุกองค์ประกอบของ ซับเมทริกซ์ระหว่างช่วงบนเท่ากับศูนย์ ให้ใช้คำสั่งดังนี้
-->a(3:4, 2:5)=zeros(2,4) คำสั่งนี้สร้างเมทริกซ์ 2x4 มีองค์ประกอบเป็น 0 แล้วใส่เป็นซับเมทริกซ์ 'a' ระหว่างแถว 3:4 และคอลัมน์ 2:5.
ให้สังเกตว่าซับเมทริกซ์ทางด้านซ้ายมือ และเมทริกซ์ทางขวามือ (เป็นเมทริกซ์ศูนย์ ตามตัวอย่างข้างบน) จะต้องมีขนาดเดียวกัน
ขณะที่การใช้ช่วง (range) ในการบ่งถึงแถวและหรือคอลัมน์ ที่ยอมให้มียกออกจากตอนเริ่มแรก (หรือเลิก)ค่าในช่วง ซึ่งเป็นกรณีที่คิดให้เป็น 1 (หรือตัวเลขของแถวหรือคอลัมน์สุดท้าย) เพื่อระบุแถวทั้หงมด (หรือคอลัมน์) เป็นการเพียงพอที่จะใช้เพียงแค่โคลอน (:). โดยวิธีนี้ ซับเมทริกซ์ประกอบด้วยทั้งหมดของแถวและคอลัมน์ 2 และ 3 ของเมทริกซ์ a คำสั่งก็คือ a(:, 2:3). ปกติแล้ว a(:, :) แทนเมทริกซ์ทั้งหมด ซึ่งแน่นอนว่าสามารถแทนได้โดยเพียงการเขียนว่า a ไซแลบใช้สัญลักษณ์พิเศษอ้างถึงจำนวนของแถวสุดท้าย(หรือคอลัมน์) โดยสัญลักษณ์$ สามารถใช้ภายใต้ช่วงตามการระบุ ที่แทนจำนวนของแถวสุดท้าย(หรือ คอลัมน์)
เป็นไปไม่ได้ที่ระบุเฉพาะค่าเริ่มต้นของช่วงเท่านั้น และ ไม่มีค่าปลายหรือในทางที่กลับกัน ทั้งสองค่าระบุหรือ ไม่ระบุค่าทั้งสอง ซับเมทริกซ์ของแถวทั้งหมดของ เมทริกซ์ a และคอลัมน์ 3 ถึง 8 แทนได้ด้วย
ในด้านล่าง เราทำการสะกัดทุกแถวและคอลัมน์จากคอลัมน์ 3 ไปคอลัมน์สุดท้าย นอกจากคอลัมน์หนึ่ง นั่นคือ 7 ให้สังเกตว่า $ คือคอลัมน์สุดท้าย และ $-1 คือคอลัมน์สุดท้ายนอกจากคอลัมน์หนึ่ง
ให้สังเกตว่า ซับเมทริกซ์ไม่จำเป็นต้องประกอบด้วยแถวที่ติดต่อกัน หรือคอลัมน์ที่ติดต่อกัน ตัวอย่างเช่นเพื่อสะกัดแถวคี่และคอลัมน์คี่จากเมทริกซ์ a, เราคงสามารถใช้คำสั่งต่อไปนี้
-->c = a(1:2:$, 1:2:$)
คำสั่งนี้สำเนาซับเมทริกซ์ของ a ด้วยแถว 1, 3, 5 และ คอลัมน์ 1, 3, 5, 7 อยู่ในเมทริกซ์ b. จำนวนแถวแทนด้วยช่วง 1:2:$ ซึ่งทำให้เห็นได้ว่าเริ่มจาก 1, เพิ่มขึ้นทีละ 2 แต่ละครั้งไปจนถึง $, ซึ่งในกรณีนี้คือ 5.
-->c = a(:, $:-1:1)
เราสามารถทำได้แม้แต่การกลับลำดับของคอลัมน์(หรือแถว หรือทั้งสองแถวและคอลัมน์) ช่วง $:-1:1 กลับลำดับของคอลัมน์ (แถวไม่มีการเปลี่ยนแปลง) , และเมทริกซ์ที่ปรับเปลี่ยนไปถูกเก็บไว้ใน c
แบบฝึกหัด 4 – ซับเมทริกซ์
1.ให้สกัดคอร์ลัมน์สุดท้ายของเมทริกซ์ a และเก็บไว้ในเมทริกซ์ b (Ans: b=a(:,$))
2. ให้สกัดคอลัมน์สุดท้ายแต่เป็นคอลัมน์หนึ่งของเมทริกซ์ a และเก็บไว้ในเมทริกซ์ b(Ans: b = a(:, $-1)).
3. ให้เปลี่ยนซับเมทริกซ์ระหว่างแถว 3 ถึง 5 และคอลัมน์ 2 ไปยังคอลัมน์สุดท้ายนอกจากหนึ่งคอลัมน์ ในเมทริกซ์ a ขนาด 5x5 ด้วย ศูนย์ (Ans: a(3:5, 2:$-1) = zeros(3, 4). แทนที่จะเป็น zeros(3,4) เราสามารถใช้ zeros(:,:) และ Scilab จะคำนวณจำนวนที่ต้องการของแถวและคอลัมน์โดยตัวเอง)
4. แทนจำนวณเลขคู่คอลัมน์ของเมทริกซ์ a มีขนาด 3x5 ด้วยจำนวนหนึ่ง (Ans: a(:,2:2:$)=ones(:, :)).
5. อะไรเป็นซับเมทริกซ์ที่สกัดด้วยคำสั่งต่อไปนี้ a(1:3,$-2:$)? (Ans: เป็นการสกัด 3 แถวแรกและ 3 คอลัมน์สุดท้ายของเมทริกซ์ a)
6. คิดให้เป็นเมทริกซ์หนึ่งขนาด 5x8 ต่อไปนี้เป็นคำสั่งที่ถูกต้องหรือไม่ ถ้าเป็นเช่นนั้น คำสั่งนั้นทำอะไร ถ้าไม่เป็นเช่นนั้น แล้วคำสั่งที่ถูกต้องคืออะไร
1. A(1:, 5) ไม่ถูกต้อง ควรระบุถึงจำนวนแถวปลายสด 2. A(:, 5) ถูกต้อง 3. a(1:3, $-1:$) ถูกต้องt 4. a(:$, 3:6) ไม่ถูกต้อง ควรที่จะระบุจำนวนแถวเริ่มต้น
-->a(:, 3:$)
-->a(:, 3:$-1)
เป็นไปได้ที่จะสะกัดแยก หรือแทนที่องค์ประกอบในเมทริกซ์ โดยอ้างถึงอินเด็กของแถวและคอลัมน์ของเมทริกซ์
-->a = [1 2 3; 4 5 6 ] สร้างเมทริกซ์ 2 แถว 3 คอลัมน์
-->b = a(2,2)
b =
5
-->a(2, 2) = 100 แทนที่องค์ประกอบของ a ที่คอลัมน์ที่ 2 แถวที่2 ด้วยจำนวน 100
a =
1 2 3
4 100 6
การดำเนินการที่คล้ายคลึงกันที่ทำต่อซับเมทริกซ์ของเมทริกซ์หนึ่งที่มีซับเมทริกซ์สามารถแยกแยะโดยจำนวนแถวและคอลัมน์ ที่ซึ่งมีจุดเริ่มต้นและจุดปลาย ให้เราพิจารณาการสร้างเมทริกซ์แรกขนาด 5x8.ดังนี้
-->a=rand(5,8)*100 เป็นการสร้างเมทริกซ์ขนาด 5x8 ที่องค์ ประกอบเป็นตัวเลขที่เกิดจากการสร้างเลขสุ่ม
โดย สุ่มจำนวนเต็ม ระหว่าง 0 และ 100
เนื่องจากองค์ประกอบเป็นจำนวนสุ่ม แต่ละคนที่สร้างเมทริกซ์นี้จะได้ เมทริกซ์ที่แตกต่างกัน ให้เราคิดว่าต้องการแยกซับเมทริกซ์ขนาด 2x4 ออกจากเมทริกซ์ a กำหนดขอบเขตช่วงโดยแถว 3 ถึง 4 คอลัมน์ 2 ถึง 5 จะได้เมทริกซ์เป็น a(3:4, 2:5). ช่วงของแถวและคอลัมน์แทนได้ด้วยคำสั่ง range 3:4 และ 2:5 ตามลำดับ ดังนั้น 3:4 กำหนดช่วง 3,4 ขณะที่ 2:5 กำหนดช่วง 2,3,4,5 อย่างไรก็ตามเมทริกซ์ a ยังคงมีอยู่ไม่ได้รับผลกระทบใด
-->b=a(3:4, 2:5)
คำสั่งนี้สำเนา ซับเมทริกซ์ ไปเป็นเมทริกซ์ 'b'. ซับเมทริกซ์สามารถเขียนทับไปแทนที่ได้ ง่ายเท่าๆกับการสำเนา การทำให้ทุกองค์ประกอบของ ซับเมทริกซ์ระหว่างช่วงบนเท่ากับศูนย์ ให้ใช้คำสั่งดังนี้
-->a(3:4, 2:5)=zeros(2,4) คำสั่งนี้สร้างเมทริกซ์ 2x4 มีองค์ประกอบเป็น 0 แล้วใส่เป็นซับเมทริกซ์ 'a' ระหว่างแถว 3:4 และคอลัมน์ 2:5.
ให้สังเกตว่าซับเมทริกซ์ทางด้านซ้ายมือ และเมทริกซ์ทางขวามือ (เป็นเมทริกซ์ศูนย์ ตามตัวอย่างข้างบน) จะต้องมีขนาดเดียวกัน
ขณะที่การใช้ช่วง (range) ในการบ่งถึงแถวและหรือคอลัมน์ ที่ยอมให้มียกออกจากตอนเริ่มแรก (หรือเลิก)ค่าในช่วง ซึ่งเป็นกรณีที่คิดให้เป็น 1 (หรือตัวเลขของแถวหรือคอลัมน์สุดท้าย) เพื่อระบุแถวทั้หงมด (หรือคอลัมน์) เป็นการเพียงพอที่จะใช้เพียงแค่โคลอน (:). โดยวิธีนี้ ซับเมทริกซ์ประกอบด้วยทั้งหมดของแถวและคอลัมน์ 2 และ 3 ของเมทริกซ์ a คำสั่งก็คือ a(:, 2:3). ปกติแล้ว a(:, :) แทนเมทริกซ์ทั้งหมด ซึ่งแน่นอนว่าสามารถแทนได้โดยเพียงการเขียนว่า a ไซแลบใช้สัญลักษณ์พิเศษอ้างถึงจำนวนของแถวสุดท้าย(หรือคอลัมน์) โดยสัญลักษณ์$ สามารถใช้ภายใต้ช่วงตามการระบุ ที่แทนจำนวนของแถวสุดท้าย(หรือ คอลัมน์)
เป็นไปไม่ได้ที่ระบุเฉพาะค่าเริ่มต้นของช่วงเท่านั้น และ ไม่มีค่าปลายหรือในทางที่กลับกัน ทั้งสองค่าระบุหรือ ไม่ระบุค่าทั้งสอง ซับเมทริกซ์ของแถวทั้งหมดของ เมทริกซ์ a และคอลัมน์ 3 ถึง 8 แทนได้ด้วย
ในด้านล่าง เราทำการสะกัดทุกแถวและคอลัมน์จากคอลัมน์ 3 ไปคอลัมน์สุดท้าย นอกจากคอลัมน์หนึ่ง นั่นคือ 7 ให้สังเกตว่า $ คือคอลัมน์สุดท้าย และ $-1 คือคอลัมน์สุดท้ายนอกจากคอลัมน์หนึ่ง
ให้สังเกตว่า ซับเมทริกซ์ไม่จำเป็นต้องประกอบด้วยแถวที่ติดต่อกัน หรือคอลัมน์ที่ติดต่อกัน ตัวอย่างเช่นเพื่อสะกัดแถวคี่และคอลัมน์คี่จากเมทริกซ์ a, เราคงสามารถใช้คำสั่งต่อไปนี้
-->c = a(1:2:$, 1:2:$)
คำสั่งนี้สำเนาซับเมทริกซ์ของ a ด้วยแถว 1, 3, 5 และ คอลัมน์ 1, 3, 5, 7 อยู่ในเมทริกซ์ b. จำนวนแถวแทนด้วยช่วง 1:2:$ ซึ่งทำให้เห็นได้ว่าเริ่มจาก 1, เพิ่มขึ้นทีละ 2 แต่ละครั้งไปจนถึง $, ซึ่งในกรณีนี้คือ 5.
-->c = a(:, $:-1:1)
เราสามารถทำได้แม้แต่การกลับลำดับของคอลัมน์(หรือแถว หรือทั้งสองแถวและคอลัมน์) ช่วง $:-1:1 กลับลำดับของคอลัมน์ (แถวไม่มีการเปลี่ยนแปลง) , และเมทริกซ์ที่ปรับเปลี่ยนไปถูกเก็บไว้ใน c
แบบฝึกหัด 4 – ซับเมทริกซ์
1.ให้สกัดคอร์ลัมน์สุดท้ายของเมทริกซ์ a และเก็บไว้ในเมทริกซ์ b (Ans: b=a(:,$))
2. ให้สกัดคอลัมน์สุดท้ายแต่เป็นคอลัมน์หนึ่งของเมทริกซ์ a และเก็บไว้ในเมทริกซ์ b(Ans: b = a(:, $-1)).
3. ให้เปลี่ยนซับเมทริกซ์ระหว่างแถว 3 ถึง 5 และคอลัมน์ 2 ไปยังคอลัมน์สุดท้ายนอกจากหนึ่งคอลัมน์ ในเมทริกซ์ a ขนาด 5x5 ด้วย ศูนย์ (Ans: a(3:5, 2:$-1) = zeros(3, 4). แทนที่จะเป็น zeros(3,4) เราสามารถใช้ zeros(:,:) และ Scilab จะคำนวณจำนวนที่ต้องการของแถวและคอลัมน์โดยตัวเอง)
4. แทนจำนวณเลขคู่คอลัมน์ของเมทริกซ์ a มีขนาด 3x5 ด้วยจำนวนหนึ่ง (Ans: a(:,2:2:$)=ones(:, :)).
5. อะไรเป็นซับเมทริกซ์ที่สกัดด้วยคำสั่งต่อไปนี้ a(1:3,$-2:$)? (Ans: เป็นการสกัด 3 แถวแรกและ 3 คอลัมน์สุดท้ายของเมทริกซ์ a)
6. คิดให้เป็นเมทริกซ์หนึ่งขนาด 5x8 ต่อไปนี้เป็นคำสั่งที่ถูกต้องหรือไม่ ถ้าเป็นเช่นนั้น คำสั่งนั้นทำอะไร ถ้าไม่เป็นเช่นนั้น แล้วคำสั่งที่ถูกต้องคืออะไร
1. A(1:, 5) ไม่ถูกต้อง ควรระบุถึงจำนวนแถวปลายสด 2. A(:, 5) ถูกต้อง 3. a(1:3, $-1:$) ถูกต้องt 4. a(:$, 3:6) ไม่ถูกต้อง ควรที่จะระบุจำนวนแถวเริ่มต้น
-->a(:, 3:$)
-->a(:, 3:$-1)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น