تعریف تابع در متلب
یکی از مهم ترین مباحثی که در برنامه نویسی با استفاده از متلب مطرح می شود، بحث استفاده و تعریف تابع در متلب است.
تابع ها در متلب، یک یا چند ورودی دریافت می کنند، تعدادی از دستورات را به روی این ورودی ها اعمال می کنند و سپس یک یا چند خروجی را تحویل می دهند.
مزیت تابع ها این است که نیازی نیست برای انجام یک کار مشخص روی تعدادی ورودی، هر بار چندین خط کد بنویسیم. کافی است یک بار تابع را تعریف کنیم و در مرتبه های بعدی آن را فرابخوانیم و از عملکردش استفاده کنیم.
نرم افزار متلب، دارای تعداد بسیار زیادی از توابع آماده ای است که توسط برنامه نویسان کدنویسی شده تا به سادگی توسط کاربران استفاده شوند. تابع هایی مانند sum، roots، disp و هزاران تابع دیگر، از قبل کد نویسی شده اند تا یک کار خاص را روی ورودی ها انجام دهند و یک یا چند خروجی تولید کنند. هر کدام از این تابع ها شامل چند صد یا چند هزار خط کد می شود.
البته توابع متلب محدود به تابع های از پیش تعریف شده نمی شود. هر کاربر می تواند بنا بر نیاز خودش تابع هایی تعریف کند و از آنها در طول برنامه های خود استفاده کند. این کار می تواند کمک بسیار زیادی به سازماندهی کدها و ساده کردن کدنویسی و صرفه جویی در وقت بکند. راه های مختلفی هم برای تعریف تابع در متلب وجود دارد که در این قسمت از آموزش به تشریح آن می پردازیم.
تعریف توابع در متلب، می تواند به شکل های متفاوتی انجام شود. در ادامه به چند روش تعریف تابع در متلب می پردازیم.
تعریف تابع در متلب
برای تعریف یک تابع در متلب، باید از ساختار زیر پیروی کنیم:
در یک فایل جدید، ابتدا کلمه function نوشته می شود و در مقابل آن نام خروجی ها، نام تابع و ورودی ها را می نویسیم. در خط آخر کلمه end را می نویسیم و بین خط اول و آخر، دستورات و فرایندهایی را که باید روی ورودی ها انجام شوند تا خروجی ها ساخته شوند را وارد می کنیم.
به مثال زیر توجه کنید:
مثال: می خواهیم تابعی بنویسیم که شعاع یک دایره را به عنوان ورودی تحویل بگیرد و اندازه محیط آن را تحویل بدهد. نام تابع را هم wikimechanic_cirle می گذاریم. (اینکه چه نام هایی می توانیم برای توابع بگذاریم و چه محدودیتی در انتخاب نام داریم، در ادامه همین آموزش بحث می شود. )
هنگام ذخیره تابع در متلب، نام فایل همان نام تابع به همراه پسوند .m خواهد بود. وقتی تابع را ذخیره کردیم، می توانیم آن را در هر برنامه دلخواه فراخوانی کنیم.
نکته: پسوند تابع ها همانند فایل های عادی متلب .m است. اما برای اجرای آنها حتما باید ورودی های مورد نیازشان را هم وارد کنیم. در حالیکه فایل های عادی برای اجرا نیاز به وارد کردن ورودی ها ندارند.
نکته: هنگام فراخوانی یک تابع، نیازی نیست که نام ورودی ها و خروجی ها مشابه نام آنها در هنگام تعریف تابع باشد. مثال زیر را در نظر بگیرید.
مثال: می خواهیم تابعی را که در مثال قبل تعریف کردیم فراخوانی کنیم. در مثال قبل نام ورودی (یعنی اندازه شعاع دایره) را r و نام خروجی ( یعنی محیط دایره) را p گذاشتیم. هنگام استفاده از تابع تعریف شده می توانیم از نام های اصلی استفاده کنیم و یا آنها را تغییر دهیم.
مثلا در اینجا نام متغیر ورودی یعنی شعاع دایره را m و نام متغیر خروجی یعنی محیط دایره را n گذاشته ایم.
همان طور که می بینید نیازی نیست که هنگام استفاده از تابع، نام متغیرهای ورودی و خروجی همانند نام آنها در هنگام تعریف تابع در متلب باشد.
نکته: برای فراخوانی یک تابع در متلب، حتما باید در بخش current folder ، فولدری را که تابع را در آنجا ذخیره کرده ایم انتخاب کنیم. در غیر این صورت متلب تابع را شناسایی نمی کند و مثلا برای تابع مثال بالا، پیغام زیر را نشان می دهد.
توابع چند ورودی و چند خروجی در متلب
در مثال های بالا از تابعی استفاده کردیم که صرفا یک ورودی و یک خروجی داشت. اما می توانیم در صورت نیاز چند ورودی و چند خروجی هم در یک تابع تعریف کنیم.
برای ایجاد چند ورودی، کافیست نام ورودی ها در مقابل نام تابع وارد کنیم و بین آنها علامت , قرار دهیم.
برای ایجاد چند خروجی یک بردار ایجاد می کنیم که هر کدام از المان های آن یکی از خروجی های تابع باشد.
مثال های زیر این موضوع را به خوبی مشخص می کنند.
مثال: می خواهیم تابع wikimechanic_cirle را به گونه ای تعریف کنیم که شعاع را به عنوان ورودی دریافت کند و محیط و مساحت را محاسبه نماید.
در این مثال یک ورودی و دو خروجی داریم. تابع را به صورت زیر تعریف می کنیم.
P نشان دهنده محیط و s نشان دهنده مساحت است.
مثال: می خواهیم تابع wikimechanic را به گونه ای تعریف کنیم که طول و عرض و ارتفاع یک مکعب مستطیل را بگیرد و مساحت و حجم آن را محاسبه نماید.
پس در این مثال به تابعی نیاز داریم که سه ورودی و دو خروجی داشته باشد.
نکته: هنگام فراخوانی یک تابع با چند ورودی، باید تعداد ورودی هایی که به تابع می دهیم، با تعداد ورودی های مورد نیازش که تعریف کرده ایم برابر باشد. مثلا برای مثال بالا، در هنگام فراخوانی حتما باید سه تا ورودی به تابع داده شود.
نکته: در تابع های چند ورودی، ترتیب ورودی ها بسیار مهم است. هنگام وارد کردن ورودی ها باید ترتیبی که در هنگام تعریف تابع ایجاد کرده ایم حفظ شود.
نکته: در توابع چند خروجی ، باید برداری با تعداد المان های کافی را برای تحویل خروجی ها در نظر بگیریم وگرنه تعدادی از خروجی ها ذخیره نمی شوند. حالا این یعنی چه؟! در مثال های زیر متوجه می شوید.
مثال: مقدار طول و عرض و ارتفاع را وارد تابعی که در بالا تعریف کرده ایم می کنیم و تابع را درمتغیر e می ریزیم.
مشاهده می کنید که صرفا اندازه مساحت در آن ذخیره شد. چون ما فقط یک متغیر برای دریافت خروجی تعریف کرده ایم، فقط خروجی اول ذخیره می شود.
مثال: حالا برای اینکه هر دو متغیر ذخیره شود، تابع را برابر یک بردار با دو المان قرار می دهیم. خروجی اول تابع در متغیر e و خروجی دوم تابع یعنی حجم در متغیر f ذخیره می شود.
مثال: این بار می خواهیم فقط متغیر دوم را ذخیره کنیم. در این حالت همانند مثال بالا عمل می کنیم با این تفاوت که به جای متغیر اول ~ (تیلدا) قرار می دهیم.
مشاهده می کنید که فقط خروجی دوم تابع یعنی حجم ذخیره می شود.
نکته: گذاشتن کاما (,) در بین المان های خروجی اختیاری است. اما هنگامی که از ~ استفاده می کنید، حتما باید در بین المان ها، کاما قرار دهید.
در حالت هایی که تعداد بیشتری ورودی یا تعداد بیشتری خروجی هم مورد نیاز باشد، باز به شیوه بالا عمل می کنیم.
انتخاب نام توابع در متلب
برای انتخاب نام تابع به نکات زیر دقت کنید:
1- در انتخاب نام تابع در متلب می توانید از حروف کوچک و بزرگ انگلیسی، اعداد و _ (underline) استفاده کنید.
2- نام تابع نباید با یک عدد شروع شود.
3- نام تابع نباید با توابعی که در خود متلب وجود دارند مشابه باشد. مثلا اگر تابعی با نام sum تعریف کنید موجب بروز مشکل می شود.
یک راه خوب این است که در نام تابع از حروف بزرگ هم استفاده کنید. چون نام تابع های از پیش آماده متلب، از حروف کوچک انگلیسی تشکیل شده اند و این کار باعث می شود که تشابه اسمی در توابع متلب ایجاد نشود.
در این آموزش با تعریف یک تابع با یک یا چند ورودی و خروجی و نحوه استفاده از آن آشنا شدیم. در آموزش های بعدی با انواع دیگری از توابع هم آشنا خواهیم شد. با ما همراه باشید.