مفهوم preallocating در متلب (جلسه چهل و سوم)

مفهوم preallocating در متلب
مفهوم preallocating در متلب

در این دوره آنلاین آموزش متلب به صورت رایگان با سری آموزش‌های نرم افزار متلب در خدمت شما هستیم. در واقع آنچه که شما به طور کاملا عملی برای استفاده در انجام پروژه متلب نیاز دارید در این جلسات ارائه خواهد شد.

جلسه‌ی پیش در رابطه با سورها و انواع آن در متلب صحبت کردیم. در این جلسه قصد داریم راجع به سورها و انواع آن در متلب صحبت کنیم.

حافظه دهی در متلب

در اینجا ما باید یک مفهومی به نام preallocating یعنی حافظه‌دهی یعنی از قبل فضا دادن به برنامه استفاده می‌کنیم.

ما باید این مفهوم را در اینجا به کار می‌بردیم. و اینجا در هر بار که ما N را افزایش می‌دهیم، حافظه‌ی آن دارد بیشتر می‌شود و محاسبات سخت‌تر ‌می‌شود.

چرا چنین اتفاقی می‌افتد؟

در اینجا وقتی می‌گوییم F(1)=1 است، می‌آید یک حافظه‌ای را در برنامه متلب اشغال می‌کند و یک خانه‌ای را پیدا می‌کند. فرض کنید که برای مثال حافظه در یک جا به این صورت خانه خانه است. این F(1)=1 می‌رود در یک خانه می‌نشیند. باز گفته است F(2)=1 در این صورت ما دو تا خط برنامه داریم. دیگر نمی‌آید کنار آن F(1)=1 بنشیند. این می‌آید یک بار دیگر این دو تا را به یک جای دیگر می‌برد که مطمئن شود فضا، فضای خالی است. به همین خاطر مثلاً F(3) که می‌شود F(2)+F(1) باز هم همین کار را انجام می‌دهد. می‌آید سه تای قبل را یک جای دیگر قرار می‌دهد.

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

اما با preallocating ما وقتی می‌دانیم مثلاً N قرار است ۱۰۰۰۰۰۰۰۰ جمله داشته باشد، می‌آییم یک حافظه‌ای به اندازه‌ی به فرض ۱ میلیون را به آن اختصاص می‌دهیم و پشت سر هم می‌نویسیم. یعنی یک حافظه‌ی کوچکی را در اینجا به اندازه ۱ میلیون به آن اختصاص می‌دهیم و دیگر آن می‌آید همه را پشت سر هم می‌نویسد و نمی‌آید به جاهای دیگر copy-paste کند. یعنی ما می‌آییم ابتدا یک ماتریس تعریف می‌کنیم. فرضاً یکی از روش‌ها این است که یک ماتریس برای آن تعریف کنیم. مثلاً چگونه می‌توانیم این کار را انجام دهیم؟ با ماتریس zeros یا Nan؟ با این‌ها می‌توان در برنامه فضای خالی ایجاد کرد.

برای مثال در اینجا با همین N این کار را انجام می‌دهیم. tic را در خط دوم داریم و بعد از آن می‌آییم F هم تعریف می‌کنیم و فضای خالی را به آن اختصاص می‌دهیم. یعنی یک ماتریسی از یک تا N برای آن تعریف می‌کنیم.

بقیه دستورات همان قبلی هستند و چیز خاصی وجود ندارد. حال run می‌گیریم.

اجرای preallocating در متلب
اجرای preallocating در متلب

مشاهده می‌کنید که در اینجا یک حافظه‌ای را به آن اختصاص دادیم که برای اینکه نمایش ندهد، علامت ; را جلوی F قرار می‌دهیم و یک بار دیگر run می‌گیریم که ببینیم سرعت برنامه در این حالت چگونه است.

در اینجا تقریبا در عرض ۱ ثانیه جواب را می‌دهد و سرعت نسبت به قبل خیلی پایین‌تر آمده است. هر بار که run را می‌زنید، بسته به شرایط کامپیوتر سرعتتان کمتر می‌شود.

پس با این یک خط کد ما سرعت را بسیار پایین‌تر آوردیم و می‌توانیم برای Nهای بیشتری این کار را انجام دهیم.

پس بهتر است که همیشه preallocate کنیم یعنی به آن حافظه بدهیم. در زبان‌های دیگر مانند زبان c، JavaScript و … شما باید حتما این کار را انجام دهید. در متلب این کار اجباری نیست و خودتان باید حواستان باشد. متلب خیلی تأکید نمی‌کند و همین می‌تواند برای ما مشکل‌ساز باشد.

در جلسه آینده با حل تمرین در متلب در خدمت شما خواهیم بود

در صورتی که شما پس از خواندن محتوای جلسات قبلی و این بخش که به ساده‌ترین زبان ممکن درباره‌ی برنامه‌ی متلب و محیط کاربری آن توضیح داده باز هم سردرگم هستید. می‌توانید با برون سپاری انجام پروژه متلب خود به کارشناسان حرفه‌ای کارت پروژه می‌باشد. میتوانید از طریق شماره‌ی 09104503300 با پشتیبانان کارت از طریق پیام یا تماس در ارتباط باشید.

برای کسب اطلاعات بیشتر در مورد متلب میتوانید به مقاله آموزش متلب مقدماتی مراجعه کنید.

برای ثبت سفارش لطفا در تلگرام یا واتساپ یا ایتا به شماره 09104503300 پیام دهید.