تعریف تابع یا function در متلب
تابع در متلب چیست؟
تابع یا function به مجموعهای از دستورات گفته میشود که باهم یک کار را انجام میدهند. توابع درواقع حاوی یک یا چند دستور متوالی هستند و میتوانند ورودیها را بپذیرند و خروجیها را برگردانند. تعریف تابع، بهعنوان یکی از برنامههای Matlab محسوب میشود که کاربرد گستردهای در زمینه کدنویسی دارد.
تعریف تابع درعین اینکه دستور سادهای محسوب میشود، اما مفاهیم زیادی درباره آن وجود دارد. عناوینی ازقبیل توابع اصلی و فرعی، انواع توابع قابل تعریف، نحوه ذخیرهسازی، بکاربردن و فراخوانی آن ازجمله موضوعات لازم است که باید به آن پرداختهشود. تعریف تابع در محیط نرمافزار، با استفاده از دستور function صورت میگیرد.
توابع در این نرمافزار میتوانند یک یا چندین داده را به عنوان آرگومان بپذیرند و یک یا تعداد بیشتری داده را بهصورت خروجی ارائه دهند. توابع تعریف شده توسط کاربر، توابعی هستند که برنامهنویس آنها را تعریف میکند، و سپس در پنجره فرمان یا در یک اسکریپت استفاده میکند. این توابع از قبل در متلب برنامهریزی نشدهاند و با استفاده از فایل m میتوان آنها را تعریف کرد.
تعریف تابع و ایجاد یک فایل m
قدم اول برای تعریف یک تابع در محیط نرمافزار Matlab، ایجاد یک فایل متنی است؛ بههمین جهت یک تابع به صورت فایلهای جداگانه که m-File نام دارند، تعریف میشود. بهطورکلی، برای نوشتن یک برنامه با چندین خط کد، کافی است یک تابع با نام در یک فایل ایجاد کنید. نکتهای که وجود دارد، لازم است نام فایل و تابع همانند یکدیگر باشند.
از آنجایی که فایل m تنها یک فایل متنی است، امکان تغییر متن آن با استفاده از ویرایشگر وجود دارد. این ویرایشگر که منحصرا متعلق به محیط MATLAB است، ویژگیهای خاصی دارد که هنگام نوشتن/ویرایش توابع مفید هستند. برای باز کردن یک فایل m جدید کافیست در پنجره دستور نرمافزار، به بخش file در نوار ابزار بروید، گزینه new را انتخاب کنید، سپس M-FILE را انتخاب کنید.
سپس در قدم بعدی، برای بکار بردن دستور function در متلب، ابتدا نام تابع را بنویسید؛ بعد از نوشتن نام تابع موردنظر، پرانتز () را اضافه کنید. در داخل پرانتز، هر پارامتری را که تابع نیاز دارد، با علامت ویرگول از هم جدا کنید. درنهایت خط را با نقطه ویرگول به پایان برسانید.
ذخیره اسکریپتها و توابع در فایلهای برنامه، هردو به کاربر این امکان را میدهند مجددا از دنبالهای از دستورات استفاده کنند. توابع بر روی متغیرهای فضای workspace که از پیش تعریفشده هستند، عمل میکنند. توابع از ذخیره متغیرهای موقت در فضای Workspace جلوگیری میکنند، بنابراین میتوانند سریعتر از اسکریپتها اجرا شوند.
توابع اولیه یا primary و فرعی
دربخش قبلی، گفته شد هر تابع (غیر از یک تابع ناشناس) باید در یک فایل M تعریف شود. یک m-file شامل یک تابع اصلی موردنیاز است که ابتدا ظاهر میشود و بهعنوان primary function شناخته میشود. درادامه، نوشتن هر تعداد تابع فرعی اختیاری بعد از تابع اصلی، امکانپذیر است.
یکی از تفاوتهای تابع اصلی و فرعی در فراخوانی کردن آنها است. توابع اولیه را میتوان از خارج از فایلی که آنها را تعریف میکند، از خط فرمان یا از توابع دیگر فراخوانی کرد، اما توابع فرعی را نمیتوان اینگونه و خارج از فایل تابع فراخوانی کرد. درواقع، توابع فرعی فقط برای تابع اصلی و سایر توابع فرعی همان فایل مربوطه قابل مشاهده هستند.
انواع توابع در متلب
در محیط نرمافزاری، انواع مختلفی از توابع وجود دارند که برای دستور function در متلب، مورد استفاده قرار میگیرند. این توابع که در دسترس قرار دارند معمولا به چهار گروه دسته بندی میشود. در این بخش، مختصرا به توضیح هریک از این توابع میپردازیم. این چهار گروه عبارتاند از:
- توابع محلی: توابع محلی یا Local function، عباراتی هستند که در یک فایل ذخیره میشوند و در دسترس قرار میگیرند. توابع محلی، رایجترین راه برای جداسازی وظایف برنامهای بهشمار میروند. در یک فایل M که فقط شامل تعاریف تابع است، توابع محلی میتوانند به ترتیب بعد از تابع اصلی در فایل ظاهر شوند.
- توابع تودرتو: در این حالت، توابع بهگونهای تشکیل میشوند که یک تابع در بدنه یک تابع دیگر تعریف میشود. یک تابع تودرتو یا Nested function شامل هریک یا همه اجزای هر تابع دیگر میشود. توابع تودرتو در محدوده تابع دیگری تعریف میشوند و دسترسی به workspace تابع حاوی را به اشتراک میگذارند.
- توابع خصوصی: یک تابع اصلی است که فقط برای گروه محدودی از توابع دیگر قابل مشاهده است. اگر نمیخواهید اجرای یک تابع را آشکار کنید، میتوانید آن را به عنوان تابع خصوصی یا Private function ایجاد کنید. توابع خصوصی در زیرپوشههایی با نام خاص private قرار دارند.
- توابع ناشناس: تابع ناشناس مانند یک تابع درونخطی در زبانهای برنامهنویسی قدیمی عمل میکند. این تابع از یک عبارت متلب و تعدادی آرگومان ورودی و خروجی تشکیل شده است. function Anonymous تابعی بدون شناسه برای ارجاع است و معمولا پس از ایجاد اولیه در دسترس نیست. شما میتوانید یک تابع ناشناس را در خط فرمان متلب، درون یک تابع یا اسکریپت تعریف کنید. بنابراین میتوانید توابع ساده را بدون نیاز به ایجاد فایل برای آنها ایجاد کنید.
توابع ازپیش تعریفشده
نرمافزار متلب دارای مجموعهای از توابع ازپیش تعریفشده یا Built-in functions است که با استفاده از نام آنها و ارائه ورودیهای مناسب بهراحتی قابل استفاده هستند. ایندسته از توابع کاربرد بسیاری برای برنامهنویسی به ویژه حل معادلات و رسم مدلهای ریاضی دارند.
توابع ازپیش تعریفشده اغلب مورد استفاده قرار میگیرند یا ممکن است زمان بیشتری برای اجرا نیاز داشته باشند. به عنوان مثال، برای محاسبه لگاریتم طبیعی، نیازی به تعریف function و فایل جداگانه نیست. توابع مثلثاتی، قدرمطلق، توان، لگاریتم و … نمونهای از توابع تعریفشده یا بهشمار میروند. در شکل زیر میتوانید این توابع آماده را مشاهده کنید.
این عملگرها درواقع بهعنوان فایلهای اجرایی پیادهسازی میشوند، به همین دلیل به آنها توابع داخلی نیز میگویند. برخلاف توابعی که با تعریف در m-file برنامه MATLAB ساخته میشوند، شما نمیتوانید به کد منبع داخلی دسترسی پیدا کنید؛ اگرچه اکثر توابع داخلی دارای یک فایل برنامه مرتبط با آنها هستند، اما این فایل عمدتا برای ارائه اسناد کمکی برای عملکرد وجود دارد.
تعریف تابع ضمنی در متلب
تابع ضمنی یا Implicit function نوع خاصی از توابع متلب بهشمار میرود که به شکل دو ورودی و یک خروجی تعریف میشود. این دسته از توابع به لحاظ نوشتاری، معمولا به شکل f(x,y)=0 مشخص میشوند؛ بنابراین درطی عملکرد تابع ضمنی، باید دو آرگومان ورودی ماتریس را بپذیرد و یک آرگومان خروجی ماتریسی با همان اندازه را برگرداند. رسم توابع ضمنی یکی از پرکاربردترین عملگر از مجموعه دستورات function در متلب است که میتوان به آن اشاره داشت. رسم implicit function برای طیف گستردهای از توابع امکانپذیر است، به همین جهت برای رسم یک تابع ناشناس یا نامگذاری شده، مشخص شده است. اگر بخواهید بهترین عملکرد را در تابع ضمنی داشته باشید، بهتر است به جای عملگرهای ماتریسی از عملگرهای آرایه استفاده کنید.
فراخوانی تابع در متلب
در دستور توابع آماده پس از ذخیرهسازی تابع به صورت فایل، میتوانید مستقیما تابع را با نام آن فراخوانی کنید. همانطور که میدانید، توابع آرگومان ورودی را دریافت میکنند و نتیجهای را بهعنوان خروجی، برمیگردانند. هنگامی که یک فراخوانی تابع اجرا میشود موارد زیر اتفاق میافتد:
1- کنترل به خود تابع منتقل میشود و تابع اجرا را آغاز میکند.
2- آرگومانها به تابع ارسال میشوند.
3- تابع دستورات خود را اجرا میکند؛ بدین ترتیب یک مقدار واحد را محاسبه میکند و آن را برمیگرداند.
4- درنهایت، کنترل به عبارت اول فراخوانیشده بازگردانده میشود و اجرای دستورات ادامه مییابد تا به آخر برسد.
در طول فراخوانی تابع، همه ورودیها باید برای اجرای تابع ارائه شوند. البته دقت داشته باشید درصورتی که تابع در مسیر باشد، این امر امکانپذیر است. به عنوان مثال نام تابع دانلود شده شما fun.m است، پس مستقیما با نام آن و ورودیهای مورد نیاز در اسکریپتی که میخواهید به آن دسترسی داشته باشید، میتوانید کد مربوطه را بنویسید و نتایج را دریافت نمایید.