شناسوندن تابعها به متلب آشنایی با addpath
امروز صبح چند ساعتی همین تابع addpath وقتم رو گرفت یک اسکریپت رو چند بار اجرا میکردم و هی میگفت که فلان تابع رو نمیشناسم. و بالاخره تونستم با یک دستور حل کنم و چند تا چیز هم یاد بگیرم.
خب وقتی کدهای شما بزرگتر میشن طبق اصول مهندسی نرمافزار بهتره بشکنیدشون به چند تا تابع کوچیک تر در فایلهای دیگه مثلا یک برنامه بزرگ مثل eeglab که وظیفه پردازش سیگنالهای مغزی رو داره از چندین تابع تشکیل شده.
خب path به معنی آدرس هست. هر فایلی یکpathی برای خودش داره
مفهوم Working directory. هر جا دستورات و یا فایل متلبتون رو دارین اجرا میکنید میشه پوشه کاری تون.
از کجا بدونیم پوشه کاریم چیه؟ با دستورpwd
آدرس دهی ها میتونن دول مدل نسبی و مطلق باشن در مدل آدرس دهی مطلق وقتی میخوایم یک m فایل رو آدرس بدیم مثلا اینجوری صداش میزنیم.
C:\Users\Amir\Documents\w\CNSP\my_mfile.m
در مدل آدرس دهی نسبی اگه پوشه کاریمون
C:\Users\Amir\Documents\w\CNSP
باشه کافیه فقط اسم تابع مون رو بنویسیم یعنی my_mfile
چطوری پوشه کاری مو به یا آدرس دیگه عوض کنم؟ با دستور cd که جلوش داخل کوتیشن آدرس جدید تون رو بنویسید.
یک مفهوم دیگه داریم به نام Search Path. بذارین بهش بگیم آدرس جستجو، وقتی مثلا تو m فایل تون یک تابع دیگه رو صدا میزنید اولی میره پوشه کاری رو میگرده ببینه میتونه پیداش کنه یا نه اگه بود استفاده میکنه و گرنه بهتون خطا میده.
خب حالا دستور addpath چیمیگه؟ فرض کنید یک پوشه دارین به اسم my_handy_functions که توش کلی m فایل و تابع های کاربردی دارین یک تابع برای فیلتر کردن یک تابع برای رسم نمودار یک تابع برای محاسبه میانگین سیگنال. وقی بخواین از تابع هاتون استفاده کنید که توی اون پوشه هستن برای اینکه هی نگنین من فلان تابعی رو میخوام که توی فلان پوشه هست و فقط اسم تابع رو بنویسید به متلب میگید:
addpath my_handy_function
حالا کافیه تنها اسم تابع تون رو بنویسید و متلب اون تابع رو میشناسه.
ولی توجه داشته باشین که اگه حجم m فایلهاتون بیشتر باشه توی پوشه my_handy_fuction با درست کردن چند پوشه مثل filtering_functions و Rerefrence و ploting داشته باشین تو توی هر کدوم چند m فایل دیگه متلب اونها رو نمیشناسه فقط هرچی توی my_handy_function هست رو میشناسه. به عبارت دیگه اگه بخواین یک پوشه و تمام پوشههای داخلی شو به path اضافه کنید از این دستور میتونید استفاده کنید
addpath(genpath('CNSP_tutorial\libs\eeglab'));
تابع genpath میره و زیر پوشهها رو پیدا میکنه و حالا هرچی فایل تو پوشه و زیر پوشههاش باشه توسط مطلب شناخته میشه.
نمیشه اینا رو گرافیکی انجام داد؟ چرا کافیه مطابق تصویر زیر به Home و بعد Set Path برین و مطابق نیاز تون از Add Folder یا Add with Subfolders استفاده کنید.
در ضمن اون کادر سبز رنگ یعنی پنجره Current folder هم کمک میکنه به شما که بدونیم مطلب چه آدرسهایی رو میشناسه اونفایلها و پوشههایی که رنگ شون روشنه یعنی متلب اونها رو میشناسه ولی اگه مثل NoiseTools رنگشون تیره باشه یعنی مطلب اونها رو نمیشناسه.