תכנות נומרי עם Matlab ו-Octave/מערך תאים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי




פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.



הקדמה

בניית מערך תאים[עריכה]

דמיינו מטריצה שהאברים בה הם גם מחרוזות , גם מספרים וגם מטריצות או וקטורים.

מטריצה כזו נקראת מערך תאים.

מערכי תאים יכולים להכיל את כל סוגי המשתנים ואף מערכי תאים אחרים.

דגשים:

  • פניה לתאים עם שימוש בסוגרים מסולסלים {}.
  • לא ניתן לבצע פעולות מתמטיות בין התאים במערך.

נגדיר מערך תאים בגודל 3*3 עם שימוש בפונקציה cell

a=cell(3,3)

כדאי לדעת:

יכולנו להשתמש בפרמטר אחד , זהו מערך ריבועי!

עכשיו נפנה לתא במקום 2,2 ונכניס לתוכו וקטור. לתא במקום 3,3 נכניס מטריצה 2*2, לתא 1,2 נכניס מחרוזת ולתא 1,1 נכניס מספר .

octave:2> a{1,2}='yes';
octave:3> a{3,3}=ones(2);
octave:4> a{2,2}=[1 2 3 4];
octave:5> a{1,1}=180;
octave:6> a
a =

{
  [1,1] =  180
  [2,1] = [](0x0)
  [3,1] = [](0x0)
  [1,2] = yes
  [2,2] =

     1   2   3   4

  [3,2] = [](0x0)
  [1,3] = [](0x0)
  [2,3] = [](0x0)
  [3,3] =

     1   1
     1   1

}

שימו לב שיש תאים ריקים.

ניתן לבנות מערך תאים ללא שימוש בפקודה cell כך:

octave:9> b={eye(3),a,3;[0,0,1],'no','yes'}
b =

{
  [1,1] =

     1   0   0
     0   1   0
     0   0   1

  [2,1] =

     0   0   1

  [1,2] =

  {
    [1,1] =  180
    [2,1] = [](0x0)
    [3,1] = [](0x0)
    [1,2] = yes
    [2,2] =

       1   2   3   4

    [3,2] = [](0x0)
    [1,3] = [](0x0)
    [2,3] = [](0x0)
    [3,3] =

       1   1
       1   1

  }

  [2,2] = no
  [1,3] =  3
  [2,3] = yes
}


שימו לב שהכנסנו את המערך הקודם בתוך המערך .

עכשיו נברר מיהו b

octave:10> whos b

*** local user variables:

  Prot Name        Size                     Bytes  Class
  ==== ====        ====                     =====  ===== 
   rwd b           2x3                        184  cell

Total is 6 elements using 184 bytes

פניה לתאים במערך[עריכה]

הפניה לתאים במערך מתבצעת עם סוגרים מסולסלים , לא כמו פניה לתאים במטריצות ווקטורים.

נפנה לתא 3,3 ו 1,1

octave:7> a{3,3}
ans =

   1   1
   1   1

octave:8> a{1,1}
ans =  180

מה יקרה אם נשתמש בסוגרים עגולות?

a(3,3)

במקרה הזה נקבל את מימדי תוכן התא , במקרה הזה 2*2.

שימו לב:

האופציה הזו לא פועלת באוקטב

פניה לתאים בתוך תאי המערך[עריכה]

נבנה תחילה מערך תאים ונפנה לתא במקום 1,2 :

octave:8>  c={eye(3),magic(5),ones(3);[0,0,1],'no','yes'};
octave:9> c{1,2}
ans =

   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

אם אנו רוצים לפנות לתא בתוך המטריצה נשתמש בסוגרים עגולות לאחר הפניה לתא במערך:

octave:10> c{1,2}(3,3)
ans =  13

פונקציות למערך תאים[עריכה]

cell[עריכה]

אתחול מערך תאים. דוגמא למעלה.

iscell[עריכה]

מחזירה 1 אם המשתנה הוא מערך תאים ו- 0 אם לא.

iscellstr[עריכה]

פונקציה לוגית שמחזירה 1 אם כל התאים במערך תאים (אותו הפונקציה מקבלת) מכילים מחרוזות ו-0 אם לא.

octave:24>  c={'day','good';'no','yes'};
octave:25> iscellstr(c)
ans =  1
octave:26>  c={'day','good';'no',6};
octave:27> iscellstr(c)
ans = 0


הפרק הקודם:
רשומות
מערך תאים הפרק הבא:
מטריצה דלילה