ساختارهای ورود داده به نرم افزار متلب

در این درس از دوره جامع MATLAB Essential Training، مفاهیم کلیدی data structures در MATLAB بهطور تخصصی مورد بررسی قرار میگیرند؛ از تعریف و تشریح انواع array، matrix، cell array و structure تا کاربردهای عملی آنها در بهبود مدیریت دادهها در پروژههای مهندسی و تحلیلهای پیچیده. با ارائه مثالهای کاربردی و سناریوهای واقعی، این آموزش به متخصصان و مهندسان کمک میکند تا بهطور موثری از این ساختارهای دادهای در محیط MATLAB بهره ببرند و پایههای لازم برای توسعه راهکارهای نوین در مدیریت و پردازش دادهها را ایجاد نمایند.
بیاین راههای مختلفی رو که از طریقشون متلب اطلاعات رو بهمون نشون میده رو بررسی کنیم. ما تا اینجا چگونگی ایجاد بردار های یک و دو بعدی رو در متلب نشون دادیم . اما بد نیست بدونید متلب میتونه ساختار های پیچیده تری در قیاس با بردارهایِ ذکر شده رو هم پشتیبانی کنه. اما میدونید که ما نمیتونیم مستقیماً اطلاعات یک بردار سه بعدی یا بیشتر رو روی یک صفحه ی دو بعدی ترسیم کنیم برای همین برای ایجاد همچین بردار هایی باید از راه دیگه ای استفاده کنیم. مثلاً بجاش میتونین یه حافظه ای رو به بردارتون اختصاص بدین و بعد اونو مرحله به مرحله بصورت جدا تعریف کنین. در واقع نرم افزار میاد و با اختصاص حافظه تکه هایی رو در بک گراندش ایجاد می کنه که بعد از کنار هم قرار دادنه این تکه ها ما در خروجیه نرم افزار به بردار 3 بعدیمون دسترسی پیدا می کنیم. اینطور بگم برای ایجاد یه بردار سه بعدی ما نیاز داریم تا یه حافظه ای رو بهش اختصاص بدیم تا با تعریف جز به جز این بردارمون و در نهایت با کنار هم قرار دادن این اجزا به بردار سه بعدی مون دسترسی پیدا کنیم. خب بنظرتون در این سناریو چطوری می تونیم به ی بردار حافظه اختصاص بدیم تا تونسته باشیم بردارهای با ابعاد بیشتر رو هم به نرم افزار متلب معرفی کنیم؟ برای اختصاص دادن حافظه به یک بردار اول از هر چیزی ما نیاز داریم که به متلب بگیم که میخایم چند بعدی باشه و چه مقادیری رو میخایم توش قرار بدیم.
من این کارو با فراخوانی تابع zeroes، ones، rand یا randn انجام میدم که این پارامترها بیان کننده ی ابعاد این بردارمون هست. اینم بد نیست بدونید با استفاده از این تابع zeroes ، می تونیم ماتریس یا آرایه با اندازه دلخواه مون بسازیم و اون رو با صفر پرکنیم. یعنی اینکه همه سطر و ستون هامون مقداره صفر رو میگیرن. یکی از اصلی ترین کاربردهای این تابع، اختصاص حافظه و آماده سازی برای اجرای برنامه هاست برای مثال اگه من zeroes پرانتز باز 2 کاما 2 کاما 2 رو تایپ کنم و در نهایت بعد از بستن پرانتز اینتر رو بزنم در واقع اومدم و با اینکارم به متلب گفتم که یک بردار 2در2در2 مکعبی ایجاد کنه که تمامی مقادیرش صفر باشن. همونطور که مشخصه الان تابع zeroes اومده و طبق همون چیزی که انتظارش داشتیم یک ماتریسی با مقادیر صفر رو؛ در قالب دو تکه مجزا بهمون برگردونده.
Ones یه برداری ایجاد میکنه که تمام مقادیرش یک هستن . خب بیاین بطور مشابه برای ماتریسی نظیر آرایه های تابع قبلی که نوشتیم یعنی تابع zeroes ، اینکار رو برایِ تابع Ones امتحان کنیم. پس تایپ می کنم ones پرانتز باز 2 کاما 2 کاما 2 و بعد هم پرانتز بسته و اینتر. خب می بینید که ایندفعه همه آرایه ها مقداره 1 گرفتن. تابع rand برداری رو ایجاد میکنه که تمام مقادیرش به صورت رندوم اعدادی بین صفر و یک هستند. اینم بذارین امتحان کنیم . تایپ می کنم rand و بعدش بطور مشابه پرانتز باز 2 کاما 2 کاما 2 پرانتز بسته و اینتر؛ می بینید که ، نتایج همه آرایه ها بطور رندم یکسری اعدادی بین صفر و یک هستند. تابع randn برداریه که تمام مقادیرش اعداد تصادفی با توزیع نرمال هستند. تایپ می کنم randn پرانتز باز 2 کاما 2 کاما 2 پرانتز بسته و اینم نتیجه.
باز هم میگم اگه توجه کنین می بینین وقتی که من یه برداری با 3 بعد رو تعریف میکنم متلب به صورت اتوماتیک اون رو به صورت تکه تکه نشون میده. اولین بردار دو بعدیه موجود در نتایجه هر کدوم از این توابعمون با کولن مشخص و همراه شده که این کولن ها معنیشون اینه که نتایج نمایش داده شده؛ هیچ ربطی به آرایه اونا نداره و نتایج مرتبط با این آرایه هایی میشن که متغیرشون به طور کامل نمایش داده شده است. اینطور بگم اگه دقت کنید نتیجه اول داره نشون میده که آرایه های موجود رویِ محور اول از بعد سوم همگی مقداره صفر رو دارند و دومین نتیجه تایع زیروز نشون میده که آرایه های موجود رویِ محور دوم از بعد سوم همگی بازم مقداره صفر رو دارند. رو در کامند ویندوتون مشاهده مکنین و بعد پس همونطور که می بینید متلب یه قطعه هایی از نتایج بردار 3 بعدیه زیروز رو نمایش میده که متناظر این اعداده یک و دو در بعد سوم میباشند. این کارو میتونین برای هر ماتریس و بعد دلخواهتون، مثلاً برای چهار بعدی، 5 بعدی و همینطور n بعدی انجام بدین و اونا رو گسترش بدین. هر چند که به سرعت میتونین ماتریس کامل رو در کامند ویندوتون مشاهده کنین
خب، زمانی که آماده شدین تا یک بردار با ابعاد دلخواه رو تعریف کنین، خیلی راحت می تونین از همین سناریو، برای تعریف تکه های بردارتون استفاده کنین، یعنی اینکه خیلی راحت بیاین و با استفاده از کولن و تعریف کردنه متغیرهاتون به مقادیره مورده نظرتون ارجاع بدین. برای مثال a پرانتز باز کولن –کاما-کولن کاما –یک و بعد هم پرانتز بسته وبعدشم مساوی با براکت- یک-کاما-دو-سمیکالن- سه- کاما-چهار رو تایپ کنین. نهایتاً هم براکت بسته. با این کار میاین به اولین بردار دو بعدی تابع زی تون که در بالا تعریف کردین مقدار میدین.
دومین راهی که میتونین باهاش ماتریس هایِ خیلی پیچیده رو تعریف کنین روشی بنام بازگشتی هست. متلب هیچ محدودیتی برای اونچه که میخاین بعنوانه داده توی سلول ماتریستون بذارین نداره. برای همین میتونین تک تک المان های ماتریس خودتون رو به صورت یه ماتریس متفاوت تر از ماتریس هایِ معمول دیگه تعریف کنین. برای اینکه ببینین این نوع تعریف خودسرانه ماتریس ها با مقادیر دلخواه چجوری کار میکنه بیاین چهار ماتریسو به صورت دلخواهمون تعریف کنیم. برای همین a مساوی 1با براکت باز کاما 2سمیکالن 3 کاما 4 و بعد هم براکت بسته؛ بذارین اینتر رو بزنم و الانم یکی دیگه رو با نامه b تعریف کنیم؛ پس تایپ می کنم b مساوی براکت باز 4 کاما 3 سمیکالن 2 کاما 1 و بعد از براکت بسته هم میام و اینتر رو مجدد میزنم و c مساوی با براکت باز 2کاما2 براکت بسته اینتر و d برابر با براکت باز 3سمیکالن 3 سمیکالن 3 ؛ بعد هم براکت بسته و اینتر
حالا برای ایجاد یه سوپرماتریس که هریک از این ماتریس ها رو شامل بشه میتونم تابع e مساوی کروشه باز a کاما b سمیکالن c کاما d و بعد هم کروشه بسته؛ رو تعریف کنم حواستون باشه اینجا به جای براکت از کروشه استفاده کنین. اینتر رو میزنم و الان میبینین که e یه ماتریسی هست که از چهار تا زیرمجموعه ماتریسی یا باصطلاح از 4 تا submatrices ایجاد شده. ما میتونیم به هر یک از این زیرمجموعه ها یا submatrices ها با کمک آدرسش و تایپ کروشه دسترسی داشته باشیم. برای همین e کروشه باز 1 کاما 1 کروشه بسته و اینتر؛ ماتریس a رو بهتون بر می گردونه، در واقع میاد ماتریسی که در سطر اول و ستونه اول از ماتریس e مون بود رو برامون تعریف میکنه و به همین ترتیب هم میتونین بقیه رو فراخوانی کنین. آخرین و کلی ترین راه برای نگه داری اطلاعات استفاده از دیتا استراکچر هست.
استراکچر یه ساختار مکانیزم ذخیره ای یه توکار یا باصطلاح built in در متلب هست که به شما این امکانو میده که اطلاعات و داده هایِ متعدد و وابسته به همدیگه ای رو کناره هم بیارین و ازشون استفاده کنین. بعنوانه یک مثال، شما ممکنه یه لیست از اسامی و ادرس ها داشته باشین و بخواین هر اسمی رو با ادرسش کناره هم بیارین و نشونشون بدین. خباین مکانیزم استراکچر خیلی خوب میتونه در انجامه این سناریو کمکتون کنه. برای ایجاد یه استراکچر و دادن اطلاعات بهش، به سادگی هر دیتا فیلد مورد نظری رو با یه دات جلوش تعریف کنین. در مثال ما داریم که شاید شما خواین چیزی رو شبیه به نامه S تعریف کنین پس خیلی راحت تایپ می کنیم s دات name و بعدش مساوی سینگل کوت یا همون تک کوتیشن John Doe و اینتر
و سپس برای همون s مون اینبار آدرس تعریف می کنیم پس تایپ می کنم s دات address مساوی سینگل کوت یا تک کوتیشن 123 Fake St و نهایتاً هم تک کوتیشن و اینتر؛ می بینیم که مقادیره تعریف شده name و address با هم نشون داده میشن ولی دیدید که در دو مرحله جداگانه این تابع رو تعریف کردیم
برای اضافه کردن اطلاعات دیگه مثلاً برایِ سطره بعدی، برایِ کار با تابعه s از نرم افزار متلبی که میدونین همه چیز درش ماتریس هست؛ شما میتونین دیتا برای s2 وs3 و غیره تعریف کنین. برای مثال ما میتونیم بگیم s پرانتزباز 2 پرانتز بسته، دات name مساوی سینگل کوت یا تک کوتیشن Jane Roe تک کوتیشن و اینتر
و s پرانتز باز 2 پرانتز بسته دات address مساوی سینگل کوت یک دو 4 Fake St و نهایتاً هم تک کوتیشن و اینتر . بطور معمول این S یه ماتریسه چند بعدی رو تشکیل میده و اون رو شامل میشه که ساختارش میتونه هر تعداد بُعدی که بخواین رو داشته باشه و یا میتونه شامل زیرساخت ها یا باصطلاح substructure ها باشه. برای دسترسی به اطلاعاتش میتونین از روش مشابه چند لحظه پیش استفاده کنین. تایپ S پرانتزباز 1 کاما 1 پرانتز بسته دات name و اینتر؛ به شما فقط اسم اولین دیتا پوینت رو بر میگردونه. یعنی مقداری که برایِ name از فیلد اولی برای ماتریسه S تعریف کردیم رو نمایش میده که همون John Doe میشه. اما با تایپ s پرانتزباز 1کاما 1 پرانتز بسته بدون هیچ کلمه توصیفی دیگه ای و اینتر بهتون تمام اونچیزی رو که وارد کرده بودین رو بر میگردونه. و با اینکار به نرم افزار میگیم: هر آنچه که در فیلد اول s تعریف کردیم رو نمایش بده. با دستور بصورت s.name هم، البته بدون تعریفه مسیره هیچ ردیف یا اعددی بهتون تمام اسامی موجود و تعریف شده در تمام فیلد های s رو نشون میده
با کمکه این ساختار های وروده داده به نرم افزاره متلب؛ شما میتونین هر نوع دیتایی رو با هر سطح پیچیدگیای رو، ذخیره کنین. به محض ایجاد این ساختار ها میتونین باهاشون به روشی مشابه که میومدین و اطلاعاتتون رو در جاوا یا سی مجموعه بندی، نگاشت و Map می کردین؛ در اینجا یعنی نرم افزار متلب هم کار کنین؛ با این تفاوت و البته این مزیت که در اینجا میتونین هر عدد و یا فیلدی رو به عنوان دیتا point داشته باشین.