کد خبر: ۲۲۵۸۶
تاریخ انتشار : ۱۵:۱۵ - ۲۳ خرداد ۱۳۹۶
در این پست نحوه ایجاد و کار با تابع در Matlab توضیح داده می شود.
سرویس آموزشی برق نیوز:  تابع، گروهی از گزاره ها می باشد که کاری را با هم انجام می دهد. در متلب، توابع در فایل های جداگانه تعریف می شوند. نام تابع و فایل باید با هم یکسان باشد.

توابع بر روی متغیر های داخل 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)

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

av = 35.500
 
 
 
منبع:سایت تحلیل داده
انتشار یافته: ۱
در انتظار بررسی: ۰
غیر قابل انتشار: ۰
سیدمصطفی حسینی
|
Iran (Islamic Republic of)
|
۱۳:۴۰ - ۱۴۰۰/۱۰/۲۹
0
0
سلام
هیچ کدام از توابع بالا در متلب R2014b اجرا نمی شود
ارسال نظر قوانین ارسال نظر
لطفا از نوشتن با حروف لاتین (فینگلیش) خودداری نمایید.
از ارسال دیدگاه های نا مرتبط با متن خبر، تکرار نظر دیگران، توهین به سایر کاربران و ارسال متن های طولانی خودداری نمایید.
لطفا نظرات بدون بی احترامی، افترا و توهین به مسئولان، اقلیت ها، قومیت ها و ... باشد و به طور کلی مغایرتی با اصول اخلاقی و قوانین کشور نداشته باشد.
در غیر این صورت، «برق نیوز» مطلب مورد نظر را رد یا بنا به تشخیص خود با ممیزی منتشر خواهد کرد.
نتیجه عبارت زیر را وارد کنید
captcha =
وضعیت انتشار و پاسخ به ایمیل شما اطلاع رسانی میشود.
پربازدیدها
برق در شبکه های اجتماعی
اخبار عمومی برق نیوز
عکس و فیلم
پربحث ترین ها
آخرین اخبار