مقدمه ای بر تابع در متلب

تابع مجموعه ای از دستورات است که با هم یک کار را انجام می دهند. در متلب توابع در فایل های جداگانه تعریف می شوند. نام فایل و تابع باید یکسان باشد. توابع بر روی متغیرهایی در فضای کاری خود عمل می کنند که به آن فضای کاری محلی نیز گفته می شود، جدا از فضای کاری که در خط فرمان MATLAB به آن دسترسی دارید که فضای کار پایه نامیده می شود. توابع می توانند بیش از یک آرگومان ورودی را بپذیرند و ممکن است بیش از یک آرگومان خروجی را برگردانند.

فرمت کلی یک تابع در متلب به صورت زیر است :

function [out1,out2, …, outN] = myfun(in1,in2,in3, …, inN)

مثال

تابع زیر با نام mymax باید در فایلی با نام mymax.m نوشته شود. پنج عدد را به عنوان آرگومان می گیرد و حداکثر اعداد را برمی گرداند. یک فایل تابع به نام 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

خط اول یک تابع با کلمه کلیدی تابع شروع می شود. نام تابع و ترتیب آرگومان ها را می دهد. در مثال ما، تابع mymax دارای پنج آرگومان ورودی و یک آرگومان خروجی است.

خطوط به حالت کامنت که درست بعد از دستور تابع می آیند و بایستی با علامت %% شروع شوند، متن راهنما را ارائه می دهند. این خطوط هنگام تایپ دستور زیر چاپ می شوند

help mymax

MATLAB دستور بالا را اجرا می کند و نتیجه زیر را برمی گرداند

This function calculates the maximum of the   five numbers given as input

البته به شرطی که تابع نوشته شده در مسیر فعلی (current directory) متلب باشد.

می توانید تابع را به صورت زیر فراخوانی کنید :

mymax(34, 78, 89, 23, 11)

MATLAB دستور بالا را اجرا می کند و نتیجه زیر را برمی گرداند :

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 بنویسیم که ریشه های یک معادله درجه دوم را محاسبه کند. تابع سه ورودی دارد، ضریب درجه دوم، ضریب خطی و جمله ثابت. ریشه ها را برمی گرداند. فایل تابع quadratic.m شامل تابع اصلی درجه دوم و دیسک تابع فرعی است که تفکیک کننده را محاسبه می کند. یک فایل تابع 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 discriminantdis = sqrt(b^2 – 4*a*c);end   

% end of sub-function

می توانید تابع فوق را از خط فرمان به عنوان فراخوانی کنید

quadratic(2,4,-4)

MATLAB دستور بالا را اجرا می کند و نتیجه زیر را برمی گرداند

ans = 0.7321

توابع تو در تو

می توانید توابع را در بدنه یک تابع دیگر تعریف کنید. این توابع تو در تو نامیده می شوند. یک تابع تو در تو شامل یک یا همه اجزای هر تابع دیگر است. توابع تو در تو در محدوده تابع دیگری تعریف می شوند و دسترسی به فضای کاری تابع حاوی را به اشتراک می گذارند. یک تابع تو در تو از دستور زیر پیروی می کند

function x = A(p1, p2)…B(p2)  

function y = B(p3)   …  

end…

end

مثال

اجازه دهید تابع درجه دوم را از مثال قبلی بازنویسی کنیم، اما این بار تابع دیسک یک تابع تو در تو خواهد بود. یک فایل تابع 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)

MATLAB دستور بالا را اجرا می کند و نتیجه زیر را برمی گرداند :

ans =  0.73205

توابع خصوصی

یک تابع خصوصی یک تابع اصلی است که فقط برای گروه محدودی از توابع دیگر قابل مشاهده است. اگر نمی‌خواهید اجرای یک تابع (ها) را آشکار کنید، می‌توانید آنها را به عنوان توابع خصوصی ایجاد کنید. توابع خصوصی در زیر پوشه هایی با نام خاص private قرار دارند. آنها فقط برای توابع موجود در پوشه والد قابل مشاهده هستند.

مثال

اجازه دهید تابع درجه دوم را بازنویسی کنیم. با این حال، این بار، تابع دیسک محاسبه کننده تفکیک کننده، یک تابع خصوصی خواهد بود. یک زیر پوشه به نام private در پوشه کاری ایجاد کنید. فایل تابع زیر 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 [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

متغیرهای جهانی

متغیرهای سراسری را می توان توسط بیش از یک تابع به اشتراک گذاشت. برای این کار باید متغیر را در تمام توابع به عنوان global اعلام کنید. اگر می خواهید از فضای کار پایه به آن متغیر دسترسی پیدا کنید، آن متغیر را در خط فرمان اعلام کنید. اعلان سراسری باید قبل از استفاده از متغیر در یک تابع اتفاق بیفتد. استفاده از حروف بزرگ برای نام متغیرهای سراسری برای تمایز آنها از سایر متغیرها روش خوبی است.

مثال

اجازه دهید یک فایل تابع به نام 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)

وقتی فایل را اجرا می کنید، نتیجه زیر را نمایش می دهد

av =  35.500

منبع : برق تِک

About برق تِک

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *