You are on page 1of 56

‫מבוא לתכנות בעזרת‬

‫‪MatLab‬‬
‫פונקציות‬
‫‪5_6.2/45‬‬
‫‪ – MatLab‬פונקציות‬
‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.3/45‬‬

‫‪ – MatLab‬פונקציות‬
‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.4/45‬‬
‫בשביל מה פונקציות?‬
‫‪ ‬לתוכניות מחשב ישנה נטיה לגדול‪,‬‬
‫או ‪ ...‬לייתר דיוק – לתכנתים יש נטיה להגדיל תכניות‪.‬‬
‫ניהול או הבנה של תוכנית גדולה – קשים‪,‬‬
‫אנו עלולים לכתוב שוב קטעי קוד דומים או זהים לכאלו‬
‫שכבר כתבנו‪,‬‬
‫‪ ‬היינו שמחים לו יכולנו לקחת "קטעים" מתוכנית אחת‬
‫ולהשתמש בהם בתוכנית אחרת‪,‬‬
‫(אתם עושים זאת אגב – כל השימוש בפונקציות ספריה)‪,‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.5/45‬‬
‫בשביל מה פונקציות? (המשך)‬

‫‪ ‬עבודה עם פונקציות נותנת לנו יכולת להתייחס אל‬


‫התוכנית כבנויה מחלקים מודולאריים‪.‬‬

‫‪ ‬עבודה עם פונקציות – נותנת לנו את היכולת לקחת בעיה‬


‫מורכבת ולפרקה לחלקים עם תלות מועטה בניהם‪.‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.6/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.7/45‬‬

‫הגדרת פונקציה‪:‬‬
‫אחת או יותר שורות קוד‪ ,‬אותן ניתן להפעיל כקבוצה‪,‬‬
‫עם ממשק הפעלה‪:‬‬
‫‪ ‬שם משותף‪,‬‬
‫‪ ‬אפשרות לקבלת נתונים‪,‬‬
‫‪ ‬אפשרות להחזרת נתונים‪,‬‬
‫‪ ‬נקודת כניסה ברורה ואחת או יותר נקודות סיום‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫פונקציות – דוגמא ‪ 1‬עם ערך נכנס אחד וערך מוחזר אחד‬

‫פונקציה‬
‫פרמטר פורמאלי‬
‫(‪sqrt)x‬‬

‫‪sqrt)16( --> 4‬‬


‫ערך מוחזר‬
‫הערך העובר לפונקציה‬

‫‪sqrt)121( --> 11‬‬


‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫פונקציות – דוגמא ‪ 2‬עם ערך נכנס אחד וערך מוחזר אחד‬

‫פונקציה‬
‫פרמטר פורמאלי‬
‫(‪max)x‬‬

‫‪max)[1,2,-6]( --> 2‬‬


‫ערך מוחזר‬
‫הערך העובר לפונקציה‬

‫]‪V=[0,-1,-3‬‬
‫‪max)[V]( --> 0‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪))22100‬‬
‫פונקציות – דוגמא ‪ 3‬עם מספר ערכים‬
‫נכנסים וערך מוחזר אחד‬
‫פרמטרים פורמאליים‬
‫פונקציה‬

‫(‪rem)a,b‬‬

‫‪rem)9,2( --> 1‬‬


‫ערך מוחזר‬
‫הערכים העוברים‬
‫לפונקציה‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫פונקציות – דוגמא ‪ 4‬עם ערך נכנס‬
‫אחד ומספר ערכים מוחזרים‬
‫פרמטר פורמאלי‬
‫פונקציה‬

‫(‪[m,n] = size)A‬‬
‫ערכים מוחזרים‬

‫]‪size)[1,2,3;2,3,4](  [2,3‬‬
‫ערכים מוחזרים‬
‫הערך העובר לפונקציה‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫פונקציות – דוגמא ‪ 5‬עם מספר ערכים נכנסים‬

‫פונקציה‬
‫פרמטר פורמאלי‬

‫(‪plot)x,y‬‬

‫‪X=1:2*pi,‬‬
‫(‪Y=cos)X‬‬
‫(‪plot)X,Y‬‬
‫הערכים העוברים‬
‫לפונקציה‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫פונקציות – דוגמא ‪ 6‬ללא ערכים נכנסים‬

‫פונקציה‬

‫‪help‬‬ ‫אין ערך נכנס ואין ערך מוחזר‬

‫‪clear‬‬ ‫אין ערך נכנס ואין ערך מוחזר‬

‫‪clear a‬‬ ‫יש ערך נכנס ואין ערך מוחזר‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.14/45‬‬ ‫הגדרת פונקציות של ‪-MatLab )m‬פונקציות)‬
‫‪ m-functions‬הם כמו פונקציות באלגברה‪:‬‬ ‫‪‬‬

‫אלגברה‪ :‬פונקציה היא כלל שמקצה ערך חדש המבוסס על ארגומנטים של‬ ‫‪‬‬
‫הפונקציה‬
‫‪ :MatLab‬פונקציה היא יחידת תכנה (מודול) המחשבת ערך מוחזר‬ ‫‪‬‬
‫המבוסס על ערכי הארגומנטים(פרמטרים) של הפונקציה‬

‫)‪» cylinder(1,10‬‬

‫= ‪ans‬‬

‫‪31.4159‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.15/45‬‬ ‫מבנה של ‪-m‬פונקציה‬
‫מלת מפתח להגדרת פונקציה‬
‫שם הפונקציה‬ ‫ארגומנטים (פרמטרים)‬
‫ערך מוחזר‬

‫)‪function volume=cylinder(radius, length‬‬


‫‪% CYLINDER computes volume of circular cylinder‬‬
‫‪% given radius and length‬‬
‫‪% Use:‬‬ ‫הערות עזר‬
‫)‪% volume=cylinder (radius, length‬‬
‫‪%‬‬
‫;‪volume=pi.*radius^2.*length‬‬

‫משפטים (‪ end‬לא נדרש)‬

‫לאותיות קטנות‪/‬גדולות‬ ‫הערה‪ :‬שמות של פונקציות לא רגישים‬


‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.16/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.17/45‬‬ ‫יצירת פונקציות ב‪m-File Editor-‬‬
‫בתפריט בוחרים ‪File/New/m-file‬‬ ‫‪‬‬

‫‪ ‬חלון חדש של ‪ editor‬יופיע תחת השם "‪"Untitled‬‬


‫‪ ‬הכנס קוד של הפונקציה החדשה שלך‬
‫‪ ‬בשמירה וודא ששם הקובץ זהה לשם של הפונקציה (‪MatLab‬‬
‫משתמש בשם הקובץ לזיהוי ‪-m‬פונקציות)‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.18/45‬‬ ‫שימוש בהערות ב ‪-m‬פונקציות‬
‫הערות שמופיעות אחרי משפטי הפונקציה יופיעו גם ב‪MatLab-‬‬ ‫‪‬‬
‫‪ Help‬של הפונקציה‪:‬‬
‫‪ ‬הכנס הערות המגדירות מה הפונקציה מבצעת‬
‫‪ ‬הוסף הערות המתארות את שימושי הפונקציה‬
‫‪ ‬כלול גרסה‪ ,‬מחבר ותאריך‬

‫‪» help cylinder‬‬

‫‪CYLINDER computes volume of circular cylinder given radius and length‬‬


‫‪Use:‬‬
‫)‪volume=cylinder ( radius, length‬‬

‫»‬
‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.19/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.20/45‬‬ ‫מרחב עבודה של ‪m-function‬‬
‫כל פעם שפונקציה מתבצעת‪ ,‬מרחב העבודה החדש נוצר רק בשביל‬ ‫‪‬‬
‫המקרה הזה‬
‫כל המשתנים ‪,‬פרט לארגומנטים (פרמטרים) ומשתנה מוחזר‪ ,‬מוגדרים‬ ‫‪‬‬
‫במרחב העבודה של הפונקציה בלבד‬
‫;‪>> r=10‬‬ ‫מרחב עבודה בסיסי‬

‫;‪>> h=5‬‬
‫(‪>> cylinder)r,h‬‬

‫מרחב עבודה של‬ ‫ניתן לדפדף בין מרחבי‬


‫הפונקציה‬ ‫העבודה השונים בזמן‬
‫הרצה תוך ‪debbuging‬‬
‫מרחב עבודה של ‪( m-function‬המשך)‬
‫‪5_6.21/45‬‬

‫‪ ‬משתנים של פונקציה לא מוגדרים ב‪Base workspace-‬‬


‫ומשתנים של ‪ Base workspace‬לא מוגדרים ב‪function-‬‬
‫‪workspace‬‬
‫‪ ‬בסיום ביצוע הפונקציה‪ ,‬מרחב העבודה שלה נמחק‬
‫‪ ‬משתנים של פונקציה "מוסתרים" מעין אדם (וגם משימוש‬
‫שגוי או שינויים הרי אסון)‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫מרחב עבודה של ‪( m-function‬המשך)‬
‫‪5_6.22/45‬‬

‫ניתן אפילו להגדיר ‪-m‬פונקציות אחרות בתוך ‪-m‬פונקציה!‬ ‫‪‬‬


‫‪ ‬הפונקציות "הפנימיות" נקראות "תת פונקציות" (‪)sub-functions‬‬
‫‪ ‬לכל אחת יהיה מרחב העבודה משלה‪ ,‬בלתי תלוי במרחב העבודה של‬
‫פונקציה אחרת‬
‫‪ ‬מרחבי העבודה הללו נוצרים ונמחקים עם כל קריאה לפונקציה (שום‬
‫דבר לא נשאר בין הקריאות)‬
‫‪ ‬תת הפונקציות זמינות רק בתוך הפונקציה הראשית‪ .‬תת הפונקציות‬
‫האחרות שבתוך הפונקציה הראשית יכולות להשתמש אחת בשנייה‪.‬‬
‫‪ ‬מוסכמה‪ :‬שמות של תת פונקציות מתחילים מ‪local_-‬‬
‫‪local_ (…)myfun‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.23/45
‫ בדיקת קלט שלם וחיובי‬-1 ‫דוגמא‬
%inputs the number and continues to input until the number is positive and
whole

function num=check_output)(;

num=input)'Enter the number '(;


while num~=fix)num( | num<=0
num=input)'\nThe number is incorrect. Enter a new number '(;
end

MatLab ‫מבוא לתכנות בעזרת‬


))22100
5_6.24/45
‫ פונקציה המקבלת רדיוס וגובה‬-2 ‫דוגמא‬
‫של גליל ומחזירה נפחו ושטחו‬
function [area,volume]=cylinderAV)radius, length(
% CYLINDER computes area and volume of circular
cylinder
% given radius and length
% Use: [area, vol]=cylinder )radius, length(
%
area=2*pi*radius.^2.*length
volume=pi*radius.^2.*length;

MatLab ‫מבוא לתכנות בעזרת‬


))22100 ‫אורט בראודה – הנדסת מכונות‬
5_6.25/45
‫ – שימוש בפונקציה בתוך תכנית ראשית‬3 ‫דוגמא‬
‫ הקולטת ממשתמש רדיוס וגובה של גליל‬,‫לכתוב תכנית‬
.‫ לחישוב נפחו‬cylinder ‫וקוראת לפונקציה‬
clc;
clear;
r=input)'Insert the radius:'(;
h=input)'Insert the height:'(;
v=cylinder)r,h(;
fprintf)'\nvolume = %.2f',v(;

function volume=cylinder)radius, length(


% CYLINDER computes volume of circular
cylinder
% given radius and length
%
volume=pi*radius.^2.*length;
MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.26/45
‫שימוש בפונקציה בתוך תכנית ראשית‬- 4 ‫דוגמא‬

‫לכתוב תכנית הקולטת רדיוס וגובה של גליל וקוראת לפונקציה‬


.‫ לחישוב שטחו ונפחו‬cylinderAV
‫הפלט יודפס בתכנית הראשית‬
clc;
clear;
r=input)'Insert the radius as a vector:'(;
h=input)'Insert the height as a vector:'(;

[v,s]=cylinderAV)r,h(;

format short g
disp)'The volumes are:'(; disp)v(;
disp)'The areas are:'(; disp)s(;

MatLab ‫מבוא לתכנות בעזרת‬


))22100 ‫אורט בראודה – הנדסת מכונות‬
‫ – שימוש בפונקציה בתוך תכנית‬5 ‫דוגמא‬
5_6.27/45
‫ראשית‬
‫ לקליטה ובדיקה של קלט ואחר כך בודקת‬check_out ‫ אשר קוראת לפונקציה‬,‫לכתוב תכנית‬
.‫האם הקלט הוא מספר ראשוני‬
%inputs the number
N=input)'enter a number '(;
while N~=fix)N( | N<=0
N=input)'enter an other number '(; %inputs the number
end N=check_output;

%checks if primary
%checks if primary for I=2:fix)N/2(
for I=2:fix)N/2( if rem)N,I(==0
if rem)N,I(==0 break;
break; end
end end
end if I==fix)N/2(
if I==fix)N/2( disp)'The primary number'(;
disp)'The primary number'(; else
else disp)'Not primary number'(;
disp)'Not primary number'(; end
end
‫‪5_6.28/45‬‬
‫תת פונקציות‬
‫דוגמא ‪6‬‬

‫א‪ .‬לכתוב פונקציה ‪ Prime‬אשר מקבלת כפרמטר מספר שלם‬


‫חיובי ומחזירה ‪ 1‬אם הוא ראשוני ו‪ 0-‬אם הוא לא ראשוני‪.‬‬

‫ב‪ .‬לכתוב פונקציה ‪ SumP‬אשר מקבלת כפרמטר מספר שלם‬


‫חיובי ‪ N‬ומסכמת את כל המספרים הראשוניים מ‪ 1-‬עד ‪N‬‬
‫בעזרת הפונקציה ‪Prime‬‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


5_6.29/45
% sum of all primary numbers from 1 to N )the input argument(
function s=SumP)N(;
s=0;
for i=1:N
if Prime)i(==1 % if i is a primary number
s=s+i;
6 - ‫דוגמא‬
end )‫תת פונקציה (המשך‬
end

% checks if the input argument n is a primary number


function a=Prime)n(
for i=2:fix)n/2(
if rem)n,i(==0 % if n is divided by i
a=0; % n isn't a primary and the function is finished
return ;
end
end
a=1; % n is a primary
MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.30/45

‫ בתכנית הראשית‬SumP ‫ שימוש בפונקציה‬7 - ‫דוגמא‬


%inputs the number
N=check_output;

%summs all primary numbers


x=SumP)N(;
fprintf)'\nThe sum of all primary numbers between 2 and %d is %d',N,x(;

MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.31/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.32/45‬‬
‫משתנים גלובליים‬
‫לפעמים מסוכן להעביר את כל המשתנים כארגומנטים‬ ‫‪‬‬
‫לפונקציה‬
‫הצהרה על משתנה כעל גלובלי (‪ ) global‬במרחב העבודה‪,‬‬ ‫‪‬‬
‫פירושו שהמשתנה יכול להיות נגיש במרחב העבודה השני אם‬
‫המשתנה מוצהר בתור ‪ global‬גם במרחב העבודה השני‪.‬‬

‫נתבונן במשתנה חדש ‪ DENSITY‬בדוגמאות שלנו‬ ‫‪‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.33/45‬‬

‫משתנים גלובליים (המשך)‬


‫‪ ‬קיים הסכם המציע שימוש באותיות גדולות בשמות של‬
‫משתנים גלובליים‬

‫‪ ‬אל תשתמש במשתנים גלובליים כל עוד לא נכשלו כל שאר‬


‫האפשרויות‪ .‬משתנים גלובליים יכולים לגרום למיליארד‬
‫בעיות והם נחשבים למסוכנים!‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.34/45‬‬ ‫דוגמא של משתנה גלובלי‬
‫המשתנה‪ DENSITY‬משותף למרחב העבודה הבסיסי ומרחב העבודה של‬ ‫‪‬‬
‫הפונקציה‬

‫כל פונקציה שמכילה ‪ DENSITY‬כמשתנה גלובלי מאפשרת גישה אליו‬ ‫‪‬‬


‫מבחוץ‬

‫‪» global DENSITY‬‬


‫;‪» DENSITY=100‬‬
‫)‪» cylinderwt(1,10‬‬

‫= ‪ans‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬ ‫‪3.1416e+003‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.35/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫פונקציות ‪ -‬ערך מוחזר‬
‫‪5_6.36/45‬‬

‫‪ ‬ערך מוחזר על ידי פונקצית ‪ MatLab‬יכול להיות‬


‫סקלר או מערך (ואפילו מערך תאים)‬

‫‪ m-functions ‬משתמשות ב‪ []-‬להחזרת מערך‪,‬‬


‫המורכב מסקלרים‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.37/45 )‫ ערך מוחזר (המשך‬- ‫פונקציות‬

 » [area, volume]=cylinderAV(1,10)
 area =
 69.1150
 volume =
 31.4159

 » result=cylinderAV(1,10)
 result =
 69.1150

 » whos
 Name Size Bytes Class
 ans 1x1 8 double array
 area 1x1 8 double array
 result 1x1 8 double array
 volume 1x1 8 double array
‫אם משתמשים במשתנה יחיד‬
‫לקבלת ערך מוחזר מקבלים רק‬
‫ערך ראשון ממערך מוחזר‬
MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.38/45‬‬
‫‪ m-functions‬הם ליבה של ‪MatLab‬‬

‫סקריפטים של ‪ MatLab‬מתבצעים שורה אחרי שורה והתהליך הוא‬ ‫‪‬‬


‫איטי מאוד‬

‫‪ m-functions‬עוברים קומפילציה לתוך “‪ ”p-code‬בקריאה‬ ‫‪‬‬


‫הראשונה אליהן ואחר כך ‪ p-code‬שלהם מתבצע‪:‬‬
‫הביצוע הרבה יותר מהר מאשר ביצוע לפי שורה אחרי שורה‬ ‫‪‬‬

‫עריכת ‪ m-function‬מעדכנת ‪ p-code‬ישן‬ ‫‪‬‬

‫אפשר לבצע קומפילציה של ‪ m-function‬לתוך ‪ p-code‬ושלמור אותו‬ ‫‪‬‬


‫כ‪:”p-file“-‬‬
‫‪ pcode myfunction‬יוצרת קובץ ‪myfunction.p‬‬ ‫‪‬‬

‫‪ p-code‬יכול להיות מסופק בדיוק כמו ‪m-function‬‬ ‫‪‬‬

‫משתמשים לא יכולים לעדכן בקלות את הפונקציה ששמורה כ‪p-code-‬‬ ‫‪‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.39/45 ‫מספר ארגומנטים נכנסים ויוצאים‬
.‫ מחזירה את מספר המשתנים בקלט של פונקציה‬- nargin ‫פונקצית‬
>> nargin)'cylinder'(
ans =
2
‫ מאפשרת‬nargin ‫אבל הפונקציה‬
:‫להעביר מספר שונה של ארגומנטים‬
function volume=cylinder)radius, length(
%The first agrument is required and the second have default value
if nargin==1 % if there is only one input argument
length=1;
end >> cylinder)10(
v1=radius^2; ans =
v2=pi.*v1;
314.1593
volume=v2.*length;

MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬


5_6.40/45 )‫מספר ארגומנטים נכנסים ויוצאים (המשך‬
.‫ מחזירה את מספר המשתנים בפלט של פונקציה‬nargout ‫פונקצית‬
>> nargout)‘S_Per'(
ans =
2 : ‫ מאפשרת לשנות את צורת התוצאה‬nargout ‫• אבל הפונקציה‬
>> [x,y]=S_Per)10,2(
x= :‫קריאה לתוך משתנים‬
20
y=
24
function [S,H]=S_Per)a,b(;
%outputs the area and the perimeter if there are output arguments
if nargout==0
fprintf)'\nThe arrea is %g\nThe perimeter is %g',a*b,2*)a+b((;
else
S=a*b;
H=2*)a+b(;
end

MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬


5_6.41/45 )‫מספר ארגומנטים נכנסים ויוצאים (המשך‬
>> S_Per)10,2( :‫קריאה ללא השמה‬
The arrea is 20
The perimeter is 24>>

function [S,H]=S_Per)a,b(;
%outputs the arrea and the perimeter if there are output arguments
if nargout==0
fprintf)'\nThe arrea is %g\nThe perimeter is %g',a*b,2*)a+b((; % !‫רק מדפיסה‬
else
S=a*b;
H=2*)a+b(;
end

MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.42/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.43/45‬‬
‫דוגמא ‪8‬‬
‫‪x 2 x4 x6‬‬
‫‪cos( x ) = 1 −‬‬ ‫‪+‬‬ ‫‪−‬‬ ‫טור טיילור של פונקציה טריגונומטרית ‪ )cos)x‬מוגדר בצורה הבאה‪+ ... :‬‬
‫! ‪2! 4! 6‬‬
‫יש לכתוב תכנית המחשבת ומחזירה את ערך הפונקציה ‪)cos)x‬‬
‫לפי טור טיילור‪ .‬חישוב הטור יבוצע עד שהערך המוחלט של האיבר‬
‫האחרון בטור יהיה קטן מ‪0.0001-‬‬
‫;(‪function [sum]=cos1)x‬‬
‫;‪k=0;sum=0‬‬
‫;‪el=1‬‬ ‫ניתן להריץ פונקציה ישר‬
‫‪while abs)el(>=0.0001‬‬ ‫ב‪Command Window:-‬‬
‫;‪sum=sum+el‬‬
‫;‪k=k+1‬‬ ‫(‪>> cos1)pi/3‬‬
‫;(‪el=)-1(^k*x^)2*k(/factorial)2*k‬‬
‫‪end‬‬ ‫= ‪ans‬‬
‫‪end‬‬
‫‪0.5000‬‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.44/45‬‬ ‫דוגמא ‪( 8‬המשך)‬
‫ניתן לקרוא לפונקציה מתוך תכנית ראשית‪:‬‬
‫תכנית ראשית‬

‫הרצת תכנית ראשית‬

‫‪>>cos1_test‬‬

‫‪Insert a single number : pi‬‬

‫>>‪cos)3.14159(=-1‬‬

‫‪m-function‬‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.45/45‬‬
‫דוגמא ‪( 8‬המשך)‬
‫ניתן לשלב את הפונקציה בפונקציה אחרת‬

‫;(‪function x=sin1)alpha‬‬

‫;(‪x=sqrt)1-cos1)alpha(.^2‬‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


9 ‫דוגמא‬
5_6.46/45

)n( ‫הפונקציה מקבלת מספר שלם כפרמטר נכנס‬


1 ‫) כולל‬v( ‫ומחזירה את ווקטור המחלקים שלו‬

function v=Divs)n(;
%v - vector of the dividers of the integer n
>> Divs)12(
v=[];
for i=1:n/2 ans =
if rem)n,i(==0
v=[v,i]; 1 2 3 4 6
end
end
%the function returns the vector v

MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬


5_6.47/45 ‫ עד‬2-‫ – הדפסת מחלקי כל המספרים מ‬10 ‫דוגמא‬
n
function Divs_test)(;
n=input)'Insert an integer number: '(;
for i=2:n Insert an integer number: 12
the dividers of 2 are: 1
fprintf)'the dividers of %d are:',i(;
disp)Divs)i((; the dividers of 3 are: 1
end
the dividers of 4 are: 1 2

function v=Divs)n(; the dividers of 5 are: 1


%v - vector of the dividers of the integer n
the dividers of 6 are: 1 2 3
v=[];
for i=1:n/2 the dividers of 7 are: 1
if rem)n,i(==0 the dividers of 8 are: 1 2 4
v=[v,i];
end the dividers of 9 are: 1 3
end the dividers of 10 are: 1 2 5
%the function returns the vector v
the dividers of 11 are: 1
the dividers of 12 are: 1 2 3 4 6
MatLab ) )22100 ‫מבוא לתכנות בעזרת‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.48/45
11 ‫דוגמא‬
‫מציאת שורשים של משוואה ריבועית‬
a x2 + b x + c = 0 :‫ של המשוואה‬a, b, c ‫נתונים המקדמים‬
‫למצוא שני ערכים שמרצים את המשוואה‬

What you could How you could


data ?do with the data ?find the answer answers

:Everyone knows the solution •


Too many choices for this x = (-b ±√(b2 – 4 a c)) / 2 a
question to help

MatLab ‫מבוא לתכנות בעזרת‬


))22100 ?What does this mean ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.49/45‬‬

‫דיאגראמת פתרון‬

‫‪a‬‬

‫‪b-‬‬ ‫‪+‬‬ ‫÷‬ ‫‪X1‬‬

‫‪b‬‬

‫‪√(b2( – 4 a c‬‬ ‫‪-‬‬ ‫÷‬ ‫‪X2‬‬

‫‪c‬‬

‫‪a2‬‬

‫מבוא לתכנות בעזרת ‪MatLab‬‬


‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
5_6.50/45

insert a: 1
insert b: 6
insert c: 5
There are 2 real roots:
-1 -5

insert a: 1
insert b: 0
insert c: 4
There are 2 complex roots:
0 + 2.0000i 0 - 2.0000i

insert a: 1
insert b: -2
insert c: 1
There is only one root:
1
MatLab ) )22100 ‫מבוא לתכנות בעזרת‬
‫דוגמא ‪12‬‬
‫‪5_6.51/45‬‬

‫לכתוב תכנית שקולטת מספר שלם מהמשתמש ומדפיסה משולש‬


‫כוכביות בגודל המספר‪( .‬משולש ישר זווית)‪.‬‬

‫התכנית תשתמש בפונקציה ‪( stars-line‬אותה צריך לכתוב)‪ ,‬המקבלת‬


‫פרמטר אחד (מספר שלם וחיובי) ומדפיסה שורת כוכביות באורך המספר‪.‬‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.52/45‬‬
‫דוגמא ‪13‬‬
‫לכתוב פונקציה אשר מקבלת כפרמטרים ‪ 2‬מספרים שלמים חיוביים‬
‫‪ M,N‬ומחזירה מטריצה ‪ MXN‬בה כל איבר שווה למכפלת מספר‬
‫השורה שלו במספר העמודה שלו‬

‫מה תהיה התוצאה?‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.53/45‬‬
‫דוגמא ‪14‬‬
‫כמו בדוגמא הקודמת‪ ,‬אבל כל‬
‫איבר הנמצא בשורה אי זוגית‬
‫ועמודה אי זוגית (בו זמנית)‬
‫יהיה שווה למכפלת מספר שורה‬
‫ועמודה שלו וכל איבר הנמצא‬
‫בשורה זוגית ועמודה זוגית (בו‬
‫זמנית) יהיה שווה לסכום‬
‫מספרי עמודה ושורה שלו‬

‫מבוא לתכנות בעזרת ‪MatLab ) )22100‬‬ ‫אורט בראודה – הנדסת מכונות‬


‫‪5_6.54/45‬‬
‫איך ‪ m-function‬ממוקמים?‬
‫לפעמים חשוב לדעת איך ‪ MatLab‬רואה ‪ ,m-function‬במיוחד‬ ‫‪‬‬
‫אם לשתיין יש אותו שם‪...‬‬

‫נניח‪ MatLab ,‬פוגש את השם ‪.velocity‬‬ ‫‪‬‬

‫ואז הוא‪:‬‬
‫בודק האם ‪ velocity‬הוא משתנה במרחב העבודה נוכחי?‬ ‫‪‬‬
‫האם ‪ velocity‬הוא פונקציה מוכללת של ‪? MatLab‬‬ ‫‪‬‬
‫האם ‪ velocity‬הוא תת פונקציה של הפונקציה הנוכחית?‬ ‫‪‬‬
‫האם ‪( velocity.p‬ואז גם ‪ )velocity.m‬היא ‪private‬‬ ‫‪‬‬
‫‪?function‬‬
‫הנמצא ‪(velocity.p‬ואז גם ‪ )velocity.m‬במרחב העבודה‬ ‫‪‬‬
‫הנוכחי?‬
‫‪?MatLab‬‬
‫הנוכחית‬ ‫בתיקייה‬
‫בעזרת‬ ‫הנמצא ‪(velocity.p‬ואז גם ‪)velocity.m‬‬
‫מבוא לתכנות‬ ‫‪‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫‪5_6.55/45‬‬

‫‪ ‬בשביל מה פונקציות?‬
‫‪ ‬הגדרת פונקציה‬
‫‪ ‬איך לעצב פונקציות‪,‬‬
‫‪ ‬מרחב עבודה של פונקציה‪,‬‬
‫‪ ‬משתנים גלובליים‪,‬‬
‫‪ ‬שימוש בפונקציות‪,‬‬
‫‪ ‬דוגמאות‪,‬‬
‫‪ ‬סיכום‪.‬‬
‫מבוא לתכנות בעזרת ‪MatLab‬‬
‫‪))22100‬‬ ‫אורט בראודה – הנדסת מכונות‬
‫מבוא לתכנות בעזרת‬
‫‪MatLab‬‬
‫פונקציות‬

‫אורט בראודה – הנדסת מכונות‬

You might also like