
توابع بر روی متغیر های داخل workspace خودشان عمل می کنند و local workspace نامیده می شوند. در متلب جدای از آن، به خط دستور که base workspace نامیده می شود دسترسی داریم.
توابع می توانند بیشتر از یک متغیر ورودی دریافت کند و بیشتر از یک خروجی بر می گرداند.
حالت کلی یک تابع به صورت زیر می باشد.
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
مثال
به عنوان مثال، تابعی که mymax نامیده می شود و به صورت mymax.m نوشته می شود. 5 عدد را دریافت کرده و بیشترین مقدار عددی را بر می گرداند.
یک فایل تابع ایجاد کنید و آن را mymax.m بنامید و کد های زیر را در آن تایپ کنید.
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
خط ابتدایی یک تابع با کلمه کلیدی function شروع می شود. در توابع باید نام و تعداد آرگومان ها را مشخص کنیم. به عنوان مثال تابع mymax، 5 آرگومان ورودی و یک آرگومان خروجی دارد.
بعد از معرفی تابع، اگر در خط دستور عبارت زیر را تایپ کنیم
help mymax
خواهیم داشت
This function calculates the maximum of the
five numbers given as input
به عنوان مثال
mymax(34, 78, 89, 23, 11)
بعد از اجرا، نتیجه زیر بدست می آید.
ans = 89
توابع ناشناس
توابع ناشناس مانند توابع خطی در زبان برنامه نویسی سنتی، داخل گزاره ساده متلب تعریف می شوند. شامل هر تعداد ورودی و خروجی می باشند.
تابع ناشناس را در متلب می توان در خط دستور یا درون تابع یا اسکریپت تعریف کرد. در این روش می توان یک تابع ساده بدون داشتن یک فایل برای آنها ایجاد کرد.
روش نوشتن به صورت زیر می باشد.
f = @(arglist)expression
مثال
در این مثال می خواهیم یک تابع ناشناس با نام power بنویسیم که دو مقدار را به نام ورودی بگیرد و عدد اول را به توان عدد دوم برساند.
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن بنویسید.
power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)
این فایل بعد از اجرا به صورت زیر دیده می شود.
result1 = 343
result2 = 7
result3 = 1.0000e-10
result4 = 9.5459
توابع فرعی و اولیه
هر تابع از یک تابع ناشناس باید درون یک فایل تعریف شود. هر فایل تابع شامل تابع اولیه مورد نیاز که برای اولین و هر تعداد اختیاری از توابع فرعی به نظر می رسد که بعد از توابع اولیه می آیند و از آن استفاده می کنند.
توابع اولیه می توانند خارج از فایلی که در آن تعریف شده اند در خط دستور یا در توابع دیگر نام گذاری شوند اما توابع فرعی نمی توانند در خط دستور یا در توابع دیگر، خارج از فایل تابع نام گذاری شوند.
توابع فرعی فقط به وسیله تابع اولیه و هر تابع فرعی دیگر درون فایل از آنها تعریف شده باشند قابل دیدن هستند.
مثال
فرض کنید تابعی با نام quadratic نوشتیم که در آن ریشه یک معادله درجه دوم محاسبه می شود. این تابع 3 ورودی دارد که ضریب ثابت معادله می باشد که ریشه را بر می گرداند.
فایل تابع quadratic.m، شامل تابع اولیه quadratic و تابع فرعی disc می باشد که به جداگانه محاسبه می شوند.
یک فایل با نام quadratic.m ایجاد کنید و کد های زیر را در آن بنویسید.
function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
می توانیم در بالای تابع در خط دستور، عبارت زیر را بنویسیم.
quadratic(2,4,-4)
بعد از اجرای دستور عبارت زیر نوشته می شود.
ans = 0.7321
توابع تو در تو
می توان تابع را درون یک تابع دیگر تعریف کرد که توابع تو در تو نامیده می شوند. هر تابع تو در تو شامل هر یا تمام مولفه های تابع دیگر می باشد.
توابع تو در تو درون گستره ای از توابع دیگر تعریف می شوند و آن ها سهم دسترسی به workspace توابع را شامل می شوند.
یک تابع تو در تو مانند زیر نوشته می شود.
function x = A(p1, p2)
...
B(p2)
function y = B(p3)
...
end
...
end
مثال
فرض کنید دوباره تابع quadratic در مثال قبل را بنویسیم که تابع disc یک تابع تو در تو باشد.
نام فایل را quadratic2.m گذاشته و کد های زیر را در آن می نویسیم.
function [x1,x2] = quadratic2(a,b,c)
function disc % nested function
d = sqrt(b^2 - 4*a*c);
end % end of function disc
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of function quadratic2
می توان عبارت زیر را برای تابع بالا در خط دستور نوشت.
quadratic2(2,4,-4)
متلب بعد از اجرا عبارت زیر را بر می گرداند.
ans = 0.73205
توابع خصوصی
یک تابع خصوصی یک تابع اولیه ای می باشد که فقط توسط یک گروه محدودی از توابع دیگر قابل دیده شدن هستند. اگر نمی خواهیم در معرض پیاده سازی function(s) قرار بگیریم، می توانیم از توابع خصوصی استفاده کنیم.
توابع خصوصی در subfolders با نام ویژه private قرار می گیرند. آن ها فقط در پوشه parent قابل دیدن هستند.
مثال
فرض کنید دوباره تابع quadratic در مثال قبل را بنویسیم که تابع disc یک تابع خصوصی باشد. یک زیر پوشه خصوصی در working directory ایجاد کنیم. نام فایل را disc.m گذاشته و کد های زیر را در آن می نویسیم.
function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function
یک تابع با نام quadratic3.m در working directory ایجاد کنیم و کد های زیر را در آن بنویسید.
function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3
می توان در تابع بالا عبارت زیر را در خط دستور نوشت.
quadratic3(2,4,-4)
بعد از اجرای دستور خواهیم داشت.
ans = 0.73205
متغیر های عمومی
متغیر های عمومی می توانند توسط بیشتر از یک تابع به اشتراک گذاشته شوند. برای این کار نیاز به تعریف متغیر عمومی در تمام توابع داریم.
اگر می خواهیم از مسیر workspace به متغیر ها دسترسی داشته باشیم، متغیر ها را در خط دستور می نویسیم.
مثال
فایلی به نام average.m ایجاد کرده و کد های زیر را درون فایل بنویسید.
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
یک فایل اسکریپت ایجاد کرده و کد های زیر را درون آن بنویسید.
global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
وقتی فایل اجرا می شود، عبارت زیر نمایش داده می شود.

هیچ کدام از توابع بالا در متلب R2014b اجرا نمی شود
از ارسال دیدگاه های نا مرتبط با متن خبر، تکرار نظر دیگران، توهین به سایر کاربران و ارسال متن های طولانی خودداری نمایید.
لطفا نظرات بدون بی احترامی، افترا و توهین به مسئولان، اقلیت ها، قومیت ها و ... باشد و به طور کلی مغایرتی با اصول اخلاقی و قوانین کشور نداشته باشد.
در غیر این صورت، «برق نیوز» مطلب مورد نظر را رد یا بنا به تشخیص خود با ممیزی منتشر خواهد کرد.