با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش متلب را دنبال می کنند. یک تابع یک گروه از کدها و دستورات است که با هماهنگی یکدیگر یک کار خاص را انجام می دهند. در MATLAB، توابع در فایل های جداگانه تعریف می شوند. نام فایل و تابع باید یکی باشد. توابع بر روی متغیرهای محلی خود کار می کنند، که فضای کاری محلی همان تابع می باشد. فضای کاری که در خط فرمان متلب به آن دسترسی پیدا می کنید نیز فضای کاری پایه نامیده می شود. توابع می توانند بیش از یک پارامتر ورودی را پذیرفته و همچنین می توانند بیش از یک خروجی را بازگردانند. در ادامه ی آموزش شما را با چگونگی تعریف و کار با توابع در متلب و انواع توابع در متلب آشنا خواهیم کرد.
در ادامه علاوه بر معرفی ساختار و تعریف توابع در متلب به چگونگی کار با توابع در متلب پرداخته ایم.
ساختار تعریف یک تابع در متلب بصورت زیر است :
1 | function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN) |
مثال – ما تابع زیر را به نام mymax ایجاد می کنیم. باید در یک فایل با نام mymax.m ذخیره شود.
این تابع ۵ عدد را دریافت کرده و بزرگترین عدد را باز می گرداند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 پنج ورودی دریافت کرده و یک خروجی را نشان می دهد.
می توانیم با دستور زیر خطوط نظرات را برای راهنمایی کاربر نمایش دهیم:
1 | help mymax |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود :
1 2 | This function calculates the maximum of the five numbers given as input |
شما می توانید تابع فوق را بصورت زیر فراخوانی کنید:
1 | mymax(34, 78, 89, 23, 11) |
نتیجه ی اجرای کد فوق در متلب بصورت زیر می باشد:
1 | ans = 89 |
شما می توانید یک تابع ناشناس را در خط فرمان MATLAB یا در یک تابع یا اسکریپت تعریف کنید.
به این ترتیب شما می توانید بدون نیاز به ایجاد یک فایل برای آنها، توابع ساده ای ایجاد کنید.
ساختار تعریف تباع ناشناس در متلب :
1 | f = @(arglist)expression |
مثال – یک فایل اسکریپت ایجاد و کد زیر را در آن تایپ نمائید :
1 2 3 4 5 | power = @(x, n) x.^n; result1 = power(7, 3) result2 = power(49, 0.5) result3 = power(10, -10) result4 = power (4.5, 1.5) |
زمانیکه فایل فوق را اجرا کنید نتیجه زیر را مشاهده می کنید:
1 2 3 4 | result1 = 343 result2 = 7 result3 = 1.0000e-10 result4 = 9.5459 |
هر تابع غیر از یک تابع ناشناس باید در یک فایل تعریف شود.
هر تابع فایل حاوی یک تابع اولیه ضروری است که ابتدا ظاهر می شود.
توابع اولیه را می توان خارج از فایلی که آنها را تعریف می کند، از خط فرمان یا سایر توباع تعریف کرد.
زیر تابع فقط برای تابع اولیه و سایر زیر توابع آن قابل مشاهده و استفاده است.
مثال – برای نمونه ما یک تابع به نام quadratic می نویسیم که ریشه های یک معادله درجه دوم را محاسبه کند.
تابع فوق سه ورودی دریافت کرده و ریشه های معادله را برمی گرداند.
فایل quadratic.m شامل تابع اولیه و زیر توابع است:
یک فایل quadratic.m ایجاد کرده و کد زیر را در آن تایپ نمائید:
1 2 3 4 5 6 7 8 | function [x1,x2] = quadratic(a,b,c) a. d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end function dis = disc(a,b,c) dis = sqrt(b^2 - 4*a*c); |
شما می توانید برای نمونه تابع فوق را بصورت زیر فراخوانی نمائید:
1 | quadratic(2,4,-4) |
نتیجه ی اجرای تابع فوق در متلب بصورت زیر خواهد بود:
1 | ans = 0.7321 |
شما می توانید توابعی را در داخل یک تابع دیگر تعریف کنید. این نوع توابع تودرتو نامیده می شوند.
یک تابع توزیع شامل هر یا همه اجزای هر تابع دیگر است.
توابع تودرتو در فضای کاری یک تباع دیگر تعریف شده و می تواند از اجزای توابع والد خود استفاده نماید.
ساختار تعریف توابع تودرتو بصورت زیر است :
1 2 3 4 5 6 7 8 | function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end |
مثال – یک فایل اسکریپت با نام quadratic2.m ایجاد کرده و کد زیر را در آن تایپ می نمائیم:
1 2 3 4 5 6 7 8 9 | 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 |
شما می توانید تابع فوق را بصورت زیر فراخوانی نمائید:
1 | quadratic2(2,4,-4) |
نتیجه ی اجرای کد فوق در متلب بصورت زیر خواهد بود:
1 | ans = 0.73205 |
یک تابع خصوصی (Private) یک تابع اولیه است که فقط برای یک گروه محدودی از سایر توابع قابل مشاهده است.
اگر نمی خواهید ساختار تابع (s) قابل مشاهده باشد، می توانید آنها را به عنوان یک تابع خصوصی ایجاد کنید.
توابع خصوصی فقط برای توابع فولدر اصلی قابل مشاهده هستند.
مثال – ما مثال تابع معادله ی درجه دوم را اینبار در یک تابع خصوصی بازنویسی می کنیم.
برای شروع یک زیر پوشه به نام private در دایرکتوری ایجاد کرده و تابع زیر فایل disk.m را در آن ذخیره می کنیم.
1 2 3 4 5 | function dis = disc(a,b,c) %function calculates the discriminant dis = sqrt(b^2 - 4*a*c); end % end of sub-function |
تابع quadratic3.m را در دایرکتوری جاری ایجاد کرده و کد زیر را در آن تایپ نمائید:
1 2 3 4 5 6 7 | function [x1,x2] = quadratic3(a,b,c) a. d = disc(a,b,c); x1 = (-b + d) / (2*a); x2 = (-b - d) / (2*a); end |
شما می توانید تابع فوق را بصورت زیر فراخوانی نمائید:
1 | quadratic3(2,4,-4) |
نتیجه ی اجرای کد فوق در متلب بصورت زیر خواهد بود:
1 | ans = 0.73205 |
متغیرهای عمومی را می توان با بیش از یک تابع به اشتراک گذاشت. برای این، شما باید متغیر را به عنوان عمومی در تمام توابع اعلام کنید.
برای تعریف متغیر عمومی باید قبل از نام متغیر کلمه کلیدی global را قرار دهید.
بهتر است برای تشخیص متغیرهای عمومی در نام آن ها از حروف بزرگ استفاده کنید.
مثال – فایل تابع average.m را ایجاد کرده و کد زیر را در آن تایپ می نمائیم:
1 2 3 4 | function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end |
سپس یک فایل اسکریپت ایجاد کرده و کد زیر را در آن تایپ می نمائیم:
1 2 3 4 | global TOTAL; TOTAL = 10; n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42]; av = average(n) |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود :
1 | av = 35.500 |
توابع یکی از اصلی ترین بخش های هر زبان برنامه نویسی است، که از تکرار شدن کدهای پرتکرار در طول برنامه و افزایش حجم فایل جلوگیری کرده و همچنین از پیچیده شدهن کدها نیز جلوگیری می کند. از این رو مباحث این بخش را به چگونگی کار با توابع در متلب و انواع توابع در متلب اختصاص داده ایم.