تابع function در متلب|دستور function در متلب (جلسه آخر)

تابع function در متلب
تابع function در متلب

با جلسه‌ی آخر از آموزش مقدماتی متلب همراه شما هستیم. دراین جلسه میخواهیم در خصوص تابع function در متلب مطالبی را خدمتتان ارائه نمائیم.

البته شاید بعدا آپدیت‌هایی برای این دوره قرار دهیم. ولی این جلسه، جلسه‌ی آخر این دوره آموزشی  از انجام متلب میباشد.

وارد برنامه متلب می‌شو‌یم تا ببینیم در این جلسه می‌خواهیم چه آموزشی داشته باشیم.

انجام پروژه متلب در سایت کارت پروژه به صورت تضمینی و مطمئن قابل انجام است.

در جلسه‌ی گذشته تابع Norm را نوشتیم و آن را تعریف کردیم. یک تابع product هم در اینجا نوشتیم.

نوشتن یک تابعproduct
نوشتن یک تابعproduct

حال وقتی Norm را فرامی‌خواندیم و به ما عدد ۷ را می‌داد، دقیقا همان فرمولی که داشتیم یعنی …

فراخواندن تابع NORM
فراخواندن تابع NORM

اگر ورودی اول را ۲ قرار دهیم، جواب می‌شود ۵.

ورودی اول را 2 قرار میدهیم.
ورودی اول را 2 قرار میدهیم

اکنون workspace را اگر نگاه کنید، فقط ۵ را در جوابمان داریم.

جواب ورودی 5 میشود
جواب ورودی 5 میشود

اما در فرمولی که داشتیم، xهای ما ۳ و ۴ بودند که به توان ۲ می‌رسیدند. ۲ همان ‌p بود. پس یک p هم داریم. به نظر شما p کجا رفته است؟ x کجا رفته است؟ چرا x را نشان نمی‌دهد؟ چرا ۳ و ۴ را نشان نمی‌دهد؟ چرا فقط ۵ را دارد نشان می‌دهد؟

به نظر شما دلیل این موضوع چیست. بهتر است که وارد خود برنامه شویم. این functionای بود که ما نوشتیم.

واردتابع NORM میشویم.
واردتابع NORM میشویم

اگر روی خط‌تیره‌های بعد از شماره‌ها کلیک کنیم، می‌توانیم یک break point قرار دهیم که به رنگ قرمز درمی‌آید و در تصویر زیر مشاهده می‌کنید.

قرار دادن break point
قرار دادن break point

دوباره همین را run می‌گیریم.

نمایش نتیجه قرار دادن break point
نمایش نتیجه قرار دادن break point

مشاهده می‌کنید که تا جایی که break point را قرار دادیم، به ما نشان داده است.

نمایش تا varargin
نمایش تا varargin

یعنی دقیقا تا varargin را به ما نشان داده است.

نمایش تا varargin
نمایش تا varargin

اگر در workspace نگاه کنید، مشاهده می‌کنید که ۳ و ۴ ورودی‌هایی بودند که ما داده بودیم.

قرار دادن 3 و 4 به عنوان ورودی
قرار دادن 3 و 4 به عنوان ورودی

حال از varargin خارج می‌شویم.

پس معنی آن چیست؟

اگر به بالای صفحه در تصویر فوق توجه کنید، یک continue داریم.

برای ادامه روی Continue کلیک مینمائیم
برای ادامه روی Continue کلیک مینمائیم

Continue یعنی ادامه دادن. وقتی بر روی آن کلیک کنیم، به خط بعدی می‌رود.

step یعنی به خط بعدی می‌رود. Step in هم داریم که وقتی روی آن کلیک کنیم، وارد خود varargin cell2mat که تعریف کردیم می‌شود. الان خود متلب این‌ها را دارد. اگر ما بخواهیم بدانیم آن چیست و در متلب چگونه تعریف شده است، روی step in کلیک می‌کنیم. برنامه آن را به ما نشان می‌دهد.

کلیک برروی step in برای ورود به برنامه
کلیک برروی step in برای ورود به برنامه

مشاهده می‌کنید که برنامه‌ی آن را به ما نشان داده است و توضیح هم داده است.

توضیحات سبز رنگ جهت دانستن اطلاعات برنامه
توضیحات سبز رنگ جهت دانستن اطلاعات برنامه

نوشته‌های سبز  رنگ توضیحات هستند که می‌توانید بخوانید و بببینید برنامه چگونه است.

کل این برنامه برای خط کوتاهی که دیدید نوشته شده است.

اگر روی step out کلیک کنید، از آن خارج می‌شود.

اگر روی step کلیک کنید، به صورت زیر در workspace، x را به ما نشان می‌دهد.

پس این متغیرهای x و p ای که داشتیم در اینجا نشان داده نمی‌شود زیرا این متغیرها فقط در scope این تابع تعریف شده‌اند و داخل این تابع را نشان می‌دهد که این متغیرها را دارد نمایش می‌دهد.

اگر بخواهیم کاری کنیم که متغیری تعریف کنیم که global باشد و فقط روی خود تابع تعریف نشده باشد، باید به صورتی که در زیر توضیح می‌دهیم، تعریف کنیم. 

فرض کنید ما یک متغیر به نام B را می‌خواهیم تعریف کنیم. می‌نویسیم global B. سپس مقدار B را می‌دهیم که مقدار آن ۲۶ است.

تعریف متغییری به نام GLOBAL B
تعریف متغییری به نام GLOBAL B

مشاهده می‌کنید که در workspace یک B را نشان داده است که مقدار آن ۲۶ است.

نمایش عدد 26 برای GLOBALB
نمایش عدد 26 برای GLOBALB

حالا می‌خواهیم به داخل تابع ببریم یک چیز global است یعنی همه جا هست.

می‌نویسیم global B که اگر توجه کنید، رنگ آن سبز شده است. و در خط بعدی می‌نویسیم B=B/2

نوشتن globalB
نوشتن globalB

حال در اینجا وقتی تابع را فراخوانی کنیم، جواب ۵ را به ما می‌دهد.

فراخوانی تابع
فراخوانی تابع
نمایش جواب 5
نمایش جواب 5

علاوه بر answerای که به ما داد و ۵ می‌شود، B را هم داده است که ۱۳ می‌شود.

نملیش جواب برای B
نملیش جواب برای B

زیرا ۲۶ تقسیم بر ۲ می‌شود ۱۳. 

اگر یک بار دیگر فراخوانی کنیم، B برابر شد با ۶.۵۰۰۰

فراخوانی مجدد
فراخوانی مجدد

نمایش نتیجه

زیرا دوباره ۱۳ را تقسیم بر ۲ کرده است. همین‌طور ادامه پیدا می‌کند. اگر یک بار فراخوانی کنیم، ۶.۵۰۰۰ را بر ۲ تقسیم می‌کند و ۳.۲۵۰۰ می‌شود.

محاسبه نصف B
محاسبه نصف B
نمایش نتیجه برای نصف B
نمایش نتیجه برای نصف B

هر بار که شما دارید این را فراخوانی می‌کنید، تقسیم را انجام می‌دهد. همین‌طور اگر در تابع product هم B را قرار دهید، در آنجا هم به همین صورت عمل می‌کند. B همه جا هست و global می‌باشد و چیزی نیست که فقط مختص این تابع باشد.

شاید بپرسید چه فایده‌ای دارد؟ برای مثال مورد ساده این است که global را اگر از صفر تعریف کنیم، آن موقع متوجه می‌شویم که  ما هر بار  چند بار داریم این تابع را فرامی‌خوانیم.

محاسبه global(0)
محاسبه global(0)
جواب صفر برای global B
جواب صفر برای global B

مشاهده می‌کنید که از صفر تعریف کردیم. اگر در کد قبلی خط چهارم را حذف کنیم، Norm(2,3,4) به صورت زیر خواهد بود.

حذف خط چهار
حذف خط چهار
وجود ارور در کد
وجود ارور در کد

در خط سوم کدهای بالا که آن را حذف کرده بودیم، باید می‌نوشتیم B=B+1

ویرایش کد
ویرایش کد
ویرایش خط آخر کد
ویرایش خط آخر کد

اشتباه دیگر endg در خط ۶ برنامه است که باید end باشد.

ویرایش کد و فراخوانی مجدد
ویرایش کد و فراخوانی مجدد
نمایش نتیجه
نمایش نتیجه
نمایش نتیجه
نمایش نتیجه

در خط سوم تغییر زیر را اعمال می‌کنیم و به جای B=B+1 می‌نویسیم B=B

ویرایش خط سوم در کد
ویرایش خط سوم در کد
نمایش نتیجه
نمایش نتیجه

مشاهده می‌کنید که دو بار فراخوانده است.

پاک کردن کد برای اجرای مجدد
پاک کردن کد برای اجرای مجدد

یک بار این‌ها را پاک می‌کنیم توضیح می‌دهیم که به خوبی متوجه شوید.

الان می‌خواهیم متوجه شویم هربار که تابع را فراخوانی می‌کنیم، دفعه چندم فراخوانی است.

در خط چهارم همان B=B+1 را قرار می‌دهیم. زیرا در ابتدا می‌خواهیم B را صفر در نظر بگیریم.

اجرای مجدد کد در متلب
اجرای مجدد کد در متلب
پارامتر B را صفر میگذاریم.
پارامتر B را صفر میگذاریم

الان B را صفر در نظر گرفتیم. حال می‌خواهیم Norm را فرابخوانیم.

p آن را ۲ در نظر می‌گیریم و برای متغیرهای x که ۳ و ۴ هستند، آن را محاسبه می‌کنیم.

حالا B را برابر 2 میگذاریم
حالا B را برابر 2 میگذاریم

این برای اولین بار است که داریم فراخوانی می‌کنیم.

نمایش نتیجه
نمایش نتیجه

در workspace مشاهده می‌کنید که B برابر با ۱ شده است.

تصویر 44

نمایش نتیجه در workspace
نمایش نتیجه در workspace

زیرا صفر بوده است و با یک ۱ جمع شد که ۱ شده است.

برای دومین بار که فراخوانی کنیم، مشاهده می‌کنیم که برابر با ۲ شده است.

مجددا فراخوانی میکنیم
مجددا فراخوانی میکنیم
B را تغییر میدهیم
B را تغییر میدهیم

هربار که فراخوانی کنید، مشاهده می‌کنید که عدد B تغییر می‌کند.

مجددا B تغییر میکند
مجددا B تغییر میکند

در تصویر مشاهده می‌کنید که تا به حال ۹ بار آن را فراخواندیم.

 

فراخوانی B برای 9امین بار
فراخوانی B برای 9امین بار

اگر در برنامه زیر هم global B تعریف کنید، وقتی که product را هم فرامی‌خوانید، به B اضافه می‌شود. زیرا B یک تابع global است و همه جا وجود دارد و فقط مختص Norm نیست. هر جا که تعریف کنیم، برای آن هم به کار برده می‌شود. 

تعریف گلوبال B
تعریف گلوبال B

همچنین در بحث‌های الگوریتم ژنتیک هم بسیار می‌تواند مفید باشد. برای مثال وقتی می‌خواهید تنظیمات انجام دهید، بسیار می‌توانید از این global کمک بگیرید و بسیار خوب است.

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

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

تا دوره‌ای دیگر شما را به خدای مهربان می‌سپاریم. هر نظری داشتید می‌توانید بنویسید و پیشنهاد و هر موردی که خواستید برای ما بنویسید، ایمیل بزنید یا اگر سؤالی داشتید می‌توانید پیام بفرستید، ما حتما به شما جواب می‌دهیم.