© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
קורס תוכנת מטלב ויישומיה
קורס תוכנת מטלב ויישומיה
שיעור מס' :8פונקציות
פונקציה כאופרטור
מושג האופרטור
אופרטור הוא "מכונה" שמקבלת קלט ,מבצעת עיבודים ומוציאה פלט.
האופרטור פועל כ"קופסה שחורה" :אין גישה אל או שליטה על העיבודים הנעשים בו.
השימוש באופרטור נעשה ע"י אספקת קלט להפעלה ושמירת הפלט לאחר ההפעלה.
מושג הפונקציה
במתמטיקה ,פונקציה fהיא אופרטור הפועל על תחום במימד אחד (למשל )f(x) :או יותר (למשל .)f(x,y,z) :הקלט עליו
פלט
בתכנות ,פונקציה היא תוכנית הפועלת כמו אופרטור :מקבלת
קלט
פועלת הפונקציה נקרא ארגומנט(ים).
פונקציה
קלט ,מבצעת עיבודים ומחזירה פלט.
פונקציה היא "קופסה שחורה" :לסביבה המשתמשת בה אין גישה לחישובים הנעשים בתוך הפונקציה ,והמידע היחיד
שמתקבל מן הפונקציה נמצא בערכים המוחזרים מן הפונקציה (פלט).
לפונקציה בתכנות יכולים להיות מספר כלשהו של ארגומנטים :אחד ,כמה או ללא משתני קלט .ברוב שפות התכנות,
פונקציות מחזירות רק פלט אחד .ב MATLAB-יכולים להיות לפונקציה כמה ארגומנטים של פלט.
ארגומנטים
ארגומנטים הם משתנים המעבירים מידע בין הפונקציה לסביבה הקוראת (לפעמים נקראים גם משתני -דמה dummy
.)arguments
משתני קלט מעבירים מידע מן הסביבה הקוראת אל הפונקציה.
משתני פלט מעבירים מידע מן הפונקציה לסביבה הקוראת.
הארגומנטים יכולים לקבל שמות שונים בכל סביבה:
בסביבה הקוראת ,קלט יכול להיות משתנים או ערכים קבועים .פלט חייב להיות משתנים.
בתוך הפונקציה ,ארגומנטים של קלט ושל פלט חייבים להיות משתנים.
ההתאמה בין הארגומנטים בסביבה הקוראת לארגומנטים בתוך הפונקציה נעשית לפי סדר הכתיבה.
דוגמאות לארגומנטים בסביבה הקוראת – שימוש בפקודות ( MATLABאשר כולן פונקציות):
1קלט 1 ,פלט
)s=size(A
1קלט 2 ,פלט
)[r c] = size(A
2קלט 1 ,פלט
)r = size(A,1
3קלט 2 ,פלט
)[val indx]=min(A,[ ],2
2קלט 0 ,פלט
)plot(x,y
0קלט 1 ,פלט
mydir = pwd
0קלט 0 ,פלט
clf
1קלט 3 ,פלט
)'[n,t,r]=xlsread('f.xls
עמ' 1מתוך 9
שיעור 8
מאי 15
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
קורס תוכנת מטלב ויישומיה
עד כה השתמשנו בפונקציות מוכנות ,והכרנו רק את הסביבה הקוראת (שימוש בפקודות .)MATLABבשיעור זה נלמד
לכתוב פונקציות.
מתי עדיף להשתמש בפונקציות? קלט לסקריפט אפשרי בכמה אופנים:
בגוף הסקריפט עצמו .בעיה :שינוי נתוני הקלט מחייב עריכה ושינוי של קובץ הסקריפט.
אתחול משתנים בסביבת העבודה הקוראת ,לפני הפעלת הסקריפט .בעיה :צורך להגדיר משתנים בשמות זהים לאלה
שהסקריפט משתמש ,כדי שאלה יוכרו בסקריפט .הקשר בין משתנים "עצמאיים" אלה לסקריפט איננו מובן מאליו.
קלט מן המשתמש תוך כדי ריצה .צורה זו אינה מתאימה למקרים בהם הסביבה הקוראת יוצרת את נתוני הקלט ללא
התערבות המשתמש.
פונק ציה מאפשרת גמישות בהגדרת הקלט והפלט שפותרת את הבעיות הנ"ל.
קובץ פונקציה במטלב
מבנה קובץ פונקציה
קבצי פונקציה דומים לקבצי סקריפט :אלה קבצי טקסט עם סיומת .mוצורת כתיבת הפקודות זהה .השוני :בקובץ
פונקציות ,הפקודה הראשונה לביצוע (כלומר שאיננה הערה) צריכה להיות שורת כותרת.
משתני קלט
שם הפונקציה
מבנה שורת כותרת:
)= fn(in1, in2, in3
אם יש משתנה פלט אחד
)= fn(in1, in2, in3
אם אין משתנה פלט
)fn(in1, in2, in3
מילה שמורה
משתני פלט
function
][out1, out2, out3
function
out
function
לאחר שורת הכותרת ,יש פקודות המבצעות את החישוב (בדומה לסקריפט).
שם הקובץ צריך להיות זהה לשם הפונקציה .במקרה של אי-התאמה ,הפונקציה מוכרת לסביבה הקוראת לפי שם הקובץ
ולא לפי שם הפונקציה.
ביצוע הפונקציה ממשיך עד שתבוצע הפקודה האחרונה או עד שמתבצעת פקודת .return
שימוש בפונקציה
אם שורת הכותרת היא:
הקריאה לפונקציה נכתבת:
)= fn(in1, in2, in3
)= fn(D1, D2, D3
]function [out1, out2
] [Ra, Rbוסדר הביצוע הוא:
הערכים מועברים ממשתני הקלט בקריאה למשתני הקלט בפונקציה ,בהתאמה לפי סדר D1 :ל D2 ,in1-ל in2-וכו'.
מתבצע החישוב של גוף הפונקציה .המשתנים out1, out2חייבים לקבל ערך עד סוף ביצוע הפונקציה וחזרה לסביבה
הקוראת.
בחזרה מן הפונקציה ,הערכים מועברים ממשתני הפלט בפונקציה למשתני הפלט בקריאה ,לפי הסדר :מ out1-ל ,Ra-מ-
out2ל Rb-וכו'.
דוגמאות לצורת הכתיבה של קריאה לפונקציה:
)[u,v]= fn(a, b, c
אם בסביבה הקוראת יש פלט אחד ,מוחזר הפלט הראשון .out1
עמ' 2מתוך 9
שיעור 8
)t = fn(1, 2, 3
מאי 15
קורס תוכנת מטלב ויישומיה
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
טווח ההכרה ( )scopeשל משתנים
טווח הכרה של משתנה :הסביבות שבהן המשתנה מוכר.
לכל פונקציה יש זיכרון -עבודה workspaceמשלה .משתנים המוגדרים בתוך הפונקציה נקראים :משתנים פנימיים .טווח
ההכרה של המשתנים הפנימיים הוא הפונקציה בלבד .עם החזרה מן הפונקציה ,המשתנים הפנימיים נעלמים.
משתנים בזכרון-העבודה של ( MATLABסביבת העבודה הכללית) אינם מוכרים בתוך פונקציות.
משתנים בעלי אותו שם שהוגדרו בפונקציות שונות או בזכרון העבודה הם משתנים נפרדים.
ארגומנטים של קלט ופלט בפונקציה (משתני דמה) הם משתנים פנימיים .בפונקציה ניתן להשתמש בהם כמו בכל משתנה
פנימי .שינוי מ שתנה קלט בתוך הפונקציה לא ישפיע על ערכו של משתנה הקלט בקריאה לפונקציה.
◄דוגמא :1פתרון נומרי של משוואה טרנסצנדנטית בשיטת "אריה במדבר" ,בדומה לדוגמא .d6lionכאן נכתוב שתי
פונקציות:
)function y = d8my_fun(x,p
% calcuate cos(2 pi x) -p x
% p must be a numeric scalar
;y = cos(2*pi*x) - p*x
end
.1פונקציה d8my_funאשר מחשבת את )f(x
כדי לפתור את המשוואה .f(x)=0הפונקציה
d8my_funמקבלת שני ארגומנטים :ערך x
וכן פרמטר ,ומחשבת את המשוואה עם
הפרמטר.
.2פונקציה d8lionאשר מבצעת את אלגוריתם ההתכנסות ,תוך שימוש בפונקציה d8my_funלחישוב המשוואה.
הפונקציה מחשבת פתרון עבור פרמטר pעד דיוק epsilonומספר מקסימלי של איטרציות ,MaxItersובהינתן תחום
התחלתי .xRangeהפונקציה מחזירה 3משתני פלט :הפתרון ,מס' האיטרציות שבוצעו ,וכן האם הושגה התכנסות.
במקרה שיש למשוואה סימן זהה בש ני קצוות התחום ההתחלתי ,האלגוריתם לא מתבצע ומוחזר ערך NaNעבור .x
d8solve
השימוש בפונקציה d8lionמודגם ע"י הסקריפט
.d8solveהפרמטר bמתקבל מן המשתמש.
b = 2, 8 iterations
1
תחילה משתמשים בפונקציה d8my_funכדי
להציג באופן גרפי את המשוואה בתחום של ערכים
0.5
המתאים לפרמטר bולאפשר למשתמש לבחור
את התחום שממנו יתחיל החיפוש.
0
solution = 0.2
הסקריפט מפעיל את הפונקציה d8lionעם
הפרמטר והתחום שנקלטו מן המשתמש ,עם
-0.5
מספר מקסימלי של 10איטרציות ודרישת דיוק של
,0.01ומציג את הפתרון על השרטוט .אם לא
-1
נמצא פתרון ,מוצגת כותרת מתאימה.
-1.5
-2
0.5
עמ' 3מתוך 9
0.4
שיעור 8
0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5
מאי 15
קורס תוכנת מטלב ויישומיה
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
פונקציות משניות
קובץ mFileיכול לכלול יותר מפונקציה אחת.
הפונקציה הראשונה בקובץ נקראת פונקציה ראשית primary functionושמה זהה לשם הקובץ.
הפונקציות הנוספות בקובץ נקראות פונקציות משניות subfunctions
מבנה mFileעם פונקציות משניות:
פונקציה מתחילה בשורת -כותרת.
פונקציה מסתיימת באחד מן המקרים הבאים:
שורת הקוד הבאה היא שורת כותרת (כלומר ,המשך הקוד שייך לפונקציה הבאה).
סוף הקובץ.
פקודת .endאם אחת הפונקציות מסתיימת בפקודת , endחייבים לסיים בצורה זו את כל הפונקציות בקובץ.
טווח הכרה:
הסביבה הקוראת מכירה רק את הפונקציה הראשית (לפי שם הקובץ).
הפונקציות המשניות מוכרות רק לשאר הפונקציות בקובץ .הן לא מוכרות מחוץ לקובץ.
אם קיימות שתי פונקציות באותו שם ,אחת פונקציה משנית ואחת פונקציה בקובץ נפרד ,אז קריאה לפונקציה תבצע את
הפונקציה המשנית .במילים אחרות ,לפונקציה משנית יש עדיפות על פונקציה בשם זהה בקובץ אחר.
המשתנים המקומיים לפונקציה (ראשית או משנית) מוכרים רק לפונקציה עצמה (יש לכל פונקציה workspaceמשלה).
לסיכום :פונקציות שנמצאות בקובץ אחד מכירות זו את זו אבל לא זו את המשתנים של זו.
שימושים לפונקציות משניות
לכלול כמה פונקציות קצרות בקובץ אחד כדי למנוע ריבוי של קבצים.
" להחביא" פונקציות שנכתבו בהקשר מסוים כך שלא ייעשה בהן (בטעות) שימוש כללי.
" להחליף" בהקשר ספציפי פונקציות של מטלב או פונקציות שנכתבו ע"י המשתמש בגירסה שמתאימה יותר להקשר זה.
◄דוגמא :2בהמשך לדוגמא ,1מציאת כל הפתרונות של המשוואה בתחום נתון ,כאשר אין דרישה שהתחום הראשוני הוא
כזה שיהיו למשוואה סימנים מנוגדים בקצותיו .הקובץ d8sub.mכולל פונקציה ראשית ושתי פונקציות משניות:
.1הפוקציה המשנית lionהזהה לפונקציה d8lionמוצאת פתרון אחד ,כאשר מובטח שלמשוואה יהיו סימנים מנוגדים
בקצוות התחום.
.2הפונקציה המשנית FindRangeמוצאת את האזורים בהם המשוואה מחליפה סימן.
שתי הפונקציות משתמשות בפונקציה d8my_funהנמצאת בקובץ נפרד בשם זה.
הפונקציה הראשית קוראת תחילה לפונקציה FindRangeושומרת את סדרת התחומים שנמצאו .לכל תחום ,מופעלת lion
כדי למצוא פתרון יחיד בתחום זה.
)]d8sub(0.7,0.001,20,[-2 2
= ans
-0.6723
-0.2822
0.2254
0.8516
1.1092
הפעלת הפונקציה עם פלט בודד:
(נקבל רק את סדרת הפתרונות).
עמ' 4מתוך 9
שיעור 8
מאי 15
קורס תוכנת מטלב ויישומיה
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
הפעלת הפונקציה עבור מספר משתני פלט:
)][y,iters,flag] = d8sub(1,0.00005,10,[-2 2
= y
-0.6396
-0.2982
0.2155
0.9489
1.0000
= iters
10
10
10
10
10
= flag
1
1
1
1
1
פונקציות אנונימיות
פונקציה אנונימית מורכבת מפקודה אחת שמחזירה ערך אחד( .הערך יכול להיות מסוג מורכב למשל מערך תאים או
מבנים ,אבל חייב להיות משתנה אחד).
hndl = @(arguments) expression
פקודה ליצירת פונקציה אנונימית:
משתני קלט מופרדים בפסיקים (כמו בפונקציה רגילה)
ביטוי כלשהו במטלב (לא חייב להחזיר ערך)
נוצר אובייקט מסוג ( function-handleעוד על כך ,בשיעור 10על אנליזה נומרית)
שימוש בפונקציה:
מציב את ערכי argumentsבביטוי expressionומחזיר את התוצאה.
arguments
expression
hndl
)hndl(arguments
אם יש בביטוי עוד משתנים שאינם ארגומנטים ,חייב להיות להם ערך בזמן יצירת הפונקציה.
דוגמא :נגדיר משתנים
ופונקציה אנונימית אשר משתנים אלה הם
עבורה פרמטרים (קבועים).
;x0 = 5; y0 = 2
expfun = @(x) exp(-x/x0) + y0
= expfun
@(x)exp(-x/x0)+y0
)]expfun([0 0.1 1
= ans
3.0000
2.9802
2.8187
;x0 = 6; y0 = 1
צורת השימוש בפונקציה:
אם אם נשנה את ערכי x0או y0הפונקציה לא תשתנה,
)]1
2.9802
2.8187
;exp(-x/x0) + y0
)]1
אלא אם נגדיר אותה מחדש.
1.8465
1.9835
expfun([0 0.1
= ans
3.0000
)expfun = @(x
expfun([0 0.1
= ans
2.0000
◄דוגמא :3נשנה מעט את הסקריפט d4circleכך שפעולות חוזרות תתבצענה ע"י פונקציות .תזכורת :הסקריפט מבקש
מן המשתמש לבחור קובץ תמונה circle*.jpgמתיקיית .shapesהקובץ כולל תמונה בפורמט RGBכלומר מערך תלת -
עמ' 5מתוך 9
שיעור 8
מאי 15
קורס תוכנת מטלב ויישומיה
ד"ר סמדר שץ
© אגף התקשוב ,אוניברסיטת בר אילן
ממדי שבו כל "מישור" מתייחס לצבע (אדום ,ירוק וכחול) ,מוצא ומ ציג את הנקודות (פיקסלים) השייכות לעיגול הלבן
שבצילום.
בסקריפט d8circleמוגדרות שתי פונקציות אנונימיות:
maxall .1מחשבת מקסימום של כל אברי מערך (נחוצה במערכים שאינם חד-ממדיים).
and3 .2מבצעת איפוס של איברי מטריצה בכל המישורים של מערך תלת-ממדי ,לפי "מסכה" (מטריצה לוגית).
כאן מודגם שימוש בפונקציות אנונימיות גם בסקריפט (בשונה מפונקציות משניות שאפשר לכלול רק בקובץ פונקציה).
שימושים לפונקציות אנונימיות
כתיבת פונקציה בצורה מקוצרת
הגדרת פונקציה בסקריפט
" פונקציית מעטפת" לקביעה של פרמטרים (עוד על כך ,בשיעור 10על אנליזה נומרית).
הרחבת טווח-הכרה של פונקציות שהוגדרו בהקשר מקומי (שימושי בכתיבת ממשקי משתמש).
פונקציה פנימית nested function
פונקציה פנימית היא פונקציה המוגדרת כחלק מגוף (פקודות) של פונקציה אחרת.
הגדרת פונקציה פנימית :מתחילה בשורת -כותרת ומסתיימת ב.end-
בקובץ שיש בו פונקציה פנימית אחת לפחות ,כל הפונקציות (גם הראשית וגם המשניות אם יש) חייבות להסתיים ב.end-
טווח הכרה :פונקציה פנימית מוכרת לפונקציה שמעליה ולכל הפונקציות הפנימיות לפונקציה שמעליה.
לדוגמא ,הפונקציה nested_fמוכרת לפונקציה parent_f
אבל לא לפונקציה .sub_fהפונקציה sub_fמוכרת
לפונקציות .nested_f ,parent_f
ארגומנטים בפונקציה הפנימית הם משתנים פנימיים
שלה( .אם משנים אותם ,אין השפעה על הסביבה
הקוראת) .לדוגמא .arg1,arg2
משתנים בפונקציה הפנימית שיש להם שמות זהים
למשתנים בפונקציה שמעליהם ,משותפים לשתי
הסביבות .לדוגמא out1,out2מוכרים גם בparent_f-
וגם ב( nested_f-אולם לא לסביבה שקוראת לparent_f-
!) .שינוי של המשתנים בתוך הפונקציה משפיע על הסביבה
הקוראת ,ולהפך.
משתנים שנמצאים בפונקציה הפנימית אבל לא בפונקציה
שמעליה הם משתנים פנימיים .לדוגמא .tmp
◄דוגמא :4הפונקציה d8simulateמבצעת את הסימולציה הבאה :נתונה מטריצה לוגית בה 1מסמן מקום מאוכלס ו0-
מסמן מקום ריק .בכל שלב מחשבים את מספר השכנים (מספר המקומות המאוכלסים מימין ,משמאל ,למטה ולמעלה מכל
עמ' 6מתוך 9
שיעור 8
מאי 15
קורס תוכנת מטלב ויישומיה
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
משבצת) ובהתאם לכך קובעים האם בשלב הבא המקום יהיה מאוכלס או לא .קריטריון ההחלטה על השלב הבא נתון ע"י
מערך לוגי NextStepשל 5איברים :הראשון מתייחס ל 0-שכנים ,השני לשכן אחד וכך עד לחמישי המתייחס ל 4-שכנים.
איבר שיש בו )true( 1מסמן שהמקום יהיה מאוכלס בשלב הבא ואיבר שיש בו )false( 0מסמן שהמקום יהיה ריק בשלב
הבא.
המודל כולל תנאי-שפה מחזוריים ,כלומר איברים בעמודה הראשונה הם "שכנים" מימין של האיברים בעמודה אחרונה
וכנ"ל גם לגבי שורות ראשונה ואחרונה .כדי לממש תנאי שפה אלה בצורה יעילה במטלב ,אחרי כל שלב יש "לרפד" את
המטריצה כך שעמודה ראשונה מועתקת אחרי האחרונה ,האחרונה מועתקת לפני הראשונה ,וכנ"ל גם לגבי השורות
ראשונה ואחרונה.
בכל שלב הפונקציה מחשבת את מספר המקומות המאוכלסים ,ובסוף הסימולציה מחזירה מערך של ערכים בכל צעדי
הסימולציה.
הקובץ d8simulateכולל שלוש פונקציות פנימיות:
next_step .1מחשבת את השלב הבא (כולל קריאה לפונקציה אחרת שמעדכנת תנאי שפה מחזוריים).
plotmat .2מציגה מפה של האכלוס ומחשבת את כלל המקומות המאוכלסים.
boundary_update .3מעדכנת תנאי -שפה מחזוריים.
כל הפונקציות הפנימיות מכירות את המשתנה Matשהוא מטריצה האכלוסים .מאחר שהמטריצה יכולה להיות גדולה
מאוד ,יש ייתרון בכך שכל פונקציה פנימית יכולה לשנות מערך זה מבלי שנצטרך בכל פעם להגדיר מערך חדש ולבצע
השמה במקום המערך מהשלב הקודם.
כמו-כן מוגדרת פונקציה אנונימית flatmatאשר מקבלת מערך ממימד כלשהו ומחזירה רשימת איברים (מערך עמודה).
;]Next = [false false true false false
))Nt = d8simulate(Next,10,eye(7
= Nt
7
14
14
28
14
28
28
42
14
14
הפעלת הפונקציה:
נניח שתא מאוכלס בצעד הבא אם יש לו 2שכנים,
ואיננו מאוכלס אם יש לו 3 ,1 ,0או 4שכנים.
נריץ את הסימולציה ל 5-צעדים .נתחיל ממטריצת
היחידה.
משמאל תיאור המצב אחרי סיום התהליך.
המשבצות השחורות ריקות והלבנות מאוכלסות.
1
2
3
4
5
6
7
8
עמ' 7מתוך 9
שיעור 8
7
6
5
4
3
2
8
1
מאי 15
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
קורס תוכנת מטלב ויישומיה
;]Next = [false true true true false
;Init = randi(2,100)>1
))plot(d8simulate(Next,1000,Init
נניח שתא מאוכלס בצעד הבא אם יש לו 2 ,1או
3שכנים ,ואיננו מאוכלס אם יש לו 0או 4שכנים.
נתחיל ממטריצה אקראית שבה כל תא מאוכלס
9000
בהסתברות .0.5
8000
נריץ את הסימולציה ל 1000-צעדים ונשרטט את
7000
מספר התאים המאוכלסים כפונקציה של מספר
6000
הצעד.
5000
4000
1000
900
800
700
600
500
400
300
200
100
0
3000
שימושים לפונקציות פנימיות
הגדרת פונקציה ,בלי הצורך להעביר מספר גדול של ארגומנטים או כמויות גדולות של זיכרון דרך משתני קלט ופלט,
למטרות הבאות:
oפירוק קוד ארוך לפונקציות לפי מטלות
oשימוש חוזר בקטעי קוד לא-קצרים באותה סביבה קוראת.
הגדרת פונקציה עם פרמטרים קבועים ,לצורך "ייצוא" לסביבות אחרות( .אפשר ליישם באמצעות פונקציה אנונימית
רק אם ניתן לבצע את המטלה בפקודה אחת) .שימושי בעיקר בבניית ממשקי משתמש.
השוואה בין סקריפט לסוגי הפונקציות השונות
קלט
משתני פלט
תחום
הגדרה של
משתנים
משתנים
אחרי תום
הביצוע
מבנה
הקובץ
עמ' 8מתוך 9
סקריפט
קבוע ,דרך משתנים עם
שמות ספציפיים
קבוע ,דרך משתנים עם
שמות ספציפיים
כל המשתנים מוכרים
בזיכרון העבודה
workspace
פונקציה
גמיש ,דרך
ארגומנטים
גמיש (בלי,
אחד או יותר)
פנימי
לפונקציה.
נשארים בזיכרון העבודה
נמחקים
רק סקריפט אחד ,ללא
קטעי קוד של פונקציות.
ניתן להגדיר פונקציות
אנונימיות.
יכול לכלול
מספר
פונקציות
פונקציה אנונימית
גמיש ,דרך ארגומנטים
רק פלט אחד
אין משתנים פנימיים
(רק משתני קלט).
שאר המשתנים נחשבים
לפרמטרים וצריכים
להיות קיימים בזמן
ההגדרה.
אין משתנים פנימיים.
אין צורך בקובץ נפרד.
ניתן להגדיר גם
בסקריפט.
שיעור 8
פונקציה פנימית
ארגומנטים +משתנים משותפים
לפונקציה ולסביבה הקוראת.
ארגומנטים +משתנים משותפים
לפונקציה ולסביבה הקוראת.
משתנים משותפים לסביבה
הקוראת ,מוכרים גם בסביבה
הקוראת וגם בפונקציה .כל
המשתנים האחרים הם פנימיים.
משתנים פנימיים נמחקים.
משתנים משותפים נשארים כל
עוד הסביבה הקוראת פעילה.
ניתן להגדיר רק בקובץ פונקציות.
יש לסיים ב end-את כל
הפונקציות בקובץ (גם ראשית
ומשניות).
מאי 15
קורס תוכנת מטלב ויישומיה
© אגף התקשוב ,אוניברסיטת בר אילן
ד"ר סמדר שץ
טווח הכרה של קבצים
כאש ר מטלב מפענח ביטוי שיש בו שם ,הוא מחפש עצמים בעלי שם זה לפי הסדר הבא:
.1שם משתנה (יכול להיות גם מסוג .)function-handle
.2אם מתבצע קובץ של פונקציות :שם של פונקציה משנית או פנימית.
.3קובץ .mבשם זה (אשר אמור להכיל קוד מטלב תקין).
במטלב יש משתנה בשם pathשהוא רשימה של תיקיות לחיפוש ( cell-arrayשל מחרוזות) .מטלב מחפש ברשימה זו את
הקובץ המבוקש לפי סדר התיקיות ברשימה ,ומשתמש בקובץ הראשון שמצא (אפילו אם קובץ בשם זה קיים גם בתיקיות
אחרות).
הפקודות הבאות מספקות מידע על טווח ההכרה של קבצים וכן אפשות לשנותו:
which fname
שם מלא של הקובץ (כולל תיקייה בה נמצא)
p = path
רשימת התיקיות לחיפוש
הוספת התיקייה במשתנה newpathלסוף רשימת החיפוש.
)path(path,newpath
הוספת התיקייה במשתנה newpathלהתחלת רשימת החיפוש.
)path(newpath,path
)addpath(newpath
אפשר לבצע את הנ"ל גם ע"י הפקודה:
שינוי ה path-תקף רק עד היציאה ממטלב .בפעם הבאה יש לבצעו שוב ,או שיש להשתמש בכלי ה path-בשולחן העבודה
של מטלב כדי לשנות את ה path-באופן קבוע.
דו"חות
הדו"חות הבאים רלוונטיים לשימוש בפונקציות:
עץ קריאה dependency
דו"ח זה מבוסס על הקוד עצמו ,ונותן רשימה של כל הפונקציות והסקריפטים בתיקייה הנוכחית .לכל קובץ תוכנית בתיקייה,
מצויין אילו קבצים נקראים על ידו (עם ה path-המלא שלהם ,כולל פקודות מטלב) ,ואילו קבצים בתיקייה הנוכחית
משתמשים בו.
ניתוח זמנים profiler
דו"ח זה מבוסס על בדיקה מדגמית של תוכנית בזמן ריצה .בדו"ח מצויינים לא רק זמני הריצה של קטעי קוד שונים ,אלא
גם חלקן של פונקציות שנקראות ע"י קטע קוד מסוים בזמן הכולל של ביצוע הקוד.
תוכן contents
דו"ח זה אוסף את כל קטעי ה help-מקבצי התוכניות בתקייה הנוכחית ועורך אותם כ"תוכן עניינים" בקובץ contents.mכך
שביצוע הפקודה contentsמציג את המידע.
עמ' 9מתוך 9
שיעור 8
מאי 15
© Copyright 2025