بازدید: ١٩٢

توابعی که توسط کاربر تعریف شده اند (آموزش MATLAB)

بازگشت به صفحه اصلی آموزش MATLAB

 

ما در قسمتهای قبلی از توابع به کرات استفاده کردیم. همانند توابع cumsum() و randn(). توابعی که توسط کاربر تعریف می شوند نیز همانند این توابع هستند. یکی از شباهتهای آنها این است که هردو نوع تابع را به یک روش فراخوانی و اجرا می کنید. نام تابع را تایپ کرده و یک یا چند آرگومان در داخل پرانتز مقابل آن می نویسید. بعنوان مثال، randn(5,2) که از دو آرگومان استفاده می کند و تابعی را فراخوانی می کند که یک ماتریس 5x2 از اعداد تصادفی را ایجاد می کند. شباهت دیگر آنها در این است که متغیرهای مورد استفاده در تابع، بعد از اجرای تابع در پنجره Workspace نمایش داده نمی شوند. این مسئله از جهاتی نیز مفید است زیرا مانع از آن می شود تا فضای پنجره Workspace از متغیرها پر شده باعث شلوغی و درهم برهمی آن شود.

برخلاف اسکریپتها، توابعی که توسط کاربر تعریف می شوند باید با یک توصیفی در ارتباط با آن تابع آغاز شوند که معرف تابع بودن آن می باشند و شما باید متغیرهای ورودی و خروجی را مشخص کنید. فرم عمومی این تعریف به شکل زیر می باشد:

 

تعریف تابع توسط کاربر

 

در اینجا کلمه function بیانگر آن است که این برنامه یک تابع تعریف شده توسط کاربر می باشد. کلمه output نیز یک متغیر یا لیستی از چندین متغیر می باشد که تابع برمی گرداند. عبارت functionName نیز، نامی است که کاربر به تابع می دهد و بعدا از آن برای فراخوانی تابع استفاده می کند. عبارت inputArguments یک متغیر یا لیستی از چندین متغیر است که تابع از آن بعنوان ورودی استفاد می کند. اگر چندین آرگومان ورودی وجود دارد، باید از کاما برای جدا کردن آنها از یکدیگر استفاده کنید ولی برای جداکردن مقادیر خروجی می توانید از کاما و یا فاصله(space) استفاده کنید. اگر بیشتر از یک متغیر خروجی دارید، باید آنها را در بین یک جفت کروشه قرار دهید، ولی اگر تنها یک خروجی دارید، نیازی به کروشه نیست. معمولا در هنگام نوشتن کلمه function، از رنگ آبی در ویرایشگر برنامه استفاده می شود تا بدین طریق مشخص شود که کلمه function، یکی از کلمات رزرو شده کلیدی در MATLAB می باشد.

حال می خواهیم یک تابع ساده را برای شما بنویسیم. در مثال قبلی، ماتریسی از تولیدات انباشته اعداد تصافی ایجاد کردیم که در آن تعداد مشاهدات مورد نظر توسط کاربر مشخص می شد. اینکار را می توانید با یک تابع کوچک و ساده انجام دهید. آرگومان ورودی تنها یک عدد می باشد( تعداد مورد نظر مشاهدات)و خروجی یک ماتریس است. حال برای نوشتن تابع ابتدا پنجره جدیدی را در برنامه Editor باز کنید، دستور زیر را در آن وارد کرده و سپس آن را ذخیره کنید.

 

آرگومان در تابع

 

هنگامی که تابعی را ذخیره می کنید،  MATLAB همیشه می خواهد آن را تحت همان نامی که بعنوان نام تابع وارد کردید، ذخیره کند. به خاطر داشته باشید که اگر از نام دیگری برای ذخیره آن استفاده کنید، آنگاه تابع تنها می تواند تحت نامی که آن را ذخیره کردید، فراخوانی شود بنابراین نام موجود در متن تابع بی معنی خواهد بود.

حال در پنجره Command، نام تابع را بعنوان یک دستور وارد کنید.

 

اجرای تابع

 

یادآوری چند نکته در این مرحله خالی از لطف نیست. همانطور که قبلا ذکر شد، متغیرهای درون تابع همگی محلی هستند به عبارتی دیگر تنها در درون تابع وجود دارند. هنگامی که تابع را بصورت randomIndex(5) فراخوانی می کنید، مقدار 5 برای تابع درنظر گرفته می شود و مقدار 5 به متغیر nofobs تخصیص داده می شود. آنگاه درون تابع متغیر جدیدی به نام obs تعریف می شود و برابر با مقدار انباشته مجموعه ای از متغیرهای تصادفی قرار داده می شود. در خاتمه مقدار obs از تابع به پنجره Workspace برگردانده می شود. از آنجایی که ما نام متغیری را وارد نکرده ایم، MATLAB هم متغیر ans را برابر با نتیجه قرار می دهد. هیچکدام از متغیرهای obs و nofobs خارج از تابع قابل دسترس نمی باشند. برای روشن شدن این موضوع، کافی است پنجره Workspace را از تمامی متغیرها پاک کنیم و مجددا فرمان فوق اجرا کنیم. 

 

پاک کردن متغیرها

 

تنها متغیر موجود در پنجره Workspace، متغیر جدید numbers می باشد. توجه داشته باشید که متغیرهای موجود در Workspace، از درون هیچ کدام از توابع قابل دسترس نیستند. بنابراین تمام اطلاعات مورد نیاز تابع، باید بصورت آرگومانهای ورودی وارد شوند یا می توانند از طریق روشهای دیگر همانند فایلهای اکسل، وارد شوند.

توجه داشته باشید که اگر تابع دارای خروجی باشد، متغیرهای خروجی باید بطور واضح در درون تابع تعریف شوند. بعنوان مثال یک تابع ممکن است از داده های تصادفی تعریف شده در درون تابع استفاده کند، خروجی می تواند به جای متغیرها، یک نمودار باشد.

بنابراین می توانیم اسکریپت مثال قسمتهای قبلی را به گونه ای تغییر دهیم که به یک تابع تعریف شده توسط کاربر تبدیل شود. کافی است تنها خط : obs=cumsum(tandn(nofobs,1)) را به شکل obs=randomIndex(nofobs) تغییر دهیم.

اکنون می خواهیم به بیان تفاوت بین تابع و اسکریپت بپردازیم:

اسکریپتها از پنجره Workspaceموجود استفاده می کنند در حالیکه توابع از پنجره مخصوص به خود استفاده می کنند. متغیرهای استفاده شده در توابع از دید کاربر پنهان هستند و در خارج از تابع در دسترس نمی باشند.

توابع معمولا خروجی دارند در حالیکه اسکریپتها ندارند.

اجرای اسکریپتها بسیار شبیه به اجرای دستوراتی است که از طریق پنجره Command آنها را اجرا می کنید. در حالیکه اجرای تابعی که توسط کاربر تعریف شده است، بسیار شبیه به اجرای توابع MATLAB می باشد.

درخاتمه می توان اینگونه نتیجه گرفت که اگر در حال حل یک مسئله عمومی هستید، از یک تابع استفاده کنید ولی اگر در حال حل یک مسئله خاص می باشید، از یک اسکریپت استفاده کنید.

می توانید با اجرای فرمان edit functionName، توابع را مستقیما در درون برنامه Editor باز کنید. همچنین می توانید بسیاری از توابع MATLAB را نیز بدین طریق باز کنید البته بسیاری از توابع MATLAB، توابع پیش ساخته می باشند و نمی توانید آنها را بدین طریق مشاهده کنید ولی برای مثال می توانید با اجرای فرمان edit mean، نحوه محاسبه میانیگین توسط MATLAB را مشاهده کنید.

 

بازگشت به صفحه اصلی آموزش MATLAB

 

طراحی سایت و سئو توسط ضابط