วันจันทร์ที่ 23 มีนาคม พ.ศ. 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 ออกจากเมทริกซ์  a กำหนดขอบเขตช่วงโดยแถว 3 ถึง คอลัมน์ 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 มีองค์ประกอบเป็น   แล้วใส่เป็นซับเมทริกซ์ 'a'
ระหว่างแถว
3
:4 และคอลัมน์ 2:5.


    ให้สังเกตว่าซับเมทริกซ์ทางด้านซ้ายมือ และเมทริกซ์ทางขวามือ (เป็นเมทริกซ์ศูนย์ ตามตัวอย่างข้างบน) จะต้องมีขนาดเดียวกัน

     ขณะที่การใช้ช่วง (range) ในการบ่งถึงแถวและหรือคอลัมน์ ที่ยอมให้มียกออกจากตอนเริ่มแรก (หรือเลิก)ค่าในช่วง ซึ่งเป็นกรณีที่คิดให้เป็น 1 (หรือตัวเลขของแถวหรือคอลัมน์สุดท้าย)   เพื่อระบุแถวทั้หงมด (หรือคอลัมน์)  เป็นการเพียงพอที่จะใช้เพียงแค่โคลอน (:).  โดยวิธีนี้ ซับเมทริกซ์ประกอบด้วยทั้งหมดของแถวและคอลัมน์  2 และ ของเมทริกซ์ คำสั่งก็คือ a(:, 2:3).  ปกติแล้ว a(:, :) แทนเมทริกซ์ทั้งหมด ซึ่งแน่นอนว่าสามารถแทนได้โดยเพียงการเขียนว่า a  ไซแลยใช้สัญลักษณ์พิเศษอ้างถึงจำนวนของแถวสุดท้าย(หรือคอลัมน์) โดยสัญลักษณ์$ สามารถใช้ภายใต้ช่วงตามการระบุ ที่แทนจำนวนของแถวสุดท้าย(หรือ คอลัมน์)
  
    เป็นไปไม่ได้ที่ระบุเฉพาะค่าเริ่มต้นของช่วงเท่านั้น และ ไม่มีค่าปลายหรือในทางที่กลับกัน   ทั้งสองค่าระบุหรือ ไม่ระบุค่าทั้งสอง ซับเมทริกซ์ของแถวทั้งหมดของ     เมทริกซ์ a และคอลัมน์ 3 ถึง 8 แทนได้ด้วย

-->a(:, 3:$) 
    ในด้านล่าง เราทำการสะกัดทุกแถวและคอลัมน์จากคอลัมน์ 3 ไปคอลัมน์สุดท้าย นอกจากคอลัมน์หนึ่ง นั่นคือ 7 ให้สังเกตว่า $ คือคอลัมน์สุด และ $-1 คือคอลัมน์สุดท้ายนอกจากคอลัมน์หนึ่ง

-->a(:, 3:$-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). แทนที่ศูนย์(3,4) เราสามารถใช็ศูนย์(:,:) และ ไซแลบจะคำนวณจำนวนที่ต้องการของแถวและคอลัมน์ตัวเอง)


4. Replace the even numbered columns of matrix a having size 3x5 with ones. (Ans: a(:,2:2:$)=ones(:, :)).
5. What is the sub-matrix of a extracted by the following command a(1:3,$-2:$)? (Ans: It extracts the first 3 rows and last 3 columns of matrix a).
6. Assuming a to be a 5x8 matrix, are the following valid commands? If so, what do they do? If not, what is the correct command? 1. A(1:, 5) Incorrect. Should indicate end row number. 2. A(:, 5) Correct 3. a(1:3, $-1:$) Correct 4. a(:$, 3:6) Incorrect. Should indicate start row number.

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

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