گام شانزدهم: توابع در متلب
توابع مجموعه ای از دستورات است که یک وظیفه را اجرا می کند.در متلب، توابع در فایل های متفاوت مشخص شده اند. نام فایل و تابع باید یکسان باشد.
توابع بر روی متغیر ها در فضای کاری خودشان عمل می کنند، که فضای کاری محلی نامیده می شود،دسترسی به فضای کاری جداگانه در خط فرمان متلب فضای کاری پایه نامیده می شود.
توابع می توانند بیش از یک آرگومان ورودی را بپذیرند و ممکن است بیش از یک آرگومان خروج را برگردانند.
نحوه اجرا در متلبی از عبارت توابع این گونه است:
مثال
تابع زیر mymax نامیده می شود که باید در یک فایل به اسم mymax.m نوشته شود. ممکن است پنج عدد آرگومان را به عنوان ورودی بگیرد و بزرگترین اعداد را برگرداند.
یک فایل ایجاد نمایید، اسم آن را mymax بگذارید و کد زیر را در آن تایپ نمایید:
function max = mymax(nl, n2, n3, n4, n5)
%thisfunction calculates the maximum of the
% five numbers given as input
max = nl;
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 پنج آرگومان ورودی و یک آرگومان خروجی دارد.
خطوط فرمان که بعد از عبارت function می آیند متن کمکی را فراهم می کنند.زمانی که شما تایپ می کنید این خطوط چاپ می شوند:
help max
متلب دستورات بالا را اجرا خواهد کرد و نتیجه زیر را برمیگرداند:
شما می توانید تابع را به این صورت فراخوانی کنید:
lmymax(34,78,89,23,l)
توابع بی نام ( نام مستعار)
متلب دستورات بالا را اجرا خواهد کرد و نتیجه زیر را برمیگرداند:
توابع بی نام مانند توابع درون خطی در زبان های برنامه نویسی مرسوم هستند، که درون عبارت متلب مجرد تعریف شده اند. شامل دستورات و تعدادی ازآرگومان های ورودی و خروجی متلب است.
شما می توانید توابع مستعار راست را در خط فرمان متلب یا در یک تابع یا اسکریپت تعریف کنید.
با این راه شما می توانید تابع ساده ای بدون داشتن یک فایل برای آن ها ایجاد کنید.
نحوه اجرا در متلب برای ایجاد یک تابع مستعار از عبارت اینگونه است:
مثال
در این مثال، ما تابع مستعاری به نام power خواهیم نوشت، که تعداد دو ورودی را میگیرد و و رقم اول به توان رقم دوم را برمی گرداند.
یک فایل اسکریپت ایجاد نمایید و کد زیر را در آن تایپ کنید:
power =@(x, n) x.9n;
resultl = power(7,3)
result2 = power(49,0.5)
result3 = power(lo,-10)
result4 = power (4.5,1.5)
زمانی که شما فایل را اجرا می کنید، این نمایش می یابد:
توابع فرعی و اصلی
هر تابعی نسبت به تابع مستعار باید درون یک فایل تعریف شود.هر تابع فایل شامل تابع اصلی موردنیاز است که اول دیدار می شودو هر تعداد تابع – فرعی اختیاری بعد از تابع اصلی می آید و استفاده می شود.
توابع اصلی می تواند خارج از فایل تعریف شده آن ها فراخوانی شود،در هریک از خط فرمان یا توابع دیگر، اما توابع فرعی نمی توانند با خط فرمان یا دیگر توابع ،خارج از فایل تابع فراخوانی شوند.
توابع فرعی تنها با توابع اصلی قابل مشاهده اند و دیگر توابع فرعی مطابق با فایل توابع آن ها تعریف می شوند.
مثال
اجازه دهید تابعی با نام quadratic بنویسیم که ریشه معادل quadratic را محاسبه می کند.این تابع سه ورودی ، co – efficient quadratic،co- efficient خطی و تابع فرعی disc را میگیرد، که جداگانه محاسبه می شوند.
یک فایل تابع quadratic.m ایجاد نمایید و کد زیر را در آن تایپ کنید:
function[xl,x2]= quadratic(a,b,c)
%thisfunction returns the roots of
% a quadratic equation.
%lt takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
%lt returns the roots
d = disc(a,b,c);
xl =(-b + d)/(2*a);
x2 = )-b – dl / (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)
متلب دستورات بالا را اجرا خواهد کرد و نتایج زیر را برمیگرداند:
توابع تو در تو
شما می توانید تابعی درون بدنه تابع دیگر تعریف کنید.آن ها توابع تو در تو نامیده می شوند.تابع تو در تو a شامل هر یا تمامی اجزای تابع ذدیگری است.
توابع تو در تو در حوزه ای از توابع دیگر تعریف شده اند و آن ها دسترسی به فضای کاری توابع در برگرفته را به اشتراک می گذارند.
تابع تو در تو با نحوه اجرا در متلبزیر در ادامه آمده است:
مثال
اجازه دهید دوباره تابع quadratic را بنویسیم، از مثال قبلی، اگرچه، در این صورت تابع disc تابع تو درتو خواهد بود.
یک تابع فایل quadratic2.m ایجاد نمایید و کد زیر را در آن تایپ کنید:
function[xl,x2]= quadfatic2(a,b,c)
function disc % nested function
d = sqxt(b^2-4*a*c);
end%end of function disc
disc;
xl =(-b + d) / (2*a);
x2 = )-b – d) / (2*a):
end%end of function quadxatic2
شما می توانید تابع بالا را از خط فرمان به این صورت فراخوانی کنید:
quadratic2(2,4,-4)
متلب عبارت بالا را اجرا خواهد کرد و نتیجه زیر را برمی گرداند:
توابع خصوصی
تابع خصوصی یک تابع اصلی است که تنها به یک گروه از توابع دیگر محدود شده است اگر شما نمی خواهید تابع(ها) نمایش داده شود، شما می توانید آن ها را مانند تابع خصوصی ایجاد کنید.
تابع خصوصی در subfolders با اسم خصوصی قرار داده می شود.
مثال
اجازه دهید دوباره تابع quadratic را بنویسیم. در این صورت، تابع disc به صورت جداگانه محاسبه می شود، که یک تابع خصوصی خواهد بود.
یک زیر پوشه با اسم خصوصی در فهرست کارتان ایجاد نمایید. تابع زیر تابع فایل 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 در فهرست کاری ایجاد نمایید و کد زیر را در آن تایپ کنید:
function[xl,x2]= quadratic3(a,b,c)
%thisfunction returns the roots of
% a quadratic equation.
%lt takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
%lt returns the roots
d = disc(a,b,c);
xl =(-b + d)/(2*a);
x2 =(-b – d)/(2*a);
end%end of quadratic3
شما می توانید تابع بالا را از خط فرمان به این صورت فراخوانی کنید:
quadratic(2,4,-4)
متلب دستورات بالا را اجرا خواهد کرد و نتیجه زیر را بر می گرداند:
متغیرهای عمومی
متغیرهای عمومی می توانند در بیش از یک تابع به اشتراک گذاشته شوند.به همین دلیل، شما به اعلان متغیرهای عمومی در تمام توابع نیاز دارید.
اگر شما می خواهید به متغیرهای فضای کاری اصلی دسترسی داشته باشید، در آن صورت متغیر را در خط فرمان اعلان کنید.
اعلان متغیرهای عمومی باید قبل از اینکه متغیرها در تابع به صورت حقیقی استفاده شوند انجام شود. یک تمرین خوب برای حروف بزرگ برای اسامی متغیرهای عمومی برای تشخیص آن ها از متغیرهای دیگر استفاده شده است.
مثال
اجازه دهید یک فایل تابع با نام average.m ایجاد کنیم و کد زیر را در آن تایپ نماییم:
یک فایل اسکریپت ایجاد کنید و کد زیر را در آن تایپ کنید:
global total;
total =lo;
n =[34,45,25,45,33,l9,40,34,38,42];
av = average(n)
زمانی که شما فایل را اجرا می کنید، نتیجه زیر نشان داده خواهد شد:
خرید کتاب 28 گام موثر در فتح متلب