با جلسهی آخر از آموزش مقدماتی متلب همراه شما هستیم. دراین جلسه میخواهیم در خصوص تابع function در متلب مطالبی را خدمتتان ارائه نمائیم.
البته شاید بعدا آپدیتهایی برای این دوره قرار دهیم. ولی این جلسه، جلسهی آخر این دوره آموزشی از انجام متلب میباشد.
وارد برنامه متلب میشویم تا ببینیم در این جلسه میخواهیم چه آموزشی داشته باشیم.
انجام پروژه متلب در سایت کارت پروژه به صورت تضمینی و مطمئن قابل انجام است.
در جلسهی گذشته تابع Norm را نوشتیم و آن را تعریف کردیم. یک تابع product هم در اینجا نوشتیم.
حال وقتی Norm را فرامیخواندیم و به ما عدد ۷ را میداد، دقیقا همان فرمولی که داشتیم یعنی …
اگر ورودی اول را ۲ قرار دهیم، جواب میشود ۵.
اکنون workspace را اگر نگاه کنید، فقط ۵ را در جوابمان داریم.
اما در فرمولی که داشتیم، xهای ما ۳ و ۴ بودند که به توان ۲ میرسیدند. ۲ همان p بود. پس یک p هم داریم. به نظر شما p کجا رفته است؟ x کجا رفته است؟ چرا x را نشان نمیدهد؟ چرا ۳ و ۴ را نشان نمیدهد؟ چرا فقط ۵ را دارد نشان میدهد؟
به نظر شما دلیل این موضوع چیست. بهتر است که وارد خود برنامه شویم. این functionای بود که ما نوشتیم.
اگر روی خطتیرههای بعد از شمارهها کلیک کنیم، میتوانیم یک break point قرار دهیم که به رنگ قرمز درمیآید و در تصویر زیر مشاهده میکنید.
دوباره همین را run میگیریم.
مشاهده میکنید که تا جایی که break point را قرار دادیم، به ما نشان داده است.
یعنی دقیقا تا varargin را به ما نشان داده است.
اگر در workspace نگاه کنید، مشاهده میکنید که ۳ و ۴ ورودیهایی بودند که ما داده بودیم.
حال از varargin خارج میشویم.
پس معنی آن چیست؟
اگر به بالای صفحه در تصویر فوق توجه کنید، یک continue داریم.
Continue یعنی ادامه دادن. وقتی بر روی آن کلیک کنیم، به خط بعدی میرود.
step یعنی به خط بعدی میرود. Step in هم داریم که وقتی روی آن کلیک کنیم، وارد خود varargin cell2mat که تعریف کردیم میشود. الان خود متلب اینها را دارد. اگر ما بخواهیم بدانیم آن چیست و در متلب چگونه تعریف شده است، روی step in کلیک میکنیم. برنامه آن را به ما نشان میدهد.
مشاهده میکنید که برنامهی آن را به ما نشان داده است و توضیح هم داده است.
نوشتههای سبز رنگ توضیحات هستند که میتوانید بخوانید و بببینید برنامه چگونه است.
کل این برنامه برای خط کوتاهی که دیدید نوشته شده است.
اگر روی step out کلیک کنید، از آن خارج میشود.
اگر روی step کلیک کنید، به صورت زیر در workspace، x را به ما نشان میدهد.
پس این متغیرهای x و p ای که داشتیم در اینجا نشان داده نمیشود زیرا این متغیرها فقط در scope این تابع تعریف شدهاند و داخل این تابع را نشان میدهد که این متغیرها را دارد نمایش میدهد.
اگر بخواهیم کاری کنیم که متغیری تعریف کنیم که global باشد و فقط روی خود تابع تعریف نشده باشد، باید به صورتی که در زیر توضیح میدهیم، تعریف کنیم.
فرض کنید ما یک متغیر به نام B را میخواهیم تعریف کنیم. مینویسیم global B. سپس مقدار B را میدهیم که مقدار آن ۲۶ است.
مشاهده میکنید که در workspace یک B را نشان داده است که مقدار آن ۲۶ است.
حالا میخواهیم به داخل تابع ببریم یک چیز global است یعنی همه جا هست.
مینویسیم global B که اگر توجه کنید، رنگ آن سبز شده است. و در خط بعدی مینویسیم B=B/2
حال در اینجا وقتی تابع را فراخوانی کنیم، جواب ۵ را به ما میدهد.
علاوه بر answerای که به ما داد و ۵ میشود، B را هم داده است که ۱۳ میشود.
زیرا ۲۶ تقسیم بر ۲ میشود ۱۳.
اگر یک بار دیگر فراخوانی کنیم، B برابر شد با ۶.۵۰۰۰
زیرا دوباره ۱۳ را تقسیم بر ۲ کرده است. همینطور ادامه پیدا میکند. اگر یک بار فراخوانی کنیم، ۶.۵۰۰۰ را بر ۲ تقسیم میکند و ۳.۲۵۰۰ میشود.
هر بار که شما دارید این را فراخوانی میکنید، تقسیم را انجام میدهد. همینطور اگر در تابع product هم B را قرار دهید، در آنجا هم به همین صورت عمل میکند. B همه جا هست و global میباشد و چیزی نیست که فقط مختص این تابع باشد.
شاید بپرسید چه فایدهای دارد؟ برای مثال مورد ساده این است که global را اگر از صفر تعریف کنیم، آن موقع متوجه میشویم که ما هر بار چند بار داریم این تابع را فرامیخوانیم.
مشاهده میکنید که از صفر تعریف کردیم. اگر در کد قبلی خط چهارم را حذف کنیم، Norm(2,3,4) به صورت زیر خواهد بود.
در خط سوم کدهای بالا که آن را حذف کرده بودیم، باید مینوشتیم B=B+1
اشتباه دیگر endg در خط ۶ برنامه است که باید end باشد.
در خط سوم تغییر زیر را اعمال میکنیم و به جای B=B+1 مینویسیم B=B
مشاهده میکنید که دو بار فراخوانده است.
یک بار اینها را پاک میکنیم توضیح میدهیم که به خوبی متوجه شوید.
الان میخواهیم متوجه شویم هربار که تابع را فراخوانی میکنیم، دفعه چندم فراخوانی است.
در خط چهارم همان B=B+1 را قرار میدهیم. زیرا در ابتدا میخواهیم B را صفر در نظر بگیریم.
الان B را صفر در نظر گرفتیم. حال میخواهیم Norm را فرابخوانیم.
p آن را ۲ در نظر میگیریم و برای متغیرهای x که ۳ و ۴ هستند، آن را محاسبه میکنیم.
این برای اولین بار است که داریم فراخوانی میکنیم.
در workspace مشاهده میکنید که B برابر با ۱ شده است.
تصویر 44
زیرا صفر بوده است و با یک ۱ جمع شد که ۱ شده است.
برای دومین بار که فراخوانی کنیم، مشاهده میکنیم که برابر با ۲ شده است.
هربار که فراخوانی کنید، مشاهده میکنید که عدد B تغییر میکند.
در تصویر مشاهده میکنید که تا به حال ۹ بار آن را فراخواندیم.
اگر در برنامه زیر هم global B تعریف کنید، وقتی که product را هم فرامیخوانید، به B اضافه میشود. زیرا B یک تابع global است و همه جا وجود دارد و فقط مختص Norm نیست. هر جا که تعریف کنیم، برای آن هم به کار برده میشود.
همچنین در بحثهای الگوریتم ژنتیک هم بسیار میتواند مفید باشد. برای مثال وقتی میخواهید تنظیمات انجام دهید، بسیار میتوانید از این global کمک بگیرید و بسیار خوب است.
تا اینجای کار دیگر بحث مقدماتی تابع function تمام شد و اگر بخواهیم نکات دیگری را مطرح کنیم، وارد بحثهای پیشرفته میشویم که انشاءالله در دورههای دیگر بحثهای پیشرفته را هم داشته باشیم و دورههای پردازش تصویر و دورههای جذاب دیگری راجع به متلب را حتما سعی میکنیم قرار دهیم و در کل در برنامهنویسی برای اینکه شما یک کار مشخصی را بخواهید انجام دهید، بهتر است که یک تابع بنویسید و باید توجه داشته باشید که برای هر تابعی که مینویسید، یک کار را فقط در نظر بگیرید و آن تابع چندمنظوره نباشد. یعنی چند تا کار را نخواهید انجام دهد که بتوانید یک برنامهنویسی خوبی را انجام دهید.
تا اینجای کار جلسه را به اتمام میرسانیم و این دوره به پایان میرسد.
تا دورهای دیگر شما را به خدای مهربان میسپاریم. هر نظری داشتید میتوانید بنویسید و پیشنهاد و هر موردی که خواستید برای ما بنویسید، ایمیل بزنید یا اگر سؤالی داشتید میتوانید پیام بفرستید، ما حتما به شما جواب میدهیم.
ارسال پاسخ