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

การดำเนินการเมทริกซ์ ไซแลบติวเตอร์ 4

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 ออกจากเมทริกซ์  กำหนดขอบเขตช่วงโดยแถว 3 ถึง  คอลัมน์ 2 ถึง 5   จะได้เมทริกซ์เป็น a(3:4, 2:5).  ช่วงของแถวและคอลัมน์แทนได้ด้วยคำสั่ง range 3:และ 2:ตามลำดับ  ดังนั้น 3:กำหนดช่วง 3,4  ขณะที่ 2:5 กำหนดช่วง  2,3,4,5 อย่างไรก็ตามเมทริกซ์ ยังคงมีอยู่ไม่ได้รับผลกระทบใด
-->b=a(3:4, 2:5)                          

คำสั่งนี้สำเนา ซับเมทริกซ์ ไปเป็นเมทริกซ์ 'b' ซับเมทริกซ์สามารถเขียนทับไปแทนที่ได้ ง่ายเท่าๆกับการสำเนา  การทำให้ทุกองค์ประกอบของ ซับเมทริกซ์ระหว่างช่วงบนเท่ากับศูนย์  ให้ใช้คำสั่งดังนี้

-->a(3:4, 2:5)=zeros(2,4)          คำสั่งนี้สร้างเมทริกซ์ 2x4 มีองค์ประกอบเป็น   0  แล้วใส่เป็นซับเมทริกซ์ 'a                                                ระหว่างแถว 3:4 และคอลัมน์ 2:5.
                            
ให้สังเกตว่าซับเมทริกซ์ทางด้านซ้ายมือ และเมทริกซ์ทางขวามือ (เป็นเมทริกซ์ศูนย์ ตามตัวอย่างข้างบน) จะต้องมีขนาดเดียวกัน


 ขณะที่การใช้ช่วง (rangeในการบ่งถึงแถวและหรือคอลัมน์ ที่ยอมให้มียกออกจากตอนเริ่มแรก (หรือเลิก)ค่าในช่วง ซึ่งเป็นกรณีที่คิดให้เป็น (หรือตัวเลขของแถวหรือคอลัมน์สุดท้าย)   เพื่อระบุแถวทั้หงมด (หรือคอลัมน์)  เป็นการเพียงพอที่จะใช้เพียงแค่โคลอน (:).  โดยวิธีนี้ ซับเมทริกซ์ประกอบด้วยทั้งหมดของแถวและคอลัมน์  และ 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)



ไม่มีความคิดเห็น:

แสดงความคิดเห็น