تعریف تابع در متلب
در این مطلب قصد معرفی و آموزش تعریف تابع در متلب را داریم. ابتدا دلایل استفاده از تابع و نحوه آن را شرح داده و سپس جزئیات آن را معرفی میکنیم. در نهایت چند مثال ابتدایی از تابع در متلب را ارائه میکنیم. با ما همراه باشید. قبل از شروع آموزش، شما میتوانید تمام مقالات جامع و کاربردی آموزش متلب را در صفحه « آموزش matlab » مطالعه کنید.
دلیل استفاده از تابع
استفاده از تابع در متلب دقت برنامه نویسی را افزایش داده و احتمال خطا را کاهش میدهد. همچنین در یک برنامه بزرگ، گاهی لازم میشود چندین دستور بطور همزمان اجرا شوند. در این مواقع بهتر است که با فراخوانی نام تابع، از تکرار مجدد دستورات خودداری نماییم. قابل ذکر است که تابع در متلب بر خلاف m فایلها کامپایل میشوند. یعنی بصورت خط به خط اجرا نمیگردند. بنابراین دستورات نوشتهشده در تابع، سرعت اجرای بالاتری نسبت به دستورات نوشتهشده در m فایلها دارند. در متلب دستوراتی نیز برای حل عددی معادلات جبری و دیفرانسیلی وجود دارد. در این دستورات، بایستی معادله دیفرانسیل یا جبری بصورت تابع وارد شود. گاهی اوقات نیز میتوان، توابعی در متن یک m فایل تعریف نمود و از آن استفاده کرد. مثلا برای انتگرالگیری عددی توابعی در متلب وجود دارد. معمولا اگر تابع بصورت داخلی تعریف شود، برنامه خلاصهتر و منظمتر میشود.
نحوه تعریف تابع در متلب
توابع باید در همان پوشهای که m فایل در آن ذخیره شدهاست ذخیره شوند. یا اگر قراراست در پنجره فرمان فراخوانی شوند. باید دایرکتوری جاری متلب به دایرکتوری که تابع در آنجا قرار دارد، تغییر دادهشود.
برای نوشتن تابع در متلب، کافیست یک فایل متنی بازکرده و مشابه زیر ادامه دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function [outarg1, outarg2,...] = fname(inarg1, inarg2, ...) % H1 comment line % Other comment lines ... (Executable code) ... (return) (end) |
پس از نوشتن دستورات در فرمت فوق، m فایل را باید با نام تابع ذخیره نماییم. برای ایجاد یک تابع در متلب کافی است در قسمت new گزینه function را بزنیم. در این صورت، ساختار فوق بصورت خودکار ایجاد خواهد شد.
توضیحات تکمیلی در زیر دستور آغاز تابع تا اولین خط اجرایی نوشته میشوند. این توضیحات که نوشتن آنها اجباری نیست، به درك نحوه عملکرد تابع بسیار کمک میکنند. نکات نوشته شده در سطر اول بعد از دستور تابع (سطر H1) قابل جستجو توسط دستور lookfor هستند. همچنین تمامی نکات نوشته شده در این محدوده، با help گرفتن از تابع نمایش داده میشوند.
پس از نوشتن و ذخیره تابع، برای فراخوانی آن کافیست مانند زیر عمل کنیم.
[outarg1, outarg2,…]=fname(inarg1,inarg2,…)
اگر تنها یک متغیر خروجی داشته باشیم میتوان کروشهای ننوشت.
متغیرهای گلوبال Global
در نوشتن توابع باید دقت نمود که فضای کاری یک تابع با فضای کاری برنامه اصلی یکسان نمیباشد. بهعبارتی یک تابع فقط ورودیهایش را از برنامه مادر میخواند. سایر مقادیر تعریف شده در برنامه مادر به تابع وارد نمیشود. گاهی اوقات لازم میشود که مقادیر دیگری نیز علاوهبر ورودیهای یک تابع، از برنامه مادر وارد تابع شوند. در این مواقع باید آن متغیرها اصطلاحا global شوند. هنگامی که یک متغیر global میشود، مقدارش بین تمامی توابع و m فایلها به اشتراک گذاشته میشود. بهعبارتی تمامی کدهای مورد استفاده به مقدار این متغیر دسترسی دارند.
global var1 var2 var3
برای global کردن یک متغیر ابتدا باید آن را در کد اصلی (معمولا در ابتدای کد) global نمود. سپس در هر تابعی که قراراست از این متغیرها استفاده شود مشابه با فوق، global بودن آنها را اعلام نمود. ضمناً متغیرهای global با همان نام (نام اصلی) در همه جا فراخوانی میشوند.
توقف تابع
ﮔﺎﻫﯽ اوﻗﺎت ﻻزم ﻣﯿﺸﻮد ﮐﻪ ﺷﺮﻃﯽ ﺑﺮرﺳﯽ ﮔﺮدد و در ﺻﻮرت ﺗﺤﻘﻖ آن، اداﻣﻪ ﺗﺎﺑﻊ اﺟﺮا ﻧﺸﻮد. در اﯾﻦ ﻣﻮاﻗﻊ ﮐﺎﻓﯿﺴﺖ از دﺳﺘﻮرات return یا error اﺳﺘﻔﺎده کرد. دﺳﺘﻮر return باعث میشود ادامه تابع بررسی نشده و اجرا از تابع به برنامه مادر برگردد. در واقع اجرا از تابع خارج میشود. در حالیکه در دﺳﺘﻮر error با نمایش عبارتی ﺑﻤﻨﻈﻮر اﻋﻼن ﺧﻄﺎ، اﺟﺮای اداﻣﻪ ﺗﺎﺑﻊ، ﻣﺘﻮﻗﻒ میگردد.
error(‘ پیام خطای موردنظر‘)
اﮔﺮ ﺑﺨﻮاﻫﯿﻢ ﺗﻨﻬﺎ ﭘﯿﻐﺎم ﻫﺸﺪاری ﺑﻬﻤﺮاه ﺷﻤﺎره ﺧﻂ خطا و ﻧﺎم ﺗﺎﺑﻌﯽ ﮐﻪ در آن رخ میدهد ﻧﻤﺎﯾﺶ دادهشود. و همچنین اﺟﺮای ﺗﺎﺑﻊ ﻣﺘﻮﻗﻒ ﻧﺸﻮد ﮐﺎﻓﯿﺴﺖ ﺑﺠﺎی دﺳﺘﻮر error از warning استفاده کنیم.
ورودی و خروجیهای تابع
ﯾﮏ ﺗﺎﺑﻊ در ﻣﺘﻠﺐ میتواند ﺑﺎ ﺗﻌﺪاد ﮐﻤﺘﺮی از ﺗﻌﺪاد آرﮔﻮﻣﺎﻧﻬﺎی ورودی ﯾﺎ خروجیاش ﻓﺮاﺧﻮاﻧﯽ ﺷﻮد. بهعبارتی میتوان ﺑﺮای ﯾﮏ ﺗﺎﺑﻊ ﺗﻌﺪادی آرﮔﻮﻣﺎن ورودی ﯾﺎ ﺧﺮوﺟﯽ اﺧﺘﯿﺎری ﺗﻌﯿﯿﻦ ﻧﻤﻮد. به آرﮔﻮﻣﺎنهای اﺿﺎﻓﯽ ﺗﻌﺮﯾفشده در ﺗﺎﺑﻊ ﮐﻪ میتوان در ﻫﻨﮕﺎم ﻓﺮاﺧﻮاﻧﯽ از آﻧﻬﺎ اﺳﺘﻔﺎده ﻧﮑﺮد، آرﮔﻮﻣﺎن اﺧﺘﯿﺎری ﮔﻮﯾﻨﺪ.
دﺳﺘﻮرﻫﺎی nargin و nargout آرﮔﻮﻣﺎنهای ﯾﮏ ﺗﺎﺑﻊ را ﮐﻪ در ﺑﺮﻧﺎﻣﻪ ﻣﺎدر ﻓﺮاﺧﻮاﻧﯽ ﺷﺪهاﻧﺪ، ﻧﺸﺎن میدهند. بهعبارتی این دستورها تعداد آرگومانهای اصلی یک تابع را نشان میدهند.
ﯾﺎ میتوان ﺗﻮاﺑﻌﯽ ﻧﻮﺷﺖ ﮐﻪ ﺑﺮ اﺳﺎس درﯾﺎﻓﺖ ﺗﻌﺪاد دﻟﺨﻮاﻫﯽ از آرﮔﻮﻣﺎﻧﻬﺎ، ﮐﺎرﻫﺎی ﻣﺨﺘﻠﻔﯽ اﻧﺠﺎم ﺑﺪﻫﻨﺪ. ﻣﺜﻼ ﻣﯿﺘﻮان ﺗﺎﺑﻌﯽ ﻧﻮﺷﺖ ﮐﻪ ﺗﻌﺪاد 5 ورودی ﺑﺮاﯾﺶ ﻣﺸﺨﺺ ﺷﺪه و ﺑﺎ اﺳﺘﻔﺎده از ﯾﮏ ﺑﻠﻮك switch ﺗﻌﺪاد ورودی از 1 تا 5، در ﻫﺮ ﺣﺎﻟﺖ ﯾﮑﺴﺮی دﺳﺘﻮرات اﻧﺠﺎم ﺑﺸﻮد. ﻣﺜﻼ اﮔﺮ ﯾﮏ ورودی از ﺑﺮﻧﺎﻣﻪ ﻣﺎدر وارد ﺷﺪ، ﯾﮏ ﮐﺎر اﻧﺠﺎم دﻫﺪ و اﮔﺮ ﻣﺜﻼ 4 ورودی وارد شد، کار دیگری. این کار برای خروجی نیز امکان پذیر است.
حل چند مثال از توابع ابتدایی
مثال 1) تابعی بنویسید که مختصات x و y دو نقطه مانند A و B را گرفته و فاصله بین آنها را محاسبه کند. کد را به آسانی کپی کنید. همچنین میتوانید از لینک زیر، کلیه مثالها را در یک فایل دانلود کنید.
1 2 3 4 5 6 |
function distance = dist(x1, y1, x2, y2) %DIST Calculate the distance between two points % Function DIST calculates the distance between % two points (x1,y1) and (x2,y2) in a Cartesian % coordinate system. distance = sqrt((x2-x1).^2 +(y2-y1).^2); |
این تابع را با نام dist ذخیره کنید. اکنون اگر از این تابع help بگیریم.
حال اگر به دنبال تابعی برای محاسبه فاصله بین دو نقطه باشیم.
مثال 2) تابعی بنویسید که مختصات قطبی یک نقطه را به مختصات کارتزین تبدیل کند.
1 2 3 4 5 6 7 8 |
function [x, y] = polar2rect(r,theta) %POLAR2RECT Convert rectangular to polar coordinates % Function POLAR2RECT accepts the polar coordinates % (r,theta), where theta is expressed in degrees, % and converts them into the rectangular coordinates % (x,y). x = r * cos(theta * pi/180); y = r * sin(theta * pi/180); |
مثال 3) تابعی بنویسید که میانگین ورودی را محاسبه کند.
1 2 |
function y = Average(x) y = sum(x)/length(x); |
این کد بایستی با نام Average ذخیره شود. توجه دارید که برای تعریف این تابع از دستورات خودِ متلب استفاده شده است. دستور sum مجموع و دستور length تعداد درایهها را محاسبه میکند. نتیجهی استفاده بصورت زیر است.
مثال4) تابعی با این شرایط بنویسید. اگر تعداد ورودی 3 بود، مجموع ورودی ها را محاسبه کند. اگر تعداد ورودی ها 2 بود، ضرب آنها را بعنوان خروجی اعلام کند. همچنین اگر تعداد خروجی 1 بود، پاسخ صفر را اعلام کند.
1 2 3 4 5 6 7 8 9 |
function y = ex4(a,b,c) switch nargin case 2 y = a * b; case 3 y = a+b+c; otherwise y = 0; end |
این کد بایستی با نام ex4 ذخیره شود. حال با دادن ورودی آن را امتحان میکنیم.
مشاهده میشود که طبق تعریف خواسته شده، خروجی اعلام شدهاست.
حرف آخر
مثالهای فوق تنها جنبه آموزشی دارند و برای یادگیری مفهوم تابع ارائه شده اند. قابلیتهای تابع در متلب بسیار فراوان و کاربردی میباشد و در مسائل مختلفی که در محیط متلب پیادهسازی میشوند بکار میآید. شما میتوانید انواع پروژههای آمادهی رشتههای مهندسی را از صفحه « پروژه متلب » دانلود نمایید. با یادگیری اصول برنامهنویسی و تسلط به نرم افزار متلب، میتوان هر خواستهای را با تابع عملی کرد. مثلا تبدیل فرمت یک فایل به فایلی دیگر. اگرچه در نگاهاول به هیچ عنوان به متلب فکر نمیکنیم اما این شکل توابع بسیار زیاد هستند. امیدوارم این مطلب مفیده بوده و تعریف تابع در متلب را یادگرفته باشید.
منبع: MathWorks
این مقاله آموزشی به کوشش تیم تولید محتوای علمی گام98 در راستای ارتقای دانش و استفاده از آن نوشته شده است. درصورتی مفید بودن این مطلب آن را برای دوستان خود به اشتراک بذارید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.